MisakaNet
MisakaNet's MCP server is a searchable, git-backed failure-lesson memory for coding agents: search, read, pre-check, and contribute debugging lessons.
Search lessons (
misakanet_search): query by error text, keyword, or topic; filter bydomain,kind(lessons/evidence/related/all, auto-detected from intent), limit withtop; choosedetail(compact ~80 tok → summary → full markdown);explainfor score breakdown; tune weights; exclude stale lessons by default.Fetch a lesson (
misakanet_get_lesson): retrieve full content by ID or repo-relative path (traversal-validated, truncated to 5000 chars).Pre-flight risk check (
misakanet_preflight): give an intent + environment to get a risk level, matched lessons, and concrete "do X before Y" guards.Proactive context injection (
misakanet_memory_context, local stdio only): pass a concrete task description to get a ready-to-inject markdowncontext_blockof matching lessons before you start work.Report gaps (
misakanet_submit_intake): file a missing/stale lesson or new candidate (becomes a GitHub issue; queued locally if offline).Contribute full lessons (
misakanet_write_lesson): submit title/domain/problem/root_cause/fix with quality scoring (≥75) — requires a registered token.Register & meter usage (
misakanet_register,misakanet_usage_status): obtain a node ID/token for write access and check read quota/credits.Log outcomes (
misakanet_submit_usage): record that a lesson helped (experimental, placeholder-only).Verify evidence (
misakanet_me_events): read-only check of real reuse signals (E4 requires 2+ distinct clients), proxied to the hosted endpoint.Check replies (
misakanet_me_inbox): poll for maintainer answers or lesson conversions tied to a submitted intake.
All reads are anonymous; only write tools need registration.
Allows searching and retrieving failure-recovery lessons related to GitHub API errors, token issues, workflow failures, and DCO sign-off problems.
Allows searching and retrieving failure-recovery lessons related to pip package installation errors, timeouts, SSL issues, and other PyPI-related failures.
MisakaNet
mcp-name: io.github.Ikalus1988/misakanet
The same failure, paid for twice.
A
pip installtimes out behind a corporate proxy. An agent finds the fix. Days later the same timeout appears on another machine, under another model — and is debugged from scratch, because the fix was never written down anywhere the next agent looks.MisakaNet is that place: a git-backed failure memory. Every lesson is a Markdown file in this repository — graded by evidence, reviewed like code, retrieved by an agent instead of guessed at. You fail once; the next agent does not.
Agent-native interfaces: MCP server (8 tools), WebMCP, llms.txt,
A2A discovery via .well-known/agent-card.json.
Install (30 seconds)
The point of an install is a first successful search, not the install. None of these needs an account or a token.
Your host | Command |
DeepSeek Harness |
|
Claude Code |
|
Installer-managed | Claude Code · Codex · Hermes · OpenClaw · codewhale · Cursor · Gemini CLI · Copilot CLI · OpenCode · Kiro · MiniMax Code |
Any other MCP client | point it at |
Your own code |
|
The installer-managed row is what npx @misaka-net/misakanet-setup writes into each host's config.
Updates: dsh plugin --profile web update misakanet@latest.
Installer updates: npx @misaka-net/misakanet-setup@latest.
Full prerequisites and the two-package trap: How to use it.
Related MCP server: Fix Memory MCP
Your first five minutes
1. Ask it something you have actually broken. No client installed? This curl is the whole interface:
curl -sS https://misakanet.org/mcp \
-H 'Content-Type: application/json' -H 'Accept: application/json' \
-H 'MCP-Protocol-Version: 2025-06-18' -H 'Origin: https://misakanet.org' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"misakanet_search","arguments":{"query":"database is locked","top":3}}}'2. Read what came back. A hit returns the lesson, its evidence_level, and its path — open the
file and read the fix before running any command in it. A miss returns no_match plus a ready-to-call
intake: the corpus saying it does not know this one yet.
3. Check the trust signal, not the tone. E0–E3 say how far a lesson was verified; E4 is the
one nobody can write or vote into.
What is MisakaNet?
Git-backed failure memory for AI coding agents. An error shows up → the agent searches → it applies a fix somebody already verified → if nothing matches, the miss becomes an intake, and the intake becomes a lesson for the next agent.
Every lesson is a Markdown file: reviewed like code, graded by evidence, retrieved with BM25 over the Python standard library. No vector database, no embedding model, no server unless you want one.
Lessons | failure-recovery knowledge base, open and auditable under |
Domains | rag · devops · fanuc · docker · feishu · mcp · network · ci · wsl · windows … |
Evidence | E0 intake → E1 reviewed → E2 reproduced → E3 CI verified → E4 observed reuse by two or more distinct clients |
It is not | It is |
❌ a general memory system | ✅ a failure-recovery knowledge layer |
❌ an agent runtime | ✅ a searchable lesson database |
❌ a vector database / RAG stack | ✅ BM25 keyword search, stdlib only (Python ≥ 3.11 still required) |
❌ a skill marketplace | ✅ debugging knowledge from real sessions |
❌ a retrieval benchmark | ✅ a corpus graded by evidence; the benchmark we have is paused |
What it answers — and what it does not

