Skip to main content
Glama

English | 日本語 | 简体中文

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

dsh plugin --profile web add misakanet — or type misakanet in the host's Add plugin dialog

Claude Code

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

Codex, Cursor, Gemini CLI, Copilot CLI, OpenCode, …

npx @misaka-net/misakanet-setup — writes the MCP row into each host's own config

Any other MCP client

point it at https://misakanet.org/mcp — the endpoint is public and reads are anonymous

Your own code

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

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 MisakaNet entry directly under Plugins. It is a shortcut, not the panel: clicking it opens a full page in the main column. Root scope — it does not come and go with a session.

Conversation tab

A MisakaNet tab beside Chat and Trajectory: what this session asked, what came back, and what you filed, rebuilt from the conversation's own rows.

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 misakanet_search and misakanet_submit_intake call gets its own row on the tool card: the query as it was sent, whether a lesson came back, and which lesson is on top, with the raw result one disclosure away. The row reports and never posts — the vote belongs on the answer's action row below.

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

/misakanet in the composer

Type /misakanet pip install timeout and press Enter: the lessons come back in a card inside the composer, with no agent in the loop. The query is the only thing it sends.

Frame-wide toast

After a /misakanet search comes back with lessons, a card appears over every column with the top hit; dismiss it or click through to the lesson.

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 /misakanet card, the settings row, and the plugin page's own title and description.

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 cordis.patch.yml).

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 lessons/

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

✅ git clone → search locally

❌ A skill marketplace

✅ Debugging knowledge from real sessions

What it can and cannot answer

Four-panel comic: the mascot promises to prevent every AI error; the cats ask about pizza and an oil barrel and it deflates — then a cat shows npm ERESOLVE and it lights up. MisakaNet knows the failures that have been indexed, not general knowledge.

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  21

A 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

npx @misaka-net/misakanet-setup writes each client's own MCP config, a rules block where the client has one, and (Claude Code only) a turn-counting hook — the five JSON-file clients (Cursor, Gemini CLI, Copilot CLI, OpenCode, Kiro) get the MCP entry alone; --verify checks whatever was written

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

npx @misaka-net/misakanet-setup

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

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

adds the hosted MCP tools to Claude Code from this repository — no installer, no local process

to call the endpoint myself

the curl below

nothing to install

the library in my own code

pip install misakanet-core

nothing

The two-package trap (this one cost a real install failure, #1849):

Looks like

Actually is

Use it for

@misaka-net/misakanet-setup (npm)

the installer — has bin, no plugin entry

teaching your assistant to search

misakanet (npm)

the DSH / Codex plugin (index.js, SKILL.md)

dsh plugin --profile web add misakanet

this repository (git)

also a Claude Code plugin marketplace (.claude-plugin/)

/plugin marketplace add Ikalus1988/MisakaNet — the Claude channel is repo-based on purpose: a marketplace resolves the plugin from the repository, so the npm bundle stays the DSH/Codex artifact

misakanet (PyPI)

ships the stdio MCP server

python3 -m misakanet.server

misakanet-core (PyPI)

the library (stdlib-only BM25 — Python ≥ 3.10 required, no third-party packages)

from misakanet.search import search_lessons

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

dsh plugin --profile web add misakanet, then what it registers — skill + mcp__misakanet__* tools, no local Python

🔧 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

MCP intake or journey report #510

❓ 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

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

MCP: protocol, tool reference, transports

docs/mcp.md · API.md

CLI

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

Architecture and the three paths

ARCHITECTURE.md · docs/CONCEPTS.md

Submitting an intake (for agents and humans)

docs/mcp-intake-guide.md

What the labels mean

docs/label-system.md

Troubleshooting (error scene index)

docs/troubleshooting.md

Known limitations, stated plainly

docs/LIMITATIONS.md

Benchmarks

docs/benchmarks/ · docs/lesson-reuse-benchmark.md

Competitive landscape

docs/competitive-analysis.md

Domain samples (rag, devops, fanuc, …)

docs/domains/

AI crawler policy: robots, JSON-LD, WAF rules

docs/cloudflare-robots-txt.md · docs/json-ld-schema.md · docs/cloudflare-waf-rules.md

Roadmap

ROADMAP.md · CHANGELOG.md

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 in CONTRIBUTING.md and 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.)

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

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

  3. 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 · database locked · Windows/GBK crash · WSL permission denied · FANUC error codes

docs/troubleshooting.md — error scene index

Known limitations of the test suite

docs/known-issues.md

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

docs/mcp.md · FAQ.md

Behind a corporate proxy (Claude Desktop, Cursor, CLI)

docs/troubleshooting.md

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 tools
misakanet_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.

ParametersJSON Schema
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

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

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

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
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.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

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

Usage Guidelines5/5

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.

ParametersJSON Schema
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

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

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

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
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

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

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

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

Usage Guidelines5/5

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

ParametersJSON Schema
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.
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.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

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

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 ('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.

Usage Guidelines4/5

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.

ParametersJSON Schema
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.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

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

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

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') 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
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.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

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

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

Usage Guidelines4/5

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. 1 tool updatev2.40.0
    • Addedmisakanet_me_events
  2. 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."
  3. 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"
        +}
  4. 1 tool updatev2.28.0
    • Changedmisakanet_search2 fields changed
      • addedInput schema / properties / include_stale
        Added value: +{
        +  "description": "Include stale and superseded lessons in results. Default false — these are filtered out to avoid误导 agents with outdated information.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / kind
        Added 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"
        +}
  5. 1 tool updatev2.23.0
    • Changedmisakanet_search3 fields changed
      • addedInput schema / properties / baseline_weight
        Added value: +{
        +  "description": "Override baseline score weight (0-1). Higher values favor proven/popular lessons. Default: 0.15.",
        +  "type": "number"
        +}
      • addedInput schema / properties / bm25_weight
        Added 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"
        +}
      • addedInput schema / properties / metadata_weight
        Added value: +{
        +  "description": "Override metadata bonus weight (0-1). Higher values favor lessons with matching domain/tags. Default: 0.20.",
        +  "type": "number"
        +}
  6. 3 tool updatesv2.21.0
    • Addedmisakanet_memory_context
    • Changedmisakanet_search1 field changed
      • addedInput schema / properties / detail
        Added 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"
        +}
    • Changedmisakanet_submit_intake1 field changed
      • changedInput schema / properties / error / description
        Previous value: -"Optional short error message (auto-redacted)."New value: +"Optional short error message."
  7. 2 tool updatesv2.18.0
    • Addedmisakanet_register
    • Addedmisakanet_write_lesson
  8. 3 tool updatesv2.17.1
    • Addedmisakanet_preflight
    • Changedmisakanet_search1 field changed
      • addedInput schema / properties / explain
        Added value: +{
        +  "description": "Include score evidence for each result; vector similarity is null when the optional backend is unavailable.",
        +  "type": "boolean"
        +}
    • Addedmisakanet_submit_intake
  9. 4 tool updatesv2.14.0
    • Changedmisakanet_get_lesson2 fields changed
      • changedInput schema / properties / id / description
        Previous 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."
      • changedInput schema / properties / path / description
        Previous 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."
    • Changedmisakanet_search3 fields changed
      • changedInput schema / properties / domain / description
        Previous 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."
      • changedInput schema / properties / query / description
        Previous 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')."
      • changedInput schema / properties / top / description
        Previous value: -"Max results to return (default 5)"New value: +"Maximum ranked results to return. Defaults to 5; keep small for MCP context and latency."
    • Changedmisakanet_submit_usage3 fields changed
      • changedInput schema / properties / lesson_id / description
        Previous 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."
      • changedInput schema / properties / outcome / description
        Previous value: -"Outcome: solved, partial, not-helpful"New value: +"Short result label such as solved, partial, or not-helpful."
      • changedInput schema / properties / tool / description
        Previous 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."
    • Addedmisakanet_usage_status
  10. 3 tool updatesv2.12.4
    • Changedmisakanet_get_lesson1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Lesson ID (filename without .md)"New value: +"Lesson ID (filename without .md, e.g., auto-merge-ci-pipeline)"
    • Addedmisakanet_search
    • Addedmisakanet_submit_usage

TDQS

A4.5/5.0

Scored across 10 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    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
    53 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