Skip to main content
Glama

Mushi Mushi

Your AI wrote it. Mushi tells you why it broke.

Plain-English diagnosis + a paste-ready fix, right inside Cursor and Claude Code. No log-reading. No second LLM API key for MCP.

Fastest path — drop Mushi into your AI editor:

npx mushi-mushi setup --ide cursor   # or: --ide claude

Already shipping an app? One command installs the SDK + env vars + an optional test report:

npx mushi-mushi

Open source, self-hostable, MIT JS core — bring your own LLM key, no second key for MCP, no lock-in. Self-host in minutes · licensing.

What is Mushi, exactly? Read the one-page constitution: VISION.md — the single source of truth for positioning, the north-star sentence, and who this is for.

Add to Cursor Try the demo — no signup npm Server

Node ≥22 · CI · SDK MIT · enterprise · Smithery

Vision · Quick start · Connect your editor · Self-host · Why not just Sentry? · Packages · Docs · Live demo · Operators / platform · Roadmap

↑ the diagnosis: plain-English root cause + a paste-ready fix prompt · click to open the live demo


60-second proof

Using Cursor, Claude Code, or another AI editor? Paste this prompt and your agent does the whole setup — install, wiring, and a verified test report:

Install the Mushi skills from github.com/kensaurus/mushi-mushi (npx skills add kensaurus/mushi-mushi), then run the mushi-setup skill to wire the Mushi SDK and MCP server into this app and send a test report to verify the connection.

Or run the wizard yourself:

npx mushi-mushi

The wizard auto-detects your framework, installs the right SDK, writes framework-prefixed env vars (e.g. VITE_MUSHI_PROJECT_ID / VITE_MUSHI_API_KEY, or NEXT_PUBLIC_MUSHI_*) to .env.local, and prints the snippet to paste. Those two vars are all the SDK needs — no Supabase, no LLM key (see examples/sdk.env.example; the root .env.example is for self-hosting the backend only). Then, the moment something breaks:

  1. The bug lands in your queue — screenshot, the user's note, the route, the last console + network events, device context.

  2. Mushi produces the diagnosis: a plain-English root cause + a fix you can paste.

  3. You pull it into your editor over MCP:

npx mushi-mushi setup --ide cursor    # then ask Cursor: "what's broken in prod?"

No Sentry, no account, no monitoring stack required to see value. Self-host the whole thing in under five minutes, or use the free hosted tier (no card).


Related MCP server: Playwright MCP

What this is

For the solo AI-first builder (the vibe coder): you ship fast with Cursor, Claude Code, Lovable, or Bolt, then lose afternoons when something breaks in code you didn't fully write. Mushi is the comprehension layer — plain-English diagnosis in your editor over MCP, so a bug costs five minutes instead of your afternoon. (Small teams and agencies hit the same pain.)

These are the bugs your monitoring can't see, and the ones you didn't write:

  • A user added a coupon and the pay button slipped under their keyboard.

  • A new signup tapped Save twice because nothing visibly happened the first time.

  • A Pro customer's dashboard takes 12 seconds to load — and they've opened the competitor's tab.

  • A layout that looks fine on your laptop folds in half on the one Android model used by 18% of your traffic.

What it is not

Not another dashboard you have to go read, and not an enterprise monitoring stack — standalone first, no Sentry/Datadog/Firebase required. Full positioning: VISION.md.


The diagnosis loop

When a user shakes their phone (or clicks the reporter):

  1. Capture — screenshot, route, user note, recent console + network events, device context.

  2. Classify — two-stage LLM tags severity, category, and a plain-English root-cause hint. The screenshot goes through an air-gapped vision pass that can't see the text prompt. A nightly judge scores the classifier and feeds a prompt-A/B loop.

  3. Connect — the report embeds into a knowledge graph (Postgres + pgvector). The same broken button reported twenty times shows up as one row, not twenty.

  4. Fix (optional)Dispatch fix (or Slack / MCP / CI) runs an agent in a sandbox, runs your tests, and opens a draft PR. You review it like any other PR.

flowchart LR
    subgraph App["Your app"]
        SDK["mushi-mushi/{react, vue, svelte, angular, …}<br/>shadow-DOM widget · screenshot · console · network"]
    end
    subgraph Edge["Supabase Edge (Hono gateway + ~50 functions)"]
        API["api"]
        FF["fast-filter"]
        CR["classify-report<br/>+ vision + RAG"]
        ORCH["fix-worker"]
    end
    subgraph DB["Postgres + pgvector"]
        REP["reports"]
        KG["knowledge graph"]
        FIX["fix_attempts"]
    end
    subgraph Agents["mushi-mushi/agents"]
        SBX["sandbox: e2b / modal / cloudflare"]
        GH["GitHub PR"]
    end
    SDK -->|HTTPS| API
    API --> FF --> CR
    CR --> KG
    CR --> REP
    REP --> ORCH --> Agents
    Agents --> GH

The architecture, sequence diagram, and component-by-component spec live in apps/docs/content/concepts/architecture.mdx.


Self-host in under 5 minutes

A single Docker Compose file gets you a working stack against your own Supabase project:

cd deploy
cp .env.example .env   # ANTHROPIC_API_KEY, Supabase creds
docker compose up -d

SELF_HOSTED.md and the Self-host in minutes guide are the long-form walkthroughs. A Helm chart lives at deploy/helm/ — one helm install on any cluster.

Hosted: sign up at kensaur.us/mushi-mushi/, click Start free, no card, create a project, and copy your projectId + apiKey. The free tier covers 50 diagnoses a month (no card required).

One BYOK rule, both ways. Self-host and you bring your own Anthropic / OpenAI key — you pay the vendor at list rate, we never mark up a token. On hosted you bring no key at all: we meter by diagnosis (the plain-English root cause + fix), never by tokens, with a per-project spend cap and 50 / 80 / 100% alerts so the bill can't surprise you. Full numbers: pricing.

Internal edge functions (fast-filter, classify-report, fix-worker, judge-batch, intelligence-report, usage-aggregator, generate-synthetic) authenticate via requireServiceRoleAuth. Never expose them with --no-verify-jwt. Only the public api function should face the internet — see packages/server/README.md.


Why not just Sentry?

The question every team asks, answered once:

Sentry tells you what threw. Mushi ingests that — plus the bugs that never throw — explains each one in plain English, and closes the loop with a fix your agent can ship. One queue, one audit trail, with or without Sentry.

Mushi works standalone. If you already run Sentry, point a Sentry issue-alert webhook at /v1/webhooks/sentry?projectId=<your-project> and errors land in the same queue as user reports — deduped per Sentry issue, triaged in plain English, fix-dispatchable from the console, Slack, or your editor. The loop closes both ways: merging a Mushi fix resolves the linked Sentry issue, and resolving in Sentry resolves the linked report. A repeat alert on a fixed report reopens it as a regression instead of filing a duplicate.

Beyond Sentry, inbound adapters translate Datadog, Bugsnag, Rollbar, Crashlytics, New Relic, Honeycomb, Grafana Loki, CloudWatch, Opsgenie, and Firebase alerts into the same queue; outbound plugins keep Linear, Jira, GitHub Issues, Slack, Discord, Teams, and PagerDuty in sync. Nothing gets ripped out — Mushi is the mediator between what you already run. Operator-depth (SSO, retention, region routing): docs/operators/.

Mushi

Sentry

Langfuse

Catches

Thrown errors and silent UX bugs (dead clicks, slow screens, layout breaks)

Thrown errors, performance traces

LLM call traces, prompt evals

Output

Plain-English root cause + paste-ready fix, in your editor

Stack trace + breadcrumbs, in a dashboard

Trace tree + scores, in a dashboard

Auto-fix

Optional: sandbox agent opens a draft PR

Seer add-on (paid)

Not in scope

Second LLM key for MCP

No — reuses your app's key

N/A

N/A

Setup

One command, no account required to try

SDK + DSN + dashboard

SDK + project + dashboard

Different jobs: Sentry watches what your code throws, Langfuse watches what your LLM calls do, Mushi watches what your user experiences — including the bugs that never throw.


Framework coverage

Most developers install one SDK — npx mushi-mushi picks it for you. React/Next.js quick start:

npm install @mushi-mushi/react      # also covers Next.js
import { MushiProvider } from '@mushi-mushi/react';

function App() {
  return (
    <MushiProvider config={{ projectId: 'proj_xxx', apiKey: 'mushi_xxx' }}>
      <YourApp />
    </MushiProvider>
  );
}
// Vue 3 / Nuxt
import { MushiPlugin } from '@mushi-mushi/vue';
app.use(MushiPlugin, { projectId: 'proj_xxx', apiKey: 'mushi_xxx' });

// Svelte / SvelteKit
import { initMushi } from '@mushi-mushi/svelte';
initMushi({ projectId: 'proj_xxx', apiKey: 'mushi_xxx' });

// Angular 17+
import { provideMushi } from '@mushi-mushi/angular';
bootstrapApplication(AppComponent, { providers: [provideMushi({ projectId: 'proj_xxx', apiKey: 'mushi_xxx' })] });

// React Native / Expo
import { MushiProvider } from '@mushi-mushi/react-native';

// Vanilla JS / any framework
import { Mushi } from '@mushi-mushi/web';
Mushi.init({ projectId: 'proj_xxx', apiKey: 'mushi_xxx' });

iOS (Swift PM, v0.4.0): .package(url: "https://github.com/kensaurus/mushi-mushi.git", from: "0.4.0") · Android (Gradle): dev.mushimushi:mushi-android:0.4.0 · Flutter: pub add mushi_mushi.

Want a runnable example? examples/react-demo is a minimal Vite + React app with test buttons for dead clicks, thrown errors, failed API calls, and console errors.

Full package list and maturity table: SDK reference.


Where it stops

Mushi is honest about what's still partial. Skim before you commit:

Area

Working

Still partial

Classification

Haiku fast-filter, Sonnet deep + vision air-gap closed, structured outputs, prompt-cached prompts, pg_cron self-healing, Stage 2 streaming via streamObject with progressive reports.stage2_partial UI updates and OpenAI fallback

Judge / self-improve

Sonnet judge with OpenAI fallback, prompt A/B auto-promotion via judge → avg_judge_score → promoteCandidate, OpenAI fine-tune adapter end-to-end (submit JSONL → poll → predict against fine_tuned_model_id, BYOK OPENAI_API_KEY), Bedrock fine-tune adapter (SigV4-signed CreateModelCustomizationJob, requires MUSHI_BEDROCK_FINETUNE_ENABLED=1 + AWS BYOK keys)

Anthropic fine-tune API is not publicly self-service in 2026 — the adapter stub links to the access-request form.

Fix orchestrator

Single-repo validateResult gating, GitHub PR, MCP JSON-RPC 2.0 client, multi-repo coordinator, first-party ClaudeCodeAgent (spawns local claude CLI) and CodexAgent (OpenAI Responses API, BYOK) — both gated behind explicit env flags so shared deployments never invoke them unintentionally

Sandbox

Provider abstraction; local-noop (tests) + e2b / modal / cloudflare (prod). Production refuses local-noop unless MUSHI_ALLOW_LOCAL_SANDBOX=1.

Verify

Playwright screenshot diff + step interpreter (navigate / click / type / press / select / assertText / waitFor / observe)

Enterprise

Plugin marketplace + HMAC, audit ingest, region pinning, retention CRUD, Stripe metering, SAML SSO via Supabase Auth Admin API, OIDC SSO self-service — see the commercial boundary below for which of these are paid/Enterprise-tier

Graph backend

SQL adjacency over graph_nodes / graph_edges ships in every deployment

Apache AGE is a hosted-tier enhancement when the extension is installed. Managed Supabase stays on SQL adjacency.

Inventory v2 & QA-gates

Hand-written inventory.yaml, SDK-driven discovery, Claude proposer, ESLint gate rules, 5-gate composite GitHub check, synthetic monitor, expected_outcome contract end-to-end — see docs/operators/

Inventory is gated behind Advanced mode + the inventory_v2 plan flag.

Self-host (Helm)

