misakanet
io.github.Ikalus1988/misakanetVersion 3.16.0Failure-memory layer for coding agents: search evidence-rated failure lessons by error text.
Status
Responds102 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:38 UTC
- Latency
- 102 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 22:14 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://misakanet.org/mcpResponds102 msNo sign-in
Claude Code
claude mcp add --transport http misakanet https://misakanet.org/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: misakanet
Remote MCP server URL: https://misakanet.org/mcpCursor
{
"mcpServers": {
"misakanet": {
"url": "https://misakanet.org/mcp"
}
}
}VS Code
code --add-mcp '{"name":"misakanet","type":"http","url":"https://misakanet.org/mcp"}'Streamable HTTP
pypi: misakanet 3.16.0Package only
PyPI (uvx)
claude mcp add misakanet -- uvx misakanet==3.16.0Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
8 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
misakanet_get_lesson[RETRIEVAL / READ] Fetch one public MisakaNet lesson by repository path or lesson ID. Use after misakanet_search returns a promising result to pull the full fix content. Pass `path` or `id` (path wins if both are supplied); at least one is required, and the empty call returns {error, code}. `path` must be a lesson file (lessons/<topic>/<slug>.md) — anything else is refused with code=invalid_lesson_path rather than read.
Returns: object {path: string, content: string} — lesson markdown body, capped at 5000 chars per call; or {error, code}. The code says which: lesson_not_found (no such lesson — do not retry, search instead), invalid_lesson_path (the argument is not a lesson reference — fix the argument), internal_error (a service fault — retrying is reasonable). When the lesson is longer than the cap the response says so instead of pretending to be complete: {truncated: true, content_length: <full chars>, content_returned: <chars here>, full_content_url: <raw markdown>} — fetch that URL when the tail matters (the cut can fall before the Verification section).
Example: misakanet_get_lesson(id='auto-merge-ci-pipeline') | No | Yes | Yes | Yes |
misakanet_me_events[READ-ONLY EVIDENCE] Return evidence of a lesson being reused. E4 is observed reuse: `search_signals` shows two or more distinct clients actually retrieved the lesson — a count of requests, never of prose. Regression-benchmark citations, helpful votes and a lesson's own `verified by:` line are E3 hints: a citation is sandbox-level evidence, a vote is one person's opinion, and a provenance line is the lesson talking about itself, so none of them can confer E4. Use to check whether a lesson is proven by real usage, not just self-reported. Provide lesson_id or lesson_path — if neither is supplied the tool returns {error}. Semantically 'misakanet_get_my_events' (evidence for the lessons your node submitted/used); kept as me_events for backward compatibility. No auth required (read-only, rate-limited).
Returns: object {lesson_id, events: [{type, count|queries|sources, evidence_level}], evidence: 'E0'|'E3'|'E4', note}.
Example: misakanet_me_events(lesson_id='dco-auto-fix-workflow') | No | Yes | Yes | Yes |
misakanet_me_inbox[AGENT READABLE INBOX] Check the status of a previously submitted intake (question, missing_lesson, etc.) without re-submitting. Accepts an intake_id (e.g. 'issue-1234' or '1234') for question intakes, or a dedup_key (the 8-char FNV-1a key from a prior submit_intake response) for any intake. Returns: {status: 'answered'|'pending'|'converted'|'unknown', ...} — 'answered' includes the maintainer's answer, 'converted' includes the lesson_id this intake became, and 'unknown' means the lookup could not determine it, which is not the same answer as 'never happened'. Read-only, rate-limited, no auth required.
Returns: object {intake_id, status, answer?, lesson_id?, issue_url?, note}.
Example: misakanet_me_inbox(intake_id='issue-1528') or misakanet_me_inbox(dedup_key='9f8e7d6c') | No | Yes | Yes | Yes |
misakanet_preflight[GUARD / RISK CHECK] Check risk level before executing high-risk operations. Matches agent intent against lesson triggers to provide proactive warnings. Use before RAG builds, WSL/GPU tasks, bulk imports, or any operation that might fail. Choosing among the retrieval tools: no error yet and a task about to start → misakanet_memory_context (stdio-only); an actual error or keyword in hand → misakanet_search; something risky about to run and no error yet → this one, which returns a risk verdict and guards, not lesson content. No side effects — safe to call multiple times before acting. **Open, read-only:** anonymous calls are rate-limited; `misakanet_register` lifts the limit.
Returns: object {risk_level: 'low'|'medium'|'high', intent, matched_lessons: [{id, title, domain, relevance}], guards: [string]}.
Example: misakanet_preflight(intent='build RAG pipeline with ChromaDB') | No | Yes | Yes | Yes |
misakanet_register[ONBOARDING] Get a Bearer token for authenticated access (unlocks misakanet_write_lesson and higher rate limits). Reading needs no registration and has no daily cap: misakanet_search / misakanet_get_lesson work anonymously (a per-address burst limit protects the index; it is a speed limit, not a quota). No GitHub account or email needed, and no personal data is collected — the node is a pseudonym, not an account.
Token lifetime: valid ~30 days. Pass client_id (a random UUID you generate once and keep private) to get the SAME node_id and token back on every later call and to renew them; without client_id every call creates a new node, which means your reuse evidence, receipts and history start over. `client_id` is a *name*, not the key: to renew a node, send the token it was given as `Authorization: Bearer` along with the same client_id. A renewal that presents only the name still works during a deprecation window, returns `deprecated`, and is refused once strict mode is on (`client_id_proof_required`). A fresh client_id registers as before. Still generate it randomly and keep it private — the name is how the node is found, and the token is how the caller proves it is the one that owns it.
Returns: object {node_id: string, token: string, registered_at: string, agent_type: string, reused: boolean} — reused=true means an existing node was found for this client_id; reused=false means this call created a new node (so a client_id you expected to be recognised was not, and the identity you had is not attached to this token).
Example: misakanet_register(agent_type='claude-code', client_id='8f14e45f-2b1c-4f3a-9d2e-7c6b5a4d3e2f')
Optional referral_code: the code of the node that invited you (`misakanet` referral code, 4-16 letters/digits). Recorded against your node and counted for that code — the only place a referral has ever been recorded, since the invitation otherwise never leaves the inviting machine. Counted once per new node: calling register again with the same clien | No | No | No | No |
misakanet_search[RETRIEVAL / READ] Search MisakaNet's public failure-lesson index by error text, keyword, or topic. This is the primary read path — run it first when you hit an error, before deciding to submit anything. Choosing among the retrieval tools: an actual error or keyword in hand → this one; something risky about to run and no error yet → misakanet_preflight (the third, misakanet_memory_context, is stdio-only and covers the before-you-start case). For a known lesson ID or path, prefer misakanet_get_lesson — it skips ranking and returns the full content. detail controls progressive disclosure: compact (default, ~80 tok/lesson) for broad scans, summary (~200 tok) adds domain/tags/fix, full returns complete lesson data.
FAQ: results may also include answered questions (type="faq", issue_url + answer) — if a maintainer already answered the same question, the answer surfaces here.
Returns: object {results: [compact: {id, title, problem, freshness, evidence_level, score} | summary: + {domain, tags, fix} | full: the record], source, detail, query}; `score` is the ranker's relevance for that result and is omitted on the unranked fallback path. On no match: {no_match: true, suggestion, intake}. When the answer is degraded — no index loaded, or the live store refused the read and the corpus came from the snapshot — the response also carries `degraded: true`, `degraded_reasons` and a one-sentence `notice`; read it before concluding that no lesson exists.
Example: misakanet_search(query='pip install timeout', domain='python', top=3) | No | Yes | Yes | Yes |
misakanet_submit_intake[OPEN TRIAGE / INTAKE] Use misakanet_submit_intake when you only have a partial failure description or want to ask a question; use misakanet_write_lesson (Bearer required) once you already have structured title/domain/problem/root_cause/fix. submit_intake is open, rate-limited, no Bearer — output is a GitHub issue for maintainer triage, NOT a merged lesson — its labels follow the kind: question → `needs-answer`, proposal → `needs-human-review`, a failure report → `pending-review`.
Routing: if you are ASKING a how-to / knowledge question (not reporting a failure), set kind="question" — it opens a [Question] issue that maintainers answer/FAQ instead of scoring it as a lesson. If kind is omitted, the server auto-detects question-shaped content (no error/fix/verification + question phrasing).
Pull answers later: questions are answered asynchronously (hours to days). Re-call this tool with the SAME problem text later and follow the returned poll_hint — the dedup response returns the maintainer's answer once it exists ({answered:true, answer}), and once your report has become a lesson it returns a conversion receipt ({converted:true, receipt, events}) naming the lesson, its path and its evidence_level; or re-run misakanet_search on the topic for FAQ hits. Every response also carries dedup_key, and poll_hint.recheck_after_seconds says when re-checking is worth it (21600s for questions, 86400s for failure reports).
Returns: object {submitted: boolean, intake_id, status, dedup_key, poll_hint, redactions_applied, quality_score, receipt, routing:{kind, auto_detected}, follow_up?}; `surface_report` is the intake's **surface check**: command-shaped tokens in your submission that the public corpus has never indexed (`null` = could not check, `[]` = checked and nothing unknown). A token there is not proof it is internal — a new public tool looks the same — but if it names a private product or an internal command, describe it generically in the `problem` before replying: the mechan | No | No | No | No |
misakanet_write_lesson[STRUCTURED COMMIT / VALIDATED SUBMISSION] Submit a complete, structured failure lesson (title/domain/problem/root_cause/fix) as a formal submission. Requires authentication (Bearer token in header) — this is the 'validated author' path, not open triage. Output goes through lesson-gate/lint/review and becomes a versioned lesson in the git repo. For quick open reports when you only have a partial failure description, use misakanet_submit_intake instead (no Bearer). Lessons are immutable once merged — corrections go through a new intake/PR, so there is intentionally no misakanet_update_lesson/misakanet_delete_lesson.
Returns: object {lesson_id: string, status: 'pending_review', quality_score: number}; or {submitted: false, error}.
Example: misakanet_write_lesson(title='pip timeout behind proxy', domain='python', problem='...', root_cause='...', fix='...') | No | No | No | No |
Details
- Registry status
- Active
- Published
- Nov 14, 2026
- Updated
- Nov 14, 2026
- Website
- Not given
- Categories (suggested)
- CommunicationSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared