Skip to main content
Glama

English | 日本語 | 简体中文

MisakaNet

mcp-name: io.github.Ikalus1988/misakanet

The same failure, paid for twice.

A pip install times 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. The local stdio server (pip install misakanet) ships 11 — the hosted endpoint is a subset; docs/mcp.md has both rows.


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

dsh plugin --profile web add misakanet — or type misakanet in Add plugin

Claude Code

/plugin marketplace add Ikalus1988/MisakaNet then /plugin install misakanet@misakanet

Installer-managed

Claude Code · Codex · Hermes · OpenClaw · codewhale · Cursor · Gemini CLI · Copilot CLI · OpenCode · Kiro · MiniMax Code · DeepSeek Harness

Any other MCP client

point it at https://misakanet.org/mcp — public endpoint, anonymous reads

Your own code

pip install misakanet-core (library) · pip install misakanet (stdio server)

The installer-managed row is what npx @misaka-net/misakanet-setup writes into each host's config. For DeepSeek Harness that is the rules half only ($DSH_HOME/AGENTS.md): its tools come from the plugin in the row above, which the installer prints as the one manual step.

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. The hosted MCP endpoint adds an optional semantic fallback (bge-m3 + Vectorize) only when BM25 returns no match; MISAKANET_SEMANTIC=0 disables it. No vector database is required locally, and no server unless you want one.

Lessons

failure-recovery knowledge base, open and auditable under lessons/

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 mandatory vector database / RAG stack

✅ BM25 first; optional, disable-able semantic fallback on the hosted endpoint

❌ a skill marketplace

✅ debugging knowledge from real sessions

❌ a general-purpose benchmark platform

✅ a corpus graded by evidence; a 267-query retrieval run is published, and the older recitation benchmark is paused

What it answers — and what it does not

Four-panel comic: an agent asks about a failure, gets an indexed lesson back, or gets "no_match" and a ready-to-call intake form

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 by update-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. E4 needs an observation — two distinct clients actually retrieving a lesson — and the corpus has none yet (distribution, regenerated and checked by CI).

  • Search is BM25 first; the hosted endpoint can fall back to embeddings. Local/offline remains stdlib BM25; the fallback runs only when BM25 returns no match, and MISAKANET_SEMANTIC=0 turns it off. A corpus gap is still a miss: the reply is no_match plus an intake, not an empty page.

  • Reported gaps arrive faster than they are triaged. The intake queue is the honest bottleneck.

  • The corpus is downloadable and citable. data.misakanet.org publishes a versioned bundle — the full corpus, the benchmark query set, and every run artifact — with a per-file SHA-256 and an explicit license per file (DATASET.md). The counts live in each version's manifest.json, not in prose.

Retrieval benchmark: 267 queries, BM25 vs semantic fallback

On 2026-10-27 the hosted endpoint's retrieval path was evaluated on 267 queries, one per lesson generated by Workers AI 70B. Both arms used the same eval worker and corpus; only MISAKANET_SEMANTIC changed.

arm

R@1

R@5

no_match

BM25

0.210

0.225

0.712

semantic fallback

0.446

0.472

0.453

The fallback improves R@1 by 23.6 points and cuts no_match by 25.9 points. It does not meet the R@1 half of the target (0.446 < 0.46); no_match is within the target (0.453 ≤ 0.50). A 113-query subset reaches 0.460/0.460, while 250 reaches 0.404/0.504: the sample is large enough to show the fallback works, not large enough to call R@1 solved.

This is 267 queries from the 300-entry pool, not the full 650; 33 pool entries yielded no query, 2 semantic requests errored, and the eval corpus was not refreshed. → full report

What changed since: the gate, not the model

The table above measures a configuration production no longer uses. Until 2026-10-28 the semantic path ran only when BM25 returned nothing, so a confident-but-wrong lexical hit suppressed it — 13 of the 20 recorded misses were exactly that. For queries containing CJK characters the two ranked lists are now fused (reciprocal-rank) instead of one gating the other.

Measured on the live endpoint, 64 Chinese queries, 0 transport failures:

bucket

n

before

after

zh → zh

31

0.710

0.774

zh → en

33

0.455

0.697

zh → en, low overlap

14

0.214

0.500

For scale: bge-m3 pure cosine already reached 0.636 on the cross-lingual bucket, and a gemini embedding 0.727 — so most of the gap was the decision to consult the vector path, not the model. English queries are untouched (the fuse is gated on CJK characters) and sit at 15/20 against a floor of 16, which is where they were before this change. → full report

Recitation 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  12

Per-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. The rules half (the "search before you act" block) is written by the installer into $DSH_HOME/AGENTS.md; dsh has no plugin extension point for it, so the two halves stay separate.

  • Call the endpoint yourself — the curl in 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 a bin, 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; the hosted endpoint's semantic fallback is server-side) — 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 }}

→ inputs and outputs

Documentation

Topic

Where

Install, verify, uninstall

docs/quickstart.md · https://misakanet.org/install/

MCP: protocol, tools, transports

docs/mcp.md · API.md

CLI

docs/cli-reference.md · python3 search_knowledge.py "…"

Architecture

ARCHITECTURE.md · docs/CONCEPTS.md

Contributing a fix

CONTRIBUTING.md · label system

Submitting an intake

docs/mcp-intake-guide.md · mcp-remote

Troubleshooting

docs/troubleshooting.md

Known limitations

docs/LIMITATIONS.md

Benchmarks

docs/benchmarks/

Dataset (corpus + query sets, downloadable)

DATASET.md · https://data.misakanet.org/latest.json

Roadmap / changelog

ROADMAP.md · CHANGELOG.md

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)

  1. Check the checkout: python3 scripts/misakanet_cli.py smoke

  2. Search before writing: python3 search_knowledge.py "your error here"

  3. Found nothing? Share your failure lesson — five lines is enough

This month's good first issue (Oct 26 – Nov 26): Bring one real failure — no code; the MCP intake needs no account; we help with the format.

→ 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 · database locked · Windows/GBK · WSL permission · FANUC codes

docs/troubleshooting.md

MCP returns 403/405, or a client shows no tools

docs/mcp.md · FAQ.md

Behind a corporate proxy

docs/troubleshooting.md

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 tools
misakanet_get_lessonA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
idNoLesson ID, usually the filename without .md, for example auto-merge-ci-pipeline.
pathNoLesson path relative to the repository, for example lessons/core/auto-merge-ci-pipeline.md.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses input precedence, traversal validation, canonical-set matching behavior, output truncation to 5000 characters, error cases, no side effects, no auth, and local stdio operation. These details materially help an agent call the tool correctly and interpret failures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and usage, then organized into input, output, error, side-effect, auth, and rate-limit notes. Despite its length, every section carries actionable information for a lookup tool with nuanced path/id behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description appropriately explains the {path, content} return shape and the 5000-character truncation. It also covers errors, precedence, path validation, and safety context, leaving no material gap for an agent invoking this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is already 100%, the description adds important semantics: provide exactly one of path or id, path takes precedence when both are supplied, and id matches only the canonical lesson set while mirrors and translations require explicit paths. This goes well beyond the parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: fetch one public MisakaNet lesson by repository path or lesson ID. It explicitly distinguishes this lookup tool from misakanet_search, so an agent can choose it without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit usage conditions: use after misakanet_search returns a promising result or when a lesson is explicitly referenced. It also states the exclusion clearly: do not use it for broad discovery.

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-onlyIdempotent

[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.

NameRequiredDescriptionDefault
lesson_idNoLesson ID (filename stem), e.g. dco-auto-fix-workflow. Either lesson_id or lesson_path is required.
lesson_pathNoOptional full path, e.g. lessons/core/dco-auto-fix-workflow.md. Either lesson_id or lesson_path is required.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, and the description adds substantial context: no auth, rate limiting, no local fallback, error cases including missing_lesson_reference and hosted_endpoint_unavailable, and no side effects. It also explains why an empty events list would be a wrong proxy-failure answer, which is valuable 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the read-only evidence purpose and then proceeds through inputs, return shape, errors, side effects, auth, and limits. It is mostly well structured, though it repeats read-only/no-auth/rate-limit information and is longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by giving the return object shape, evidence levels, note field, error cases, auth status, rate limits, and side effects. It gives an agent enough to call the tool and interpret both success and failure correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents lesson_id and lesson_path. The description adds meaning beyond the schema by explaining that either identifier is acceptable, that the endpoint derives the lesson id from lesson_path the same way, and that supplying neither is refused before any network call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: returns evidence of a lesson being reused, specifically E4 observed reuse. It sharply distinguishes E4 from E3 hints such as citations, votes, and provenance lines, so an agent can identify the tool's unique role without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains when to use it: to check whether a lesson is proven by real usage rather than self-reported evidence. It also says what does not count as E4, but it does not explicitly route among nearby sibling tools such as get_lesson or usage_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

misakanet_me_inboxA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
dedup_keyNoThe dedup hash from misakanet_submit_intake response (e.g. 'def456').
intake_idNoThe intake ID from misakanet_submit_intake response (e.g. 'abc123').

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations it discloses a genuinely non-obvious trait: an intake still in the local queue is answered from there (delivery=local_queue) because the hosted endpoint has never seen it. It also documents the error contract ({error, hint} when both identifiers are missing), plus auth and rate-limit status, which the annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Opens with purpose, then the usage trigger, then labeled sections for input semantics, output shape, edge cases, side effects, auth and rate limits — front-loaded and scannable. It runs long for a 2-parameter read call, and the labeled list format is slightly heavier than the content requires.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the return-shape burden and does: events[], count, status, poll_hint, plus the event types (answered, converted, accepted, lesson_published). Combined with the error case and side-effect profile, an agent has everything needed to call and interpret this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds the crucial constraint the schema omits: required is empty in the schema, yet the description states "provide intake_id ... or dedup_key ... At least one is required." That single sentence prevents a zero-argument call that the schema alone would permit, and it explains both identifiers originate from submit_intake.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Check your agent inbox for answered questions and conversion receipts" names a specific verb and resource and makes the tool's scope unmistakable. It is clearly distinct from misakanet_submit_intake (write side) and misakanet_me_events (event log), so an agent can route between siblings without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use after submitting an intake (misakanet_submit_intake) to poll for maintainer answers or lesson conversions" gives an explicit prerequisite and a polling context. It stops short of stating when NOT to use it (e.g. versus misakanet_me_events or misakanet_search), so it is strong but not complete routing 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
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
taskYesWhat 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_nNoHow 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.
domainNoOptional 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

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: it discloses silent clamping at 10, 200-char per-field truncation, the BM25-to-plain-scorer degradation when the index is absent, zero-rows-without-error for an unknown domain, and that corpus freshness is bounded by the local checkout. Auth, rate limits and side effects are stated explicitly, and the 'local stdio only' note explains why the hosted endpoint differs. Minor tension: 'does not touch the network' reads as closed-world against openWorldHint=true, but this is a scope clarification rather than a contradiction of intent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly (pair positioning first, then per-parameter semantics, then output, errors, side effects), and every section is doing work. It is long — the trailing Auth/Rate-limits/Side-effects lines partly re-cover what readOnlyHint and openWorldHint already imply — but the density justifies most of the length for a tool with this many silent-failure modes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates in full by naming the return keys ({task, lesson_count, lessons, context_block}) and interpreting lesson_count 0 as 'no match yet' rather than a tool failure — exactly the failure mode an agent would otherwise misread. Error cases and degradation behavior are also enumerated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 a fourth by sharpening *why* the task string must be concrete ('intent-only phrasing retrieves nothing') and by giving a counter-intuitive diagnostic that the schema omits: an empty result with a domain set is 'usually the filter, not an empty corpus.' It largely restates the schema's clamping and vocabulary rules, so it does not reach 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource and positions itself against a named sibling: it is the 'proactive half of the pair' to be called before a task, versus misakanet_search after an error appears. The framing ('proactive' vs. reactive) lets an agent pick between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit temporal routing rule: call this BEFORE starting a task, and only call misakanet_search 'once a specific error has actually appeared.' It adds a second conditional ('leave [domain] out unless you know the domain') and names the remediation path on an empty result (retry with raw error text or submit an intake).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

misakanet_preflightA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
intentYesTask intent description (e.g. 'build RAG index from PDFs')
contextNoEnvironment context (e.g. 'WSL, GPU 8GB')

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing output structure, the keyword-overlap matching mechanism, the index_status/index_error caveat that changes how empty matched_lessons must be read, error behavior for missing intent, and explicit 'no side effects / no auth / local stdio only' statements. The only mild tension is openWorldHint=true versus 'local stdio process only', but this does not contradict the readOnly/destructive/idempotent declarations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and usage before the dense output-semantics block, and every sentence carries information the agent needs. The output-explanation section is long, but it is justified because no output schema exists; a light trim would still be possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the full return shape, the interpretation rule for empty matched_lessons, the degraded index_status case, guards semantics, and error behavior. An agent has everything needed to call it and to read the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters; the description adds the required/optional distinction and richer worked examples ('build RAG pipeline with ChromaDB', 'WSL, GPU 8GB'). It stops short of saying how keyword overlap is computed, which would fully close the loop on intent phrasing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 explains the mechanism (matching intent against lesson triggers and risk profiles). It is clearly distinguishable from siblings like misakanet_search or misakanet_get_lesson, which retrieve lessons rather than assess pre-execution risk.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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 frames it as a proactive pre-flight step. The trigger list plus the 'before you start' timing gives an agent actionable selection criteria with no inference required.

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.

NameRequiredDescriptionDefault
client_idNoOptional 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_typeNoOptional agent type identifier (e.g. 'claude-code', 'cursor', 'aider'). Defaults to 'unknown'.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond annotations: error case (invalid_client_id), side effect (persists registration record in usage_meter), auth (none), rate limits (one per session), and the conditional reuse behavior. The reuse semantics (same node/token when client_id supplied) nuance the idempotentHint=false annotation but do not contradict it, since the no-client_id default still mints a new node.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but well organized and front-loaded with purpose and access rules. It is on the long side and the SECURITY paragraph is somewhat repetitive of the earlier client_id sentence, keeping it just below top marks.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description specifies the return shape ({node_id, token, registered_at, agent_type, reused?}) and covers error cases, side effects, auth, and rate limits. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description goes further than the schema: it frames client_id as 'a key, not a label,' warns that knowing someone's client_id is enough to obtain their token, and instructs generating a random UUID rather than deriving from hostname. This is meaningful semantic value beyond the field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Register an agent') and concrete outcome ('receive a node_id and token for unlimited remote MCP access'). It also immediately scopes what does NOT need registration (reads, local stdio), distinguishing it from the sibling write/read tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use rules: 'Reading needs no registration; only write tools do,' local stdio is unlimited, and for remote HTTP MCP 'call this tool first to get a token.' No alternative or exclusion 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_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.