Single-pod deploy on any Kubernetes; pre-install Job applies all SQL migrations from a bundled ConfigMap. Multi-region via global.region + global.peerRegions Helm values.

Full active/active write replication is not automated yet — write routing relies on client-side region stickiness.


Running this for a team?

The platform depth — inbound adapters, outbound plugins, A2A / AG-UI / MCP interop, the inventory.yaml QA-gate system, the synthetic monitor, SSO / audit / retention / region pinning, and open-standards plumbing — lives in docs/operators/ so the front door stays on the wedge. Start there if you're wiring Mushi into an existing stack or evaluating it as a platform.


Cursor & Claude Skills

Install Mushi skills in your Cursor or Claude Code project for one-command setup, usage, and debugging:

npx skills add kensaurus/mushi-mushi

Then: /mushi-setup (guided SDK install + MCP wiring), /mushi-debug (diagnose ingest / MCP / pipeline failures), /mushi-health (pass/fail check across CLI, API, edge functions, BYOK keys), /mushi-integration (two-way loop, fix dispatch, lessons). The admin Connect & Update page (/connect) mirrors the same flows with one-click Add to Cursor deeplinks.

Repo at a glance (run pnpm docs-stats): ~373K TS lines · 1,772 source files · 44 workspace / 36 npm packages · 55 edge functions · 337 SQL migrations · 19 pipeline agents. Full tour: docs/SCREENSHOTS.md.


Contributing

Issues and PRs welcome:

git clone https://github.com/kensaurus/mushi-mushi.git
cd mushi-mushi
pnpm install
pnpm dev

Requires Node.js ≥ 22 and pnpm ≥ 10. See individual package READMEs, docs/stats.md for canonical counts, and CONTRIBUTING.md.

License & branding

This repository is open-core — the Supabase / Grafana model. The SDK packages are MIT — use them in any product, open or closed. The server (the part you self-host or we run for you) is AGPLv3 — true OSI open source: self-host it, fork it, modify it for your own org. If you offer a modified server as a hosted service to third parties, publish your changes or see COMMERCIAL-LICENSE.md. A small Enterprise Edition boundary (packages/server/ee/) is source-available but commercial for production use — that's operator/enterprise plumbing only, never the wedge.

Surface

License

Permitted

Notes

SDK packages — core, web, react, vue, svelte, angular, react-native, capacitor, flutter, ios, android, node, cli, mcp, mcp-ci, plugin-* (13 plugins), adapters (11 sources), inventory-schema, inventory-auth-runner, eslint-plugin-mushi-mushi, brand, marketing-ui

MIT

Use, fork, sell, embed in proprietary products.

Trademarks separate — see below.

Server packages — @mushi-mushi/server, @mushi-mushi/agents, @mushi-mushi/verify

AGPLv3

Use, modify, self-host, fork for your own org. SaaS modifiers publish changes or commercial license.

OSI-approved copyleft. The cloud runs this exact core.

Enterprise features — SSO/SCIM, audit-log ingest, retention policy CRUD, region pinning, SOC2 evidence

Commercial / paid tier

Available on the Enterprise plan (hosted) or with a commercial license (self-host).

The code may be source-visible, but production use of these specific features is a paid boundary — see docs/operators/.

Trademarks — "Mushi Mushi", "Mushi", 虫, the bug logo

Trademark policy

Refer to the project, build add-ons, link to the repo.

Forks must rename. Hosting a service under the Mushi name requires written permission.

Third-party attributions

NOTICE

Upstream projects we depend on and their licenses.

Security researchers: see SECURITY.md for the threat model, PII commitments, and safe-harbor terms.


Also by @kensaurus

Other free apps and tools from the same Tokyo studio:

App

What it does

Links

glot.it — Learn Thai Free

161 lessons, pitch-contour tone mirror, AI roleplay chat, offline-first.

App Store · Google Play

yen-yen — Expense Tracker

Kakeibo-style household ledger. No bank password, no ads, no auto-writes.

App Store · Google Play

The Wanting Mind — Free Book

147,000-word interactive book — 3D knowledge graph, 12 narrators, 22 simulations.

App Store · Google Play

cursor-kenji

58 Cursor AI agent skills for React / Next.js / Supabase development.

npx skills add kensaurus/cursor-kenji


Available Tools

40 tools
activation_statusActivation cockpit statusA
Read-onlyIdempotent
Inspect

Return the unified activation posture — SDK heartbeat, ingested reports, GitHub, MCP readiness, QA stories, and the next best action. Read this before guessing which onboarding step is blocking the user. Also available as the mushi://activation resource for resource-reader clients. Returns { sdkActive, reportsIngested, githubConnected, mcpConnected, qaStoriesCreated, nextBestAction }.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject UUID (defaults to the configured project).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description does not need to repeat safety. It adds value by stating the return fields and alternative resource access, providing useful behavioral context beyond 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?

The description is two sentences plus a return shape, with no redundant information. It is front-loaded with the core purpose and efficiently adds guidance, alternative access, and return structure.

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 the tool's simplicity, one optional parameter, no output schema, and rich annotations, the description fully covers purpose, usage, and return format. It also mentions an alternative access method, making it complete.

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?

With 100% schema coverage, the schema already documents the single optional parameter 'project_id' with its default behavior. The description does not add additional parameter details, so it meets the baseline without exceeding 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 clearly states the tool returns the 'unified activation posture' with specific fields, and distinguishes it as the first step before guessing onboarding blockers. The verb 'Return' and resource are specific, and it differentiates from siblings by providing usage context.

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 says 'Read this before guessing which onboarding step is blocking the user,' giving a clear when-to-use. It lacks explicit when-not-to-use or alternatives, but the guidance is straightforward and actionable.

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

add_byok_keyAdd an API keyAInspect

Add and immediately validate a BYOK API key for anthropic | openai | firecrawl | browserbase | cursor. The raw key is stored encrypted in Supabase Vault and never returned; failed probes remain quarantined. Optional baseUrl is accepted only for allow-listed OpenAI-compatible HTTPS providers. Write; NOT idempotent.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesThe API key value to add
labelNoHuman-readable label for this key
baseUrlNoAllow-listed OpenAI-compatible HTTPS base URL
priorityNoPriority for ordering (lower = higher priority)
providerYesProvider slug
projectIdYesProject id

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond annotations by disclosing that the raw key is encrypted in Supabase Vault, never returned, and that failed probes remain quarantined. These are non-obvious behavioral traits not present in annotations. The description's 'Write; NOT idempotent' aligns perfectly with idempotentHint=false and readOnlyHint=false, with no contradictions.

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 efficiently convey purpose, security, validation, and constraints. Every sentence earns its place, with the primary action front-loaded and no redundant details.

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 mutation tool with 6 parameters and no output schema, the description covers the action, validation, storage, security, and side effects. The main gap is the return value (e.g., whether an ID is returned), but the description gives enough behavioral context to be useful.

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 100% of parameters with descriptions. The description adds modest value by reiterating provider options and the baseUrl allow-list restriction, but doesn't meaningfully elaborate on individual parameter semantics beyond what the schema already provides.

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 the tool's function: 'Add and immediately validate a BYOK API key' for specific providers. This distinguishes it from siblings like remove_byok_key, list_byok_keys, and test_byok_key by emphasizing the add-and-validate action.

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?

Provides clear context: it's for adding new keys, not for testing existing ones. The constraint on baseUrl (only allow-listed OpenAI-compatible HTTPS providers) and the explicit 'Write; NOT idempotent' warning give useful usage guidance, though it doesn't explicitly mention alternative tools.

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

diagnose_setupUnified setup diagnoseA
Read-onlyIdempotent
Inspect

Diagnose Mushi setup health and return the single best next action. mode=full (default) runs both SDK-ingest and fix-dispatch preflight checks; mode=ingest runs ingest checks only (project exists, active API key, SDK heartbeat, at least one report); mode=dispatch runs dispatch readiness only (GitHub connected, codebase indexed, LLM key present, autofix enabled). Returns { ready, steps: [{ label, complete, required, hint }], nextAction }. Read-only. The one setup-diagnosis entry point — use this instead of separate connection/ingest checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNofull (default) = ingest + dispatch; ingest = SDK pipeline only; dispatch = fix preflight only.
projectIdNoAlias for project_id.
project_idNoProject UUID for dispatch checks (defaults to configured project).

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
readyYes
ingestNo
summaryYes
dispatchNo
connectionNo
nextActionNo

TDQS

A5/5.0
Behavior5/5

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

States 'Read-only', matching annotations. Discloses that the tool runs checks but is non-destructive and idempotent. Details what each mode checks and the return format, giving full behavioral context beyond 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?

Three sentences, front-loaded with purpose and return. Every sentence adds essential information without redundancy. Highly efficient.

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 output schema exists, the description still covers all behavioral aspects: modes, checks included, return structure, and safe nature. No gaps for a read-only diagnosis tool.

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

Parameters5/5

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

With 100% schema coverage, the description adds significant value by explaining the mode enum values (full, ingest, dispatch) and their meanings, noting that mode defaults to full, and clarifying project_id usage for dispatch checks.

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 uses the verb 'diagnose' with 'Mushi setup health' and states the goal to return the single best next action. It distinguishes itself from siblings by claiming to be the unified entry point.

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 'the one setup-diagnosis entry point — use this instead of separate connection/ingest checks', providing clear guidance on when to use and when not to use alternatives. Also explains the three modes.

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

diff_inventoryInventory diffA
Read-onlyIdempotent
Inspect

Diff two ingested inventory commits (fromSha to toSha): added/removed nodes and edges. Returns { added, removed, changed }. Requires inventory_v2. Read-only. Use before merging a PR that touches inventory.yaml to see what changed; use get_inventory for the current snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
toShaYesNewer commit SHA (the candidate to diff to)
fromShaYesOlder commit SHA (the baseline to diff from)
projectIdNoProject UUID — defaults to configured project

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, but description adds prerequisite 'Requires inventory_v2' and return format, providing useful context beyond 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?

Two sentences, zero wasted words, front-loaded with action and output.

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?

Adequately covers purpose, usage, return structure, and prerequisite for a 3-param no-output-schema tool.

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 100%, description mentions fromSha and toSha in context but adds no meaning beyond schema for projectId.

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 the tool diffs two inventory commits and returns added/removed nodes and edges, distinguishing it from get_inventory.

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 to use before merging a PR touching inventory.yaml and contrasts with get_inventory for current snapshot.

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

dispatch_fixDispatch Mushi fix agentAInspect

Start a Mushi fix agent for a classified report; it writes a branch and opens a signed draft PR. Set agent="cursor_cloud" to dispatch a Cursor Cloud Agent (default uses the in-repo worker). Requires GitHub connected + an LLM key (run diagnose_setup mode=dispatch first). Returns { fixId, status } (fixId is the dispatch id; get_fix_timeline accepts it immediately); poll get_fix_timeline for progress and merge_fix when CI is green. Write; pass the same idempotencyKey to retry safely — without it each call starts a new attempt. Report must be classified — run triage_issue if not.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNoOverride the agent adapter
reportIdYesReport UUID to fix
idempotencyKeyNoOptional RFC 4122 UUID. Resend the same key to safely retry without dispatching a duplicate fix job (Idempotency-Key IETF draft).
inventoryActionNodeIdNoOptional inventory Action node UUID for spec-traceability (§2.10). When provided, the fix-worker embeds the expected_outcome contract in the LLM prompt and runs validateAgainstSpec before opening the PR.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fixIdYes
statusYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already show readOnlyHint=false and idempotentHint=false, and the description reinforces these by stating it writes a branch, opens a PR, and that each call without the idempotency key creates a new attempt. It adds dependencies (GitHub + LLM key), idempotency behavior, and operation semantics that are not available from annotations alone.

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: behavior first, then configuration, prerequisites, return value, polling guidance, idempotency, and a precondition. Every sentence carries workflow-relevant information and there is no redundant 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?

Given the four parameters and the tool's broader workflow, the description covers behavior, prerequisites, idempotency, returns, and follow-up actions. The remaining details like inventoryActionNodeId are already thoroughly documented in the input schema, so no critical decision context 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 coverage for parameter descriptions is 100%, so the baseline is 3. The description adds useful meaning about the agent selection and idempotency key usage, but it also instructs callers to set agent="cursor_cloud", which is not present in the schema enum (claude_code, codex, rest_worker, mcp). That mismatch could cause an agent to select an invalid value and sizes the otherwise strong guidance.

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-resource pair ('Start a Mushi fix agent'), targets a classified report, and states concrete effects: writes a branch and opens a signed draft PR. It clearly distinguishes this dispatch action from the many get_* and merge_fix sibling tools.

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

Usage Guidelines5/5

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

It explicitly says when the tool is appropriate (classified report), what prerequisites apply (GitHub connected + LLM key, run diagnose_setup first), and what to do before or instead (run triage_issue if report isn't classified). It also gives the follow-up workflow: poll get_fix_timeline and then merge_fix when CI is green.

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

get_blast_radiusBlast radiusA
Read-onlyIdempotent
Inspect

Return the other components/pages a bug group touches, via knowledge-graph traversal from the report node. Returns { nodes: [{ id, label, type }], edges }. Read-only. Use before dispatch_fix to scope a change safely; use get_knowledge_graph to traverse from an arbitrary seed, or analyze_codebase_impact for file-level import impact.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesGraph node UUID

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. Description adds 'Read-only' and specifies return shape '{ nodes: [{ id, label, type }], edges }', which adds context beyond annotations. No contradictions. Score 4 for meaningful addition.

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?

Description is two sentences: first defines purpose and return shape, second gives usage guidance. No filler, front-loaded with essential info. Perfectly concise.

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 single parameter, high schema coverage, and annotations describing safety/idempotency, the description adequately covers usage and return structure. Absence of output schema is mitigated by description of return format. Could detail node types but not required.

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% for the single parameter nodeId, which is described as 'Graph node UUID'. Description does not add further parameter details but mentions 'report node' context. Baseline 3 is appropriate as 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?

Description uses specific verb 'Return' and resource 'other components/pages a bug group touches' with method 'knowledge-graph traversal from the report node'. It clearly distinguishes from siblings like get_knowledge_graph and analyze_codebase_impact, earning a 5.

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 ('Use before dispatch_fix to scope a change safely') and when to use alternatives ('use get_knowledge_graph to traverse from an arbitrary seed, or analyze_codebase_impact for file-level import impact'). This provides clear guidance.

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

get_fix_contextFix context bundleA
Read-onlyIdempotent
Inspect

Bundle everything an agent needs to fix one bug in a single call: a paste-ready fixPrompt (plain-English diagnosis + reproduction + suggested fix + relevant code + blast radius), plus report detail, repro steps, component, root cause, and ontology tags. Returns { fixPrompt, report, reproduction, component, rootCause, tags }. Read-only; no second LLM key needed. Use before writing a fix; use triage_issue for a multi-report review packet, or suggest_fix for just the Stage-2 hint.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportIdYesThe report UUID to fix
project_idNoProject UUID — required for org-scoped keys with multiple projects.

Output Schema

ParametersJSON Schema
NameRequiredDescription
reportYes
componentYes
fixPromptYes
rootCauseYes
bugOntologyTagsYes
reproductionStepsYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint. Description adds valuable behavioral context: 'No second LLM key needed' and clarifies the output structure. 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.

Conciseness4/5

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

The description is front-loaded with the key purpose and is relatively concise. The first sentence is packed but clear. Could be slightly tighter, but overall well-structured.

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 the output schema exists and annotations are rich, the description fully covers the tool's behavior, return values, and usage context. It differentiates from multiple siblings and answers likely agent questions.

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% with clear descriptions for reportId and project_id. The description does not add parameter-specific meaning beyond what the schema provides, so baseline 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?

Description starts with a specific verb 'Bundle' and resource 'everything to fix one bug', and explicitly distinguishes from siblings like triage_issue and suggest_fix. It clearly states the tool's purpose and scope.

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 'Use before writing a fix' and provides alternatives: 'use triage_issue for a multi-report review packet, or suggest_fix for just the Stage-2 hint'. Also notes it's read-only.

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

get_fix_timelineFix timelineA
Read-onlyIdempotent
Inspect

Return the ordered lifecycle of one fix attempt: dispatched, started, branch, commit, PR opened, CI, completed/failed, with timestamps and the PR URL. Returns { events: [{ ts, stage, detail }] }. Read-only. Use to debug "why did this fix fail?" after dispatch_fix; use refresh_ci to re-poll GitHub CI, or get_report_timeline for the whole report thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixIdYesfix_attempt UUID
project_idNoProject UUID — required for org-scoped keys with multiple projects.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. The description adds that it is read-only and returns events with 'ts, stage, detail' shape. While not overly detailed (e.g., no error cases or rate limits), it is sufficient for a harmless read operation and adds context beyond annotations.

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

Conciseness4/5

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

The description is two sentences: first states purpose and output, second gives usage guidance and alternatives. It is concise and front-loaded with key info. Could be slightly more structured (e.g., using bullet points) but no waste.

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 the tool's simplicity (read-only, two parameters), the description fully covers the return shape and usage context. No output schema exists, but the description explains the return format. Annotations handle safety concerns, so completeness is high.

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%: both 'fixId' and 'project_id' have descriptions in the input schema. The description does not add new parameter-level semantics beyond what the schema provides. 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 clearly states it returns the ordered lifecycle of one fix attempt with specific stages (dispatched, started, branch, commit, PR opened, CI, completed/failed) and data fields (timestamps, PR URL). It distinguishes itself from sibling tools like refresh_ci and get_report_timeline by explicitly naming them as alternatives.

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 use: 'to debug "why did this fix fail?" after dispatch_fix'. It also provides alternatives: use refresh_ci to re-poll GitHub CI, or get_report_timeline for the whole report thread. This guides the agent on selecting the correct tool.

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

get_graph_neighborhoodGraph neighborhoodA
Read-onlyIdempotent
Inspect

Return the BFS neighborhood around one graph node by id or label: { nodes: [{ id, label, node_type }], edges: [{ source_node_id, target_node_id, edge_type }] } within a depth budget (default 2, max 4). Read-only. Tuned for "what touches this action?"; use get_knowledge_graph to traverse from a component seed, or get_graph_node for a single node's row.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedYesStarting graph node id or label to expand around (e.g. an inventory Action id or component name)
depthNoBFS hops to traverse outward. Default 2; clamped to a max of 4.

Output Schema

ParametersJSON Schema
NameRequiredDescription
edgesYesEdges connecting the returned nodes
nodesYesGraph nodes within the depth budget

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld. Description adds algorithmic detail (BFS, depth budget) and explicitly states 'Read-only'. No contradictions.

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 core information. Every sentence adds value: first covers functionality and output, second gives usage guidance and alternatives. No waste.

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 output schema exists, description fully covers purpose, parameters, and usage context. No gaps for a 2-param tool with strong annotations.

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%. Description adds context: seed can be 'id or label' with example, depth is 'BFS hops' with default and max, providing extra meaning beyond 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 clearly states it returns the BFS neighborhood around a graph node, specifies the output structure (nodes and edges with fields), and distinguishes from siblings (get_knowledge_graph, get_graph_node).

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 it is 'Tuned for what touches this action?' and provides clear alternatives: use get_knowledge_graph for component seed traversal, get_graph_node for a single node's row.

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

get_graph_nodeGraph node detailA
Read-onlyIdempotent
Inspect

Fetch one knowledge-graph node row by id. Returns { node: { id, node_type, label, metadata } } including the v2 derived status on Action nodes (ok | stale | broken). Read-only. Use to inspect a single node's status; use get_graph_neighborhood to see what connects to it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYesThe graph_nodes.id of the node to fetch (UUID).

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeYesSingle graph_nodes row including metadata (Action nodes carry v2 status)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. Description adds valuable behavioral detail about including 'v2 derived status on Action nodes', which is beyond what annotations provide. 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?

Two sentences, no fluff. Purpose is front-loaded. Every sentence provides distinct value.

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 simple single-fetch tool with strong annotations and an output schema (mentioned but not shown), the description is complete. It explains what it returns and how it differs from the neighborhood explorer.

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% with clear description for nodeId. The description doesn't add new meaning to the parameter beyond what the schema provides, so baseline 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 clearly states 'Fetch one knowledge-graph node row by id' with a specific verb (fetch) and resource (node). It distinguishes from the sibling tool get_graph_neighborhood.

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 'Use to inspect a single node's status; use get_graph_neighborhood to see what connects to it,' providing clear when-to-use and alternative guidance.

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

get_inventoryInventory snapshotA
Read-onlyIdempotent
Inspect

Return the current inventory.yaml snapshot for a project: latest ingest, validation errors, and a per-action status summary. Returns { snapshot, validationErrors, actions: [{ id, status }] }. Requires the inventory_v2 plan. Read-only. Use for the full current state; use diff_inventory to compare two commits, or list_gate_findings for the latest gate results.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoProject UUID — defaults to the server-configured project when omitted

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint. Description adds required plan and return structure, consistent with annotations. Does not contradict.

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 well-structured sentences with clear purpose, output format, and sibling guidance. No unnecessary words.

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 the tool's simplicity (one optional param, no output schema) and good annotations, the description fully covers the tool's behavior, prerequisites, and return format.

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 the single parameter with description and optionality. Description does not add further parameter details beyond mentioning 'for a project', so no significant enhancement over 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 clearly states the tool returns the current inventory.yaml snapshot with specific fields (latest ingest, validation errors, per-action status). It also distinguishes from siblings diff_inventory and list_gate_findings.

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

Usage Guidelines5/5

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

Explicitly says when to use ('full current state') and provides alternatives for comparing commits or gate findings. Also notes prerequisite 'Requires the inventory_v2 plan'.

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

get_knowledge_graphKnowledge graph traversalA
Read-onlyIdempotent
Inspect

Traverse the knowledge graph from a seed component or page. Returns { nodes: [{ id, label, node_type }], edges: [{ source_node_id, target_node_id, edge_type }] } within a depth budget (default 2, max 4 hops). Read-only. Use to see how a component connects to the rest of the app; use get_blast_radius for a bug's impact area, or get_graph_neighborhood for a tighter BFS around one node.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedYesStarting graph node id or human-readable label to traverse from
depthNoBFS hops outward from seed — clamped to 4 in the handler (default 2)

Output Schema

ParametersJSON Schema
NameRequiredDescription
edgesYesEdges connecting the returned nodes
nodesYesGraph nodes within the depth budget

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds 'Read-only' and elaborates on traversal behavior (depth budget, clamping to 4 hops) and return structure, which provides valuable context beyond the 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?

The description is concise: 3 sentences, front-loaded with the main action, and no extraneous words. Every sentence adds value.

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 the presence of annotations, full schema coverage, and an output schema (implied by the description of return format), the description is complete. It covers purpose, usage, behavior, and parameter information adequately.

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% with clear parameter descriptions (seed, depth, default 2, max 4). The description does not add new information beyond what's in the schema, so it meets the baseline 3.

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 the tool's purpose: traversing the knowledge graph from a seed component or page. It specifies the return format (nodes and edges) and distinguishes from sibling tools by mentioning get_blast_radius and get_graph_neighborhood.

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 provides usage context: 'Use to see how a component connects to the rest of the app' and contrasts with alternatives: 'use get_blast_radius for a bug's impact area, or get_graph_neighborhood for a tighter BFS around one node.'

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

get_recent_reportsRecent bug reportsA
Read-onlyIdempotent
Inspect

List recent bug reports for a project, newest first. Returns { reports: [{ id, status, category, severity, summary, created_at }], total }. Optional filters: status (new|classified|grouped|fixing|fixed|verified|reopened|dismissed), category (bug|slow|visual|confusing|other), severity (critical|high|medium|low), limit (default 20, max 100). Use to survey open reports; for one report use get_report_detail, to find a bug by text use search_reports.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax reports to return (default 20, max 100)
statusNoFilter by status: new, classified, grouped, fixing, fixed, dismissed
categoryNoFilter by category: bug, slow, visual, confusing, other
severityNoFilter by severity: critical, high, medium, low
project_idNoProject UUID — defaults to the server-configured project. Useful when you have multiple projects and want to query a specific one by its ID. Get IDs by calling list_projects or get_account_overview first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
reportsYes

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. Description adds useful behavioral context: ordering (newest first), default limit and max, and that project_id defaults to server-configured project. No contradictions.

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 concise, front-loaded with the main action and return type, then details filters and usage guidance. Every sentence adds value without redundancy.

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

Completeness5/5

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

Given the output schema, full parameter coverage, and annotations, the description is complete. It covers purpose, usage, parameters, and sibling differentiation with no apparent gaps.

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% with individual parameter descriptions. The description adds context: lists filter values, defaults, constraints (limit max 100), and for project_id explains its purpose and how to obtain IDs via other tools. Adds significant value beyond 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 clearly states 'List recent bug reports for a project, newest first.' It specifies the return shape and explicitly differentiates from siblings: 'for one report use get_report_detail, to find a bug by text use search_reports.'

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?

Directly states when to use: 'Use to survey open reports' and provides explicit alternatives: 'for one report use get_report_detail, to find a bug by text use search_reports.' Also lists optional filters for narrow usage.

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

get_report_detailReport detailA
Read-onlyIdempotent
Inspect

Fetch the full record for one bug report by id: description, console logs, network requests, screenshot URL, classification (stage 1/2), and fix history. Returns { report }. Read-only. Use when you have a reportId and need everything about it; for evidence only use get_report_evidence, for the activity thread use get_report_timeline, for a one-call fix bundle use get_fix_context.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportIdYesThe report UUID
project_idNoProject UUID — required for org-scoped keys with multiple projects.

Output Schema

ParametersJSON Schema
NameRequiredDescription
reportYes

TDQS

A4.5/5.0
Behavior4/5

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

Description discloses read-only nature and details the return object structure. Annotations already declare readOnlyHint, so the description adds value by listing fields and format. No contradictions.

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 focused sentences: purpose and fields, read-only and format, usage guidance with alternatives. No redundant information.

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 the presence of an output schema and rich annotations, the description is complete. It covers purpose, fields, safety, and differentiation from similar tools without missing critical context.

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 has 100% coverage with clear descriptions for both parameters. Description does not add new parameter information beyond the schema, so 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 clearly states the verb 'Fetch' and the resource 'full record for one bug report by id', listing specific fields. It distinguishes from sibling tools like get_report_evidence and get_report_timeline.

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

Usage Guidelines5/5

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

Explicit when-to-use: 'Use when you have a reportId and need everything about it'. Provides three alternatives for specific use cases, making the decision clear.

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

get_report_evidenceBug report evidenceA
Read-onlyIdempotent
Inspect

Return the full evidence package for a single bug report covering all three observability pillars: (1) LOGS — console_logs (error/warn/info/debug entries with timestamps), breadcrumbs (SDK ring buffer: navigation, clicks, network, lifecycle events with category/level), repro_timeline (merged SDK event stream: route/click/request/log/screen), and the reporter's own comments thread; (2) TRACES — network_requests (SDK-captured fetch/XHR with method/status/duration/traceId), backend_spans (server-side spans joined by W3C trace_id: name/duration_ms/parentSpanId/status), and Sentry trace correlation IDs (sentry_trace_id, sentry_event_id) for deeplinks; (3) METRICS — performance_metrics (Web Vitals snapshot: LCP/CLS/INP/TTFB/FCP + INP attribution + page timing + connection info), anomalies (statistical provenance when auto-filed by CI metric regression: baseline_mean/std, score in σ, threshold); plus screenshot_url, browser environment (user agent, URL, viewport, SDK version), and tags. This is the same data an engineer would collect for a root-cause investigation. Faster than calling get_report_detail + report timeline separately.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport UUID.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true. The description adds value beyond these by detailing the exact components returned (logs, traces, metrics, screenshots, environment, tags) and noting it is equivalent to an engineer's manual investigation. The description does not contradict any annotation.

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

Conciseness4/5

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

The description is long but structured into clear sections (LOGS, TRACES, METRICS) with sub-bullets. It front-loads the core purpose and then elaborates. Every detail serves the agent's understanding of the returned data, though the length could be slightly trimmed without losing value.

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

Completeness5/5

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

There is no output schema, so the description must carry the burden of explaining the return format. It does so exhaustively, covering all three observability pillars with specific field names, plus additional attributes (screenshot_url, browser environment, tags). Given the tool's complexity, this description is complete and fit for an agent to understand what to expect.

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?

The input schema covers the single parameter 'report_id' with a description ('Report UUID.'), giving 100% schema coverage. The description does not add meaning beyond the schema, but it implicitly clarifies that this ID is used to fetch evidence for that specific report. Since schema coverage is 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 uses a specific verb ('Return') and clearly identifies the resource ('full evidence package for a single bug report'). It explicitly distinguishes itself from sibling tools by mentioning it is faster than calling get_report_detail + report timeline separately, and it enumerates the exact data categories (LOGS, TRACES, METRICS).

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 states when to use this tool: when you need the full evidence package for root-cause investigation. It explicitly mentions the alternative ('get_report_detail + report timeline separately') and highlights the benefit ('Faster'), guiding the agent to choose this tool over alternatives for comprehensive evidence retrieval.

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

get_report_timelineUnified report timelineA
Read-onlyIdempotent
Inspect

Return the ordered activity timeline for one report (oldest to newest), merging reporter comments, fix events, QA runs, skill-pipeline steps, and Ask Mushi turns into one lane. Returns { events: [{ ts, kind, actor, summary }] }. Read-only. Use to see what happened end-to-end on a report thread; use get_report_detail for the static record or get_fix_timeline to debug one fix attempt.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportIdYesThe report UUID

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld. Description adds merging behavior and return structure, providing useful context beyond 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?

Two sentences, no redundancy, core purpose first, usage guidance second. Highly efficient.

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?

Describes input, output format, and usage context. Handles complexity of merging multiple event types without output schema.

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 100% of parameters; description does not add further meaning for the single 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?

Description clearly states it returns ordered activity timeline for one report, merging multiple event types. It distinguishes from siblings like get_report_detail and get_fix_timeline.

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

Usage Guidelines5/5

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

Explicitly says when to use this tool ('see what happened end-to-end') and when to use alternatives ('for static record' or 'to debug fix attempt').

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

get_similar_bugsSimilar bugsA
Read-onlyIdempotent
Inspect

Find existing bugs similar to a component, page, or description via pgvector nearest-neighbour search (same backend as search_reports, tuned for "have we seen this before?"). Returns ranked { reports: [{ id, summary, similarity }] }. Read-only. Use to dedupe before filing or group regressions; use search_reports for general free-text search.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 5, max 20)
queryYesComponent name, page path, or bug description

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description does not need to restate safety. The description adds value by revealing the algorithm (pgvector nearest-neighbour search), the relationship to search_reports, and the exact return format (Ranked { reports: [{ id, summary, similarity }] }). This provides behavioral context beyond 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?

The description is two sentences with no wasted words. It front-loads the core purpose, then states the return format, then gives usage guidelines. Every sentence serves a distinct purpose.

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 the tool has only 2 parameters (1 required), has an output schema (implied), and annotations cover safety and idempotence, the description is fully complete. It explains the algorithm, return format, and usage scenario, leaving no gaps for an AI agent.

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% and the description does not add meaning beyond what the schema already provides for both parameters (query and limit). The schema descriptions are identical to what the description says. Therefore, the baseline score 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 clearly states the tool finds existing bugs similar to a component, page, or description using pgvector nearest-neighbour search, which is a specific verb+resource+method. It distinguishes itself from the sibling tool search_reports by noting it is tuned for 'have we seen this before?' rather than general free-text search.

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 provides explicit usage guidance: 'Use to dedupe before filing or group regressions; use search_reports for general free-text search.' This clearly states when to use this tool and when to use an alternative, leaving no ambiguity.

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

get_two_way_comms_healthTwo-way communication healthA
Read-onlyIdempotent
Inspect

Summarize SDK ↔ admin two-way reporter health for a host app: last SDK heartbeat, app version/platform last seen, unread reporter messages, recent reporter replies, and pending QA/TDD follow-ups. Use after wiring @mushi-mushi/web in a Vite/Capacitor app to confirm reports land in the console and admin/MCP replies reach the in-app widget.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate read-only, idempotent, and open-world. Description adds the specific metrics returned but doesn't disclose any additional behavioral traits like rate limits or data freshness.

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: first lists output fields, second gives usage context. Front-loaded, no redundancy, every part earns its place.

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 no output schema, description adequately explains return values and when to use. Could note data format or update frequency, but sufficient for a health check tool.

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?

No parameters exist, so schema coverage is 100%. Description adds value by detailing the return metrics, meeting the baseline expectation for zero-parameter tools.

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 clearly states it summarizes two-way communication health with specific metrics (SDK heartbeat, app version, unread messages, replies, follow-ups), distinguishing it from siblings like get_backend_health or get_recent_reports.

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 to use after wiring the SDK in a Vite/Capacitor app to confirm two-way communication works. Doesn't specify when not to use or list alternatives, but the context is clear enough.

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

list_byok_keysList your API key poolA
Read-onlyIdempotent
Inspect

List the project's BYOK API keys grouped by provider (anthropic | openai | firecrawl | browserbase | cursor). Returns pooled { keys: [{ id, provider_slug, label, priority, status, cooldown_until, test_status, key_hint, base_url, last_tested_at, last_used_at }] } plus read-only { legacyKeys } metadata for credentials saved before the pooled lifecycle — never the raw secret. Read-only. Use to see which keys are validated, active, pending, legacy, or rate-limited; use add_byok_key to add one.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject id

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses that it returns pooled keys plus read-only legacyKeys metadata and 'never the raw secret.' This adds meaningful behavioral context about data safety and return composition, exceeding what annotations alone communicate.

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

Conciseness4/5

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

The description is information-dense but not overly long. It front-loads the action, then details the return structure and gives usage guidance. The redundant 'Read-only.' sentence is minor but acceptable, leading to a slight deduction.

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

Completeness5/5

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

With no output schema, the description carries the burden of explaining return shape and semantics. It thoroughly covers pooled keys, legacyKeys, provider grouping, and key statuses, making it fully useful for an agent deciding to invoke this tool.

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% for the only parameter (projectId, described as 'Project id'). The description adds no additional parameter meaning, so the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the tool lists BYOK API keys grouped by provider, with a specific verb ('List') and resource ('project's BYOK API keys'). It distinguishes itself from sibling tools like add_byok_key and remove_byok_key by focusing on listing/inspection.

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 'Use to see which keys are validated, active, pending, legacy, or rate-limited' and provides an alternative: 'use add_byok_key to add one.' This gives clear when-to-use context and directs to a sibling tool for a different operation.

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

list_gate_findingsGate findingsA
Read-onlyIdempotent
Inspect

List recent inventory gate runs and their findings for a project, newest first. Returns { runs: [{ id, gate, status, findings_count, … }], findings: [{ severity, rule_id, message, file_path, node_id, … }] }. Filter by gate (dead-handler | mock-leak | crawl | status-claim) or minimum severity (low|medium|high|critical). Read-only. Use to see which CI gates failed on the last crawl; use diff_inventory to compare two commits, or get_inventory for the full snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
gateNoFilter to one gate id: dead-handler | mock-leak | crawl | status-claim
severityNoMinimum severity to include: low | medium | high | critical
projectIdNoProject UUID — defaults to configured project

Output Schema

ParametersJSON Schema
NameRequiredDescription
runsYesRecent gate_runs rows, newest first
findingsYesgate_findings rows for those runs

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. The description adds 'Read-only' and reveals return structure with fields. No contradictions; it provides useful behavioral insight beyond 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?

Three sentences: purpose+ordering, return shape, usage guidance+alternatives. No redundant words, every sentence earns its place.

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 3 parameters, 33 siblings, and an output schema, the description fully covers purpose, filtering, return format, and usage distinction. Output schema exists, so return details are sufficient.

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 description coverage is 100%, baseline is 3. The description summarizes the filter options with enumerated values (gate ids and severity levels), which adds clarity by grouping and providing quick reference, improving over schema alone.

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 'List recent inventory gate runs and their findings for a project, newest first,' specifying the verb 'list', the resource 'inventory gate runs and findings', and the ordering. It distinguishes from siblings like 'diff_inventory' and 'get_inventory' by mentioning alternatives.

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 'Use to see which CI gates failed on the last crawl; use diff_inventory to compare two commits, or get_inventory for the full snapshot,' providing clear context and named alternatives.

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

list_lessonsList project lessonsA
Read-onlyIdempotent
Inspect

List promoted learning rules ("lessons") for the current project, highest-frequency first. Returns { lessons: [{ id, rule_text, severity, frequency, anti_pattern, … }] }. Read-only. Use to browse the full catalog of encoded heuristics; use query_lessons to retrieve only lessons relevant to a specific diff or PR within a token budget.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax lessons to return (default 50, max 200)
severityNoFilter to one severity level
project_idNoProject UUID — defaults to configured project

Output Schema

ParametersJSON Schema
NameRequiredDescription
lessonsYesPromoted lesson rows ordered by frequency

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. Description adds 'Read-only' (consistent) and describes return format as an object with lessons array. It does not detail pagination or rate limits, but for a read-only list with good annotations this is acceptable.

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 covering purpose, ordering, usage context, and sibling differentiation. No filler or redundant information.

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 output schema present and all parameters optional, the description covers the key aspects: what is returned (lessons with fields), ordering, and differentiation from sibling. No missing critical information for a read-only list tool.

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 the schema already documents all three parameters (limit, severity, project_id). The description adds no parameter-specific details beyond what schema provides, which is fine for a baseline score of 3.

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 specifies verb 'list', resource 'promoted learning rules (lessons)', and ordering 'highest-frequency first'. It clearly distinguishes from sibling tool query_lessons by stating their different use cases (browse full catalog vs. retrieve for specific diff/PR).

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 this tool ('Use to browse the full catalog of encoded heuristics') and when to use the alternative query_lessons ('retrieve only lessons relevant to a specific diff or PR within a token budget').

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

merge_fixMerge fix PRA
DestructiveIdempotent
Inspect

Squash-merge the GitHub PR for a fix attempt, mark the linked report fixed, and notify the reporter. Re-readies the PR first if it is still a draft. Returns { merged, reportStatus }. Write; destructive and irreversible from Mushi's side — once GitHub merges into the target repo's default branch there is no unmerge endpoint, only a manual revert PR outside this tool. Idempotent — re-running an already-merged attempt is a safe no-op. Prerequisite: CI green (check with refresh_ci); confirm the diff and CI status with the user before calling on a PR you have not reviewed. Use to ship a fix opened by dispatch_fix; use transition_status to change state without merging.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixIdYesFix attempt UUID whose GitHub PR should be squash-merged
mergeMethodNoGitHub merge method (default squash)

Output Schema

ParametersJSON Schema
NameRequiredDescription
mergedNoTrue when GitHub accepted the merge in this call
reportIdYesReport UUID linked to this fix attempt
reportStatusYesReport workflow status after merge bookkeeping
alreadyMergedNoTrue when the PR was already merged (idempotent no-op)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. Description adds crucial context: irreversible from Mushi's side (no unmerge endpoint, only manual revert PR), safe no-op if already merged, and preconditions like CI green. 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?

Five sentences, front-loaded with main action, then behavioral notes and usage guidelines. No wasted words; every sentence adds value.

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?

Output schema provided, return value mentioned in description. Annotations cover safety traits. Prerequisites and alternatives are given. Sibling tools are referenced. Complete for a tool of this complexity.

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% and both parameters (fixId, mergeMethod) are well-described in schema. Description does not add significant new info beyond the purpose mentioning 'squash-merge' (default method). Baseline 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?

Description clearly states the tool squash-merges a GitHub PR for a fix attempt, marks the report fixed, and notifies the reporter. It distinguishes from sibling tools like transition_status (change state without merging) and dispatch_fix (opens a fix).

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: 'Use to ship a fix opened by dispatch_fix; use transition_status to change state without merging.' Also provides prerequisites: CI must be green, and user should confirm diff and CI before calling on unreviewed PRs.

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

query_lessonsQuery lessons for diff contextA
Read-onlyIdempotent
Inspect

Retrieve the learning rules ("lessons") most relevant to a given code diff or PR context, packed within a token budget. Uses bi-encoder retrieval + severity-weighted scoring; pass the diff/description as the query and max_tokens (default 2000). Returns ranked { lessons: [{ title, rule, severity }] }. Read-only. Use before writing a fix or opening a PR; use list_lessons to browse all lessons unfiltered.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_kNoMax number of lessons to return (default 15, max 50).
diff_textYesThe PR diff, code snippet, or description of the change being made.
max_tokensNoMaximum tokens for returned lessons context (default 3000, max 8000).
project_idNoProject UUID. Defaults to configured project.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate read-only and idempotent. Description adds retrieval method (bi-encoder + severity-weighted scoring), token budget, and output format. However, it omits mention of the default value discrepancy for max_tokens (description says 2000, schema says 3000).

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: first front-loads purpose, second adds technical detail and usage guidance. No wasted words.

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 schema coverage and annotations, description explains output format and when to use. Lacks explanation of top_k and project_id, but schema covers them fully. Could briefly mention the ranking mechanism.

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 has 100% coverage, so baseline is 3. Description adds context about token budget and retrieval method, but contradicts schema by stating max_tokens default is 2000 instead of 3000. This inconsistency reduces reliability for the agent.

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?

Clearly states the tool retrieves lessons relevant to a code diff or PR context, using specific verb 'retrieve' and resource 'lessons'. Distinguishes from sibling list_lessons by mentioning unfiltered browsing.

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 advises using this tool before writing a fix or opening a PR, and recommends list_lessons for browsing all lessons. Also specifies the query input as diff/description.

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

refresh_ciRefresh fix CI statusA
Idempotent
Inspect

Re-poll GitHub for the latest check-run status of a fix attempt's PR and persist it on the fix_attempt row (does not merge or mutate GitHub). Returns { check_run_status, check_run_conclusion, check_run_updated_at }. Write; idempotent. Use right before merge_fix to confirm CI is green; use get_fix_timeline for the full attempt lifecycle.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixIdYesFix attempt UUID whose PR check-runs should be re-polled

Output Schema

ParametersJSON Schema
NameRequiredDescription
check_run_statusYesGitHub check run status after refresh
check_run_conclusionYessuccess | failure | neutral | null while pending
check_run_updated_atYesISO timestamp when CI status was last persisted

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide idempotentHint=true and destructiveHint=false. The description adds clarity by stating it is a write operation that persists data but does not mutate GitHub. Returns specific fields. No contradictions.

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, front-loaded with the core purpose, each sentence adds value without redundancy.

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

Completeness5/5

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

Given the low complexity, the description covers purpose, usage, parameters, return value, and behavioral traits. The output schema is referenced in the description, compensating for the absence of a formal schema in the context.

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%, and the description does not add extra meaning beyond the schema's description of fixId. The tool's purpose implies the parameter's role, but that is already clear 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?

The description clearly states it re-polls GitHub for check-run status and persists it. It explicitly says what it does not do ('does not merge or mutate GitHub'), and distinguishes from siblings like get_fix_timeline and merge_fix.

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 advises when to use the tool ('right before merge_fix') and when to use an alternative ('use get_fix_timeline for the full attempt lifecycle'), providing clear usage guidance.

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

remove_byok_keyRemove an API keyA
DestructiveIdempotent
Inspect

Permanently remove one pooled BYOK credential by key id from the authenticated project, including its Vault secret. Write; destructive; idempotent.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyIdYesPooled BYOK key UUID from list_byok_keys
projectIdYesProject id

TDQS

A4/5.0
Behavior4/5

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

The description adds context beyond the annotations by specifying that removal is permanent and includes deletion of the associated Vault secret. It also labels the operation as write, destructive, and idempotent, which is consistent with the annotations and adds meaningful detail.

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 sentence plus three tag-like tokens, all front-loaded with the action and resource. It packs essential information without redundancy or unnecessary words.

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 deletion tool with two well-described parameters and annotations covering destructive and idempotent behavior, the description adequately conveys the scope and consequences, including the Vault secret. It does not mention potential prerequisites like project existence, but this is not critical given the simplicity.

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?

The schema already covers both parameters with descriptions (keyId as 'Pooled BYOK key UUID from list_byok_keys' and projectId as 'Project id'), so the description adds no additional parameter-level meaning beyond echoing 'by key id'. Baseline of 3 applies due to high schema coverage.

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 explicitly states the tool "Permanently remove one pooled BYOK credential by key id from the authenticated project, including its Vault secret." This clearly captures the action, resource, and scope, and distinguishes it from sibling tools like add_byok_key and list_byok_keys.

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 usage for removing a BYOK key but does not explicitly state when to use it versus alternatives or any conditions. It names no sibling tools or exclusions, so guidance is limited to the core purpose.

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

reopen_reportReopen report (operator)A
Idempotent
Inspect

Move a previously fixed/verified/dismissed report back to the reopened state for regression review, recording an operator note. Returns { report } with status=reopened. Write; idempotent — reopening an already-reopened report is a no-op. Use when a reporter says "still broken" after a fix shipped; use transition_status for any other state change.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOperator note recorded on the reopen transition
reportIdYesReport UUID to move back to reopened status

Output Schema

ParametersJSON Schema
NameRequiredDescription
reportYesUpdated report row with status=reopened

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, readOnlyHint=false, destructiveHint=false. The description adds specific detail: 'Idempotent — reopening an already-reopened report is a no-op' and notes the return structure (object with status=reopened). No contradictions.

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: first sentence covers action and return, second provides usage guidance. No redundant information, front-loaded with key details.

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 annotations (idempotentHint, destructiveHint, readOnlyHint) and output schema, the description fully covers purpose, behavior, return shape, and usage context. No gaps for this level of complexity.

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% and descriptions already explain both parameters ('reportId' and 'note'). The description mentions 'recording an operator note' which aligns with the schema, but does not add new meaning beyond what is already 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 clearly states the action: 'Move a previously fixed/verified/dismissed report back to the reopened state for regression review, recording an operator note.' It specifies the verb (reopen) and resource (report), and distinguishes from sibling tool 'transition_status'.

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

Usage Guidelines5/5

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

Explicit when-to-use guidance: 'Use when a reporter says "still broken" after a fix shipped; use transition_status for any other state change.' This provides clear context and alternatives.

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

reply_to_reporterReply to a reporterAInspect

Send a visible message to the end-user who filed a bug report. The reply appears in the in-app Mushi widget as an admin comment and creates an unread notification badge so the reporter sees it immediately. Use this to answer questions, request reproduction steps, or confirm a fix — without leaving the Cursor IDE.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesMessage text to send to the reporter
reportIdYesReport id to reply to
authorNameNoDisplay name for the admin sender (default: "Mushi Admin")

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate non-read-only (false) and non-destructive (false). The description adds value by specifying that the reply appears as an admin comment in the in-app Mushi widget and creates an unread notification badge, providing behavioral context beyond the structured 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?

The description is three concise sentences, front-loaded with the primary action and effect. Every sentence adds value: first defines action, second explains UI impact, third gives usage scenarios. No wasted words.

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?

The description covers purpose, usage, and behavioral effects adequately for a simple tool with complete schema annotations. However, since there is no output schema, it would be beneficial to mention what the tool returns (e.g., success confirmation), but this is a minor gap.

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%: all three parameters (reportId, message, authorName) are described in the schema. The description does not add significant meaning beyond what the schema already provides, so baseline 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 clearly states the verb 'send' and resource 'visible message to the end-user who filed a bug report'. It also details the effect (appears in widget, creates notification) and provides concrete use cases (answer questions, request repro, confirm fix), distinguishing it from sibling tools that are read-only or state-changing.

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 says 'Use this to...' and gives clear contexts (answering, requesting repro, confirming fix). It does not mention alternatives or when not to use, but the context is clear enough given the sibling list; no other tool performs this write action.

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

run_nl_queryAsk your data (NL → SQL)A
Read-onlyIdempotent
Inspect

Answer a natural-language question about your project data by generating and running a read-only SQL query (no privileged schemas, rate-limited to 60/hour). Returns { sql, rows }. Use for ad-hoc analytics ("which components had the most critical bugs this week?"); use get_recent_reports/search_reports for plain report lookups, or search_mushi_docs for documentation questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesQuestion in plain English, e.g. "Which components had the most critical bugs this week?"

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint. Description adds valuable context: no privileged schemas, rate limit of 60/hour, and return format. 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 sentences front-loaded with purpose, no wasted words. Efficient and clear.

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 one parameter, no output schema, the description fully covers use case, constraints, and alternatives. Complete for an AI agent to select and invoke 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?

Single parameter 'question' has description in schema; description includes an example but doesn't add significant additional meaning. Schema coverage is 100%, so baseline 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?

Clearly states it answers natural-language questions via read-only SQL, and distinguishes from sibling tools like get_recent_reports/search_reports and search_mushi_docs.

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

Usage Guidelines5/5

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

Explicitly says when to use (ad-hoc analytics) and when not to (use other tools for report lookups or doc questions), providing clear usage context.

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

search_mushi_docsSearch Mushi documentationA
Read-onlyIdempotent
Inspect

Search the official Mushi documentation (guides, MCP setup, inventory, QA, skills) by keyword. Returns ranked { results: [{ title, url, excerpt }] }. Read-only. Use before guessing API shapes, tool names, or RPC names; use run_nl_query for questions about your own project data, not the docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 8).
queryYesKeywords to search official Mushi docs (guides, MCP, inventory, QA).

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
resultsYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint true. The description reinforces 'Read-only' and adds behavioral context: it searches by keyword and returns ranked results. No contradiction. It adds value beyond annotations by specifying the search behavior and output fields.

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: the first states the action and output, the second gives usage guidance. No unnecessary words, front-loaded with key information. Maximally concise.

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 simple search tool with full schema coverage, output schema, and good annotations, the description covers purpose, usage context, and output shape. It includes the useful detail that results are ranked, which is not in schema. Complete enough for an agent to use 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% with both parameters adequately described. The description adds 'by keyword' which aligns with the query parameter, but does not provide further semantic detail beyond the schema. 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 clearly states it searches the official Mushi documentation by keyword and returns ranked results with specific fields (title, url, excerpt). It distinguishes itself from sibling tool run_nl_query by specifying its scope is the docs, not project data.

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

