@mushi-mushi/mcp 0.17.1 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -9
- package/dist/catalog.js +1 -1
- package/dist/{chunk-7UOTJ2LI.js → chunk-KNVB6HA7.js} +61 -93
- package/dist/{chunk-PW4AK6SV.js → chunk-VBXXUK5G.js} +31 -14
- package/dist/clients.js +1 -1
- package/dist/feature-groups.d.ts +8 -2
- package/dist/feature-groups.js +1 -1
- package/dist/index.js +254 -358
- package/dist/server.js +152 -253
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -146,14 +146,24 @@ The Mushi backend now exposes the same tool catalog over the **Streamable HTTP**
|
|
|
146
146
|
|
|
147
147
|
### Feature groups (`?features=` / `MUSHI_FEATURES`)
|
|
148
148
|
|
|
149
|
-
Full catalog is **
|
|
149
|
+
Full catalog is **67 tools**. New installs now default to the lean
|
|
150
|
+
`triage,fixes,inventory,setup,docs` set automatically (stdio: when
|
|
151
|
+
`MUSHI_FEATURES` is unset; HTTP: pass the same `?features=` on the URL). To
|
|
152
|
+
change the surface:
|
|
150
153
|
|
|
151
|
-
- **Stdio:** `MUSHI_FEATURES=triage,
|
|
152
|
-
- **HTTP:** `?features=triage,
|
|
154
|
+
- **Stdio:** `MUSHI_FEATURES=all` for the full catalog, or a CSV like `MUSHI_FEATURES=triage,qa,skills`
|
|
155
|
+
- **HTTP:** `?features=all` or `?features=triage,qa,skills` on the MCP URL
|
|
153
156
|
|
|
154
|
-
|
|
157
|
+
Renamed tools (`inventory_get` → `get_inventory`, `inventory_diff` →
|
|
158
|
+
`diff_inventory`, `inventory_findings` → `list_gate_findings`, `fix_suggest` →
|
|
159
|
+
`suggest_fix`, `graph_neighborhood` → `get_graph_neighborhood`,
|
|
160
|
+
`graph_node_status` → `get_graph_node`) and the consolidated setup tooling
|
|
161
|
+
(`setup_check` / `ingest_setup_check` / `diagnose_connection` → `diagnose_setup`;
|
|
162
|
+
`get_activation_status` → `activation_status`; `get_reporter_thread` →
|
|
163
|
+
`get_report_timeline`) are documented in the changelog — update calls to the new
|
|
164
|
+
names.
|
|
155
165
|
|
|
156
|
-
New unified tools: `diagnose_setup` (replaces setup trilogy), `search_mushi_docs` (keyword doc search).
|
|
166
|
+
New unified tools: `diagnose_setup` (replaces the setup trilogy), `search_mushi_docs` (keyword doc search).
|
|
157
167
|
|
|
158
168
|
Append `?read_only=1` to the URL to hide write tools (Supabase-parity mode).
|
|
159
169
|
|
|
@@ -199,10 +209,9 @@ The endpoint accepts JSON-RPC 2.0 over POST (returns `application/json` or `text
|
|
|
199
209
|
| `get_fix_timeline` | Ordered timeline of a fix attempt (dispatched → started → branch → commit → PR → CI → completed/failed) |
|
|
200
210
|
| `get_blast_radius` | Graph traversal showing other components a bug group touches |
|
|
201
211
|
| `get_knowledge_graph` | Traverse the knowledge graph from a seed component or page |
|
|
202
|
-
| `
|
|
203
|
-
| `
|
|
204
|
-
| `
|
|
205
|
-
| `get_reporter_thread` | Unified report timeline — the reporter/admin comment thread (including verify/reopen signals) plus fix, QA, and status lanes. Use when triaging whether an end user still sees a bug as unfixed |
|
|
212
|
+
| `diagnose_setup` | Setup health in one call — `mode=full` (default) runs ingest + dispatch preflight, `mode=ingest` / `mode=dispatch` narrow it. Returns the single best next action. Run first when a user says setup is broken |
|
|
213
|
+
| `activation_status` | Unified activation posture for the active project — required steps, SDK heartbeat, dispatch preflight, and the next best action |
|
|
214
|
+
| `get_report_timeline` | Ordered report timeline — the reporter/admin comment thread (including verify/reopen signals) plus fix, QA, and status lanes. Use when triaging whether an end user still sees a bug as unfixed |
|
|
206
215
|
| `list_projects` | Discover all Mushi projects accessible to this API key. Returns project id, name, and created date |
|
|
207
216
|
| `get_project_context` | Rich context snapshot: SDK heartbeat, ingest status, autofix readiness, and open report counts |
|
|
208
217
|
| `get_pipeline_logs` | Recent log entries from fix-worker, pipeline, and QA story runner — filterable by service, level, time, and limit |
|
package/dist/catalog.js
CHANGED
|
@@ -4,7 +4,7 @@ var TOOL_CATALOG = [
|
|
|
4
4
|
{
|
|
5
5
|
name: "get_recent_reports",
|
|
6
6
|
title: "Recent bug reports",
|
|
7
|
-
description: "List recent bug reports
|
|
7
|
+
description: "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.",
|
|
8
8
|
scope: "mcp:read",
|
|
9
9
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
10
10
|
useCase: "What landed in my bug queue today?"
|
|
@@ -12,7 +12,7 @@ var TOOL_CATALOG = [
|
|
|
12
12
|
{
|
|
13
13
|
name: "get_report_detail",
|
|
14
14
|
title: "Report detail",
|
|
15
|
-
description: "
|
|
15
|
+
description: "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.",
|
|
16
16
|
scope: "mcp:read",
|
|
17
17
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
18
18
|
useCase: "Show me everything you know about this report."
|
|
@@ -20,7 +20,7 @@ var TOOL_CATALOG = [
|
|
|
20
20
|
{
|
|
21
21
|
name: "get_report_timeline",
|
|
22
22
|
title: "Unified report timeline",
|
|
23
|
-
description: "
|
|
23
|
+
description: "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.",
|
|
24
24
|
scope: "mcp:read",
|
|
25
25
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
26
26
|
useCase: "What happened on this report thread end-to-end?"
|
|
@@ -28,7 +28,7 @@ var TOOL_CATALOG = [
|
|
|
28
28
|
{
|
|
29
29
|
name: "search_reports",
|
|
30
30
|
title: "Search reports",
|
|
31
|
-
description:
|
|
31
|
+
description: '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.',
|
|
32
32
|
scope: "mcp:read",
|
|
33
33
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
34
34
|
useCase: 'Find reports mentioning "checkout flakiness".'
|
|
@@ -36,7 +36,7 @@ var TOOL_CATALOG = [
|
|
|
36
36
|
{
|
|
37
37
|
name: "get_similar_bugs",
|
|
38
38
|
title: "Similar bugs",
|
|
39
|
-
description: 'Find bugs
|
|
39
|
+
description: '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.',
|
|
40
40
|
scope: "mcp:read",
|
|
41
41
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
42
42
|
useCase: "Have we seen a bug like this before?"
|
|
@@ -44,7 +44,7 @@ var TOOL_CATALOG = [
|
|
|
44
44
|
{
|
|
45
45
|
name: "get_fix_context",
|
|
46
46
|
title: "Fix context bundle",
|
|
47
|
-
description: "Bundle
|
|
47
|
+
description: "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.",
|
|
48
48
|
scope: "mcp:read",
|
|
49
49
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
50
50
|
useCase: "Give me everything I need to fix this in one payload."
|
|
@@ -52,7 +52,7 @@ var TOOL_CATALOG = [
|
|
|
52
52
|
{
|
|
53
53
|
name: "get_fix_timeline",
|
|
54
54
|
title: "Fix timeline",
|
|
55
|
-
description: '
|
|
55
|
+
description: '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.',
|
|
56
56
|
scope: "mcp:read",
|
|
57
57
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
58
58
|
useCase: "Why did this fix attempt fail \u2014 show me every step."
|
|
@@ -60,7 +60,7 @@ var TOOL_CATALOG = [
|
|
|
60
60
|
{
|
|
61
61
|
name: "get_blast_radius",
|
|
62
62
|
title: "Blast radius",
|
|
63
|
-
description: "
|
|
63
|
+
description: "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.",
|
|
64
64
|
scope: "mcp:read",
|
|
65
65
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
66
66
|
useCase: "What else might break if I change this component?"
|
|
@@ -68,7 +68,7 @@ var TOOL_CATALOG = [
|
|
|
68
68
|
{
|
|
69
69
|
name: "get_knowledge_graph",
|
|
70
70
|
title: "Knowledge graph traversal",
|
|
71
|
-
description: "Traverse the knowledge graph from a seed component or page. Returns nodes
|
|
71
|
+
description: "Traverse the knowledge graph from a seed component or page. Returns { nodes: [{ id, label, type }], edges } 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.",
|
|
72
72
|
scope: "mcp:read",
|
|
73
73
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
74
74
|
useCase: "Show me how this component connects to the rest of the app."
|
|
@@ -76,97 +76,73 @@ var TOOL_CATALOG = [
|
|
|
76
76
|
{
|
|
77
77
|
name: "run_nl_query",
|
|
78
78
|
title: "Ask your data (NL \u2192 SQL)",
|
|
79
|
-
description:
|
|
79
|
+
description: '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.',
|
|
80
80
|
scope: "mcp:read",
|
|
81
81
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
82
82
|
useCase: "Which components had the most critical bugs this week?"
|
|
83
83
|
},
|
|
84
84
|
// --- Inventory v2 (whitepaper §6.8) -------------------------------------
|
|
85
85
|
{
|
|
86
|
-
name: "
|
|
86
|
+
name: "get_inventory",
|
|
87
87
|
title: "Inventory snapshot",
|
|
88
|
-
description: "
|
|
88
|
+
description: "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.",
|
|
89
89
|
scope: "mcp:read",
|
|
90
90
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
91
91
|
useCase: "What does the live inventory claim for this repo right now?"
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
|
-
name: "
|
|
94
|
+
name: "diff_inventory",
|
|
95
95
|
title: "Inventory diff",
|
|
96
|
-
description: "Diff two ingested inventory commits (fromSha
|
|
96
|
+
description: "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.",
|
|
97
97
|
scope: "mcp:read",
|
|
98
98
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
99
99
|
useCase: "What changed in inventory between these two SHAs?"
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
|
-
name: "
|
|
102
|
+
name: "list_gate_findings",
|
|
103
103
|
title: "Gate findings",
|
|
104
|
-
description: "
|
|
104
|
+
description: 'List the most recent inventory gate findings for a project, newest run first. Returns rows of { gate, severity, status, message, node_ref }; "latest" = the most recent run per gate by created_at. 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.',
|
|
105
105
|
scope: "mcp:read",
|
|
106
106
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
107
107
|
useCase: "Show me what CI gates failed on the last run."
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
|
-
name: "
|
|
110
|
+
name: "get_graph_neighborhood",
|
|
111
111
|
title: "Graph neighborhood",
|
|
112
|
-
description:
|
|
112
|
+
description: `Return the BFS neighborhood around one graph node by id or label: { nodes: [{ id, label, type }], edges } 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.`,
|
|
113
113
|
scope: "mcp:read",
|
|
114
114
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
115
115
|
useCase: "What nodes connect to this inventory Action within 2 hops?"
|
|
116
116
|
},
|
|
117
117
|
{
|
|
118
|
-
name: "
|
|
118
|
+
name: "get_graph_node",
|
|
119
119
|
title: "Graph node detail",
|
|
120
|
-
description: "Fetch
|
|
120
|
+
description: "Fetch one knowledge-graph node row by id: { id, label, type, 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.",
|
|
121
121
|
scope: "mcp:read",
|
|
122
122
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
123
123
|
useCase: "What status does the graph store on this node id?"
|
|
124
124
|
},
|
|
125
125
|
{
|
|
126
|
-
name: "
|
|
126
|
+
name: "suggest_fix",
|
|
127
127
|
title: "Suggested fix (from triage)",
|
|
128
|
-
description:
|
|
128
|
+
description: 'Return the Stage-2 suggested-fix slice for one report: root cause, suggested fix, repro steps, summary, and component \u2014 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.',
|
|
129
129
|
scope: "mcp:read",
|
|
130
130
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
131
131
|
useCase: "What did Stage 2 say we should try for this report?"
|
|
132
132
|
},
|
|
133
133
|
// --- Setup / admin -------------------------------------------------------
|
|
134
|
-
{
|
|
135
|
-
name: "setup_check",
|
|
136
|
-
title: "Dispatch preflight check",
|
|
137
|
-
description: "[Deprecated \u2014 use diagnose_setup with mode=dispatch or diagnose_connection.] Run the 4 **dispatch-readiness** checks for a project and return their pass/fail status (GitHub repo connected, codebase indexed, your Anthropic API key present, autofix enabled). Also returns the target repo URL when GitHub is connected.",
|
|
138
|
-
scope: "mcp:read",
|
|
139
|
-
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
140
|
-
useCase: "Is this project ready to auto-fix bugs? What is blocking dispatch?"
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
name: "ingest_setup_check",
|
|
144
|
-
title: "Ingest setup check",
|
|
145
|
-
description: "[Deprecated \u2014 use diagnose_setup with mode=ingest or diagnose_connection.] Run the 4 **required ingest** checks for the project tied to this API key: project exists, active API key, SDK heartbeat (or real report), and at least one ingested report.",
|
|
146
|
-
scope: "mcp:read",
|
|
147
|
-
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
148
|
-
useCase: "Is the SDK installed and ingesting reports? Why is my banner still missing?"
|
|
149
|
-
},
|
|
150
134
|
{
|
|
151
135
|
name: "diagnose_setup",
|
|
152
136
|
title: "Unified setup diagnose",
|
|
153
|
-
description: "
|
|
137
|
+
description: "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 \u2014 use this instead of separate connection/ingest checks.",
|
|
154
138
|
scope: "mcp:read",
|
|
155
139
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
156
140
|
useCase: "Why is Mushi setup broken \u2014 one call, clear next step."
|
|
157
141
|
},
|
|
158
|
-
{
|
|
159
|
-
name: "diagnose_connection",
|
|
160
|
-
title: "Connection diagnose (CLI + MCP + SDK)",
|
|
161
|
-
description: `Validate MCP credentials, ping /health, run ingest-setup and dispatch preflight, return the single best next action. For mode-specific checks prefer diagnose_setup. Use when the user asks "why aren't my reports showing up?".`,
|
|
162
|
-
scope: "mcp:read",
|
|
163
|
-
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
164
|
-
useCase: "Why is my Mushi setup broken \u2014 what exact step should I fix next?"
|
|
165
|
-
},
|
|
166
142
|
{
|
|
167
143
|
name: "search_mushi_docs",
|
|
168
144
|
title: "Search Mushi documentation",
|
|
169
|
-
description: "Search official Mushi
|
|
145
|
+
description: "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.",
|
|
170
146
|
scope: "mcp:read",
|
|
171
147
|
hints: { readOnly: true, idempotent: true, openWorld: false },
|
|
172
148
|
useCase: "How do I configure MCP scopes / dispatch a fix / wire QA stories?"
|
|
@@ -175,7 +151,7 @@ var TOOL_CATALOG = [
|
|
|
175
151
|
{
|
|
176
152
|
name: "submit_fix_result",
|
|
177
153
|
title: "Record a fix outcome",
|
|
178
|
-
description: "Record a fix outcome (branch, PR, files, lines
|
|
154
|
+
description: "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 \u2014 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.",
|
|
179
155
|
scope: "mcp:write",
|
|
180
156
|
// Not idempotent: re-running creates a second fix_attempt row.
|
|
181
157
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
@@ -184,7 +160,7 @@ var TOOL_CATALOG = [
|
|
|
184
160
|
{
|
|
185
161
|
name: "dispatch_fix",
|
|
186
162
|
title: "Dispatch Mushi fix agent",
|
|
187
|
-
description: 'Start
|
|
163
|
+
description: '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 { fixAttemptId }; poll get_fix_timeline for progress and merge_fix when CI is green. Write; NOT idempotent \u2014 each call starts a new attempt. Report must be classified \u2014 run triage_issue if not.',
|
|
188
164
|
scope: "mcp:write",
|
|
189
165
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
190
166
|
useCase: "Let the in-repo agent attempt this fix for me (or: dispatch a Cursor Cloud Agent)."
|
|
@@ -192,7 +168,7 @@ var TOOL_CATALOG = [
|
|
|
192
168
|
{
|
|
193
169
|
name: "trigger_judge",
|
|
194
170
|
title: "Run Sonnet-as-Judge",
|
|
195
|
-
description: "
|
|
171
|
+
description: "Queue the Sonnet-as-Judge to grade the quality of recent fixes across a batch of classified reports. Returns { batchId }; graded scores land asynchronously in the judge_results table (read them back with run_nl_query). Write; consumes LLM budget. Idempotent within a short window \u2014 re-running for the same batch re-grades rather than duplicating. Use before shipping to vet fix quality; use get_fix_timeline to inspect a single attempt instead.",
|
|
196
172
|
scope: "mcp:write",
|
|
197
173
|
hints: { readOnly: false, destructive: false, idempotent: true, openWorld: true },
|
|
198
174
|
useCase: "Grade the latest batch of fixes before I ship."
|
|
@@ -200,7 +176,7 @@ var TOOL_CATALOG = [
|
|
|
200
176
|
{
|
|
201
177
|
name: "test_gen_from_report",
|
|
202
178
|
title: "Generate Playwright test from report",
|
|
203
|
-
description: "Generate a Playwright
|
|
179
|
+
description: "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 \u2014 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.",
|
|
204
180
|
scope: "mcp:write",
|
|
205
181
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
206
182
|
useCase: "Turn this regression report into an E2E test PR."
|
|
@@ -208,7 +184,7 @@ var TOOL_CATALOG = [
|
|
|
208
184
|
{
|
|
209
185
|
name: "transition_status",
|
|
210
186
|
title: "Move report between states",
|
|
211
|
-
description: "Move a report
|
|
187
|
+
description: "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.",
|
|
212
188
|
scope: "mcp:write",
|
|
213
189
|
hints: { readOnly: false, destructive: true, idempotent: true, openWorld: true },
|
|
214
190
|
useCase: "Dismiss this duplicate / mark it fixed."
|
|
@@ -216,7 +192,7 @@ var TOOL_CATALOG = [
|
|
|
216
192
|
{
|
|
217
193
|
name: "merge_fix",
|
|
218
194
|
title: "Merge fix PR",
|
|
219
|
-
description: "Squash-merge a fix attempt
|
|
195
|
+
description: "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 (mutates the target repo's default branch); idempotent \u2014 re-running an already-merged attempt is a safe no-op. Prerequisite: CI green (check with refresh_ci). Use to ship a fix opened by dispatch_fix; use transition_status to change state without merging.",
|
|
220
196
|
scope: "mcp:write",
|
|
221
197
|
hints: { readOnly: false, destructive: true, idempotent: true, openWorld: true },
|
|
222
198
|
useCase: "Merge the draft PR and notify the reporter."
|
|
@@ -224,7 +200,7 @@ var TOOL_CATALOG = [
|
|
|
224
200
|
{
|
|
225
201
|
name: "refresh_ci",
|
|
226
202
|
title: "Refresh fix CI status",
|
|
227
|
-
description: "
|
|
203
|
+
description: "Re-poll GitHub for the latest check-run status of a fix attempt's PR and persist it. Returns { ciStatus: pending|success|failure|neutral, checks: [{ name, conclusion }] }. Read-only (mutates nothing on GitHub). Use right before merge_fix to confirm CI is green; use get_fix_timeline for the full attempt lifecycle.",
|
|
228
204
|
scope: "mcp:read",
|
|
229
205
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
230
206
|
useCase: "Check whether CI is green before merging."
|
|
@@ -232,7 +208,7 @@ var TOOL_CATALOG = [
|
|
|
232
208
|
{
|
|
233
209
|
name: "reopen_report",
|
|
234
210
|
title: "Reopen report (operator)",
|
|
235
|
-
description:
|
|
211
|
+
description: '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 \u2014 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.',
|
|
236
212
|
scope: "mcp:write",
|
|
237
213
|
hints: { readOnly: false, destructive: false, idempotent: true, openWorld: true },
|
|
238
214
|
useCase: "Reopen a regression the reporter flagged as not fixed."
|
|
@@ -323,7 +299,7 @@ var TOOL_CATALOG = [
|
|
|
323
299
|
{
|
|
324
300
|
name: "query_lessons",
|
|
325
301
|
title: "Query lessons for diff context",
|
|
326
|
-
description: '
|
|
302
|
+
description: '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.',
|
|
327
303
|
scope: "mcp:read",
|
|
328
304
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
329
305
|
useCase: "What past mistakes should I avoid when making this change?"
|
|
@@ -331,10 +307,18 @@ var TOOL_CATALOG = [
|
|
|
331
307
|
{
|
|
332
308
|
name: "list_lessons",
|
|
333
309
|
title: "List project lessons",
|
|
334
|
-
description:
|
|
310
|
+
description: 'List the promoted learning rules ("lessons") for the current project, newest first. Each lesson is a named pattern of mistakes encoded from past bug reports. Returns { lessons: [{ id, title, rule, severity, source_report_ids }] }. Read-only. Use to see the full catalog of encoded heuristics; use query_lessons to retrieve only the lessons relevant to a specific diff or PR within a token budget.',
|
|
335
311
|
scope: "mcp:read",
|
|
336
312
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
337
313
|
useCase: "What systemic patterns has Mushi identified for this project?"
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
name: "activation_status",
|
|
317
|
+
title: "Activation cockpit status",
|
|
318
|
+
description: "Return the unified activation posture \u2014 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 }.",
|
|
319
|
+
scope: "mcp:read",
|
|
320
|
+
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
321
|
+
useCase: "Is Mushi fully set up and active for this project?"
|
|
338
322
|
}
|
|
339
323
|
];
|
|
340
324
|
var RESOURCE_CATALOG = [
|
|
@@ -425,7 +409,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
425
409
|
{
|
|
426
410
|
name: "map_user_stories",
|
|
427
411
|
title: "Map user stories from live app",
|
|
428
|
-
description: 'Crawl a live application URL
|
|
412
|
+
description: 'Crawl a live application URL (Firecrawl/Browserbase) and have Claude draft an inventory.yaml of pages and user stories, written to an inventory_proposals row (source=live_crawl). Optionally dispatches a Cursor Cloud agent to refine the draft and open a PR. Returns { runId, status: "pending" } immediately \u2014 poll get_map_run_status. Write; consumes crawl + LLM budget; NOT idempotent. Use to bootstrap test coverage without hand-writing YAML; then generate_tdd_from_story per accepted story.',
|
|
429
413
|
scope: "mcp:write",
|
|
430
414
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
431
415
|
useCase: "Map the user stories in my live app automatically without writing YAML by hand."
|
|
@@ -433,7 +417,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
433
417
|
{
|
|
434
418
|
name: "get_map_run_status",
|
|
435
419
|
title: "Story map run status",
|
|
436
|
-
description: "
|
|
420
|
+
description: "Poll the status and results of a story_map_run started by map_user_stories. Returns { status: pending|running|completed|failed, pages_crawled, proposal_id (once done), cursor_pr_url (if Cursor Cloud refined the draft) }. Read-only. Use to know when a crawl has finished and which inventory_proposals row to review next.",
|
|
437
421
|
scope: "mcp:read",
|
|
438
422
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
439
423
|
useCase: "Is my story mapping crawl done yet?"
|
|
@@ -441,7 +425,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
441
425
|
{
|
|
442
426
|
name: "generate_tdd_from_story",
|
|
443
427
|
title: "Generate TDD test from user story",
|
|
444
|
-
description: "
|
|
428
|
+
description: "Generate a full Playwright TypeScript test from a mapped user story id (from accepted inventory) using Claude, and insert a qa_stories row (source=test_gen_from_story). approval_status follows the project automation_mode (auto = enabled immediately; review/approve = pending_review). Optionally opens a draft GitHub PR. Returns { qaStoryId, prUrl, approvalStatus, needsHumanReview }. Write; consumes LLM budget; NOT idempotent. Run map_user_stories first; use test_gen_from_report to build a test from a bug report instead.",
|
|
445
429
|
scope: "mcp:write",
|
|
446
430
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
447
431
|
useCase: "Generate a Playwright test for this user story."
|
|
@@ -449,7 +433,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
449
433
|
{
|
|
450
434
|
name: "improve_qa_story",
|
|
451
435
|
title: "Auto-improve a failing QA story",
|
|
452
|
-
description: "
|
|
436
|
+
description: "Analyze recently failed qa_story_runs and use Claude to write improved test scripts that address the failures. New tests are created with source=pdca, parent_story_id chained to the original, and approval gated by the original story's automation_mode. Returns { improvedStoryIds }. Write; consumes LLM budget; NOT idempotent. Use to repair flaky/broken tests; use run_qa_story to re-run as-is, or list_qa_story_runs to inspect failures first.",
|
|
453
437
|
scope: "mcp:write",
|
|
454
438
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
455
439
|
useCase: "Fix my failing QA tests automatically."
|
|
@@ -457,7 +441,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
457
441
|
{
|
|
458
442
|
name: "run_qa_story",
|
|
459
443
|
title: "Trigger a manual QA story run",
|
|
460
|
-
description: 'Queue
|
|
444
|
+
description: 'Queue an immediate manual run for an enabled + approved qa_story (equivalent to "Run now" in the console). Returns { runId } right away; poll list_qa_story_runs or get_qa_story_run for progress and results. Write; NOT idempotent \u2014 each call creates a new run; returns 409 if the story is disabled or pending review. Use to verify a flow on demand; use improve_qa_story to repair a failing story.',
|
|
461
445
|
scope: "mcp:write",
|
|
462
446
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
463
447
|
useCase: "Run the login flow test right now."
|
|
@@ -465,7 +449,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
465
449
|
{
|
|
466
450
|
name: "list_byok_keys",
|
|
467
451
|
title: "List your API key pool",
|
|
468
|
-
description: "List
|
|
452
|
+
description: "List the project's BYOK API keys grouped by provider (anthropic | openai | firecrawl | browserbase | cursor). Returns { keys: [{ id, provider, label, priority, status, cooldownUntil }] } \u2014 metadata only, never the raw secret. Read-only. Use to see which keys are active vs rate-limited/exhausted; use add_byok_key to add one.",
|
|
469
453
|
scope: "mcp:read",
|
|
470
454
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
471
455
|
useCase: "Which API keys are active and which are rate-limited?"
|
|
@@ -473,7 +457,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
473
457
|
{
|
|
474
458
|
name: "add_byok_key",
|
|
475
459
|
title: "Add an API key",
|
|
476
|
-
description: "Add a
|
|
460
|
+
description: "Add a BYOK API key to the project pool for a provider (anthropic | openai | firecrawl | browserbase | cursor), with a label and priority for failover ordering. The raw key is stored encrypted in Supabase Vault and never returned. Returns { id, provider, label }. Write; NOT idempotent \u2014 adds a new row each call. Use to register a backup/rotated key; use list_byok_keys to review the pool.",
|
|
477
461
|
scope: "mcp:write",
|
|
478
462
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
479
463
|
useCase: "Add a backup Anthropic key to the pool."
|
|
@@ -481,7 +465,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
481
465
|
{
|
|
482
466
|
name: "list_pending_review_stories",
|
|
483
467
|
title: "List QA stories pending review",
|
|
484
|
-
description: "
|
|
468
|
+
description: "List auto-generated QA/TDD stories in approval_status=pending_review \u2014 the queue waiting for human sign-off before they run on schedule. Returns { stories: [{ id, title, source, target_url, created_at }] }. Read-only. Use to find what needs review today; then approve_qa_story to approve or reject each.",
|
|
485
469
|
scope: "mcp:read",
|
|
486
470
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
487
471
|
useCase: "What TDD tests need my approval today?"
|
|
@@ -489,7 +473,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
489
473
|
{
|
|
490
474
|
name: "approve_qa_story",
|
|
491
475
|
title: "Approve or reject a pending QA story",
|
|
492
|
-
description: "Approve or reject a qa_story
|
|
476
|
+
description: "Approve or reject a qa_story currently in pending_review (pass approve=true|false and an optional note). Approved stories are enabled in the QA schedule immediately; rejected ones are disabled. Returns { id, approval_status }. Write; idempotent \u2014 re-approving an approved story is a no-op. Use to clear the review queue from list_pending_review_stories.",
|
|
493
477
|
scope: "mcp:write",
|
|
494
478
|
hints: { readOnly: false, destructive: false, idempotent: true, openWorld: true },
|
|
495
479
|
useCase: "Approve this auto-generated test."
|
|
@@ -547,7 +531,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
547
531
|
{
|
|
548
532
|
name: "list_skills",
|
|
549
533
|
title: "List agent skills",
|
|
550
|
-
description: "List the agent skills
|
|
534
|
+
description: "List the agent skills in the catalog, optionally filtered by category or search text. Returns { skills: [{ slug, title, description, category, chain_slugs }] }. Read-only. Use to find the right skill slug before start_skill_pipeline; use get_skill to read one skill's full instructions.",
|
|
551
535
|
scope: "mcp:read",
|
|
552
536
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
553
537
|
useCase: "What skills are available for debugging production errors?"
|
|
@@ -555,7 +539,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
555
539
|
{
|
|
556
540
|
name: "get_skill",
|
|
557
541
|
title: "Get skill detail",
|
|
558
|
-
description: "Fetch
|
|
542
|
+
description: "Fetch one agent skill by slug, including the complete SKILL.md body and the resolved chain of sub-skills. Returns { slug, title, body, chain: [{ slug, title }] }. Read-only. Use to read what a skill instructs before executing a pipeline step; use list_skills to discover slugs.",
|
|
559
543
|
scope: "mcp:read",
|
|
560
544
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
561
545
|
useCase: "What does workflow-fix-and-ship actually instruct me to do?"
|
|
@@ -571,7 +555,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
571
555
|
{
|
|
572
556
|
name: "get_pipeline_run",
|
|
573
557
|
title: "Get pipeline run detail",
|
|
574
|
-
description: "Fetch
|
|
558
|
+
description: "Fetch a skill pipeline run by id: { status, context_packet, steps: [{ index, slug, status }] }. Read-only. Use to retrieve the context_packet when a pipeline was started from the console or another agent; then checkin_pipeline_step as you complete each step. Use start_skill_pipeline to begin a new run.",
|
|
575
559
|
scope: "mcp:read",
|
|
576
560
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
577
561
|
useCase: "Give me the context packet and step status for this pipeline run."
|
|
@@ -584,22 +568,6 @@ var TDD_TOOL_CATALOG = [
|
|
|
584
568
|
hints: { readOnly: false, destructive: false, idempotent: true, openWorld: true },
|
|
585
569
|
useCase: "I just opened the PR \u2014 mark step 2 as passed and link the PR."
|
|
586
570
|
},
|
|
587
|
-
{
|
|
588
|
-
name: "get_activation_status",
|
|
589
|
-
title: "Activation cockpit status",
|
|
590
|
-
description: "[Deprecated \u2014 use activation_status resource or tool on hosted MCP.] Unified setup posture for the active project: required steps, SDK heartbeat, dispatch preflight, and the next best action.",
|
|
591
|
-
scope: "mcp:read",
|
|
592
|
-
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
593
|
-
useCase: "What is blocking this project from going live?"
|
|
594
|
-
},
|
|
595
|
-
{
|
|
596
|
-
name: "get_reporter_thread",
|
|
597
|
-
title: "Reporter feedback thread",
|
|
598
|
-
description: "[Deprecated \u2014 use get_report_timeline instead.] Fetch the unified timeline for a report \u2014 reporter comments plus fix, QA, and status lanes.",
|
|
599
|
-
scope: "mcp:read",
|
|
600
|
-
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
601
|
-
useCase: "What did the reporter say after we marked this fixed?"
|
|
602
|
-
},
|
|
603
571
|
// ── Full-Stack Audit tools (Phase 5) ────────────────────────────────────────
|
|
604
572
|
{
|
|
605
573
|
name: "run_fullstack_audit",
|
|
@@ -622,7 +590,7 @@ var CODEBASE_TOOL_CATALOG = [
|
|
|
622
590
|
{
|
|
623
591
|
name: "ask_codebase",
|
|
624
592
|
title: "Ask about the indexed codebase",
|
|
625
|
-
description:
|
|
593
|
+
description: 'Answer a plain-English question about the connected repo, grounded on pgvector retrieval over project_codebase_files. Returns { answer, citations: [{ path, line }] }. Set include_wiki=true to merge docs/wiki knowledge. Requires codebase indexing + your Anthropic or OpenAI key; consumes LLM budget (write scope). Use for "how does X work?"; use search_codebase for raw file matches without synthesis, or get_file_summary for one file.',
|
|
626
594
|
scope: "mcp:write",
|
|
627
595
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
628
596
|
useCase: "How does authentication work in this repo?"
|
|
@@ -630,7 +598,7 @@ var CODEBASE_TOOL_CATALOG = [
|
|
|
630
598
|
{
|
|
631
599
|
name: "get_file_summary",
|
|
632
600
|
title: "Plain-English file summary",
|
|
633
|
-
description: "
|
|
601
|
+
description: "Return a plain-English summary of one indexed file or symbol (lazily generated on first call, then cached until content_hash changes on re-index). Returns { path, summary, symbols }. Requires codebase indexing. Read-only. Use to understand a single file fast; use ask_codebase for cross-file questions, or get_codebase_tour for an onboarding walkthrough.",
|
|
634
602
|
scope: "mcp:read",
|
|
635
603
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
636
604
|
useCase: "Explain what lib/auth.ts does in plain English."
|
|
@@ -638,7 +606,7 @@ var CODEBASE_TOOL_CATALOG = [
|
|
|
638
606
|
{
|
|
639
607
|
name: "get_codebase_tour",
|
|
640
608
|
title: "Guided codebase tour",
|
|
641
|
-
description: "Return a dependency-ordered
|
|
609
|
+
description: "Return a dependency-ordered onboarding tour of the repo (~6-10 stops); each stop lists node ids, file paths, architectural layer, and why it matters. Returns { stops: [{ title, paths, layer, rationale }] }. Cached per index fingerprint. Requires codebase indexing. Read-only. Use to get oriented in an unfamiliar repo; use get_codebase_domains for a business-domain map, or get_file_summary for one file.",
|
|
642
610
|
scope: "mcp:read",
|
|
643
611
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
644
612
|
useCase: "Give me an onboarding walkthrough of this codebase."
|
|
@@ -646,7 +614,7 @@ var CODEBASE_TOOL_CATALOG = [
|
|
|
646
614
|
{
|
|
647
615
|
name: "search_codebase",
|
|
648
616
|
title: "Semantic codebase search",
|
|
649
|
-
description:
|
|
617
|
+
description: 'Search the indexed repo by plain-English meaning via embeddings. Returns top-k { results: [{ path, startLine, endLine, snippet, similarity }] } ordered by similarity. Requires codebase indexing enabled. Read-only. Use to locate where something lives ("where do we verify webhooks?"); use ask_codebase for a synthesized answer with citations, or analyze_codebase_impact to find dependents of a file.',
|
|
650
618
|
scope: "mcp:read",
|
|
651
619
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
652
620
|
useCase: "Find files related to authentication or payment handling."
|
|
@@ -654,7 +622,7 @@ var CODEBASE_TOOL_CATALOG = [
|
|
|
654
622
|
{
|
|
655
623
|
name: "get_codebase_domains",
|
|
656
624
|
title: "Business domain map",
|
|
657
|
-
description: "Extract business domains, flows, and steps mapped to file paths. Cached per index fingerprint.",
|
|
625
|
+
description: "Extract the business domains, flows, and steps in the repo, each mapped to the file paths that implement it. Returns { domains: [{ name, flows: [{ name, steps, paths }] }] }. Cached per index fingerprint. Requires codebase indexing. Read-only. Use to see what the app does at a product level; use get_codebase_tour for a dependency-ordered code walkthrough instead.",
|
|
658
626
|
scope: "mcp:read",
|
|
659
627
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
660
628
|
useCase: "What business domains does this codebase implement?"
|
|
@@ -662,7 +630,7 @@ var CODEBASE_TOOL_CATALOG = [
|
|
|
662
630
|
{
|
|
663
631
|
name: "analyze_codebase_impact",
|
|
664
632
|
title: "Diff impact analysis",
|
|
665
|
-
description: "Find files that depend on changed paths
|
|
633
|
+
description: "Find the files that depend on a set of changed paths by walking the reverse import graph. Source the paths from: manual list, the last push, a GitHub compare range, or a fix PR's files. Returns { impacted: [{ path, importedBy }], depth }. Requires codebase indexing. Read-only. Use to gauge a diff's blast radius before merging; use get_blast_radius for a bug's component impact, or search_codebase to locate files.",
|
|
666
634
|
scope: "mcp:read",
|
|
667
635
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
668
636
|
useCase: "What breaks if I change lib/auth.ts?"
|
|
@@ -670,7 +638,7 @@ var CODEBASE_TOOL_CATALOG = [
|
|
|
670
638
|
{
|
|
671
639
|
name: "analyze_wiki_knowledge",
|
|
672
640
|
title: "Wiki knowledge graph",
|
|
673
|
-
description: "Return wiki/docs knowledge
|
|
641
|
+
description: "Return the wiki/docs knowledge-graph nodes and their sources for the project. Returns { nodes: [{ id, label, source_url }], sources }. Read-only. Use to see what doc entities exist; pass include_wiki=true to ask_codebase to merge this corpus into a grounded answer.",
|
|
674
642
|
scope: "mcp:read",
|
|
675
643
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
676
644
|
useCase: "What docs entities exist for onboarding?"
|