MisakaNet answers for the failures it has indexed, and only those. When nothing matches the reply is
no_match plus a ready-to-call intake — the corpus saying "not this one yet", not a dead end.
Lesson vs Skill
A skill teaches an agent how to do something; a lesson records what went wrong before and how not to fail again. MisakaNet is only the second thing. → FAQ
Where it is today
The numbers that move are badges, on purpose: the Lessons badge renders
data/badges/lessons.json, regenerated byupdate-badges.yml, so it can lag a run but is never a hand-typed total.The top of the evidence ladder is empty, and this page says so.
E4needs an observation — two distinct clients actually retrieving a lesson — and the corpus has none yet (distribution, regenerated and checked by CI).Search is BM25, so it matches words, not meaning. A failure described in vocabulary the corpus has never seen is a miss, and no retriever tuning fixes a corpus gap — which is why a miss returns
no_matchplus an intake instead of an empty page.Reported gaps arrive faster than they are triaged. The intake queue is the honest bottleneck.
Benchmark: what it measured, and why it is paused
One narrow question: when you hand a model a lesson, how much of that lesson comes back? The
metric is lesson_hit_rate — the share of the injected lesson's commands reproduced in the answer.
Read the setup before the number: the scenario in this benchmark is each lesson's own title, the injected
lesson is that same lesson,
no retrieval call is made, and correctness is not checked. It measures the recitation half of RAG:
necessary for MisakaNet to help, and not evidence that search finds anything.
The run is paused. Two independent runs of ≈500 scenarios each on 2026-09-22: 46.1% with the
lesson pasted in, 23.3% without. What remains is the last snapshot plus its dated record —
docs/benchmarks/latest.json.
The table below is generated by scripts/update_readme_benchmark.py;
do not hand-edit it.
Date | with_lesson hit rate | plain hit rate | n |
2026-08-30 | 46.4% | 23.9% | 358 |
2026-08-31 | 49.1% | 25.1% | 398 |
2026-09-06 | 48.3% | 24.1% | 455 |
2026-09-14 | 46.6% | 23.4% | 494 |
2026-09-21 | 46.1% | 23.3% | 512 |
2026-10-12 | 43.8% | 26.1% | 34 |
1155 run(s) in latest.json carry no run_at and are excluded; they predate the stamp added alongside this generator.
with_lesson hit rate (per run date)
43.8% │ ▁
46.1% │ ▄
46.6% │ ▄
48.3% │ ▆
49.1% │ █
└──────────────────
08 09 09 09 10
31 06 14 21 12Per-run files: docs/benchmarks/ · metric definition: METRIC_DEFINITION in
scripts/benchmark_workers_ai.py.
Take part
1. Report a failure the corpus does not have. Search first, then call misakanet_submit_intake —
no account, no email, no token, a five-line report is enough. It becomes a tracked issue.
2. Reuse a lesson and leave the trace. A "this helped" vote is recorded as an E3 hint, not as
proof. The proof is quieter: your retrieval is counted, anonymously, as one more distinct client.
What you get back: attribution. A lesson cites the intake that produced it (source:,
provenance.issue:), and the pipeline can emit a receipt naming the lesson and its evidence level.
Nothing here is a bounty: this repository pays nothing and promises nothing. Some issues carry third-party reward banners added by our own automation; we do not administer them — see Contributing.
How to use it
npx @misaka-net/misakanet-setup installs MisakaNet into your assistant's own config — the same
command for every client. The ten supported clients, and what each one gets, are in
the install page. Verify an install with
npx @misaka-net/misakanet-setup --verify; undo it with --uninstall.
Reads are anonymous and unlimited; registration is for writing (why).
Node ≥ 18 for the installer, Python ≥ 3.11 for the library and stdio server. Python 3.10 reached end-of-life on 2026-10-01, so this release needs 3.11 or newer — upgrade the interpreter before upgrading the package.
Other channels
Claude Code, as a plugin —
/plugin marketplace add Ikalus1988/MisakaNet, then/plugin install misakanet@misakanet: the hosted MCP tools, no installer, no local process.DeepSeek Harness —
dsh plugin --profile web add misakanet:mcp__misakanet__*tools plus the session panel.Call the endpoint yourself — the
curlin Your first five minutes.The library in your own code —
pip install misakanet-core.
The two-package trap (it cost a real install failure, #1849)
@misaka-net/misakanet-setup(npm) is the installer — it has abin, no plugin entry. Use it to teach your assistant to search.misakanet(npm) is the DSH / Codex plugin —dsh plugin --profile web add misakanet.This repository (git) is also a Claude Code plugin marketplace —
/plugin marketplace add Ikalus1988/MisakaNet.misakanet(PyPI) is the stdio MCP server —python3 -m misakanet.server.misakanet-core(PyPI) is the library (stdlib-only BM25) —from misakanet.search import search_lessons.
Use it as a GitHub Action
When a workflow fails, the action searches the lessons and comments the closest match on the pull request (optionally reporting the new error). Published on GitHub Marketplace.
on:
workflow_run:
workflows: ["CI"] # your CI workflow's name
types: [completed]
permissions:
actions: read # read the failing job's log (required)
pull-requests: write # post the comment
issues: write # the comment endpoint is issues.createComment
jobs:
intake:
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
runs-on: ubuntu-latest
steps:
- uses: Ikalus1988/MisakaNet@v1
with:
mode: suggest-only # or suggest-and-intake, to report new errors too
source: ${{ github.repository }}Documentation
Topic | Where |
Install, verify, uninstall | |
MCP: protocol, tools, transports | |
CLI | docs/cli-reference.md · |
Architecture | |
Contributing a fix | |
Submitting an intake | |
Troubleshooting | |
Known limitations | |
Benchmarks | |
Roadmap / changelog | |
Competitors, domains, crawler policy | competitive · domains · robots |
Contributing
Zero bounty. Maximum rigor. Merge earns credit.
"Zero bounty" is a statement about this repository: MisakaNet pays nothing and promises nothing. It
is not a statement about the issue you are looking at. Some issues carry an Opire banner
advertising a third-party reward, added automatically by our own
scripts/question_autopilot.py — we do not administer those payouts,
and Opire is not mentioned in CONTRIBUTING.md. Verify any reward offer independently before you
plan work around it. The only thing this repository has ever honoured is a merged PR.
(#2903)
Check the checkout:
python3 scripts/misakanet_cli.py smokeSearch before writing:
python3 search_knowledge.py "your error here"Found nothing? Share your failure lesson — five lines is enough
→ CONTRIBUTING.md · good first issues · code of conduct
Security
⚠️ Sandbox your agent before executing retrieved commands. Lessons are community-contributed —
review before running. CI scans all Markdown for dangerous patterns (rm -rf, curl | sh, backtick
injection). See SECURITY.md and LIMITATIONS.md.
Troubleshooting
Symptom | Where |
DCO · leaked token · pip timeout · | |
MCP returns 403/405, or a client shows no tools | |
Behind a corporate proxy |
For Agents & Crawlers
Prefer MCP intake for missing or stale lessons; PRs are optional. Search first; if nothing matches,
call misakanet_submit_intake at https://misakanet.org/mcp — no account, no token. Never send
secrets or raw private logs. Protocol: docs/mcp-intake-guide.md.
Contributors
Built by the network, for the network. Zero bounties paid — only merge approval and eternal network gratitude. ⚡
License
Apache-2.0 — Copyright 2026 Ikalus1988. Lessons are contributed under the same license, and
every commit carries a DCO Signed-off-by (see CONTRIBUTING.md).
Available Tools
11 toolsmisakanet_get_lessonA
Fetch one public MisakaNet lesson by repository path or lesson ID. Use after misakanet_search returns a promising result, or when a lesson is explicitly referenced; do not use it for broad discovery. Input semantics: provide exactly one of path or id (path takes precedence if both are supplied); if neither is supplied the handler returns {error}. path is a repo-relative path like lessons/core/auto-merge-ci-pipeline.md and is validated against directory traversal (must resolve under lessons/). id is the filename stem like auto-merge-ci-pipeline and is matched across the canonical (deduplicated) lesson set — mirrors and translations are reachable only by explicit path. Output schema: JSON with {path, content}; content is truncated to 5000 characters for MCP context window. Error cases: missing both path and id, lesson not found (returns a suggestion to search), path outside lessons/ directory. Side effects: none. Auth: none. Rate limits: local stdio process only; fetch one lesson per call when possible.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Lesson ID, usually the filename without .md, for example auto-merge-ci-pipeline. | |
| path | No | Lesson path relative to the repository, for example lessons/core/auto-merge-ci-pipeline.md. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: side effects none, auth none, rate limits/stdio context, content truncation to 5000 chars, and enumerated error cases (missing inputs, not found with search suggestion, path outside lessons/). It also discloses non-obvious behavior like canonical-set dedup matching and traversal validation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then usage, then input/output/error/safety facts in a logical order. It is dense and every clause is informative, though the trailing 'Side effects / Auth / Rate limits' tail is slightly list-like and longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description correctly documents the return shape ({path, content}) and the truncation cap. It covers errors, precedence, and safety, leaving an agent with essentially everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds substantial semantics beyond it: exactly one of path/id, path precedence when both are given, handler returns {error} when neither is given, path traversal validation, and that id matches only the canonical set while mirrors/translations require an explicit path. These are real behavioral constraints not derivable from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (one public MisakaNet lesson) with the two addressing modes (path or lesson ID). It explicitly contrasts itself with the sibling misakanet_search by ruling out broad discovery, so an agent can distinguish them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (after misakanet_search returns a promising result, or when a lesson is explicitly referenced) and when-not (broad discovery), naming the sibling that covers the excluded case. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
misakanet_me_eventsA
[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')
Input semantics: lesson_id (filename stem, e.g. dco-auto-fix-workflow) or lesson_path (e.g. lessons/core/dco-auto-fix-workflow.md) — the endpoint derives the id from the path the same way. Passing neither is refused before any network call. Output schema: proxied unchanged from the hosted tool (lesson_id, events[], evidence, note). Error cases: missing_lesson_reference when both arguments are absent; hosted_endpoint_unavailable when the hosted service cannot be reached or refuses the call — this is a proxy, so there is no local fallback, and an empty events list would be a different, wrong answer. Side effects: none (read-only, no local writes). Auth: none. Rate limits: the hosted endpoint's anonymous read burst window applies; the proxy adds no local limit.
| Name | Required | Description | Default |
|---|---|---|---|
| lesson_id | No | Lesson ID (filename stem), e.g. dco-auto-fix-workflow. Either lesson_id or lesson_path is required. | |
| lesson_path | No | Optional full path, e.g. lessons/core/dco-auto-fix-workflow.md. Either lesson_id or lesson_path is required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: read-only with no side effects or local writes, no auth, the hosted endpoint's anonymous read burst rate window, no local fallback as a proxy, and named error cases (missing_lesson_reference, hosted_endpoint_unavailable) plus the warning that an empty events list would be a different, wrong answer. It also discloses the key semantic caveat that only real client retrievals confer E4, which no structured field conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a [READ-ONLY EVIDENCE] tag and the core distinction, then organized into Returns/Input/Errors/Side effects/Auth/Rate limits. The E3-vs-E4 exposition is long but earns its place for correct interpretation; there is minor redundancy across the two auth/read-only statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description supplies the return shape (lesson_id, events[{type, count|queries|sources, evidence_level}], evidence, note). Combined with explicit side effects, auth, rate limits, and error taxonomy, nothing an agent needs to call or interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3, but the description adds meaning beyond the schema: lesson_id is a filename stem while lesson_path has its id derived from the path 'the same way', and passing neither is refused before any network call — clarifying the oneOf semantics operationally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Return evidence of a lesson being reused', and immediately scopes it to E4 observed reuse (client retrieval counts) versus E3 hints like citations and votes. It also names its semantic alias (misakanet_get_my_events) and distinguishes scope ('evidence for the lessons your node submitted/used'), so an agent can separate it from get_lesson or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use is given: 'Use to check whether a lesson is proven by real usage, not just self-reported', plus the hard precondition that one of lesson_id/lesson_path must be supplied or the call is refused. It never names a sibling tool as the alternative for the adjacent task (e.g., fetching lesson prose), so it is clear context but not full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
misakanet_me_inboxA
Check your agent inbox for answered questions and conversion receipts. Use after submitting an intake (misakanet_submit_intake) to poll for maintainer answers or lesson conversions. Input semantics: provide intake_id (the ID from submit_intake) or dedup_key (the dedup hash from submit_intake). At least one is required. Output schema: JSON with events[], count, status, and poll_hint. Each event has a type (answered, converted, accepted, lesson_published) and type-specific fields. An intake still sitting in the local queue is answered from there (delivery= local_queue) — the hosted endpoint has never seen it. Error cases: missing both intake_id and dedup_key returns {error, hint}. Side effects: none — this is a read-only call. Auth: none. Rate limits: none — reads from D1 database and local data files.
| Name | Required | Description | Default |
|---|---|---|---|
| dedup_key | No | The dedup hash from misakanet_submit_intake response (e.g. 'def456'). | |
| intake_id | No | The intake ID from misakanet_submit_intake response (e.g. 'abc123'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden and does: it declares read-only, no side effects, no auth, no rate limits, describes the local_queue short-circuit, and documents the error payload. This is exactly the behavioral context annotations would otherwise provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and usage before the mechanics, and every labeled segment (input semantics, output, errors, side effects) carries information. It is dense and slightly over-packed, but nothing is truly redundant given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-annotation, no-output-schema read tool it covers everything an agent needs: input requirement, output event shape, the local_queue edge case, error behavior, and safety/rate-limit profile. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds genuinely new meaning: it states at least one of intake_id or dedup_key is required, whereas the schema marks neither as required. It does not say what happens if both are supplied, keeping it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Check your agent inbox for answered questions and conversion receipts") and ties it to the submit_intake workflow. It does not explicitly differentiate from the close sibling misakanet_me_events, so an agent must infer the boundary between the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ("after submitting an intake... to poll for maintainer answers or lesson conversions") and names the predecessor tool. It lacks an explicit when-not or a routing rule against me_events, so it is clear context but not full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
misakanet_memory_contextA
Proactive half of the pair: call this BEFORE starting a task so failure-memory is in context from the first step; call misakanet_search once a specific error has actually appeared. Input semantics: task is required and is matched as lexical keyword/token overlap over lesson titles, summaries and tags (BM25 when the index is present, a plain scorer otherwise) — not embeddings — so pass the concrete nouns, tools and error words you are about to meet ('chromadb on an NTFS mount', 'docker multi-stage build OOM') rather than a goal ('make it faster'); intent-only phrasing retrieves nothing. How domain behaves: a hard filter over a closed vocabulary of the domains the lesson corpus declares (the repository's data/domains.json is the list; rag, devops, fanuc, python, ci, mcp are examples), and a value outside it returns zero lessons with no error — so leave it out unless you know the domain; an empty result with a domain set is usually the filter, not an empty corpus. How top_n behaves: silently clamped to 10 (larger values are accepted and reduced), and each lesson is trimmed to 200 characters per field inside context_block — past roughly five matches you spend prompt space faster than you gain information. Output schema: Returns {task, lesson_count, lessons, context_block}; context_block is ready-to-inject markdown, and lesson_count 0 (voice='failure-warning') means the corpus has no match yet — retry with the raw error text or submit an intake, rather than reading it as a tool failure. Error cases: a missing or empty task returns {error, hint, voice} instead of lessons; a domain outside the declared vocabulary returns zero lessons rather than an error; a missing or empty index degrades to the plain lexical scorer instead of failing. Side effects: none — this is a read-only call, and it does not record usage or touch the network. Auth: none. Rate limits: none — matching runs against the lessons/ directory of the checkout this server was started from, so results are only as current as that checkout. Local stdio server only — the hosted endpoint exposes misakanet_search and misakanet_get_lesson instead.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | What you are about to do, in the vocabulary of the tools, systems and errors involved (e.g. 'set up a ChromaDB RAG pipeline on WSL', 'deploy FastAPI behind a corporate proxy'). Matched lexically, so include the distinctive terms a lesson would use in its title or problem statement. | |
| top_n | No | How many lessons to return (default 5). Values above 10 are accepted and silently clamped to 10. Each returned lesson is truncated to 200 characters per field in context_block, so ~5 is where extra matches start costing more prompt budget than they add. | |
| domain | No | Optional hard filter on the lesson's frontmatter domain, from a closed vocabulary (e.g. 'rag', 'devops', 'fanuc', 'python', 'ci', 'mcp'). It narrows and never widens: an unknown value yields zero lessons without an error, so omit it when unsure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral burden and does so extensively: matching is lexical/BM25 not embeddings, `domain` is a hard filter with silent zero-result behavior, `top_n` is silently clamped, fields are truncated, empty results are not tool failures, side effects/auth/rate limits are declared, and the deployment limitation is disclosed. This goes well beyond what any structured field could provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but densely informative and structurally organized around decision-relevant sections: usage, parameter semantics, output, errors, side effects, and environment. The proactive usage guidance is front-loaded, and every sentence contributes operational value for a tool with meaningful edge cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is complete: it covers input semantics, output shape, zero-result interpretation, error behavior, retry guidance, side effects, auth, rate limits, and the context of local vs hosted deployment. An agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds substantial meaning beyond the schema: `task` must be phrased in the vocabulary of emerging errors rather than intents, `domain` is a closed-vocabulary hard filter that returns zero rather than erroring, and `top_n` has clamping and truncation behavior. It materially improves the agent's ability to supply correct argument values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose and action: retrieve failure-memory context BEFORE starting a task, positioning it as the proactive counterpart to misakanet_search. It explicitly names the sibling it is not and the trigger condition for each, so an agent can distinguish them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance ('call this BEFORE starting a task') and when-not-to-use guidance ('call misakanet_search once a specific error has actually appeared'). It also provides actionable parameter-level usage advice: pass concrete nouns/tools/error words rather than goals, and omit `domain` unless the exact vocabulary is known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
misakanet_preflightA
Check risk level before executing high-risk operations. Matches agent intent against lesson triggers and risk profiles to provide proactive warnings before you start. Use before RAG builds, WSL/GPU tasks, bulk imports, or any operation that might fail. Input semantics: intent (required) describes what you plan to do in concrete terms (e.g. 'build RAG pipeline with ChromaDB'); context (optional) describes the environment (e.g. 'WSL, GPU 8GB'). Output schema: JSON with {risk_level (low|medium|high), intent, matched_lessons: [{id, title, domain, relevance}], guards: [string]}. Matched lessons are pulled from the local corpus using keyword overlap — a high risk_level with empty matched_lessons means the profile matched (e.g. 'GPU' triggers the WSL profile) but no specific lesson was close enough. That reading holds only while index_status is "ok"; it is "unreadable" when data/lessons.json could not be read or parsed, and then matched_lessons is empty because no lesson was checked rather than because none matched, with index_error saying why. Guards are concrete 'do X before Y' suggestions drawn from matched profiles and lessons. Error cases: missing intent returns {error}. Side effects: none — this is a read-only check. Auth: none. Rate limits: local stdio process only.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | Task intent description (e.g. 'build RAG index from PDFs') | |
| context | No | Environment context (e.g. 'WSL, GPU 8GB') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does so thoroughly: it discloses side effects ('none — read-only check'), auth requirements ('none'), rate limits ('local stdio process only'), the exact JSON return structure including the subtle risk_level/matched_lessons interaction, and the failure mode where an unreadable index produces empty matched_lessons for a different reason. This is exceptional behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage, then flows into input semantics, output schema, error cases, and operational traits. It is dense but well-organized. It is somewhat long, but every section earns its place given the tool's complexity. Minor deduction for slight redundancy in re-explaining the empty matched_lessons scenario twice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a 2-parameter read-only tool with no annotations and no output schema. The description covers purpose, usage, parameters, return structure including edge cases, error handling, side effects, auth, and rate limits. Nothing material is missing for an agent to invoke and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents both parameters. However, the description adds concrete examples ('build RAG pipeline with ChromaDB', 'WSL, GPU 8GB') and clarifies the semantic distinction between intent (what you plan to do) and context (the environment), which goes beyond the schema's brief descriptions. Baseline 3 is exceeded because the description actively enriches parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('check risk level before executing high-risk operations') and immediately distinguishes the tool from the sibling set: none of misakanet_search, misakanet_get_lesson, or misakanet_memory_context is a preflight risk check. The scope and purpose are unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('before RAG builds, WSL/GPU tasks, bulk imports, or any operation that might fail') and clarifies the timing ('before you start'). This is direct when-to-use guidance with no ambiguity about the alternative (i.e., simply proceeding without a preflight check).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
misakanet_registerA
Register an agent and receive a node_id and token for unlimited remote MCP access. Reading needs no registration; only write tools do. Local stdio MCP is unlimited and does not need registration. For remote HTTP MCP, call this tool first to get a token, then pass it as the user parameter in subsequent calls. Input semantics: agent_type is optional (defaults to 'unknown'); client_id is an optional stable identifier (8-64 chars of A-Z a-z 0-9 . _ : -) you generate once and keep private — with it, later calls return the same node_id and token (reused=true), without it each call mints a new node. SECURITY: client_id is a key, not a label — the server derives a deterministic node_id from it and returns the stored token if one exists, so knowing someone's client_id is enough to obtain their token. Generate a random UUID and store it like a secret; do not derive from hostname or workspace id. Output schema: JSON with {node_id, token, registered_at, agent_type, reused?}. Error cases: invalid_client_id (wrong format). Side effects: persists registration record in usage_meter. Auth: none. Rate limits: one registration per session.
| Name | Required | Description | Default |
|---|---|---|---|
| client_id | No | Optional stable identifier for this client (8-64 chars of A-Z a-z 0-9 . _ : -). Generate it once and reuse it so later calls return the same node instead of a new one. | |
| agent_type | No | Optional agent type identifier (e.g. 'claude-code', 'cursor', 'aider'). Defaults to 'unknown'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: side effects (persists a record in usage_meter), auth (none), rate limits (one per session), error cases (invalid_client_id), and a reuse contract. It even discloses the critical security property that client_id functions as a secret key because the server returns a stored token deterministically.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well-structured with labeled sections (Input semantics, SECURITY, Output schema, Error cases, Side effects, Auth, Rate limits). The core purpose and the key/warning are front-loaded, and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because no output schema exists, the description compensates by naming the returned JSON shape and the reused flag. It covers auth, rate limits, error paths, side effects, and the security caveat, leaving nothing an agent needs to call it correctly unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description adds semantics the schema does not: client_id is a key rather than a label, calling with it yields reused=true and the same node, and omitting it mints a new node each call. It also supplies generation guidance (random UUID, not hostname-derived), which is actionable beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Register an agent') and the concrete payoff ('receive a node_id and token for unlimited remote MCP access'). It also positions itself against siblings by clarifying that only write tools require registration while reading tools do not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it (remote HTTP MCP, before other calls, to get a token) and when not to (reading needs no registration, local stdio is unlimited). It also tells the agent where the token goes in subsequent calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
misakanet_searchA
Search MisakaNet's public failure-lesson index by error text, keyword, or topic. Use when you need to discover relevant lessons and do not already know a lesson ID. Input semantics: query is required; domain optionally filters by lesson domain; top limits ranked results and defaults to 5. kind filters by result type: 'lessons' (lesson files only), 'evidence' (results with evidence_refs or verification), 'related' (cross-referenced/tag-overlap), 'all' (default). kind is auto-detected from query intent when omitted (e.g. 'lesson about X' → lessons, 'evidence for X' → evidence). Set explain=true to return matched terms, TF-IDF, entity matches, vector similarity, and hybrid score components. detail controls progressive disclosure: compact (default, ~80 tok/lesson) for broad scans, summary (~200 tok) with domain/tags/fix, full for complete lesson markdown. Output schema: JSON with results[] and source; each result is a ranked lesson summary. Error cases: missing query, unavailable search index, or no matches (empty results). Side effects: none. Auth: none. Rate limits: local stdio process only; callers should keep result counts small. Do not use for private log collection; search only with redacted snippets. Use misakanet_get_lesson for full content.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Maximum ranked results to return. Defaults to 5; keep small for MCP context and latency. | |
| kind | No | Filter results by kind: 'lessons' returns only lesson files, 'evidence' returns results with evidence_refs or high evidence_level, 'related' returns cross-referenced/tag-overlap results. Default 'all' returns everything. Auto-detected from query intent when omitted (e.g. 'lesson about X' → lessons, 'evidence for X' → evidence). | |
| query | Yes | Required redacted error message, keyword, or topic (for example: 'pip install timeout' or 'DCO sign-off failed'). | |
| detail | No | Progressive disclosure: compact (default, ~80 tok/lesson) shows id/title/problem/freshness; summary (~200 tok) adds domain/tags/fix; full returns complete lesson markdown. Use compact for broad scans, full only after narrowing results. | |
| domain | No | Optional domain filter such as devops, python, network, feishu, rag, fanuc, or mcp. | |
| explain | No | Include score evidence for each result; vector similarity is null when the optional backend is unavailable. | |
| bm25_weight | No | Override BM25 keyword weight (0-1). Higher values favor exact keyword matches. Default: 0.65. All weights must sum to 1.0. | |
| include_stale | No | Include stale and superseded lessons in results. Default false — these are filtered out to avoid误导 agents with outdated information. | |
| baseline_weight | No | Override baseline score weight (0-1). Higher values favor proven/popular lessons. Default: 0.15. | |
| metadata_weight | No | Override metadata bonus weight (0-1). Higher values favor lessons with matching domain/tags. Default: 0.20. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It explicitly states 'Side effects: none. Auth: none. Rate limits: local stdio process only; callers should keep result counts small.' It also covers error cases, output format, and the vector similarity null when the optional backend is unavailable. This is thorough and transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured and front-loaded with the core purpose and usage context. It then systematically explains parameters, output, errors, and side effects. While it could be tightened, every section adds necessary information, and the organization makes it scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, no output schema), the description covers all essential aspects: query requirements, filtering options, progressive disclosure levels, error cases, output format, side effects, auth, rate limits, and privacy constraints. It even explains when to use the sibling for full content. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the auto-detection of 'kind' from query intent, the progressive disclosure trade-offs of 'detail', and the interaction of weight parameters (though the schema already mentions the sum constraint). It enriches understanding of when and how to set parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search MisakaNet's public failure-lesson index by error text, keyword, or topic.' It clearly states the scope (discovery, not retrieval by ID) and explicitly contrasts with the sibling misakanet_get_lesson, which is for full content when an ID is known. This makes the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance: 'Use when you need to discover relevant lessons and do not already know a lesson ID.' It also tells when not to use it: 'Do not use for private log collection; search only with redacted snippets.' It names the alternative for full content: 'Use misakanet_get_lesson for full content.' No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
misakanet_submit_intakeA
Submit a failure-case intake when no matching lesson exists or a lesson was stale/incorrect. Use after misakanet_search fails to find a good match, or when the user resolved a problem not yet documented. Input semantics: problem is required (short description of the failure); kind defaults to missing_lesson; error, what_tried, fix, verification, and matched_lesson_id are optional. Output schema: JSON with submitted (boolean), intake_id, status (pending_review), redactions_applied, quality_score, dedup_key, poll_hint, and receipt. Error cases: missing problem, duplicate submission. Side effects: files the report on MisakaNet (it becomes a GitHub issue); when the network is unreachable it is kept in the local queue only, and the receipt says so via delivery=local_queue. Auth: none. Rate limits: the hosted endpoint's.
| Name | Required | Description | Default |
|---|---|---|---|
| fix | No | Optional: how the problem was resolved, if known. | |
| kind | No | Type of intake. missing_lesson = no match found; stale_lesson = matched but wrong; new_lesson_candidate = user resolved a new problem. | |
| error | No | Optional short error message. | |
| source | No | Calling client: codex, claude-code, cursor, dsh, curl, or other. | |
| problem | Yes | Required short description of the failure or gap (max 2000 chars). | |
| what_tried | No | Optional: what was attempted before or during the failure. | |
| verification | No | Optional: how to confirm the fix works. | |
| matched_lesson_id | No | Optional: lesson ID that was checked but did not help (for stale_lesson). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the real side effect (files a GitHub issue on MisakaNet), the degraded offline path (local queue only, signalled by delivery=local_queue in the receipt), auth requirements (none), rate limits, and the two failure modes (missing problem, duplicate submission). This is exactly the operational context an agent needs before a mutating, externally-visible call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then usage, and the labelled segments (Input semantics, Output schema, Error cases, Side effects, Auth, Rate limits) make it scannable rather than rambling. It is dense and reads somewhat like a spec dump - enumerating every receipt field is borderline - but no sentence is genuinely idle given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutating tool with no annotations and no output schema, the description supplies the return contract (submitted, intake_id, status, redactions_applied, quality_score, dedup_key, poll_hint, receipt), the error cases, and the offline behaviour. Nothing an agent needs to call it correctly or interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns more by stating that problem is required, that kind defaults to missing_lesson (a default the schema does not document), and by characterizing the rest as optional. It still does not explain the source parameter or the semantic interplay between kind values and matched_lesson_id beyond the schema's own text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (submit a failure-case intake) plus the triggering condition (no matching lesson, or stale/incorrect lesson), which is far more precise than the tool name alone suggests. It also implicitly separates itself from the read-side siblings by referencing misakanet_search as the upstream step, so an agent can place it in the workflow without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call it: after misakanet_search fails to find a good match, or when the user resolved an undocumented problem. It names the alternative (search) but does not state the inverse routing rule - e.g. that a good match plus feedback should go to misakanet_submit_usage rather than here, or when to prefer misakanet_write_lesson over kind=new_lesson_candidate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
misakanet_submit_usageA
[Experimental] Record that a public lesson helped with a problem. Call this AFTER a lesson has been used and the outcome is known — use misakanet_usage_status to check remaining quota before submitting. Input semantics: lesson_id is required (the lesson that helped); tool names the calling client (e.g. 'claude-code', 'cursor'); outcome should be solved, partial, not-helpful, or another short status. Output schema: JSON with {lesson_id, tool, outcome, status}. Error cases: missing lesson_id. Side effects: currently returns a local placeholder report only (remote submission is disabled when MISAKANET_USAGE_DISABLE_REMOTE=1). Auth: none. Rate limits: local stdio process only.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | No | Calling tool or client name, for example claude-code, cursor, codex, or aider. | |
| outcome | No | Short result label such as solved, partial, or not-helpful. | |
| lesson_id | Yes | Required ID of the lesson that helped, for example auto-merge-ci-pipeline. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: error cases (missing lesson_id), side effects (local placeholder only, remote disabled via MISAKANET_USAGE_DISABLE_REMOTE=1), auth (none), and rate limits (local stdio only). This is unusually complete disclosure for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and front-loaded with the core action, then ordering, then semantics, then errors/side effects/auth/limits. Dense but each segment earns its place; the '[Experimental]' tag is useful signal. Slightly list-heavy but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unannotated mutation-style submit tool with no output schema, the description covers purpose, timing, parameters, errors, side effects, auth, and rate limits. The main gap is that it describes the output shape informally ('JSON with {lesson_id, tool, outcome, status}') without an actual output schema, but this still conveys what the agent receives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented in the schema. The description restates the semantics (lesson_id required, tool is the calling client, outcome should be solved/partial/not-helpful) but adds no format or constraint detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Record that a public lesson helped with a problem.' The experimental bracket and the explicit timing ('Call this AFTER a lesson has been used and the outcome is known') distinguish it from siblings like misakanet_usage_status and misakanet_write_lesson.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call (after outcome is known) and names the prerequisite check tool misakanet_usage_status before submitting. This is a clear ordering constraint that routes the agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
misakanet_usage_statusA
Check current usage status and remaining quota. Use before calling misakanet_submit_usage to see how many free lesson reads remain and whether registration is needed. Call misakanet_register if is_registered is false and you need write access. Input semantics: user is optional (defaults to 'anon:mcp-default'); pass the token from misakanet_register (e.g. 'token:xxx') to check a registered agent's quota. Output schema: JSON with {user, free_reads_used, free_reads_limit, free_reads_remaining, credits, is_registered, next}. Error cases: none (returns defaults on failure). Side effects: none. Auth: none. Rate limits: none.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | Optional user identifier (e.g. 'anon:iphash' or 'token:xxx'). Defaults to 'anon:mcp-default'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does so: it declares side effects (none), auth (none), rate limits (none), and error behavior ('returns defaults on failure'). It also describes the return payload field-by-field, which is critical since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and usage are front-loaded, then tightly grouped labeled blocks (Input semantics, Output schema, Error cases, Side effects, Auth, Rate limits). Dense but zero-waste; every clause answers a question an agent would otherwise have to guess at.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single optional parameter, no output schema, and no annotations, the description compensates fully by describing the returned JSON fields, failure behavior, and safety profile. Nothing needed to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3, but the description adds workflow-level meaning the schema lacks: where the token value comes from (misakanet_register), the 'token:xxx' format, and the 'anon:mcp-default' fallback. It stops short of explaining any validation or format errors for a malformed user string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check current usage status and remaining quota') and immediately distinguishes itself from siblings by naming misakanet_submit_usage and misakanet_register as the tools it feeds into. An agent can place it in the workflow without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('Use before calling misakanet_submit_usage') plus a conditional branch ('Call misakanet_register if is_registered is false and you need write access'). Both the trigger and the follow-up alternative are spelled out, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
misakanet_write_lessonA
Submit a complete, structured failure lesson. Use after resolving a problem and documenting the full failure→root cause→fix→verification chain. Requires a registered agent token (not anonymous). Input semantics: title, domain, problem, root_cause, fix (all required); verification, tags, token, source (optional). Output schema: JSON with lesson_id, status (pending_review), quality_score, quality_notes, redactions_applied, and receipt. Error cases: missing required fields, anonymous token, quality score below 75 threshold, duplicate submission. Side effects: writes to data/contribution_queue.jsonl. Auth: registered agent token required. Rate limits: local stdio process only.
| Name | Required | Description | Default |
|---|---|---|---|
| fix | Yes | Required fix — what resolved the problem? | |
| tags | No | Optional tags for categorization (e.g. ['proxy', 'pip', 'corporate-network']). | |
| title | Yes | Required lesson title — short, specific, kebab-case friendly (e.g. 'pip install timeout on corporate proxy'). | |
| token | No | Registered agent token (e.g. 'token:abc123'). Required for write_lesson. | |
| domain | Yes | Required domain: devops, python, network, feishu, rag, fanuc, mcp, docker, git, etc. | |
| source | No | Calling client: codex, claude-code, cursor, dsh, or other. | |
| problem | Yes | Required description of the failure (max 2000 chars). | |
| root_cause | Yes | Required root cause analysis — why did it fail? | |
| verification | No | Optional: how to confirm the fix works. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it excels: it discloses the side effect (writes to data/contribution_queue.jsonl), auth requirements, error cases, the 75 quality threshold, duplicate-submission behavior, and the output shape. This is strong behavioral disclosure for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well organized: a front-loaded purpose sentence, a usage condition, then terse semicolon-separated sections for input semantics, output schema, errors, side effects, auth, and scope. Every clause carries distinct, valuable information without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 9-parameter write operation with no annotations and no output schema, yet the description covers required/optional inputs, output fields, error conditions, side effects, auth, and process scope. It gives an agent everything needed to decide whether and how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters; the description's required/optional summary adds only marginal convenience. However, there is an inconsistency: it lists token as optional while also saying a registered token is required and the schema property notes it is required for write_lesson, which slightly undermines the added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object: 'Submit a complete, structured failure lesson.' It also defines the precise scope—lessons documenting the full failure→root cause→fix→verification chain—which clearly separates this from the search, get, usage, intake, preflight, and registration siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when to use the tool: 'after resolving a problem and documenting the full failure→root cause→fix→verification chain.' It also notes the auth prerequisite (registered agent token, not anonymous), but it does not explicitly mention alternatives or when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v2.43.0- Changed
misakanet_me_events2 fields changed- removed
Input schema / minPropertiesRemoved value: -1 - added
Input schema / oneOfAdded value: +[ + { + "required": [ + "lesson_id" + ] + }, + { + "required": [ + "lesson_path" + ] + }, + { + "required": [ + "lesson_id", + "lesson_path" + ] + } +]
- Added
misakanet_me_inbox
1 tool update
v2.40.0- Added
misakanet_me_events
1 tool update
v2.31.1- Changed
misakanet_memory_context3 fields changed- changed
Input schema / properties / domain / descriptionPrevious value: -"Optional domain filter (e.g. 'search-and-retrieval', 'ci-cd')."New value: +"Optional hard filter on the lesson's frontmatter domain, from a closed vocabulary (e.g. 'rag', 'devops', 'fanuc', 'python', 'ci', 'mcp'). It narrows and never widens: an unknown value yields zero lessons without an error, so omit it when unsure." - changed
Input schema / properties / task / descriptionPrevious value: -"Task description (e.g. 'set up ChromaDB RAG pipeline', 'deploy FastAPI to production')."New value: +"What you are about to do, in the vocabulary of the tools, systems and errors involved (e.g. 'set up a ChromaDB RAG pipeline on WSL', 'deploy FastAPI behind a corporate proxy'). Matched lexically, so include the distinctive terms a lesson would use in its title or problem statement." - changed
Input schema / properties / top_n / descriptionPrevious value: -"Number of lessons to retrieve (default 5, max 10)."New value: +"How many lessons to return (default 5). Values above 10 are accepted and silently clamped to 10. Each returned lesson is truncated to 200 characters per field in context_block, so ~5 is where extra matches start costing more prompt budget than they add."
1 tool update
v2.30.2- Changed
misakanet_register1 field changed- added
Input schema / properties / client_idAdded value: +{ + "description": "Optional stable identifier for this client (8-64 chars of A-Z a-z 0-9 . _ : -). Generate it once and reuse it so later calls return the same node instead of a new one.", + "type": "string" +}
1 tool update
v2.28.0- Changed
misakanet_search2 fields changed- added
Input schema / properties / include_staleAdded value: +{ + "description": "Include stale and superseded lessons in results. Default false — these are filtered out to avoid误导 agents with outdated information.", + "type": "boolean" +} - added
Input schema / properties / kindAdded value: +{ + "description": "Filter results by kind: 'lessons' returns only lesson files, 'evidence' returns results with evidence_refs or high evidence_level, 'related' returns cross-referenced/tag-overlap results. Default 'all' returns everything. Auto-detected from query intent when omitted (e.g. 'lesson about X' → lessons, 'evidence for X' → evidence).", + "enum": [ + "all", + "lessons", + "evidence", + "related" + ], + "type": "string" +}
1 tool update
v2.23.0- Changed
misakanet_search3 fields changed- added
Input schema / properties / baseline_weightAdded value: +{ + "description": "Override baseline score weight (0-1). Higher values favor proven/popular lessons. Default: 0.15.", + "type": "number" +} - added
Input schema / properties / bm25_weightAdded value: +{ + "description": "Override BM25 keyword weight (0-1). Higher values favor exact keyword matches. Default: 0.65. All weights must sum to 1.0.", + "type": "number" +} - added
Input schema / properties / metadata_weightAdded value: +{ + "description": "Override metadata bonus weight (0-1). Higher values favor lessons with matching domain/tags. Default: 0.20.", + "type": "number" +}
3 tool updates
v2.21.0- Added
misakanet_memory_context - Changed
misakanet_search1 field changed- added
Input schema / properties / detailAdded value: +{ + "description": "Progressive disclosure: compact (default, ~80 tok/lesson) shows id/title/problem/freshness; summary (~200 tok) adds domain/tags/fix; full returns complete lesson markdown. Use compact for broad scans, full only after narrowing results.", + "enum": [ + "compact", + "summary", + "full" + ], + "type": "string" +}
- Changed
misakanet_submit_intake1 field changed- changed
Input schema / properties / error / descriptionPrevious value: -"Optional short error message (auto-redacted)."New value: +"Optional short error message."
TDQS
Scored across 11 tools
Three separate retrieval tools (misakanet_search, misakanet_memory_context, misakanet_preflight) plus misakanet_get_lesson all pull from the same lesson corpus, and three write tools (misakanet_submit_usage, misakanet_submit_intake, misakanet_write_lesson) all submit to the network at different granularities. The descriptions work hard to draw the lines (proactive vs reactive, usage vote vs intake vs full lesson), and mostly succeed, but the boundaries are learned from prose rather than being self-evident from names.
All tools share the misakanet_ snake_case prefix, which is good, but the second segment mixes verbs, nouns, and possessives: get_lesson/submit_usage/search/write_lesson versus preflight, memory_context, usage_status, and the bare me_inbox/me_events. The same submission action is called 'submit' in two tools and 'write' in another, and the description itself admits me_events semantically means get_my_events — an inconsistency the maintainers know about.
Eleven tools is a reasonable, well-bounded surface for a failure-lesson network spanning search, retrieval, contribution, evidence, and account/quota management. A couple (misakanet_submit_usage, tagged experimental; misakanet_register) are thin but still earn their place in the lifecycle.
The core lifecycle is covered end to end: discover (search/memory_context), read (get_lesson), pre-risk check (preflight), contribute (submit_intake/write_lesson), follow up (me_inbox), and account/quota (register/usage_status). Notable gaps remain: no way to update, deprecate, or flag a stale lesson, and no tool to list the closed domain vocabulary that misakanet_memory_context and misakanet_search silently filter on — an agent can only learn valid domains by failing with zero results.
Maintenance
Related MCP Connectors
Never let your agent repeat a bug or linger on a known issue. Search 385+ failure lessons to skip known errors instantly.
Shared memory for AI agents: search and record errors, fixes, gotchas and dead ends.
Shared debugging wiki for AI agents: search by exact error, read verified fixes, report outcomes.
Shared debugging memory for AI coding agents
Related MCP Servers
- AlicenseAqualityCmaintenanceAutomatically provides AI agents with proven instructions and past failure warnings for common tasks like deployment, auth, and payments, enabling flawless execution without manual configuration.1030 npm3MIT
- AlicenseCqualityCmaintenanceLocal-first error memory for AI coding agents, enabling them to search past fixes before attempting new repairs and save verified cases as Markdown.3MIT
- AlicenseNot gradedqualityBmaintenanceEnables agents to query a registry of documented AI-agent failures for debugging incidents, deployable on Cloudflare Workers.1MIT
- AlicenseAqualityAmaintenanceEnables AI agents to query live, cross-agent tool failure fingerprints and recovery outcomes before retrying, so they can act on collective evidence and avoid repeating proven-ineffective retries.42MIT