Usage Guidelines5/5

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

Explicitly says when to use ('before guessing API shapes, tool names, or RPC names') and when not to use ('use run_nl_query for questions about your own project data, not the docs'), providing a clear alternative.

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

search_reportsSearch reportsA
Read-onlyIdempotent
Inspect

Search reports by meaning and keyword (pgvector similarity server-side; falls back to summary/description substring if embeddings are unavailable). Returns ranked { results: [{ id, summary, similarity }] }. Read-only. Use to find reports by free text ("checkout flakiness"); use get_similar_bugs to dedupe a known component/bug, or get_recent_reports to list without a query.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 10, max 50)
queryYesNatural-language search text or component path
thresholdNoSimilarity threshold 0..1, default 0.2

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true. The description adds behavioral details: pgvector server-side similarity, fallback to substring, and ranked results. It does not contradict 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?

Two sentences, front-loaded with core purpose, then alternatives. No wasted words. Efficient and well-structured.

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?

With 3 parameters, output schema described in description, and good annotations, the description covers search behavior, fallback, return format, and sibling context. Minor gap: 'component path' not further explained, but overall complete.

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% with descriptions for all parameters (query, limit, threshold). The description essentially matches the schema descriptions, adding no new meaning beyond what the schema provides. Baseline 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 clearly states it searches reports by meaning and keyword via pgvector similarity with a fallback, and specifies the return format. It distinguishes between siblings by naming alternatives like get_similar_bugs and get_recent_reports.

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 tells when to use this tool ('find reports by free text') and when to use alternatives ('use get_similar_bugs to dedupe a known component/bug, or get_recent_reports to list without a query').

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

setup_repo_for_mushiBootstrap repo for MushiA
Idempotent
Inspect

Writes the three Mushi bootstrap files into the current repo root: .cursorrules (Cursor evolution-loop coding rules), .mushi/lessons.json (initial empty lesson cache), and MUSHI.md (one-page project contract for agents). Idempotent — safe to re-run after lessons sync. Requires mcp:write scope. Call this once after connecting the repo; subsequently use mushi sync-lessons from CI to keep lessons current.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoProject UUID — defaults to configured project

TDQS

A4.7/5.0
Behavior5/5

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

Discloses writing three specific files, idempotency (beyond annotation), required scope (mcp:write), and lifecycle relationship to `mushi sync-lessons`. This adds behavioral value beyond the `idempotentHint` annotation, which only flags idempotency without details.

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 cover purpose, files, idempotency, scope, and usage alternatives. No redundant information; every sentence adds value.

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 bootstrap tool with one optional parameter and no output schema, the description fully explains the side effects, prerequisite (scope), and post-usage steps. It provides a complete picture of how this tool fits into the workflow.

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 baseline is 3. The description does not elaborate on the `projectId` parameter beyond its schema description ('Project UUID — defaults to configured project'). No additional meaning is added, but the schema alone is sufficient given the optional default.

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 it writes three specific bootstrap files (`.cursorrules`, `.mushi/lessons.json`, `MUSHI.md`) and briefly explains each. This distinguishes it from siblings like `list_lessons` or `query_lessons` by specifying exactly what files are created and that it's a one-time setup step.

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?

Provides explicit guidance: 'Call this once after connecting the repo; subsequently use mushi sync-lessons from CI.' Also notes idempotency and safe re-running, giving clear when-to-use and when-not-to-use context.

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

submit_fix_resultRecord a fix outcomeAInspect

Record a fix outcome from an external agent (e.g. your own Cursor/Claude run): branch, PR URL, files changed, lines added/removed. Creates a fix_attempt row then patches it to completed and links it to the report. Returns { fixAttemptId }. Write; NOT idempotent — each call creates a new fix_attempt, so call once per PR. Use after you opened a PR outside Mushi; use dispatch_fix to have Mushi open the PR instead, or merge_fix once CI is green.

ParametersJSON Schema
NameRequiredDescriptionDefault
prUrlNoGitHub pull request URL, if a PR was opened
branchYesGit branch name where the fix was implemented
summaryYesOne-line human summary of what the fix changed
reportIdYesReport UUID to attach this external fix attempt to
filesChangedYesRepo-relative paths modified by the fix
linesChangedYesTotal lines added + removed across filesChanged
idempotencyKeyNoOptional UUID — resend the same key to safely retry without creating duplicate fix rows. Omit it and a stable key is derived from reportId + branch + prUrl, so a retried submission carries the identical key instead of a fresh random one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesTrue when the fix_attempt row was created and marked completed
fixIdYesUUID of the new fix_attempt row

TDQS

A5/5.0
Behavior5/5

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

The description clearly discloses the write semantics and the non-idempotency 'each call creates a new fix_attempt, so call once per PR.' It also explains the lifecycle side effects (creates a row, patches it to completed, links it). The annotations already mark write and non-idempotent, but the description adds important context about side effects and safe call frequency, which is beyond what annotations 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 dense yet succinct, with each sentence serving a distinct purpose: what it records, what it does, its return value, its side-effect/non-idempotency constraint, and the routing to sibling tools. The key warnings are front-loaded after the core function. No extraneous content.

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 description includes all necessary information for an agent to decide whether to invoke this tool instead of dispatch_fix or merge_fix, to construct the input meaningfully, and to avoid duplicate submissions. It covers the workflow stage, the side effects, the return value, and the idempotency behavior — everything needed beyond the rich schema and annotation hints.

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?

The schema has full coverage, but the description adds meaning by enumerating the key fields (branch, PR URL, files changed, lines added/removed). Most importantly, it explains the idempotency key's derived fallback behavior, which the schema only describes as 'optional UUID' — the description clarifies that omitting the key still yields a stable key derived from reportId + branch + prUrl, which helps the agent reason about safe retries.

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

Purpose5/5

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

The description states a specific verb and resource: 'Record a fix outcome' and 'Creates a fix_attempt row,' clearly distinguishing it from the read-only report tools and other fix-related tools. It explicitly names sibling tools dispatch_fix and merge_fix, which disambiguates it from those alternatives.

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 use this tool ('Use after you opened a PR outside Mushi') and when to use alternatives ('use dispatch_fix to have Mushi open the PR instead, or merge_fix once CI is green'). This leaves no ambiguity about tool selection.

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

suggest_fixSuggested fix (from triage)A
Read-onlyIdempotent
Inspect

Return the Stage-2 suggested-fix slice for one report: root cause, suggested fix, repro steps, summary, and component — faster than get_report_detail when you only need the human-readable hint. Returns { reportId, rootCause, suggestedFix, reproductionSteps, summary, component }. Read-only; reads the existing classification (run triage_issue first if unclassified). Use for a quick "what should we try?"; use get_fix_context for the full paste-ready bundle.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportIdYesReport UUID to read the Stage-2 suggested-fix slice for

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNoPresent when no Stage-2 analysis exists — explains why and what to call instead
summaryYesOne-line report summary, or null
reportIdYesThe report this slice was read from
componentYesComponent/page the bug was attributed to, or null
rootCauseYesStage-2 root-cause hint, or null if not yet classified
suggestedFixYesStage-2 suggested fix, or null if not yet classified
reproductionStepsYesReproduction steps recorded on the report (array; [] if none)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already mark this as read-only and idempotent, and the description reinforces this by saying 'Read-only' and explaining that it reads the existing classification. The added value beyond annotations is the precondition about triage_issue and the promise of being faster than get_report_detail.

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?

Clear, front-loaded, and scannable; the first sentence conveys the core purpose and alternatives. There is mild redundancy in listing the exact return fields, since the field list and output schema largely repeat the prose, but the structure is otherwise efficient.

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 description is complete for a simple, single-parameter read-only tool: it covers what is returned, how to use it, the precondition, and the alternatives. No crucial context appears 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?

With one required parameter at 100% schema description coverage, the schema already documents reportId as a 'Report UUID to read the Stage-2 suggested-fix slice for'. The description's mention of 'one report' echoes this but does not add substantial semantic detail beyond 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?

Description begins with a specific verb and resource: 'Return the Stage-2 suggested-fix slice for one report' and enumerates exactly which fields are included. It differentiates itself from get_report_detail and get_fix_context by naming what it is NOT and why you would choose it.

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?

Provides explicit guidance: use when you only need the human-readable hint, use get_report_detail when needing more detail, and use get_fix_context when you want the full paste-ready bundle. Also states the precondition that triage_issue should be run first if the report is unclassified.

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

test_byok_keyTest an API keyA
Idempotent
Inspect

Re-test one pooled BYOK credential by key id. A successful provider probe activates the key; auth, quota, and network failures keep it out of the runtime pool. Returns the sanitized validation result and updated key metadata. Write; idempotent.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyIdYesPooled BYOK key id
projectIdYesProject id

TDQS

A4.5/5.0
Behavior5/5

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

While annotations provide idempotentHint, the description enriches with concrete behavioral details: a successful provider probe activates the key, while auth/quota/network failures keep it out of the runtime pool, and it returns sanitized validation results and updated metadata. 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?

Three sentences, front-loaded with the core action, then outcome, then return value. Every sentence adds distinct information with no redundancy or 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 simple two-parameter tool with rich annotations, the description fully covers what the tool does, what side effects occur, and what it returns. Since there is no output schema, the explicit mention of return content ('sanitized validation result and updated key metadata') is sufficient and complete.

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 baseline is 3. The description does not add extra parameter semantics beyond what the schema already documents (keyId as pooled BYOK key id, projectId as project id). It simply refers to 'key id' without further elaboration.

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 ('Re-test') and resource ('one pooled BYOK credential by key id'), clearly distinguishing this from sibling tools like add_byok_key, remove_byok_key, and list_byok_keys. It also states the primary action and scope immediately.

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 clear usage context: it is for re-testing an existing pooled BYOK credential. It explains outcomes (activation vs. staying out of the pool) but does not explicitly name alternatives or state when-not-to-use, leaving inference to the agent.

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

test_gen_from_reportGenerate Playwright test from reportAInspect

Generate a Playwright regression test from a classified report using your project LLM key, then open a draft GitHub PR with the spec. Requires the inventory_v2 plan plus GitHub and LLM keys configured. Returns { qaStoryId, prUrl }. Write; consumes LLM budget; NOT idempotent — each call opens a new PR. Use to lock in a regression as an E2E test; use generate_tdd_from_story to build a test from a mapped user story instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportIdYesReport UUID to turn into a Playwright PR
projectIdNoProject UUID — defaults to configured project

TDQS

A4.5/5.0
Behavior4/5

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

Description adds context beyond annotations: says it's a write operation that consumes LLM budget and is not idempotent (each call opens new PR). Annotations already indicate non-idempotent, but description fleshes out implications.

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: first explains core action, second provides usage guidance and output info. No wasted words. Front-loaded with purpose.

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?

Covers input, output shape, side effects, prerequisites, and context for use. No output schema exists, but description provides return value shape.

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?

Input schema covers both parameters with descriptions (100% coverage). Description does not add additional parameter details beyond schema. Baseline 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?

Description clearly states it generates a Playwright regression test from a classified report and opens a draft PR. Verb and resource are specific. Explicitly distinguishes from sibling generate_tdd_from_story.

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?

Provides explicit when to use (lock in regression as E2E test) and when not to use (use generate_tdd_from_story instead). Also mentions prerequisites (inventory_v2 plan, GitHub and LLM keys).

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

transition_statusMove report between statesA
DestructiveIdempotent
Inspect

Move a report to a new workflow state, enforcing the same transition rules as the admin UI. Valid targets: classified, grouped, fixing, fixed, verified, reopened, dismissed. Returns { report } with the updated status. Write; idempotent (setting the current status is a no-op); rejects illegal transitions. Use to dismiss a duplicate or mark fixed; use merge_fix to mark fixed via a merged PR, or reopen_report for the reopened path.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoReason for the transition (audit trail)
statusYesTarget status (resolved is stored as fixed)
reportIdYesReport UUID

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=false, idempotentHint=true, and destructiveHint=true, lowering the bar. The description adds value beyond the hints: idempotence becomes a concrete no-op, illegal transitions are explicitly rejected, and the admin-UI equality is stated. It does not spell out what destructive effects may occur (e.g., irreversibility of dismissing), but the annotation already flags the risk.

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?

Five dense sentences cover the action, targets, return shape, behavioral traits, and sibling routing with no filler. It is front-loaded with the action and only minor redundancy with the structured fields ('Write', 'idempotent') keeps it from a top score.

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 mutation tool with 2 required strings, 100% schema coverage, and no output schema, everything the agent needs is present: how to call it, what statuses are legal, the return shape '{ report }', the idempotence rule, and the alternatives. Safety traits are already covered by the annotations, so nothing critical 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%, placing the baseline at 3. This description raises it by curating the full 11-value enum into the actual valid targets (classified, grouped, fixing, fixed, verified, reopened, dismissed), preventing an agent from trying to enter pending, triaged, in_progress, or resolved directly. The semantics slightly exceed what the schema alone provides.

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 concrete action on a concrete resource: 'Move a report to a new workflow state' and immediately scopes it with the rule of the admin UI. It explicitly names the valid target set, distinguishing this tool from get_* siblings, merge_fix, and reopen_report.

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 final sentence is an explicit routing rule: 'Use to dismiss a duplicate or mark fixed; use merge_fix to mark fixed via a merged PR, or reopen_report for the reopened path.' This tells the agent exactly when to use this tool and when not to, naming the alternatives.

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

triage_issueTriage issue end-to-endA
Read-onlyIdempotent
Inspect

Read-only combined tool: merges report detail, evidence, similar bugs, fix context, blast radius, and recent pipeline logs for a report into a single structured review packet. Returns a prioritised list of recommended next actions (investigate, dispatch_fix, group_with, dismiss). Equivalent to a Sentry "Analyze with Seer" flow grounded in user-felt reports. Pass report_id to kick off review. Call this before dispatch_fix.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport UUID to triage.
project_idNoProject UUID. Defaults to configured project.
include_logsNoInclude recent pipeline logs in triage packet (default: true).

Output Schema

ParametersJSON Schema
NameRequiredDescription
reportYes
statusYes
categoryYes
severityYes
report_idYes
fix_contextYes
recent_logsYes
blast_radiusYes
similar_bugsYes
triage_summaryYes
reporter_threadYes
recommended_actionsYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description reinforces the read-only nature and adds specifics about the output (structured review packet, recommended actions). This goes beyond annotations without contradicting them.

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 four sentences, front-loaded with the main purpose, and every sentence adds value. No redundancy or superfluous information.

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 the complexity of the tool, the description covers purpose, usage, behavioral traits, and output. The presence of an output schema means return details are not needed. The description is self-contained and sufficient for an agent to select and invoke the tool 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% with all three parameters documented. The description does not add significant meaning beyond the schema, except emphasizing report_id as the trigger. Baseline 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 clearly states the tool is a read-only combined tool that merges multiple data sources into a structured review packet and returns prioritized next actions. It uses specific verbs and identifies the resource (report), distinguishing it from sibling tools that provide individual data pieces.

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 advises to call this tool before dispatch_fix and provides the required parameter (report_id). It implicitly positions this as the comprehensive triage step, replacing the need to call multiple individual getters. No explicit when-not-to-use, but the context is clear enough.

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

triage_next_stepsWhat should I work on now?A
Read-onlyIdempotent
Inspect

Prioritised "do this next" list for the project: blocked auto-fixes first (with the unblock action), then in-flight fixes to shepherd to merge, then user-felt classified reports by severity, with robot/cron chores (dependency bumps) last. Returns { steps: [{ priority, action, reason, tool, args }], summary }. Read-only. Call this first when the user asks "what needs my attention / what should I triage or fix".

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject UUID (defaults to the configured project).

Output Schema

ParametersJSON Schema
NameRequiredDescription
stepsYes
summaryYes

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already cover read-only, idempotent, and open-world hints, and the description reinforces the read-only nature. The description adds meaningful behavioral value by exposing the internal priority ordering and the fact that steps include 'tool' and 'args' for follow-up actions. This tells the agent that the tool only recommends actions rather than executing them.

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 every clause earns its place: the exact ordering policy, the items included, the return shape, the read-only behavior, and the trigger phrase are all packed into two short sentences. The key decision information is front-loaded with 'Prioritised do this next list' and ends with a clear usage trigger.

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 simple one-parameter optional schema, a full output schema, and annotations covering read-only and idempotence, the description covers what is needed: what the tool returns, its prioritization logic, and when to invoke it. There is no significant missing context that would prevent correct selection and 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?

The input schema has 100% description coverage for the only parameter, project_id, with a clear default behavior. The tool description adds no extra parameter-level meaning, but none is needed because the schema fully documents the parameter. This is the appropriate baseline for full schema coverage.

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

Purpose5/5

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

The description states a specific verb and resource: a prioritised 'do this next' list for the project. It also clearly distinguishes itself from sibling tools by defining the ordering of blocks (blocked auto-fixes, in-flight fixes, user-felt reports, chores) and by giving an explicit call-to-action phrase. An agent can tell this is the global triage summarizer rather than a report-detail or fix-action tool.

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 an explicit trigger condition: 'Call this first when the user asks...'. It also implies this is a starting point rather than a detailed analysis or mutation tool. However, it does not explicitly name when NOT to call it or point to an alternative sibling, so it falls just short of the highest guidance level.

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

trigger_judgeRun Sonnet-as-JudgeA
Idempotent
Inspect

Queue the Sonnet-as-Judge to grade recent fix quality across accessible projects. Returns { dispatched: number } — one judge-batch job per project; scores land asynchronously in judge_results (read back with run_nl_query). Write; consumes LLM budget. Idempotent within a short window. Use before shipping to vet fix quality; use get_fix_timeline to inspect a single attempt instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax reports to judge in this batch (default 25, max 100)
projectIdNoRestrict to one project when the API key owns multiple

Output Schema

ParametersJSON Schema
NameRequiredDescription
dispatchedYesNumber of judge-batch jobs dispatched (one per accessible project)

TDQS

A4.6/5.0
Behavior5/5

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

Description adds behavioral context beyond annotations: it is a write operation consuming LLM budget, asynchronous (scores land in `judge_results`), and idempotent within a short window. 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?

Three sentences front-load the action and return type, with no redundant information. Every sentence adds value.

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?

Covers core purpose, return type, async nature, idempotency, budget consumption, and sibling reference. Could mention error conditions or more detail on the dispatched count, but sufficient given the output schema is available.

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?

Input schema has 100% description coverage for both parameters (`limit` and `projectId`). The description does not add significant meaning beyond the schema; it mentions 'one judge-batch job per project' but that is implicit from `projectId`. Baseline 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 clearly states the verb 'Queue' and the resource 'Sonnet-as-Judge to grade recent fix quality across accessible projects', and distinguishes from sibling `get_fix_timeline` by specifying it is for vetting fix quality before shipping.

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 ('Use before shipping to vet fix quality') and when not to (use `get_fix_timeline` instead for a single attempt), and notes idempotency within a short window.

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

use_mushiMushi — where to startA
Read-onlyIdempotent
Inspect