NameRequiredDescriptionDefault
fixNoOptional: how the problem was resolved, if known.
kindNoType of intake. missing_lesson = no match found; stale_lesson = matched but wrong; new_lesson_candidate = user resolved a new problem; question = asking for help (opens a [Question] issue, not a lesson candidate); proposal = a plan or product request, explicitly not a failure report (answerable by a decision, never converted into a lesson).
errorNoOptional short error message.
sourceNoCalling client: codex, claude-code, cursor, dsh, curl, or other.
problemYesRequired short description of the failure or gap (max 2000 chars).
what_triedNoOptional: what was attempted before or during the failure.
verificationNoOptional: how to confirm the fix works.
matched_lesson_idNoOptional: lesson ID that was checked but did not help (for stale_lesson).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations it discloses concrete side effects (the intake becomes a GitHub issue on MisakaNet), an offline degradation path (local queue only, surfaced as delivery=local_queue in the receipt), the duplicate-submission error, and that there are no auth requirements but the hosted endpoint's rate limits apply. Destructive/read-only hints are consistent with a non-idempotent write that files a report; the openWorldHint=false is arguably loose given the GitHub-issue side effect, but it is not a direct contradiction of anything stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and trigger before moving into labeled sections (Input semantics, Output schema, Error cases, Side effects, Auth, Rate limits), so an agent can stop reading early. It is dense but nearly every clause carries decision-relevant information; only the output-field enumeration runs slightly long given no output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with no output schema, the description supplies the return shape, the failure modes, the fallback delivery behavior, auth, and rate-limit context — everything needed to call it and interpret the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds real value by stating problem is required, that kind defaults to missing_lesson, and which fields are optional as a group. It does not restate the enum semantics or the source parameter, leaving some reference work to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb (submit) and resource (failure-case intake) plus the exact triggering condition (no matching lesson, or a stale/incorrect one), which cleanly separates it from siblings like misakanet_search and misakanet_write_lesson. An agent can identify the tool's job without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative explicitly ("Use after misakanet_search fails to find a good match") and gives the second qualifying condition (a problem resolved but not yet documented). It also enumerates the intake kinds via context, so the agent knows which classification applies rather than guessing.

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.

NameRequiredDescriptionDefault
toolNoCalling tool or client name, for example claude-code, cursor, codex, or aider.
outcomeNoShort result label such as solved, partial, or not-helpful.
lesson_idYesRequired ID of the lesson that helped, for example auto-merge-ci-pipeline.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past annotations: discloses that only a local placeholder report is produced while remote submission can be disabled via MISAKANET_USAGE_DISABLE_REMOTE, states auth is none, scopes rate limits to a local stdio process, and enumerates the error case (missing lesson_id). These are exactly the side-effect and environment facts an agent cannot get from readOnlyHint/destructiveHint alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then sequences the prerequisite, input semantics, output shape, errors, side effects, auth, and limits in labeled clauses. Dense but nearly every clause carries new information; the '[Experimental]' tag and repeated output-field listing are the only near-redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description supplies the return JSON keys, the single failure mode, the placeholder-vs-remote side effect, and the auth/rate-limit posture. For a 3-parameter tool this leaves no material gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 three parameters. The description restates the same value examples for outcome and the same role for tool without adding syntax, constraints, or defaults beyond them, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Record that a public lesson helped with a problem') and scopes it to post-hoc reporting, which separates it from misakanet_search, misakanet_get_lesson, and misakanet_write_lesson. The 'AFTER a lesson has been used' framing makes the distinction operational rather than descriptive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly specifies the triggering condition ('AFTER a lesson has been used and the outcome is known') and names the sibling to consult first (misakanet_usage_status for remaining quota). The pre-check ordering is stated, not inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

misakanet_usage_statusA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
userNoOptional user identifier (e.g. 'anon:iphash' or 'token:xxx'). Defaults to 'anon:mcp-default'.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly/idempotent/non-destructive), the description discloses error behavior ('returns defaults on failure'), auth requirements (none), and rate limits (none) — all facts the structured fields do not provide. The 'side effects: none' line mildly echoes destructiveHint=false, but the surrounding context is genuinely additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and sequencing before the labeled reference sections (input/output/errors/side effects), and every block is scannable. Slight redundancy: the 'user' parameter is described in both the prose and the schema, and 'side effects: none' duplicates the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description enumerates the returned fields (free_reads_used, free_reads_limit, free_reads_remaining, credits, is_registered, next), including the 'next' hint that ties into the register/submit workflow. For a single-optional-param read tool, nothing an agent needs is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 above that by explaining the two identifier forms ('anon:iphash' vs 'token:xxx') and where the token comes from (misakanet_register). It repeats the default value already in the schema, so it is not a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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', which an agent can distinguish from misakanet_submit_usage (which consumes quota) and misakanet_register (which upgrades to write access). The description also explicitly names both siblings, so differentiation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit sequencing ('Use before calling misakanet_submit_usage') and a clear conditional branch ('Call misakanet_register if is_registered is false and you need write access'). Both when-to-use and which-alternative-to-pick are spelled out.

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.

NameRequiredDescriptionDefault
fixYesRequired fix — what resolved the problem?
tagsNoOptional tags for categorization (e.g. ['proxy', 'pip', 'corporate-network']).
titleYesRequired lesson title — short, specific, kebab-case friendly (e.g. 'pip install timeout on corporate proxy').
tokenNoRegistered agent token (e.g. 'token:abc123'). Required for write_lesson.
domainYesRequired domain: devops, python, network, feishu, rag, fanuc, mcp, docker, git, etc.
sourceNoCalling client: codex, claude-code, cursor, dsh, or other.
problemYesRequired description of the failure (max 2000 chars).
root_causeYesRequired root cause analysis — why did it fail?
verificationNoOptional: how to confirm the fix works.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (non-read-only, non-idempotent write), the description discloses the auth requirement, the concrete side effect (writes to data/contribution_queue.jsonl), the full error surface including a quality-score threshold of 75 and duplicate submission, and the rate-limit/runtime constraint (local stdio only). This is exactly the kind of post-annotation context the dimension rewards.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action and trigger, then packs auth, inputs, outputs, errors, and side effects into labeled clauses — nothing is wasted. It is dense and slightly list-like rather than fully scannable, which keeps it just under the top mark.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description compensates by describing the return JSON (lesson_id, status, quality_score, quality_notes, redactions_applied, receipt), and it also covers auth, error cases, and persistence side effects. An agent has everything needed to decide to call it and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 9 parameters is already documented with examples (e.g. 'pip install timeout on corporate proxy', domain enums, 2000-char limit). The description only restates which fields are required vs optional, adding no format or format-syntax detail beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 ('Submit a complete, structured failure lesson') and defines the exact content required (failure→root cause→fix→verification chain). This clearly separates it from read-oriented siblings like misakanet_search and misakanet_get_lesson, and from the distinct write targets misakanet_submit_usage and misakanet_submit_intake.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states an explicit trigger condition ('Use after resolving a problem and documenting the full failure→root cause→fix→verification chain'), which is actionable context. It does not name an alternative tool or an explicit when-not-to-use case, so it stops short of the 5 tier.

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. 1 tool updatev3.3.0
    • Changedmisakanet_submit_intake2 fields changed
      • changedInput schema / properties / kind / description
        Previous value: -"Type of intake. missing_lesson = no match found; stale_lesson = matched but wrong; new_lesson_candidate = user resolved a new problem."New value: +"Type of intake. missing_lesson = no match found; stale_lesson = matched but wrong; new_lesson_candidate = user resolved a new problem; question = asking for help (opens a [Question] issue, not a lesson candidate); proposal = a plan or product request, explicitly not a failure report (answerable by a decision, never converted into a lesson)."
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "missing_lesson",
        -  "stale_lesson",
        -  "new_lesson_candidate"
        -]New value: +[
        +  "missing_lesson",
        +  "stale_lesson",
        +  "new_lesson_candidate",
        +  "question",
        +  "proposal"
        +]
  2. 2 tool updatesv2.43.0
    • Changedmisakanet_me_events2 fields changed
      • removedInput schema / minProperties
        Removed value: -1
      • addedInput schema / oneOf
        Added value: +[
        +  {
        +    "required": [
        +      "lesson_id"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "lesson_path"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "lesson_id",
        +      "lesson_path"
        +    ]
        +  }
        +]
    • Addedmisakanet_me_inbox
  3. 1 tool updatev2.40.0
    • Addedmisakanet_me_events
  4. 1 tool updatev2.31.1
    • Changedmisakanet_memory_context3 fields changed
      • changedInput schema / properties / domain / description
        Previous 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."
      • changedInput schema / properties / task / description
        Previous 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."
      • changedInput schema / properties / top_n / description
        Previous 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."
  5. 1 tool updatev2.30.2
    • Changedmisakanet_register1 field changed
      • addedInput schema / properties / client_id
        Added 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"
        +}

TDQS

A4.4/5.0

Scored across 11 tools

Disambiguation3/5

Three tools (misakanet_search, misakanet_memory_context, misakanet_preflight) all match a text query against the same lesson corpus, and choosing between them depends on subtle timing cues ('before a task' vs 'after an error appears' vs 'before a risky operation') rather than distinct resources. The verbose descriptions do explicitly steer usage, which rescues the set from worse confusion, but an agent can plausibly pick memory_context where preflight was intended. The remaining tools (write/submit/register/quota/inbox/evidence) are cleanly separable.

Naming Consistency3/5

There is a consistent misakanet_ prefix and snake_case throughout, but the second segment mixes conventions: verb_noun (search, get_lesson, submit_intake, write_lesson, submit_usage), bare noun phrases (preflight, usage_status, memory_context), and an odd 'me_' family (me_events, me_inbox). The description itself admits me_events is a backward-compatibility alias for a semantic get_my_events, confirming the inconsistency. Still readable and greppable, but not a predictable pattern.

Tool Count5/5

Eleven tools sit squarely in the well-scoped range and each covers a distinct lifecycle stage: discovery, retrieval, proactive warning, write/intake, feedback, evidence, quota, registration, and inbox polling. No tool looks like dead weight or a duplicate of another.

Completeness4/5

The lifecycle is broadly covered — read, active-memory injection, preflight risk, contribution (intake and full lesson), feedback, evidence, identity/quota, and inbox polling — with no obvious dead ends for the primary search-and-contribute workflow. Minor gaps remain: there is no polling path for a submitted lesson_id (me_inbox only accepts intake_id or dedup_key), and no update/retract operation for an existing lesson.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Automatically provides AI agents with proven instructions and past failure warnings for common tasks like deployment, auth, and payments, enabling flawless execution without manual configuration.
    10
    30 npm
    3
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables 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.
    4
    2
    MIT