Skip to main content
Glama

Fushiguro

npm license

An MCP server that routes a task to the right specialist agent, assembles everything that agent needs to do it well, and remembers how you want work done.

It is built to be dropped into any business adopting AI. The packaged catalog gives you a working set of agents, skills, tools, connectors, topics, and runbook templates on day one; your own catalog layers on top of it without forking anything.

What it does

Call one tool, brief, with a task. It first decides how much delegation the task deserves, which is as much about spending less as spending more:

Verdict

What you do

Example

handle_directly

Nothing — do it yourself, no subagent

"fix a typo in the README"

single_agent

Spawn one specialist

"add an index to speed up this slow query"

pipeline

Ask the intake questions, then run planner → executor → tester → reviewer

"create a booking website for a dental clinic"

Wrapping a one-line fix in a four-stage pipeline burns tokens and adds latency for nothing, so the triage refusing to delegate is a feature, not a fallback.

For anything it does delegate, you get a system prompt ready to hand to a subagent, assembled from:

  • the right agent for the task, chosen by a router that improves as you correct it

  • the skills that apply — reusable procedures like citation discipline or data-quality checks

  • the runbooks that govern this kind of work, with their owners and escalation conditions

  • retrieved knowledge from your own documentation, cited by chunk id

  • the tools and connectors it may use, with the guardrails on each

  • your standing preferences, learned over previous sessions

The host spawns the subagent. Fushiguro never calls a model itself, so there is no API key and no separate bill — it runs on whatever session you already have.

Related MCP server: DriftOS MCP Server

Install

Requires Node 22.5+. It uses the built-in node:sqlite, so nothing compiles and the whole package is 80KB.

Try it

npx -y fushiguro-mcp --help

Register it with your host

For Claude Code, the scope decides who gets it:

# Just you, just this project
claude mcp add fushiguro -- npx -y fushiguro-mcp

# Just you, every project you open
claude mcp add fushiguro --scope user -- npx -y fushiguro-mcp

# Your whole team — writes .mcp.json, which you commit
claude mcp add fushiguro --scope project -- npx -y fushiguro-mcp

For any other MCP host, the equivalent config block:

{
  "mcpServers": {
    "fushiguro": {
      "command": "npx",
      "args": ["-y", "fushiguro-mcp"],
      "env": { "FUSHIGURO_CATALOG": "/absolute/path/to/your/catalog" }
    }
  }
}

From source

git clone <this repo> && cd Fushiguro-mcp-mem
npm install && npm run build && npm test
claude mcp add fushiguro -- node "$PWD/dist/index.js"

Setting it up for a business

cd your-repo
npx -y fushiguro-mcp init          # scaffolds .fushiguro/catalog

Then, in rough order of payoff:

  1. Knowledge first — this is the highest-leverage step by a wide margin. Put your real policy and product documents in knowledge/<collection>/. Everything else is scaffolding around this. Without it, agents are generic; with it, they cite your actual refund policy.

  2. Describe your connectors and delete the packaged ones you do not use. Record env var names, never secret values.

  3. Fill in one runbook — escalation is usually the one that hurts most today. Set template: false when done.

  4. Extend one agent with your house rules, or add a role the base set does not cover.

  5. Commit the catalog. It is a shared business asset, and it belongs in version control like any other.

Run the status tool at any point to see what loaded and what is still an unfilled template.

Sharing it across a business

The server is just a runtime — the catalog is the thing worth sharing. Three topologies, by org size:

One team, one repo

Commit .fushiguro/catalog/ and a project-scoped .mcp.json to the repo. Anyone who clones it is prompted to enable the server and gets the catalog automatically. Nothing to install, nothing to configure.

npx -y fushiguro-mcp init
claude mcp add fushiguro --scope project -- npx -y fushiguro-mcp
git add .fushiguro .mcp.json && git commit -m "Add AI catalog"

Several teams, many repos

Keep the catalog in its own repo — acme-ai-catalog — so one set of policies, runbooks, and agents serves every project. Clone it once per machine and point the server at it:

{ "env": { "FUSHIGURO_CATALOG": "/Users/you/work/acme-ai-catalog" } }

Or vendor it into each repo as a git submodule, so a project pins a known-good catalog version. Changes go through pull request, which is the point: a change to an escalation path or a refund policy should be reviewed like a change to code.

Larger organisations

Publish the catalog as a private npm package (@acme/ai-catalog) and depend on it. You get versioning, a changelog, and staged rollout — teams upgrade when they choose rather than being moved underneath. Point FUSHIGURO_CATALOG at node_modules/@acme/ai-catalog.

You can also publish a fork of the server itself with your catalog baked in as the base layer, so npx @acme/ai is the entire setup for a new hire.

What is shared and what is not

This distinction matters, and it is the one people get wrong:

Where it lives

Who sees it

Catalog — agents, skills, knowledge, runbooks, connectors

Your repo, in git

Everyone, reviewed via PR

Memory — learned preferences

~/.fushiguro/memory.db

Only that person

A rule that applies to everyone belongs in the catalog, where it is reviewable and versioned. A preference that is one person's working style belongs in memory, captured through remember. Putting an org policy in memory means only one person's agent follows it — and nobody can see that it exists.

Memory is per-user by design. There is no shared memory database, and adding one would let a single person's habit silently become everyone's policy without review.

The catalog

Seven kinds of entry, each a markdown file with YAML frontmatter.

Kind

What it is

agents/

A specialist: a system prompt plus the tools, skills, runbooks, and connectors it works with. The router picks one per task.

skills/

A reusable procedure attached to an agent's prompt when relevant. always: true attaches it to every agent. Ships with design craft (motion, taste, landing pages, iOS), grounding, and analysis skills.

knowledge/

Your own documentation, chunked and full-text indexed. The folder name is the collection, which is how agent access is scoped.

runbooks/

A team or project process guide — steps, owner, SLA, escalation. Shipped as templates for you to complete.

topics/

A business domain that ties agents, skills, knowledge, runbooks, and connectors together.

tools/

A host capability and, more importantly, when to reach for it.

connectors/

An external system described declaratively: capabilities, required env var names, and what must never be automated. Never holds a secret value.

Two layers, merged

Entries shipped with the package are base. Entries in your own catalog are custom. When both exist under one name they merge into base+custom: your scalar fields win, list fields union, and your body is appended under an "Organisation-specific additions" heading.

---
name: customer-support     # same name as a base agent
model: opus                # overrides the base model hint
keywords: [overage, seat]  # added to the base keywords
connectors: [acme-helpdesk]
---

## Acme specifics

Acme sells three plans. Entitlement differs sharply between them...

That is the whole customisation. You keep receiving improvements to the base prompt underneath your additions. Set override: true in your frontmatter to replace the base body outright instead.

Every listing tags each entry [base], [custom], or [base+custom], so it is always clear what is in play.

See examples/acme-corp/catalog/ for a worked custom catalog.

Runbooks are templates

The packaged runbooks are process templates, not policy. Their structure is the general shape of the process; the owners, thresholds, and escalation paths are decisions your business has to make.

Every unmade decision is marked [FILL: ...]. While a runbook still has template: true, agents are told to treat it as guidance and to refuse to invent values for the gaps rather than proceeding as though a policy existed. Once you have filled it in, set template: false.

status lists every runbook still awaiting completion, with a count of remaining fields.

Start from catalog/runbooks/_TEMPLATE.md, copy it to .fushiguro/catalog/runbooks/, and fill it in. The section that pays for itself is Decision points — the places where the answer is a judgement rather than a lookup. Those are exactly where an agent must stop and hand over.

Memory

Memory is separate from the catalog: the catalog is what your organisation configured, memory is what the system learned about how this user wants work done.

remember("Never quote a renewal date from memory", kind: "constraint", agent: "customer-support")

Five kinds, and they are not equal:

  • constraint — a hard rule

  • correction — fixing a past mistake

  • preference / style — a soft taste

  • fact — context about the user or business

Behaviour that follows from that:

  • Restating reinforces, it does not duplicate. Saying the same thing in different words updates the existing memory and raises its confidence.

  • A constraint retires the softer memory it contradicts, keeping the trail rather than leaving both to fight.

  • Constraints and corrections are always injected, whether or not they match the task's wording. A rule that only surfaces when you happen to use the same word is not a rule.

  • Scope: global follows you everywhere, project is keyed to one codebase or workspace.

Delegation and pipelines

The triage

Complexity is scored from the shape of the request: creation verbs (build, implement) against change verbs (fix, add), whole-system nouns (website, platform), open-ended scope (from scratch, production-ready), how many specialists credibly match, question phrasing, length, and conjunction count. The score, the bucket, and every signal are returned, so the decision can be argued with rather than trusted:

PIPELINE — 4 stages. Assessed complex (score 5): produces an artifact (create);
whole-system noun (website); a whole system to be built, not a change to an
existing one; spans two specialisms.

Override it any time with mode: "handle_directly" | "single_agent" | "pipeline".

The stages

Agents declare which positions they can fill via roles: [planner, executor, tester, reviewer]. The routed specialist always takes executor — it was chosen for the subject matter — and the other positions go to the best-scoring agent declaring that role. A reviewer is never the same agent as the executor, because reviewing your own work is not reviewing.

Each stage's prompt states its role, what it receives, and what it must hand on, with an instruction to stay inside that role: a planner that starts implementing produces work the executor will redo differently, and that hides the disagreement rather than settling it.

brief composes only stage 1. Fetch each later stage with get_stage, passing the previous stage's output as context — later stages are briefed on what they are actually receiving, and you never pay for prompts you may not use.

Intake questions

Agents declare intake: questions to put to the user before work of that kind starts. "Create a booking website for a dental clinic" is missing a great deal — platform, existing stack, integrations, whether it handles personal data.

Questions the request already answers are dropped, so answering in the first message means you are not asked again. Asking about a stack the user already named is the fastest way to get an intake step ignored entirely.

Installing skills from the ecosystem

There is a growing body of open Agent Skills, and this reads that format directly. Seven collections are curated in:

fushiguro-mcp skills                          # what is available
fushiguro-mcp skills show emil-kowalski       # what is in one
fushiguro-mcp skills add emil-kowalski        # install all of them
fushiguro-mcp skills add jakub-krehel better-typography better-layout

Source

Author

Covers

emil-kowalski

Emil Kowalski

Animation, motion craft, Apple-flavoured design engineering

jakub-krehel

Jakub Krehel

Typography, colour, layout, accessibility, interface review

meng-to

Meng To

Design+Code skills for UI, web, media, games

garden

ConardLi

Web design engineering, knowledge retrieval, image generation

landing-page-design

Elaya Design

Landing page design

tastemaker

codeswithroh

Grounding UI in reference images and a persistent taste profile

designer-skills

Owl-Listener

Research, systems, UI, interaction, delivery

All MIT licensed. Nothing is vendored into this package — installing fetches from the author's repository, so they keep authorship and you get the current version rather than a fork frozen at whenever this was published. Each installed skill carries a _SOURCE.md recording its origin, licence, and fetch date.

Between them these sources offer around 270 skills. Install selectively: skills are chosen per task, but a catalog of hundreds makes that choice noisier and gives you more to review. Start with the handful matching work you actually do.

Set GITHUB_TOKEN if you install several collections in one sitting — unauthenticated GitHub allows 60 requests an hour.

How they fit

A folder containing SKILL.md is one skill; the files beside it are resources it references, not separate entries. Skills in that format declare only name and description, so keywords are derived from those — without that they would sit below the selection floor and never attach to anything.

Installed skills land in your custom catalog, so they merge and layer like anything else you write.

Conversation threads

A long conversation about one subject costs its full length on every subsequent turn. Switch topic and you keep paying for context nobody is using.

What this server cannot do: clear your context. No MCP server can — none of them has access to your conversation window. Only you can run /clear.

What it does instead is make clearing safe, by remembering the subject for you:

User has been working on a booking site, then switches subject.

brief → NEW TOPIC — this does not look like a continuation of
        "Dental clinic booking site" (similarity 0).
        To save tokens: summarise what was covered and call `save_thread`,
        then tell the user they can run /clear.

... much later, the subject comes back ...

brief → RESUMES thread #1 "Dental clinic booking site" (score 1) —
        you discussed this before. Context recovered:
          Building a booking site for a dental clinic. Next.js + Postgres,
          Google Calendar sync for slots.
          Decided:
            - Next.js + Postgres
            - Google Calendar for availability
          Still open:
            - Which payment provider?

The decisions are the part that matters. A cleared conversation loses the reasoning, and re-deriving "why Postgres" costs far more than storing the sentence.

brief reports one of three relations on every call: continues the current subject, new subject, or resumes an older one. Topic matching uses the same keyword-and-semantic machinery as knowledge retrieval, so "the clinic appointment app" finds a thread titled "Dental clinic booking site".

Tools: save_thread, recall_thread, resume_thread, forget_thread.

The thresholds lean toward staying put. Wrongly declaring a new topic suggests clearing context that was still useful; wrongly missing one just means the conversation runs a bit long. The first mistake is much more expensive, so FUSHIGURO_SAME_TOPIC defaults low (0.25).

Summaries are written by the host, not this server — it cannot see your conversation, so it cannot summarise it for you.

Retrieval: keyword and semantic

By default search_knowledge uses BM25 — keyword matching. That fails on a question phrased differently to the document that answers it:

Asked: "how long do I have to get my money back on the yearly plan" Document: "Annual: pro-rated refund within 30 days of the initial charge."

Not one meaningful word in common. Enabling embeddings turns retrieval hybrid: both retrievers run, and results are fused by rank.

Enabling it

npm install @huggingface/transformers    # local model, no key, no bill

That is the whole setup — the server detects it and starts embedding. Or use a hosted embedder instead, which needs no install:

export VOYAGE_API_KEY=...     # or OPENAI_API_KEY

FUSHIGURO_EMBEDDINGS takes auto (default — hosted key if set, else local if installed, else off), local, voyage, openai, or off.

The model runtime is deliberately not a dependency. It is ~390MB, and a business that only needs keyword search should not pay for it. Without it, the package stays under 100KB and retrieval works exactly as it did before.

What it does and does not fix

Measured against the sample corpus with all-MiniLM-L6-v2:

Keyword only

Hybrid

"money back on the yearly plan"

ranks an unrelated doc first

refund policy first

ERR_4021, "Pro annual plan"

correct

still correct

Both halves matter. A small embedding model is noise on exact tokens — error codes and plan names score ~0.07 against everything — and it blurs discriminating detail, ranking the Starter passage above the Annual one for an annual-plan question. BM25 is precise about exactly those. Neither retriever is good enough alone, which is why this fuses rather than replaces.

Fusion is Reciprocal Rank Fusion on rank, not score. BM25 scores and cosine similarities are incomparable scales, and normalising between them means a fudge factor that needs retuning whenever the corpus changes.

Operationally

Embedding runs in the background. The first run downloads a model (~90MB, roughly 80 seconds), and during that time searches are keyword-only — a worse answer, never a hung tool call. status reports which mode is live, and every result says which retriever found it (keyword, semantic, or keyword+semantic).

Vectors are cached in the same SQLite file and reused across restarts. Changing model or corpus re-embeds rather than mixing incompatible vector spaces. Search is brute-force cosine over normalised vectors — 3ms on a small corpus, and fine into the low tens of thousands of chunks.

How routing works

Each agent is scored on: keyword matches weighted by how distinctive the keyword is across the catalog (IDF), hand-written regex patterns, similarity to its example triggers, whether a matched topic vouches for it, and how past outcomes for those terms have gone.

That last signal is what improves with use. After a task, call record_outcome:

record_outcome(task: "...", agent: "docs", outcome: "wrong_agent", correct_agent: "process-automation")

This reweights the term-to-agent affinities, so your business's own vocabulary — an internal system name, a product codename — starts routing correctly without anyone adding it as a keyword.

When the top two agents score within 85% of each other, the briefing says so instead of picking silently. When nothing scores above the floor, it says that too rather than forcing a match.

Tools

Tool

Purpose

brief

Triage a task, then return either "handle it yourself", one specialist's prompt, or a staged plan. The main entry point.

get_stage

The prompt for a later pipeline stage, briefed on the previous stage's output.

list_catalog

What this organisation has configured, by kind and layer.

get_entry

One entry in full — an agent's prompt, a runbook with its table of contents.

search_knowledge

Direct retrieval from your documentation, for a factual lookup.

remember / recall / forget

Manage learned preferences.

record_outcome

Report how a briefed task went, so routing improves.

save_thread

Store a summary of the current topic so context can be cleared safely.

recall_thread / resume_thread / forget_thread

Find, pick back up, or delete a past conversation.

status

What is loaded, what is indexed, and which runbooks are still templates.

Also exposes the delegate prompt and a fushiguro://catalog resource.

Command line

fushiguro-mcp              Start the MCP server on stdio (what a host runs)
fushiguro-mcp init [dir]   Scaffold a business catalog, safe to re-run
fushiguro-mcp skills       List curated skill collections
fushiguro-mcp skills show <source>
fushiguro-mcp skills add <source> [skill...] [--force]
fushiguro-mcp --help

Configuration

Variable

Default

Purpose

FUSHIGURO_CATALOG

<project>/.fushiguro/catalog

Your business's catalog — the custom layer.

FUSHIGURO_BASE_CATALOG

<package>/catalog

The packaged catalog. Rarely changed.

FUSHIGURO_DB

~/.fushiguro/memory.db

Memory and knowledge index.

FUSHIGURO_PROJECT_ROOT

cwd

Keys project-scoped memories.

FUSHIGURO_MIN_SCORE

0.12

Below this, no confident match.

FUSHIGURO_AMBIGUITY_RATIO

0.85

Top two within this ratio are reported ambiguous.

FUSHIGURO_EMBEDDINGS

auto

auto, local, voyage, openai, or off.

FUSHIGURO_EMBEDDING_MODEL

per provider

Override the model.

FUSHIGURO_EMBEDDING_BATCH

32

Texts per embedding call.

FUSHIGURO_SAME_TOPIC

0.25

Above this similarity, a task continues the active thread.

FUSHIGURO_RESUME_TOPIC

0.45

Above this, an older thread is offered as a resumption.

Catalog files are re-read when they change on disk, and the knowledge index rebuilds when the corpus hash changes — edit an agent or a policy document and the next brief picks it up without a restart.

Limitations, stated plainly

  • Retrieval is keyword-only until you enable embeddings, and a keyword search misses passages phrased differently to the question. With them enabled it is hybrid, but a small local model still blurs the details that distinguish two similar passages — see the table above. A hosted embedder is meaningfully better on domain jargon.

  • Topic detection is a similarity score, not comprehension. A task that changes subject while reusing the old vocabulary reads as a continuation; a genuine continuation phrased in fresh words can read as new. Both thresholds are tunable, and the similarity is always reported so the call can be second-guessed.

  • Vector search is brute force. Every query scores every chunk. That is milliseconds up to the low tens of thousands of chunks and will not scale past that without a real vector index.

  • Complexity assessment is lexical. It reads the shape of the request, not its meaning. An innocuous-sounding sentence hiding a quarter of work will be under-scored, and a verbose request for something small will be over-scored. The signals are always shown and mode always overrides.

  • Routing is lexical too, plus learned outcome weights. It has no understanding of the task; it matches configured signal. A catalog with thin keywords routes badly, and the fix is better keywords and more record_outcome calls.

  • Deduplication of memories is lexical. Two preferences that overlap heavily in wording but differ in object may merge. Requiring three shared distinct tokens keeps this rare, not impossible.

  • The host executes everything. Fushiguro assembles and returns prompts; it never calls a model, never spawns a process, and never reaches a connector itself.

Layout

src/
  index.ts       launcher and CLI (server | init | --help)
  init.ts        scaffolds a business catalog
  complexity.ts  triage: how much delegation a task deserves
  main.ts        stdio transport and lifecycle
  server.ts      MCP tool, prompt, and resource surface
  catalog.ts     loads and layers the seven entity kinds
  router.ts      scoring, selection, and prompt composition
  memory.ts      preferences, reinforcement, outcome learning
  knowledge.ts   chunk index, hybrid retrieval, rank fusion
  embeddings.ts  pluggable embedding providers (local, voyage, openai)
  threads.ts     conversation topics, continuity detection, resumption
  skill-sources.ts / skill-install.ts / skills-cli.ts
                 curated ecosystem skill collections and their installer
  text.ts        tokenising and similarity helpers
catalog/         the packaged base catalog
examples/        a worked custom catalog, and an .mcp.json template
test/smoke.mjs   end-to-end checks over the real catalog

Available Tools

10 tools
briefDecide how to handle a task, and brief whoever handles itA

Assess how much machinery a task deserves, then return either 'handle it yourself', one specialist's system prompt, or a multi-stage plan (planner → executor → tester → reviewer) with intake questions to ask first. Call this before starting any non-trivial task. Respect a 'handle_directly' verdict — spawning a subagent for small work wastes tokens and time.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoForce a delegation shape, bypassing the complexity assessment.
taskYesThe user's request, in their own words.
agentNoForce a specific agent, bypassing the router.
scopeNoboth
contextNoExtra signal: file paths, stack, system names, error text, answers to earlier intake questions.
memory_limitNo
knowledge_limitNo

TDQS

A4/5.0
Behavior4/5

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

The description reveals meaningful behavioral traits beyond the annotations: it performs a complexity assessment, returns one of three artifact types, and may include intake questions to ask first. It also warns about cost of unnecessary delegation. It does not disclose whether the tool has side effects or executes the plan itself, but the annotations offer no contradiction.

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?

Three dense sentences deliver the core workflow, when to invoke, and a cost-awareness guardrail. Every sentence earns its place, and the most important behavioral signal (what the tool returns) is front-loaded.

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?

Given the lack of an output schema and sparse annotations, the description does a good job explaining the three possible return shapes and the 'ask intake questions first' behavior. It is less complete on how to interpret or execute the returned plan, and it leaves the numeric limit parameters unexplained, but the core calling workflow is clear.

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

Parameters2/5

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

The description adds no parameter-specific meaning; all parameter semantics must come from the schema, which covers only 57% of parameters. Notably, memory_limit, knowledge_limit, and scope have little or no explanation in the schema, and the description does not compensate by explaining how limits or scope affect the delegation assessment.

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

Purpose4/5

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

The description clearly identifies the tool's purpose with specific verbs: assess a task's complexity, then return a delegation shape (handle directly, single specialist, or multi-stage pipeline). It clearly distinguishes this from the sibling tools by framing it as the pre-task router/briefer, though it never names a sibling explicitly.

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?

The description explicitly says when to call the tool ('before starting any non-trivial task') and when not to delegate ('Respect a handle_directly verdict — spawning a subagent for small work wastes tokens and time'). This gives the agent both an inclusion and an exclusion criterion in one short passage.

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

forgetDelete a stored preferenceA
DestructiveIdempotent

Permanently delete one memory by id. Use when the user says a preference is wrong or obsolete.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory id, as shown by recall.

TDQS

A4.3/5.0
Behavior4/5

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

The description adds 'permanently' to the delete operation, conveying irreversibility beyond the destructiveHint annotation. It also clarifies the scope ('one memory by id') and that the deletion targets a single stored preference. No contradictions with the annotations were found.

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?

Two short sentences, each earning its place: one states the action and target, the other states when to invoke the tool. No filler or redundant information is present, and the content is front-loaded with the core operation.

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 single-parameter destructive tool with full schema coverage and relevant annotations, the description is complete. It covers what the tool does, when to use it, and the permanence of the action. No output schema exists, and none is needed for such a simple operation.

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%, and the schema already explains that id is the 'Memory id, as shown by recall.' The description only says 'by id,' adding no new meaning beyond the structured schema. Baseline 3 is appropriate because the schema fully documents the parameter.

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 uses a specific verb and resource: 'Permanently delete one memory by id.' It clearly distinguishes the tool from siblings like remember, recall, and search_knowledge by defining its exact operation. The title and description are largely consistent, with 'preference' as the stored memory item.

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?

The description provides an explicit trigger: 'Use when the user says a preference is wrong or obsolete.' It does not explicitly name alternative tools or state when not to use this tool, but the given condition is specific and actionable. The context signals and sibling list allow an agent to infer that remember or recall are the alternatives, but they are not named.

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

get_entryRead one catalog entry in fullA
Read-only

Fetch the full content of one catalog entry — an agent's prompt, a skill, a runbook with its table of contents, a connector's guardrails.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
nameYesThe entry's slug.

TDQS

A4.2/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, which covers the safety profile. The description adds some useful context about what 'full content' includes for different kinds, but it does not mention error behavior, missing slugs, or return format. This is acceptable given the annotation coverage but not especially rich.

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?

A single, front-loaded sentence states the action and scope, with an em-dash list of examples. There is no wasted wording, and the most important information appears first.

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 a simple two-parameter tool with readOnly annotations, the description provides enough to call it correctly. The absence of an output schema is partially mitigated by the description's examples of what 'full content' means, though a note about nonexistent entries or return format would make it fully complete.

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?

The schema documents both parameters and the enum, but only 'name' has a description. The description compensates for the low schema description coverage by mapping kind values to concrete content examples (agent prompt, runbook TOC, connector guardrails), adding semantic depth beyond the bare enum names.

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 clearly states a specific verb and resource: 'Fetch the full content of one catalog entry.' It also enumerates example content types (prompt, skill, runbook with TOC, connector guardrails), which disambiguishes it from siblings like brief, list_catalog, and search_knowledge.

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?

The description implies when to use this tool: whenever the full content of a specific catalog entry is needed. It does not explicitly name alternatives or exclusions, but the 'full content' contrast with sibling tools like 'brief' and 'list_catalog' gives clear contextual guidance.

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

get_stageGet the prompt for a later pipeline stageB

Fetch the system prompt for one stage of a plan returned by brief. Call it when the previous stage is finished, passing that stage's output as context so this one is briefed on what it is receiving.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesWhich stage to brief.
taskYesThe original task, unchanged.
scopeNoboth
contextNoOutput of the previous stage, plus the user's intake answers.
memory_limitNo
knowledge_limitNo

TDQS

B3.4/5.0
Behavior1/5

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

Annotations mark readOnlyHint false, meaning the tool should not be treated as side-effect-free, but the description presents it purely as a fetch and never mentions any state changes, counters, or pipeline advancement. This contradicts the annotation, so the score is 1 per rubric.

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?

Two sentences, front-loaded with the core purpose and then the call pattern. No filler or repetition of schema fields.

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

Completeness2/5

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