CALL THIS FIRST if you are new to this Mushi project or unsure which tool to use. Pass your intent as a short natural-language phrase ("fix the top bug", "check what I should work on", "run QA tests", "set up Mushi", …). Returns: (1) a curated list of the 5–12 tool names most relevant to that intent, (2) a one-paragraph orientation to the Mushi project and dashboard state, and (3) the single recommended first tool to call. Avoids loading the full 68-tool catalog into context when only a small subset is needed. Read-only; does not call any downstream tools itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentNoWhat you are trying to accomplish with Mushi, e.g. "fix the top bug", "check project health", "run QA tests", "set up Mushi". Leave blank for a general orientation.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (read-only, idempotent), the description discloses that it 'does not call any downstream tools itself' and that it avoids loading the full catalog into context. These are significant behavioral traits that aren't captured by the annotations, giving the agent a clear picture of side-effects and resource usage.

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 concise, front-loaded with the most important call-to-action, and structured with numbered return items. There is no fluff; every sentence contributes to orientation, usage, or behavioral transparency.

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 1-parameter tool with no output schema, the description fully compensates by describing exactly what the agent will receive (three items listed) and why the tool is useful (avoids loading full catalog). It leaves no ambiguity about the tool's output or when to choose it.

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 covers the parameter fully (100% coverage, including guidance to leave blank for general orientation). The description adds value by providing concrete examples of intent phrases ('fix the top bug', 'run QA tests') and emphasizing brevity ('short natural-language phrase'), which clarifies semantics beyond 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 clearly states the tool's purpose: to be called first when new or unsure, returning a curated list of relevant tools, orientation, and a recommended first tool. It uses an explicit directive ('CALL THIS FIRST') and enumerates the three distinct outputs, making it unmistakably different from the sibling tools that perform specific operations.

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 provides explicit when-to-use guidance: 'if you are new to this Mushi project or unsure which tool to use.' It also explains the benefit ('avoids loading the full 68-tool catalog into context'), which helps the agent recognize when this tool is preferable over directly browsing or guessing.

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. 4 tool updatesv0.1.9
    • Changedsubmit_fix_result1 field changed
      • changedInput schema / properties / idempotencyKey / description
        Previous value: -"Optional UUID — resend the same key to safely retry without creating duplicate fix rows"New value: +"Optional UUID — resend the same key to safely retry without creating duplicate fix rows. Omit it and a stable key is derived from reportId + branch + prUrl, so a retried submission carries the identical key instead of a fresh random one."
    • Changedsuggest_fix1 field changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "description": "Present when no Stage-2 analysis exists — explains why and what to call instead",
        +  "type": "string"
        +}
    • Changedtransition_status2 fields changed
      • changedInput schema / properties / status / description
        Previous value: -"Target status"New value: +"Target status (resolved is stored as fixed)"
      • changedInput schema / properties / status / enum
        Previous value: -[
        -  "pending",
        -  "classified",
        -  "grouped",
        -  "fixing",
        -  "fixed",
        -  "resolved",
        -  "verified",
        -  "reopened",
        -  "dismissed"
        -]New value: +[
        +  "pending",
        +  "classified",
        +  "triaged",
        +  "in_progress",
        +  "grouped",
        +  "fixing",
        +  "fixed",
        +  "resolved",
        +  "verified",
        +  "reopened",
        +  "dismissed"
        +]
    • Addedtriage_next_steps
  2. 5 tool updatesv0.1.8
    • Addedadd_byok_key
    • Addedlist_byok_keys
    • Addedremove_byok_key
    • Addedtest_byok_key
    • Addeduse_mushi
  3. 60 tool updatesv0.1.2
    • Addedactivation_status
    • Removedadd_byok_key
    • Removedanalyze_codebase_impact
    • Removedanalyze_wiki_knowledge
    • Removedapprove_qa_story
    • Removedask_codebase
    • Removedaward_bonus_points
    • Removedcheckin_pipeline_step
    • Removeddiagnose_connection
    • Changeddiagnose_setup1 field changed
      • addedOutput schema / properties / connection
        Added value: +{}
    • Addeddiff_inventory
    • Removedfix_suggest
    • Removedgenerate_tdd_from_story
    • Removedget_account_overview
    • Removedget_activation_status
    • Removedget_backend_health
    • Removedget_codebase_domains
    • Removedget_codebase_tour
    • Removedget_file_summary
    • Addedget_graph_neighborhood
    • Addedget_graph_node
    • Addedget_inventory
    • Changedget_knowledge_graph3 fields changed
      • changedInput schema / properties / depth / description
        Previous value: -"Traversal depth (default 2, max 4)"New value: +"BFS hops outward from seed — clamped to 4 in the handler (default 2)"
      • changedInput schema / properties / seed / description
        Previous value: -"Starting node id or label"New value: +"Starting graph node id or human-readable label to traverse from"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "edges": {
        +      "description": "Edges connecting the returned nodes",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "nodes": {
        +      "description": "Graph nodes within the depth budget",
        +      "items": {},
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "nodes",
        +    "edges"
        +  ],
        +  "type": "object"
        +}
    • Removedget_map_run_status
    • Removedget_pipeline_logs
    • Removedget_pipeline_run
    • Removedget_project_context
    • Removedget_qa_story_run
    • Removedget_reporter_thread
    • Removedget_skill
    • Removedget_usage
    • Removedgraph_neighborhood
    • Removedgraph_node_status
    • Removedimprove_qa_story
    • Removedingest_setup_check
    • Removedinventory_diff
    • Removedinventory_findings
    • Removedinventory_get
    • Removedlist_byok_keys
    • Addedlist_gate_findings
    • Changedlist_lessons4 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max number of lessons to return (default 50, max 200)."New value: +"Max lessons to return (default 50, max 200)"
      • changedInput schema / properties / project_id / description
        Previous value: -"Project UUID. Defaults to configured project."New value: +"Project UUID — defaults to configured project"
      • changedInput schema / properties / severity / description
        Previous value: -"Filter by severity level."New value: +"Filter to one severity level"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "lessons": {
        +      "description": "Promoted lesson rows ordered by frequency",
        +      "items": {},
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "lessons"
        +  ],
        +  "type": "object"
        +}
    • Removedlist_pending_review_stories
    • Removedlist_projects
    • Removedlist_qa_story_runs
    • Removedlist_skills
    • Removedlist_top_contributors
    • Removedmap_user_stories
    • Changedmerge_fix3 fields changed
      • changedInput schema / properties / fixId / description
        Previous value: -"Fix attempt UUID"New value: +"Fix attempt UUID whose GitHub PR should be squash-merged"
      • changedInput schema / properties / mergeMethod / description
        Previous value: -"GitHub merge method"New value: +"GitHub merge method (default squash)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "alreadyMerged": {
        +      "description": "True when the PR was already merged (idempotent no-op)",
        +      "type": "boolean"
        +    },
        +    "merged": {
        +      "description": "True when GitHub accepted the merge in this call",
        +      "type": "boolean"
        +    },
        +    "reportId": {
        +      "description": "Report UUID linked to this fix attempt",
        +      "type": "string"
        +    },
        +    "reportStatus": {
        +      "description": "Report workflow status after merge bookkeeping",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "reportId",
        +    "reportStatus"
        +  ],
        +  "type": "object"
        +}
    • Changedrefresh_ci2 fields changed
      • changedInput schema / properties / fixId / description
        Previous value: -"Fix attempt UUID"New value: +"Fix attempt UUID whose PR check-runs should be re-polled"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "check_run_conclusion": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "success | failure | neutral | null while pending"
        +    },
        +    "check_run_status": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "GitHub check run status after refresh"
        +    },
        +    "check_run_updated_at": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "ISO timestamp when CI status was last persisted"
        +    }
        +  },
        +  "required": [
        +    "check_run_status",
        +    "check_run_conclusion",
        +    "check_run_updated_at"
        +  ],
        +  "type": "object"
        +}
    • Changedreopen_report3 fields changed
      • changedInput schema / properties / note / description
        Previous value: -"Triage note"New value: +"Operator note recorded on the reopen transition"
      • changedInput schema / properties / reportId / description
        Previous value: -"Report UUID"New value: +"Report UUID to move back to reopened status"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "report": {
        +      "description": "Updated report row with status=reopened"
        +    }
        +  },
        +  "required": [
        +    "report"
        +  ],
        +  "type": "object"
        +}
    • Removedrun_fullstack_audit
    • Removedrun_qa_story
    • Removedsearch_codebase
    • Removedset_tier
    • Removedsetup_check
    • Removedstart_skill_pipeline
    • Changedsubmit_fix_result7 fields changed
      • changedInput schema / properties / branch / description
        Previous value: -"Git branch name"New value: +"Git branch name where the fix was implemented"
      • changedInput schema / properties / filesChanged / description
        Previous value: -"Files modified"New value: +"Repo-relative paths modified by the fix"
      • changedInput schema / properties / linesChanged / description
        Previous value: -"Total lines changed"New value: +"Total lines added + removed across filesChanged"
      • changedInput schema / properties / prUrl / description
        Previous value: -"GitHub PR URL"New value: +"GitHub pull request URL, if a PR was opened"
      • changedInput schema / properties / reportId / description
        Previous value: -"The report UUID"New value: +"Report UUID to attach this external fix attempt to"
      • changedInput schema / properties / summary / description
        Previous value: -"Fix summary"New value: +"One-line human summary of what the fix changed"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "fixId": {
        +      "description": "UUID of the new fix_attempt row",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "True when the fix_attempt row was created and marked completed",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "fixId"
        +  ],
        +  "type": "object"
        +}
    • Addedsuggest_fix
    • Removedtest_notification_channel
    • Changedtrigger_judge1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "dispatched": {
        +      "description": "Number of judge-batch jobs dispatched (one per accessible project)",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "dispatched"
        +  ],
        +  "type": "object"
        +}
  4. 2 tool updatesv0.1.1
    • Changeddispatch_fix2 fields changed
      • addedInput schema / properties / reportId / format
        Added value: +"uuid"
      • addedInput schema / properties / reportId / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • Changedtriage_issue2 fields changed
      • addedInput schema / properties / report_id / format
        Added value: +"uuid"
      • addedInput schema / properties / report_id / pattern
        Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
  5. 72 tool updatesv0.1.0
    • First observedadd_byok_key
    • First observedanalyze_codebase_impact
    • First observedanalyze_wiki_knowledge
    • First observedapprove_qa_story
    • First observedask_codebase
    • First observedaward_bonus_points
    • First observedcheckin_pipeline_step
    • First observeddiagnose_connection
    • First observeddiagnose_setup
    • First observeddispatch_fix
    • First observedfix_suggest
    • First observedgenerate_tdd_from_story
    • First observedget_account_overview
    • First observedget_activation_status
    • First observedget_backend_health
    • First observedget_blast_radius
    • First observedget_codebase_domains
    • First observedget_codebase_tour
    • First observedget_file_summary
    • First observedget_fix_context
    • First observedget_fix_timeline
    • First observedget_knowledge_graph
    • First observedget_map_run_status
    • First observedget_pipeline_logs
    • First observedget_pipeline_run
    • First observedget_project_context
    • First observedget_qa_story_run
    • First observedget_recent_reports
    • First observedget_report_detail
    • First observedget_report_evidence
    • First observedget_report_timeline
    • First observedget_reporter_thread
    • First observedget_similar_bugs
    • First observedget_skill
    • First observedget_two_way_comms_health
    • First observedget_usage
    • First observedgraph_neighborhood
    • First observedgraph_node_status
    • First observedimprove_qa_story
    • First observedingest_setup_check
    • First observedinventory_diff
    • First observedinventory_findings
    • First observedinventory_get
    • First observedlist_byok_keys
    • First observedlist_lessons
    • First observedlist_pending_review_stories
    • First observedlist_projects
    • First observedlist_qa_story_runs
    • First observedlist_skills
    • First observedlist_top_contributors
    • First observedmap_user_stories
    • First observedmerge_fix
    • First observedquery_lessons
    • First observedrefresh_ci
    • First observedreopen_report
    • First observedreply_to_reporter
    • First observedrun_fullstack_audit
    • First observedrun_nl_query
    • First observedrun_qa_story
    • First observedsearch_codebase
    • First observedsearch_mushi_docs
    • First observedsearch_reports
    • First observedset_tier
    • First observedsetup_check
    • First observedsetup_repo_for_mushi
    • First observedstart_skill_pipeline
    • First observedsubmit_fix_result
    • First observedtest_gen_from_report
    • First observedtest_notification_channel
    • First observedtransition_status
    • First observedtriage_issue
    • First observedtrigger_judge

TDQS

A3.9/5.0

Scored across 40 tools

Disambiguation3/5

Most tools have explicit 'use X instead of Y' disambiguation, but there are multiple overlapping clusters: report detail/evidence/timeline/fix context and graph traversal/neighborhood/blast radius. An agent could easily misselect get_knowledge_graph vs get_graph_neighborhood vs get_blast_radius without close reading.

Naming Consistency4/5

The vast majority of tools follow a clear snake_case verb_noun pattern (get_, list_, add_, remove_, search_, dispatch_, merge_). A few names like activation_status, get_two_way_comms_health, and suggest_fix deviate slightly, but the overall convention is predictable and readable.

Tool Count2/5

40 tools is well above the 25+ threshold and includes many near-variant report, graph, and fix-context lookups that could be consolidated. Even though the domain is broad, the sheer number makes the set feel heavy and harder for an agent to navigate.

Completeness3/5

The core report → triage → fix → merge → verify lifecycle is well covered, with additional setup, health, lessons, docs, and BYOK tooling. However, the set references tools not actually exposed (e.g. generate_tdd_from_story) and lacks some obvious QA-story or report-management operations, leaving notable gaps.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    A remote Model Context Protocol server acting as middleware to the Sentry API, allowing AI assistants like Claude to access Sentry data and functionality through natural language interfaces.
    7
    22 npm
    847
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Open source contribution manager — tracks PRs across repos, discovers contributable issues, diagnoses CI failures, and drafts maintainer responses. 21 MCP tools, 5 resources, 3 prompts. Ships as CLI, MCP server, and Claude Code plugin.
    20
    15
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Behavioral verification intelligence for AI coding agents. Reads a TypeScript or JavaScript repo, clusters functions into 25 semantic workflows (Authentication, Payments, Webhooks, Caching, Queue, and more), and emits concrete adversarial probes per workflow. 17 MCP tools, local SQLite state, zero cloud.
    17
    22 npm
    1
    MIT