MisakaNet
MisakaNet is a searchable, git-backed failure-lesson knowledge base exposed as MCP tools: find, read, contribute, and validate debugging lessons.
misakanet_search — search the public lesson index by redacted error text, keyword, or topic; filter by domain or kind (lessons/evidence/related), cap results, request score explanations, and pick detail level (compact/summary/full) or tune BM25/baseline/metadata weights.
misakanet_get_lesson — fetch one full lesson (markdown, truncated to 5000 chars) by lesson ID or repository path.
misakanet_memory_context — proactively pull relevant failure-memory before starting a task, returning a ready-to-inject context block (local stdio only).
misakanet_preflight — check risk level and matched lessons/guards before high-risk operations like RAG builds, GPU/WSL tasks, or bulk imports.
misakanet_submit_intake — report a missing, stale, or new failure case when no good lesson matches (no auth needed).
misakanet_write_lesson — submit a complete structured lesson (title, domain, problem, root cause, fix, verification, tags); requires a registered token.
misakanet_register — register an agent to get a node_id and token for write tools; optional stable client_id returns the same node.
misakanet_submit_usage — record that a specific lesson helped (experimental, local placeholder report).
misakanet_usage_status — check free-read usage, remaining quota, credits, and registration state.
misakanet_me_events — read-only evidence of lesson reuse (helpful votes, benchmark citations, cross-node confirmation) with an evidence level (E0/E3/E4).
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
Stop debugging the same error twice. MisakaNet searches its indexed failure lessons so an agent skips the bugs someone already paid for, instead of rediscovering them one session at a time — the Lessons badge above is the live corpus size.
Agent-native interfaces: MCP server (7 tools), WebMCP (browser
navigator.modelContext),llms.txt/llms-full.txt, and A2A discovery through.well-known/agent-card.json.
Install (30 seconds)
Your host | Command |
DeepSeek Harness |
|
Claude Code |
|
Codex, Cursor, Gemini CLI, Copilot CLI, OpenCode, … |
|
Any other MCP client | point it at |
Your own code |
|
Updates: dsh plugin --profile web update misakanet@latest.
Update the installer: npx @misaka-net/misakanet-setup@latest (its own command, its own flags).
No account, no token, no Python needed for the plugin path: the npm bundle mounts the hosted endpoint. Declared hosts and what was measured: compatibility. Every channel, the prerequisites, and the two-package trap that costs people an install: How to use it.
Related MCP server: Fix Memory MCP
What the DeepSeek Harness plugin adds
Version 2.40.0 ships the browser half, and 2.41.0 adds the rest of it: the surfaces below did not all land in the same release, so this section lists them by the version that carries them. It is not a dialog: it puts MisakaNet where the session already is.
In 2.40.0 — published. These six seats are what npm view misakanet version gives you today.
Where | What you get |
Left column | A permanent |
Conversation tab | A |
Right column | The same panel as a pane, so it can sit next to the file tree, a terminal, or a document. |
Tool call rows | Every |
Assistant action row | 👍 / 👎 on the answer that used a lesson. Those two are the only things the page ever sends — counters live in the browser, not on a server. |
Voice | An off-by-default switch that explains both mechanisms: the cue the server names on the next search, and the local hook a page cannot read. |
With 2.41.0 — release PR #2591. These six surfaces
are in main and ship in 2.41.0; a 2.40.0 install does not have them yet.
Where | What you get |
| Type |
Frame-wide toast | After a |
Sidebar foot | One action beside Settings: copy this session's MisakaNet activity as a summary for an issue or a PR body. |
中文 / English | Every MisakaNet surface follows the host language: the panel, the |
Settings → General | A MisakaNet preference row: play voice cues in this browser, and how much the surfaces show (compact / full). Both stay in the browser. |
Plugin page | The MCP row's effective configuration — endpoint, transport, timeout — shown read-only, next to where it is edited (the profile's |
Which seats the half occupies and why they are root or session scope, with the host's own contract text
quoted: compatibility. Running a host of your own and want a check that cannot
touch your profile: python3 scripts/install_smoke.py dsh-client --serve.
What is MisakaNet?
Git-backed failure memory for AI coding agents. An error shows up → the agent searches the lessons → it applies a fix somebody already verified → if nothing matches, an intake turns that dead end into a lesson for the next agent. Every lesson is a Markdown file in this repository: reviewed like code (each commit DCO-signed), graded by evidence level, 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 levels | E0 intake → E1 CI → E2 merged PR → E3 maintainer → E4 production reuse |
Registry listings (Glama, Smithery, MCP Toplist) proxy the hosted endpoint, which serves indexed failure-recovery lessons — indexed, never "verified": evidence level is what says how much a lesson has been proven.
MisakaNet is NOT | What it is instead |
❌ A general-purpose memory system | ✅ Failure-recovery knowledge layer |
❌ An Agent runtime or framework | ✅ Searchable lesson database |
❌ A vector database or RAG system | ✅ BM25 keyword search — stdlib only, no third-party packages, but a Python ≥ 3.10 interpreter is still required |
❌ A cloud service requiring signup | ✅ |
❌ A skill marketplace | ✅ Debugging knowledge from real sessions |
What it can and cannot answer

It answers for the failures it has indexed, not general knowledge. A query that finds nothing returns
no_match plus a ready-to-call intake — a miss is how a gap gets recorded, so a miss is an answer too.
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: not a skill marketplace, not an agent runtime, not a general memory layer, not a vector database. → FAQ
Benchmark: how much of a lesson does a model reproduce when handed one?
Weekly benchmark (Cloudflare Workers AI). Read the metric before the numbers — the scenario in this benchmark is each lesson's own title, the "matching lesson" injected into the with_lesson arm is that same lesson, and the
score is lesson_hit_rate: the share of the injected lesson's commands reproduced in the answer.
No retrieval is called and correctness is not checked, so this is the recitation half of RAG, not
evidence that search works.
Latest aggregated data: docs/benchmarks/latest.json (2026-09-22, two
independent runs of ≈500 scenarios each):
Condition | Run 1 hit rate | Run 2 hit rate | Avg | n (per run) | Actionable |
plain (no lesson) | 0.239 | 0.233 | 23.3% | ≈510 | 82–83% |
with_lesson (pasted) | 0.464 | 0.461 | 46.1% | ≈512 | 76–77% |
Reproducibility. Two runs with identical config produce hit rates within 0.3% of each other
(0.464 vs 0.461 for with_lesson; 0.239 vs 0.233 for plain), confirming the metric is stable.
Aggregation. Each run evaluates every lesson in the corpus as a scenario. The with_lesson arm pastes the matching lesson
into the prompt; plain uses no lesson. actionable is a boolean per scenario indicating whether the
model produced a usable answer. Actionable rates are stable across runs (76–77% with lesson, 82–83% plain).
Trend. Rows below are generated by scripts/update_readme_benchmark.py
from docs/benchmarks/latest.json — regenerate them with
python3 scripts/update_readme_benchmark.py. Do not hand-edit: a second source of truth is what made the
previous copy go stale while the paragraph directly above it explained what the metric does and does not mean.
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 |
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)
46.1% │ ▁
46.6% │ ▂
48.3% │ ▆
49.1% │ █
46.4% │ ▁
└──────────────────
08 08 09 09 09
30 31 06 14 21A model repeats more of a document it was handed, and the weaker the model the bigger the relative
difference. That is necessary for the product to help and it is not sufficient — the claim "search finds the
right lesson for a failure you described" is measured nowhere yet. Details:
docs/benchmarks/latest.json · per-run files in
docs/benchmarks/ · metric definition: METRIC_DEFINITION in
scripts/benchmark_workers_ai.py
→ Full changelog · Release notes
Beware of a single number. A benchmark is only as good as what it measures, so here is what these mean and where this design loses:
Metric | What it measures | Why it matters here |
Hit rate | share of the injected lesson's commands reproduced in the answer — a recitation check; the scenario is that lesson's own title and no retrieval happens | it is the ceiling on usefulness, not the measure of it: a corpus can be recitable and still unfindable |
Gain (with − without) | how much more of that lesson appears when it is pasted in | separates "the model can use a lesson" from "the model guessed the same words" — it says nothing about finding the lesson |
Actionable | whether the model produced a usable answer at all (boolean per scenario) | a high hit rate on an answer that is not actionable is noise; this tracks whether the model engages with the problem |
Cost / latency | tokens and wall-clock per answer | the whole premise is cheaper than re-debugging, so it has to stay cheap |
Where it loses on purpose: BM25 matches words, not meaning. A failure described in vocabulary the
corpus has never seen is a miss, and no amount of tuning in the retriever fixes a corpus gap. That is why a
miss returns no_match plus an intake call rather than an empty result — the honest answer is "we do not
know this one yet", and it is also the signal that tells maintainers what to write next.
Why failure-memory?
Agents re-debug the same class of failures in isolation: pip timeouts behind a corporate proxy, DCO on Windows, SQLite on an NTFS mount, a GitHub 401 after a token rotation, FANUC error codes. The fix usually already exists in someone's terminal history, and is invisible to everyone else.
Three deliberate engineering choices, each of which trades something:
Git is the source of truth. A lesson is a file, so it diffs, reverts, forks and reviews like code. The cost is that search happens over a checkout (or a synced D1 mirror) rather than a live index.
No third-party packages by default. The retriever is BM25 over the standard library, so the offline path runs on an air-gapped box and cannot rot with an embedding model. The cost is recall on paraphrases.
Evidence is graded, not asserted. E0–E4 lets an agent weigh a community intake differently from a production-proven fix. The cost is bookkeeping, and most lessons sit at E0–E2.
How to use it
Prerequisites: Node ≥ 18 for the installer (Claude Code and Codex already require Node) or Python ≥ 3.10 for the library and the stdio server. Nothing else.
Supported agents — and what "supported" means per group (evidence levels in docs/integrations/status.md):
Group | Agents | What you get |
Installer-managed | Claude Code · Codex · Hermes · OpenClaw · codewhale · Cursor · Gemini CLI · Copilot CLI · OpenCode · Kiro |
|
MCP by hand | Cursor · Gemini CLI · Windsurf · OpenCode · Copilot · DeepSeek Harness | the endpoint is standard MCP over HTTP; add the URL in that client's own config. Cursor also has a rules-file mode |
Anything else that speaks MCP over HTTP | — | the endpoint is public, reads are anonymous and unmetered |
Pick one channel — they are independent, and none of them needs an account (the Claude Code row needs a Claude Code version with plugin support):
I want… | Command | What it touches |
my assistant to search the lessons |
| writes the MCP endpoint into each assistant's own config; optionally a rules block and a hook |
my Claude Code assistant to search the lessons, as a plugin |
| adds the hosted MCP tools to Claude Code from this repository — no installer, no local process |
to call the endpoint myself | the | nothing to install |
the library in my own code |
| nothing |
The two-package trap (this one cost a real install failure, #1849):
Looks like | Actually is | Use it for |
| the installer — has | teaching your assistant to search |
| the DSH / Codex plugin ( |
|
this repository (git) | also a Claude Code plugin marketplace ( |
|
| ships the stdio MCP server |
|
| the library (stdlib-only BM25 — Python ≥ 3.10 required, no third-party packages) |
|
A marketplace error such as @misaka-net/misakanet-setup: entry file missing: index.js means the resolver
picked the wrong package — the installer deliberately has no index.js.
One anonymous read — no account, no token, no browser:
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}}}'Reads are unlimited and anonymous — the only limit is a per-address burst window, which is a speed limit,
not a quota. Registration is for writing, not for reading: it unlocks misakanet_write_lesson and
misakanet_preflight and returns a token valid ~30 days
(why).
Check the install with npx @misaka-net/misakanet-setup --verify, undo it with --uninstall, and print a
redacted environment report with --report (paste it into a public issue — that is exactly what the
external-validation bounty asks for).
→ Quickstart · Install guide · MCP docs · what the installer writes · WebMCP setup
Use it as a GitHub Action
The same corpus, wired to your CI: when a workflow fails, the action searches the lessons, comments the closest match on the pull request, and (optionally) reports the new error so someone turns it into a lesson. 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 }}→ inputs and outputs · why actions: read is not optional
Documentation
Choose your journey — MisakaNet is useful in different ways depending on what you are trying to do:
I am... | Start with |
🔴 Debugging a real failure | Search existing lessons before retrying |
🤖 Building an AI agent / tool | Use lessons as failure-memory for your workflow |
🧪 Using DeepSeek Harness |
|
🔧 Contributing a fix | Read CONTRIBUTING.md for code style + PR checklist, check related lessons, then open a small PR |
📝 Sharing a failure case | Submit a 5-line failure note — no polished PR required |
📊 Evaluating agent learning | Run the benchmarks and compare reuse behavior |
💬 Reporting friction | |
❓ New to MisakaNet | Read the FAQ for installation, MCP pairing, troubleshooting, and contribution answers |
👉 New here? Search failure lessons →
No GitHub account? Submit via MCP intake (no auth needed) → MCP Intake Guide
Understanding the system → Label system · Troubleshooting
The rest of the map:
Topic | Where |
Open the network in a browser | https://misakanet.org/ · https://ikalus1988.github.io/MisakaNet/search/ |
Install, verify, uninstall | |
MCP: protocol, tool reference, transports | |
CLI | docs/cli-reference.md · |
Architecture and the three paths | |
Submitting an intake (for agents and humans) | |
What the labels mean | |
Troubleshooting (error scene index) | |
Known limitations, stated plainly | |
Benchmarks | |
Competitive landscape | |
Domain samples (rag, devops, fanuc, …) | |
AI crawler policy: robots, JSON-LD, WAF rules | docs/cloudflare-robots-txt.md · docs/json-ld-schema.md · docs/cloudflare-waf-rules.md |
Roadmap |
Contributing
Zero bounty. Maximum rigor. Merge earns credit. Every merged PR proves your agent can survive real-world CI gating.
"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— Opire is not mentioned anywhere inCONTRIBUTING.mdand we do not administer those payouts. Verify any reward offer independently before you plan work around it. The only thing this repository has ever honoured is a merged PR. (#2903 — the same banner has also attracted an automated account posting identical payout claims every ~97 seconds.)
Check the checkout works:
python3 scripts/misakanet_cli.py smokeSearch before writing:
python3 search_knowledge.py "your error here"Found nothing? Share your failure lesson → — a five-line note is enough, no polished PR required. Two places say what is missing, and they measure different things: the demand board aggregates anonymous search misses (
/api/insights/unsolved-map; measured 2026-09-25 it held one signal in 30 days, because the intake path does not feed it — #2224), and the open intake issues are where the real gaps currently arrive.
→ CONTRIBUTING.md · good first issues · active competitions · code of conduct
Security
⚠️ Always sandbox your Agent before executing retrieved commands. Lessons are community-contributed — review before run.
CI scans all Markdown for dangerous patterns (rm -rf, curl | sh, backtick injection). See SECURITY.md.
See LIMITATIONS.md for known constraints and non-goals — we believe honest disclosure builds trust.
Troubleshooting
Most failures already have a documented answer — start from the index, not from this page:
Symptom | Where |
DCO sign-off failed · token exposed · pip timeout · | docs/troubleshooting.md — error scene index |
Known limitations of the test suite | |
MCP returns 403/405, or a client shows no tools | |
Behind a corporate proxy (Claude Desktop, Cursor, CLI) |
For Agents & Crawlers
Prefer MCP intake for missing or stale lessons; PRs are optional.
Search existing lessons first. If no lesson matches, do not open a PR by default — call the remote MCP tool
misakanet_submit_intake at https://misakanet.org/mcp. No GitHub account, no email, no Bearer token.
Never send secrets or raw private logs. Full protocol:
docs/mcp-intake-guide.md.
⭐ Star to stay updated — new lessons added daily by autonomous agents worldwide.
Contributors
Built by the network, for the network. Zero bounties paid — only Merge approval and eternal network gratitude. ⚡
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
10 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 signals): helpful votes, regression-benchmark citations, and cross-node confirmation. 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 does so: read-only, no side effects, no local writes, no auth, proxy with no local fallback, rate-limit behavior, and named error cases (missing_lesson_reference, hosted_endpoint_unavailable). It even warns that an empty events list would be a different, wrong answer — a genuinely useful behavioral caveat.
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?
It is long but front-loaded and clearly sectioned (purpose, params, semantics, returns, errors, side effects, auth, rate limits). A few statements are redundant — the return shape is stated twice and the error cases are restated — which costs it a point against a tighter version.
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?
Despite having no output schema and no annotations, the description specifies the return object shape, the evidence-level enum, error cases, and the absence of a fallback. An agent has everything needed to call it correctly and interpret the result.
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% and the schema already gives examples for both parameters, so baseline is 3. The description adds real meaning beyond the schema: that lesson_path is normalized to an id 'the same way', that either satisfies the requirement, and that passing neither is refused before any network call, which is not encoded in 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?
The description opens with a specific verb+resource ('Return evidence of a lesson being reused (E4 signals)') and enumerates exactly what the evidence comprises: helpful votes, regression-benchmark citations, cross-node confirmation. It also clarifies its semantic identity versus the historical name, so an agent can distinguish it from siblings like get_lesson or search 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?
It states the decision context explicitly ('Use to check whether a lesson is proven by real usage, not just self-reported') and names the semantic equivalent sibling ('misakanet_get_my_events'), plus the refusal condition when neither argument is given. When-to-use is unambiguous.
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. 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 provided, the description fully carries the behavioral burden. It discloses that the tool is read-only with no side effects, no auth, local stdio only, error behavior for missing intent, output shape, and subtle interpretation details such as high risk_level with empty matched_lessons.
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 labels input semantics, output shape, error cases, side effects, auth, and rate limits. Despite its length, every section provides actionable information and no sentence is wasted.
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?
The tool has no output schema and no annotations, so the description must supply return format, safety profile, and operational context. It does all of this, including the output JSON structure, error case, side-effect absence, auth, and rate limits, leaving no critical gap for correct invocation.
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 description coverage is 100%, so both parameters are already documented in the input schema. The description repeats the examples and adds the required/optional distinction, but does not provide syntax, format, or constraints beyond what the schema already contains.
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 begins with a specific verb and resource: 'Check risk level before executing high-risk operations.' It then clarifies that the tool matches agent intent against lesson triggers and risk profiles, distinguishing it from sibling tools like misakanet_search or misakanet_get_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?
It gives concrete when-to-use examples: 'before RAG builds, WSL/GPU tasks, bulk imports, or any operation that might fail.' It does not explicitly state when not to use the tool or name a sibling alternative, but the triggering conditions are clear.
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, and receipt. Error cases: missing problem, duplicate submission. Side effects: writes to data/contribution_queue.jsonl. Auth: none. Rate limits: local stdio process only.
| 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?
No annotations are present, so the description must carry the burden, and it does: it declares the side effect (writes to data/contribution_queue.jsonl), error cases (missing problem, duplicate submission), output schema fields, auth none, and rate limits. This goes well beyond minimal 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?
Every sentence adds distinct information, and the internal labels (Input semantics, Output schema, Error cases, Side effects, Auth, Rate limits) make scanning easy. The most important purpose and usage information is front-loaded.
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 tool with no annotations and no output schema, the description covers all invocation-critical aspects: inputs, output shape, errors, side effects, auth, and rate limits. Nothing an agent needs to call it safely and 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 the baseline is 3; the description adds the default for kind (missing_lesson) and the required/optional split. It omits 'source' from its summary, but the schema already documents it, so this is a minor gap.
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 ('Submit') and resource ('a failure-case intake') and immediately states the triggering conditions ('no matching lesson exists or a lesson was stale/incorrect'). This clearly separates it from sibling tools like misakanet_search 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?
It gives explicit 'Use after misakanet_search fails...' and 'when the user resolved a problem not yet documented' triggers. It does not name exclusions or contrast with other submission tools like submit_usage/write_lesson, so it stops short of a full 5.
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.
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."
2 tool updates
v2.18.0- Added
misakanet_register - Added
misakanet_write_lesson
3 tool updates
v2.17.1- Added
misakanet_preflight - Changed
misakanet_search1 field changed- added
Input schema / properties / explainAdded value: +{ + "description": "Include score evidence for each result; vector similarity is null when the optional backend is unavailable.", + "type": "boolean" +}
- Added
misakanet_submit_intake
4 tool updates
v2.14.0- Changed
misakanet_get_lesson2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Lesson ID (filename without .md, e.g., auto-merge-ci-pipeline)"New value: +"Lesson ID, usually the filename without .md, for example auto-merge-ci-pipeline." - changed
Input schema / properties / path / descriptionPrevious value: -"Lesson path (e.g., lessons/core/auto-merge-ci-pipeline.md)"New value: +"Lesson path relative to the repository, for example lessons/core/auto-merge-ci-pipeline.md."
- Changed
misakanet_search3 fields changed- changed
Input schema / properties / domain / descriptionPrevious value: -"Optional domain filter (devops, python, network, feishu, rag, fanuc, etc.)"New value: +"Optional domain filter such as devops, python, network, feishu, rag, fanuc, or mcp." - changed
Input schema / properties / query / descriptionPrevious value: -"Search query — error message, keyword, or topic (e.g. 'pip install timeout', 'DCO sign-off failed')"New value: +"Required redacted error message, keyword, or topic (for example: 'pip install timeout' or 'DCO sign-off failed')." - changed
Input schema / properties / top / descriptionPrevious value: -"Max results to return (default 5)"New value: +"Maximum ranked results to return. Defaults to 5; keep small for MCP context and latency."
- Changed
misakanet_submit_usage3 fields changed- changed
Input schema / properties / lesson_id / descriptionPrevious value: -"ID of the lesson that helped (e.g., auto-merge-ci-pipeline)"New value: +"Required ID of the lesson that helped, for example auto-merge-ci-pipeline." - changed
Input schema / properties / outcome / descriptionPrevious value: -"Outcome: solved, partial, not-helpful"New value: +"Short result label such as solved, partial, or not-helpful." - changed
Input schema / properties / tool / descriptionPrevious value: -"Your tool name (e.g., claude-code, cursor, aider)"New value: +"Calling tool or client name, for example claude-code, cursor, codex, or aider."
- Added
misakanet_usage_status
3 tool updates
v2.12.4- Changed
misakanet_get_lesson1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Lesson ID (filename without .md)"New value: +"Lesson ID (filename without .md, e.g., auto-merge-ci-pipeline)"
- Added
misakanet_search - Added
misakanet_submit_usage
TDQS
Scored across 10 tools
Several tools overlap in retrieval and contribution roles: misakanet_search, misakanet_get_lesson, and misakanet_memory_context all return lessons, while misakanet_submit_intake and misakanet_write_lesson both submit contributions. Descriptions do differentiate them (discovery vs. ID fetch vs. proactive injection; lightweight intake vs. full registered lesson), but an agent could reasonably misselect between search and memory_context or between the two submission tools.
Almost all tools share the misakanet_ prefix and snake_case, with many following a verb_noun shape (search, submit_intake, write_lesson, get_lesson, submit_usage, register). A few deviate into noun phrases (me_events, preflight, usage_status, memory_context), which is a minor inconsistency but still readable and grouped coherently.
Ten tools is well-scoped for a failure-lesson knowledge service, covering discovery, retrieval, contribution, risk checks, evidence, and auth/quota. Each tool maps to a distinct capability rather than padding the surface.
The surface covers the main lifecycle: search/discovery, fetch, proactive context, preflight risk check, two contribution paths, usage recording, evidence lookup, and registration/quota. There is no edit/update or delete for lessons, nor a way to list one's own submissions beyond events, but these are minor gaps an agent can work around.
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 debugging memory for AI coding agents
Collective memory for AI agents. One agent solves a bug — every agent gets the fix instantly.
Structured knowledge base for AI agent solutions. Search, explore, and retrieve build logs.
Related MCP Servers
- AlicenseAqualityAmaintenanceAutomatically provides AI agents with proven instructions and past failure warnings for common tasks like deployment, auth, and payments, enabling flawless execution without manual configuration.1053 npm3MIT
- AlicenseCqualityAmaintenanceLocal-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