For a 6-parameter tool with no output schema and a false read-only hint, the description omits return-value details, ordering constraints beyond 'previous finished', and any warning about side effects or limits. It's enough for a happy-path call but incomplete for safe and correct use.

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 covers only 3 of 6 properties, so the description must compensate. It adds meaningful semantics for `context` (the previous stage's output) and implies `role` selects the stage, but it leaves `scope`, `memory_limit`, and `knowledge_limit` unexplained. Net moderate 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 names a specific verb ('Fetch'), a specific resource ('system prompt for one stage of a plan returned by brief'), and ties it to the sibling 'brief' by referencing the plan it operates on. This clearly distinguishes it from list/get_entry/search 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?

The description gives concrete call timing: call when the previous stage is finished, and instructs to pass that stage's output as context. It doesn't enumerate alternatives or exclusions, so it stops short of a 5.

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

list_catalogList what this organisation has configuredA
Read-only

Show catalog entries — agents, skills, knowledge, runbooks, topics, tools, connectors — each tagged base, custom, or base+custom.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoLimit to one kind. Omit for a summary of everything.
topicNoLimit to entries in one topic.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context by specifying that results are tagged base/custom/base+custom. No contradiction with annotations.

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?

A single concise sentence that front-loads the verb and resource, then enumerates scope and tagging. Every phrase adds information; there is no 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?

For a read-only list tool with two optional parameters and no output schema, the description plus schema is complete: it states what is returned (catalog entries with tags), what filters exist (kind, topic), and the summary behavior when kind is omitted. Safety is covered by annotations.

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% ('Limit to one kind. Omit for a summary of everything.', 'Limit to entries in one topic.'), so the schema carries the parameter semantics. The description's enumeration of kinds overlaps with the schema enum but adds no new meaning beyond it.

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 uses a specific verb ('Show') and a specific resource ('catalog entries'), then enumerates the seven kinds ('agents, skills, knowledge, runbooks, topics, tools, connectors') and the tagging dimension ('base, custom, or base+custom'). This clearly distinguishes list_catalog from siblings like get_entry or search_knowledge.

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?

The description and title provide clear context: use this to list what the organisation has configured. The schema adds parameter-level guidance ('Limit to one kind. Omit for a summary of everything.'). It does not explicitly name alternatives or when-not-to-use conditions, so it misses the top bar.

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

recallSearch stored preferencesB
Read-only

Search remembered preferences, ranked by relevance and how binding they are.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNo
limitNo
queryNoOmit to list the most recent memories.
scopeNoboth

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so no credit is needed for read-only safety. The description adds useful behavioral detail that results are 'ranked by relevance and how binding they are', going beyond the schema. However, the concept of 'binding' is vague and not elaborated, and behavior like pagination or default limits is not disclosed.

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 a single concise sentence with no filler. It front-loads the key action and resource, then adds a distinguishing detail on ranking. Every word earns its place; no redundant or vague phrasing beyond the inherent 'binding' term.

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

Completeness2/5

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

With four parameters and no output schema, the description needs to explain what results look like, what 'scope' and 'agent' mean, and how 'binding' affects ranking. None of that is present. The tool has no output schema, so return-value details are absent from both description and structured data, leaving an agent under-informed for invocation.

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

Parameters2/5

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

Schema description coverage is only 25% (only 'query' is described). The tool description adds no parameter insight: it does not explain 'scope', 'limit', or 'agent'. Since coverage is low, the description should compensate but fails to clarify parameter meaning beyond what the schema already provides.

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

Purpose4/5

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

The description states a specific verb ('Search') and a clear resource ('remembered preferences'), which distinguishes it from siblings like search_knowledge (knowledge) and list_catalog (catalog listing). However, it does not explicitly name the sibling for contrast, so differentiation is implicit rather than explicit.

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

Usage Guidelines3/5

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

The description clearly implies this tool is for searching preferences, and the phrase 'remembered preferences' gives context for when to use it. But there is no explicit guidance on when to choose recall over search_knowledge or list_catalog, and no exclusions or alternatives are mentioned.

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

record_outcomeReport how a briefed task wentA

Tell the router whether the agent it chose was right. This adjusts the term-to-agent weights it consults, so routing improves with use. Call after the user reacts to a subagent's work.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesThe original task text, so the same terms get reweighted.
agentYesThe agent that was used.
notesNo
outcomeYesaccepted = good; revised = needed edits; rejected = unusable; wrong_agent = wrong specialist.
correct_agentNoFor 'wrong_agent': the agent that should have handled it.

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses the key side effect: it 'adjusts the term-to-agent weights it consults, so routing improves with use.' This goes beyond the annotations, which only mark the tool as not read-only. It tells the agent that calling this mutates internal routing state, which is valuable behavioral context.

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 three short sentences, each earning its place: what the tool does, what effect it has, and when to call it. It is front-loaded with the primary action and has zero filler.

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 a simple feedback tool with no output schema, the description covers the core purpose, the consequential side effect, and the triggering condition. All parameters are already described in the schema, and the annotations cover the safety profile. The only minor gap is that it does not describe what response or acknowledgment the agent can expect after calling.

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 80%, so the schema already documents most parameters (task, agent, outcome, correct_agent). The description adds high-level context about reweighting terms but does not elaborate on individual parameters or their expected values. With coverage that high, a baseline of 3 is appropriate.

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: 'Tell the router whether the agent it chose was right.' This clearly identifies the tool's function and distinguishes it from siblings like remember, forget, and status, which handle knowledge storage or state queries. The purpose is immediately obvious and not a tautology.

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?

The description states when to call: 'Call after the user reacts to a subagent's work.' This gives a clear timing cue relative to user activity. It does not spell out when not to call or name alternatives, but the timing and purpose make the intended context unambiguous.

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

rememberStore a durable preferenceA

Record a preference, rule, or correction so future briefings honour it. Restating an existing preference reinforces it rather than duplicating; a constraint or correction that contradicts a softer memory retires the old one. Use for standing rules, never for one-off task instructions.

ParametersJSON Schema
NameRequiredDescriptionDefault
whyNoThe reason behind it — carried into briefings.
kindNoconstraint = hard rule; correction = fixing a past mistake; preference/style = soft taste; fact = context about the user or business.preference
textYesThe preference, stated as a durable rule.
agentNoAgent slug this applies to. Omit for all agents.
scopeNo'project' keys the memory to this codebase or workspace only.global
confidenceNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate this is a write operation and not read-only. The description adds valuable behavioral context beyond annotations: restating reinforces rather than duplicating, and contradictory corrections/constraints retire softer memories. This discloses conflict-resolution behavior that the schema and annotations do not.

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?

Three sentences with no filler; each sentence earns its place: primary action/purpose, dedup/retirement behavior, and usage boundary. There is no redundant repetition of schema or annotation information.

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 a six-parameter write tool with no output schema, the description plus well-documented schema provides enough context to invoke correctly. It covers purpose, durability semantics, conflict handling, and when not to use it. A short example could push it to a 5, but nothing essential is missing.

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 high at 83%, so the baseline is 3. The description slightly reinforces parameter concepts ('preference', 'constraint', 'correction') but adds no new meaning beyond the schema's own parameter documentation.

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?

Description uses a specific verb ('Record') and names the resource ('a preference, rule, or correction') with an explicit purpose ('so future briefings honour it'). It clearly distinguishes the tool from sibling read/delete tools like recall and forget by emphasizing durable preference storage.

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?

The description explicitly states when to use it: 'Use for standing rules, never for one-off task instructions.' It provides a clear exclusion, though it does not explicitly name alternative tools for the excluded cases; the sibling set makes those alternatives inferable.

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

search_knowledgeSearch the organisation's knowledge baseA
Read-only

Retrieve passages from the organisation's own documentation. Use for a direct factual lookup. Cite the returned chunk id when you use a passage, and say so plainly when the answer is not in the corpus rather than filling the gap.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
collectionsNoLimit to these knowledge collections (the folder under knowledge/).

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint annotations, it discloses two key behavioral rules: cite the returned chunk id when using a passage, and state plainly when the answer is absent rather than filling the gap. These materially shape agent behavior.

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?

Three concise sentences with the core action front-loaded. Every sentence carries distinct operational value: purpose, usage context, and honesty/citation requirements.

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 a read-only search tool, it covers purpose, usage context, citation behavior, and missing-answer handling. It leaves some return-shape detail implied, but annotations and schema cover safety and parameter constraints.

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

Parameters2/5

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

Schema description coverage is only 33%, and the description adds no parameter-level detail for query or limit. It implies a direct query but does not compensate for the undocumented parameters.

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 action — retrieve passages — and a clear resource — the organisation's own documentation. Framing it as a direct factual lookup distinguishes it from memory-oriented 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?

Explicitly says 'Use for a direct factual lookup,' giving clear invocation context. It does not name alternatives or exclusions, so it falls just short of full when-not guidance.

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

statusCatalog and memory overviewA
Read-only

What is loaded: catalog counts by kind and layer, knowledge index size, stored preferences, and any files that failed to parse.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes that this is a safe read operation, and the description does not contradict it. The description adds useful transparency by stating exactly which state areas are covered: catalog counts by kind and layer, knowledge index size, stored preferences, and parse failures. This helps set expectations beyond the bare annotation.

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 a single, front-loaded sentence that lists exactly what will be reported. Every element earns its place and there is no filler, making it easy for an agent to parse quickly.

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?

Given that there is no output schema and no parameters, the description does the necessary work by enumerating the main categories of returned information. It is sufficiently complete for a read-only status/overview tool, though additional detail about the exact shape of counts or failure entries could make it even more precise.

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?

The tool takes zero parameters, so parameter semantics are not a burden for the description. The baseline of 4 applies because there is no parameter schema detail missing and no parameter-level explanation needed.

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

Purpose4/5

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

The description clearly conveys that this tool reports the current state of what is loaded, including catalog counts, knowledge index size, stored preferences, and parse failures. It is specific about the resource and content, and the title reinforces that it is an overview. It does not use an explicit verb like 'returns' or 'shows', but the intent is unmistakable and distinguishable from sibling list/search tools.

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

Usage Guidelines3/5

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

The description implies when to use the tool: whenever an agent needs a high-level summary of loaded catalog and memory state. However, it gives no explicit when-to-use or when-not-to-use guidance, nor does it contrast itself with siblings such as list_catalog or search_knowledge, so the agent must infer the best choice.

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. 10 tool updatesv0.2.0
    • First observedbrief
    • First observedforget
    • First observedget_entry
    • First observedget_stage
    • First observedlist_catalog
    • First observedrecall
    • First observedrecord_outcome
    • First observedremember
    • First observedsearch_knowledge
    • First observedstatus

TDQS

A3.9/5.0

Scored across 10 tools

Disambiguation4/5

Each tool targets a distinct phase or store: planning, stage prompts, catalog browsing, memory CRUD, knowledge search, router feedback, and status. The only mild ambiguity is between recall (personal preferences) and search_knowledge (organizational docs), but the descriptions clearly separate the two corpora.

Naming Consistency4/5

Tool names are all lowercase and mostly follow an imperative verb style, with clear verb_noun names like get_stage, list_catalog, and record_outcome. Minor deviations like bare 'brief' and the noun 'status' break the pattern slightly but remain readable and predictable.

Tool Count5/5

10 tools is a well-scoped size for an orchestration and memory server; each tool earns its place by covering a distinct concern without redundancy. The count feels intentional rather than bloated or thin.

Completeness4/5

The surface covers planning, staged execution, catalog lookup, preference memory, knowledge retrieval, and router feedback, so core workflows are supported. Minor gaps exist: catalog and knowledge are read-only, and there is no explicit way to list or cancel active plans.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers