@mushi-mushi/mcp 0.21.1 → 0.22.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 CHANGED
@@ -18,20 +18,6 @@ npx mushi-mushi setup --ide cursor
18
18
 
19
19
  That command reads CLI config at **`~/.config/mushi/config.json`** (legacy `~/.mushirc` auto-migrates), writes `.cursor/mcp.json` with the `mushi-<slug>` server block, and prints "Done; restart Cursor and ask: `list mushi tools`". No copy-pasting environment variables.
20
20
 
21
- ### Codebase Understand tools (indexed repos)
22
-
23
- When codebase indexing is enabled on a project, these MCP tools ground on `project_codebase_files` (+ wiki chunks when configured):
24
-
25
- | Tool | Scope | Purpose |
26
- |------|-------|---------|
27
- | `ask_codebase` | write | Plain-English Q&A with file:line citations |
28
- | `get_file_summary` | read | Lazy plain-English file/symbol summary |
29
- | `get_codebase_tour` | read | Dependency-ordered onboarding tour |
30
- | `search_codebase` | read | Semantic (or scoped) embedding search |
31
- | `get_codebase_domains` | read | Business domain / flow map |
32
- | `analyze_codebase_impact` | read | Diff impact (paths, last push, compare, fix PR) |
33
- | `analyze_wiki_knowledge` | read | Wiki/docs knowledge graph |
34
-
35
21
  > **What this is, and what it isn't**
36
22
  >
37
23
  > - **This package** (`@mushi-mushi/mcp`) is the MCP **server**; runs locally next to your editor, talks to the Mushi API, and presents bug reports as MCP tools/resources to your coding agent. Always install it by its scoped name (`npx -y @mushi-mushi/mcp@latest`); the bare `mushi-mcp` name was never published to npm.
@@ -142,11 +128,11 @@ The Mushi backend now exposes the same tool catalog over the **Streamable HTTP**
142
128
  }
143
129
  ```
144
130
 
145
- > **Cursor icon:** HTTP MCP URLs on `*.supabase.co` often show the **Supabase favicon** in Cursor settings; not a Mushi bug. Use **stdio** (`command` + `npx @mushi-mushi/mcp`) for the red 虫 stamp, or set `"icon": "https://kensaur.us/mushi-mushi/integrations/mushi-mark-512.png"` in your server block. The hosted endpoint also emits MCP `serverInfo.icons` and serves inline SVG at `?icon=1`.
131
+ > **Cursor icon:** HTTP MCP URLs on `*.supabase.co` often show the **Supabase favicon** in Cursor settings; not a Mushi bug. Use **stdio** (`command` + `npx @mushi-mushi/mcp`) for the red 虫 stamp, or set `"icon": "https://kensaur.us/mushi-mushi/docs/integrations/mushi-mark-512.png"` in your server block. The hosted endpoint also emits MCP `serverInfo.icons` and serves inline SVG at `?icon=1`.
146
132
 
147
133
  ### Feature groups (`?features=` / `MUSHI_FEATURES`)
148
134
 
149
- Full catalog is **73 tools** (stdio / `MUSHI_FEATURES=all`). The hosted HTTP
135
+ Full catalog is **76 tools** (stdio / `MUSHI_FEATURES=all`). The hosted HTTP
150
136
  endpoint exposes a leaner subset filtered by feature groups (see
151
137
  `mcp-hosted-tool-manifest.json`). New installs now default to the lean
152
138
  `triage,fixes,inventory,setup,docs` set automatically (stdio: when
@@ -184,7 +170,9 @@ For custom MCP hosts or tests:
184
170
 
185
171
  1. **One global MCP config**; keep `mushi` in `~/.cursor/mcp.json` only. Do **not** duplicate `mushi` / `mushi-stdio` in per-project `.cursor/mcp.json` (prevents connection storms). Project repos may ship `{}` or a comment pointing to the global file.
186
172
  2. **Windows paths**; use forward slashes in JSON (`C:/Users/...`) or escaped backslashes (`C:\\Users\\...`). Raw `\f`, `\n`, `\t` in paths corrupt JSON.
187
- 3. **Multi-project**; either one HTTP server per project (distinct server name + `X-Mushi-Project-Id`) or one stdio server and pass `project_id` on each tool call.
173
+ 3. **Multi-project**; either one HTTP server per project (distinct server name + `X-Mushi-Project-Id`) or one stdio server and pass `projectId` on each tool call.
174
+
175
+ Tool parameters are camelCase (`projectId`, `reportId`, `includeRaw`). The snake_case spelling of any of them (`project_id`) is accepted too, on both transports, so older prompts and configs keep working.
188
176
  4. **After editing global config**; fully restart Cursor (MCP panel must reload).
189
177
 
190
178
  | Header | Role |
@@ -214,6 +202,9 @@ The endpoint accepts JSON-RPC 2.0 over POST (returns `application/json` or `text
214
202
  | `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 |
215
203
  | `check_sdk_version` | Compare a published `@mushi-mushi/*` pin to `GET /v1/sdk/latest-version`. Returns `{ package, current, latest, outdated }` and, when outdated, Sentry-style `suggestedActions` (max 1). Does not bump the pin. |
216
204
  | `activation_status` | Unified activation posture for the active project: required steps, SDK heartbeat, dispatch preflight, and the next best action |
205
+ | `query_funnel` | Ordered funnel over `Mushi.track()` events (2–8 steps, per-step window, optional breakdown). Answers "where do users drop off?" from `GET /v1/admin/events/funnel` |
206
+ | `get_product_events_summary` | Event names, counts, distinct users and daily volume for the trailing window — call first to discover event names |
207
+ | `get_user_paths` | Most common events users fired right after a given event ("what did they do next?") from `GET /v1/admin/events/paths` |
217
208
  | `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 |
218
209
  | `list_projects` | Discover all Mushi projects accessible to this API key. Returns project id, name, and created date |
219
210
  | `get_project_context` | Rich context snapshot: SDK heartbeat, ingest status, autofix readiness, and open report counts |
@@ -233,6 +224,20 @@ The endpoint accepts JSON-RPC 2.0 over POST (returns `application/json` or `text
233
224
  | `transition_status` | Move a report between workflow states (enforces the same rules as the UI) |
234
225
  | `run_nl_query` | Natural-language → read-only SQL against your project data (60/hour rate-limited) |
235
226
 
227
+ ### Codebase (indexed repos)
228
+
229
+ When codebase indexing is enabled on a project, these tools ground on `project_codebase_files` (+ wiki chunks when configured):
230
+
231
+ | Tool | Scope | Purpose |
232
+ |------|-------|---------|
233
+ | `ask_codebase` | write | Plain-English Q&A with file:line citations |
234
+ | `get_file_summary` | read | Lazy plain-English file/symbol summary |
235
+ | `get_codebase_tour` | read | Dependency-ordered onboarding tour |
236
+ | `search_codebase` | read | Semantic (or scoped) embedding search |
237
+ | `get_codebase_domains` | read | Business domain / flow map |
238
+ | `analyze_codebase_impact` | read | Diff impact (paths, last push, compare, fix PR) |
239
+ | `analyze_wiki_knowledge` | read | Wiki/docs knowledge graph |
240
+
236
241
  > Need a tool that isn't here? Open an issue at [github.com/kensaurus/mushi-mushi/issues](https://github.com/kensaurus/mushi-mushi/issues) and tag it `mcp`.
237
242
 
238
243
  ### Tool annotations (what clients see before invoking)
@@ -255,7 +260,7 @@ The same catalog entries power the `/mcp` beginner console in the admin app; so
255
260
  ## Resources
256
261
 
257
262
  Full list (8). See also the generated catalog at
258
- [`apps/docs/content/sdks/mcp-tools.generated.mdx`](../../apps/docs/content/sdks/mcp-tools.generated.mdx).
263
+ [kensaur.us/mushi-mushi/docs/sdks/mcp-tools](https://kensaur.us/mushi-mushi/docs/sdks/mcp-tools).
259
264
 
260
265
  | URI | Returns |
261
266
  |---|---|
@@ -286,6 +291,9 @@ Named templates the MCP client surfaces in its slash-menu. Each one bakes in the
286
291
  | `MUSHI_API_KEY` | yes | — | Project API key with `mcp:read` or `mcp:write` scope. Mint one in the admin console → **Projects** (the one-time reveal card has a **Copy as `.env.local`** tab). |
287
292
  | `MUSHI_PROJECT_ID` | yes | — | UUID from the admin console URL (`/projects/<uuid>/...`) or the reveal card. |
288
293
  | `MUSHI_API_ENDPOINT` | no | `https://dxptnwrhwsqckaftyymj.supabase.co/functions/v1/api` | Override only if you self-host. Localhost: `http://localhost:54321/functions/v1/api`. |
294
+ | `MUSHI_MCP_SENTRY_DSN` | no | — | Reports this server's own errors to your Sentry project. Needs `@sentry/node` installed next to the server (an optional peer, not installed by default): `npx -p @sentry/node -p @mushi-mushi/mcp mushi-mcp`. |
295
+
296
+ If a client passes a variable reference through unexpanded (the server receives the literal text `${MUSHI_API_KEY}`), the server treats it as unset: it falls back to the `mushi login` config, or serves setup mode and prints which client syntax to use. Claude Desktop expands no variables; Cursor and VS Code expand `${env:MUSHI_API_KEY}`; Claude Code expands `${MUSHI_API_KEY}`.
289
297
 
290
298
  ### Storing the key in `.env.local`
291
299
 
@@ -297,7 +305,7 @@ The MCP binary reads these three vars from `process.env` on spawn; that means **
297
305
  # Mushi MCP; drop into .env.local (gitignored). The MCP binary picks these up on spawn.
298
306
  MUSHI_API_ENDPOINT=https://dxptnwrhwsqckaftyymj.supabase.co/functions/v1/api
299
307
  MUSHI_PROJECT_ID=<your-uuid>
300
- MUSHI_API_KEY=mushi_live_…
308
+ MUSHI_API_KEY=mushi_…
301
309
  ```
302
310
 
303
311
  2. Paste it into your repo's `.env.local` (already gitignored by every Vite / Next.js / Node project scaffold). Confirm `.env.local` is in `.gitignore` if you're in an unusual setup.
@@ -353,7 +361,7 @@ For teams that live in Cursor / Claude Code / Continue / Cline / Zed / Windsurf:
353
361
  | Shipped | Tools, resources, prompts; tool annotations; progress on `dispatch_fix`; scope-aware errors; stdio + Streamable HTTP; `outputSchema` / `structuredContent` on key tools; inventory action anchors on `dispatch_fix` / `get_fix_context` |
354
362
  | Waiting on clients | Resource subscriptions / `list_changed` push; sampling / elicitation |
355
363
 
356
- Detail and tool tables: [docs `/sdks/mcp`](https://kensaur.us/mushi-mushi/docs/sdks/mcp) and the generated [MCP tools](https://kensaur.us/mushi-mushi/docs/sdks/mcp-tools.generated) page. Open an issue for a waiting-on-clients row once ≥2 major clients ship support.
364
+ Detail and tool tables: [docs `/sdks/mcp`](https://kensaur.us/mushi-mushi/docs/sdks/mcp) and the generated [MCP tools reference](https://kensaur.us/mushi-mushi/docs/sdks/mcp-tools) page. Open an issue for a waiting-on-clients row once ≥2 major clients ship support.
357
365
 
358
366
  ## Admin console: `/mcp` page
359
367
 
@@ -391,7 +399,7 @@ Spawns `dist/index.js` with a dummy unreachable endpoint and confirms it adverti
391
399
  pnpm --filter @mushi-mushi/mcp build
392
400
  pnpm --filter @mushi-mushi/mcp test:smoke
393
401
  # OK; prints live tool/resource/prompt counts from the catalog
394
- # (see packages/mcp/src/catalog.ts — currently 73 tools / 8 resources / 4 prompts)
402
+ # (see packages/mcp/src/catalog.ts — currently 76 tools / 8 resources / 4 prompts)
395
403
  ```
396
404
 
397
405
  ### Layer 3; Full localhost E2E (real binary + real backend behaviour)
@@ -435,7 +443,7 @@ Replace the public endpoint block in your client's MCP config with the three env
435
443
  "args": ["/absolute/path/to/mushi-mushi/packages/mcp/dist/index.js"],
436
444
  "env": {
437
445
  "MUSHI_API_ENDPOINT": "http://localhost:54321/functions/v1/api",
438
- "MUSHI_API_KEY": "mushi_live_abc…",
446
+ "MUSHI_API_KEY": "mushi_abc…",
439
447
  "MUSHI_PROJECT_ID": "00000000-0000-0000-0000-000000000000"
440
448
  }
441
449
  }
@@ -473,32 +481,16 @@ Both are complementary; use Sentry for exception noise, Mushi for "the user says
473
481
 
474
482
  ## See also
475
483
 
476
- - [GTM distribution runbook](../../docs/marketing/GTM-DISTRIBUTION.md); MCP registry, Glama, Connect, cursor.directory, release checklist.
477
- - [V5.3 whitepaper §2.10](../../MushiMushi_Whitepaper_V5.md); the agentic fix architecture this server feeds into.
478
- - [`@mushi-mushi/agents`](../agents/README.md); orchestrator that consumes MCP-exposed fix workers.
484
+ - [Fix orchestrator](https://kensaur.us/mushi-mushi/docs/concepts/fix-orchestrator); the agentic fix architecture this server feeds into.
485
+ - [MCP tool reference](https://kensaur.us/mushi-mushi/docs/sdks/mcp-tools); every tool's parameters, generated from the catalog.
486
+ - [`@mushi-mushi/agents`](https://www.npmjs.com/package/@mushi-mushi/agents); orchestrator that consumes MCP-exposed fix workers.
479
487
 
480
488
  ## License
481
489
 
482
490
  MIT
483
491
 
484
- ## More from KENSAURUS
485
-
486
- | | App | What it is |
487
- |---|---|---|
488
- | <img src="https://kensaur.us/glot-it/icon-512.png" width="28" height="28" alt=""> | [Glot It](https://kensaur.us/glot-it/?utm_source=github&utm_medium=readme) | Learn Thai — bite-size lessons, smart flashcards, and an AI tutor |
489
- | <img src="https://kensaur.us/yen-yen/icon.svg" width="28" height="28" alt=""> | [yen-yen](https://kensaur.us/yen-yen/?utm_source=github&utm_medium=readme) | Where did the money go? Now you'll know. A kakeibo for households |
490
- | <img src="https://kensaur.us/the-wanting-mind/pwa-512x512.png" width="28" height="28" alt=""> | [The Wanting Mind](https://kensaur.us/the-wanting-mind/?utm_source=github&utm_medium=readme) | How the Battle Between Extraction and Generation Is Reshaping Our World — a 147,000-word interactive webbook with 268 concepts, 242 citations, and original illustrations |
491
- | <img src="https://kensaur.us/help-her-take-photo/assets/apple-touch-icon.png" width="28" height="28" alt=""> | [Help Her Take Photo](https://kensaur.us/help-her-take-photo/?utm_source=github&utm_medium=readme) | Pair phones, direct the pose, nail the photo |
492
- | <img src="https://talk.kensaur.us/pwa-192.png" width="28" height="28" alt=""> | [Cooler Heads](https://talk.kensaur.us/?utm_source=github&utm_medium=readme) | Practice hard conversations before you have them |
493
- | <img src="https://solo-boss.kensaur.us/apple-touch-icon.png" width="28" height="28" alt=""> | [一人社長 Solo Boss](https://solo-boss.kensaur.us/?utm_source=github&utm_medium=readme) | Bookkeeping and tax-filing co-pilot for one-person companies in Japan |
494
- | <img src="https://tsumagoi.kensaur.us/apple-touch-icon.png" width="28" height="28" alt=""> | [Tsumagoi Work&Camp 嬬恋牧場](https://tsumagoi.kensaur.us/?utm_source=github&utm_medium=readme) | Coworking camp at 1,444 m — [Instagram](https://www.instagram.com/tsumagoicamp/) · [Facebook](https://www.facebook.com/profile.php?id=61592113053042) · [Maps](https://maps.app.goo.gl/JCNnTfsdQVHCS1FA7) |
495
- | <img src="https://github.com/kensaurus.png" width="28" height="28" alt=""> | [cursor-kenji](https://github.com/kensaurus/cursor-kenji) | Ready-made playbooks for your AI coding editor |
496
- | <img src="https://kensaur.us/favicon.svg" width="28" height="28" alt=""> | [KENSAURUS](https://kensaur.us/?view=portfolio&utm_source=github&utm_medium=readme) | Everything else built under the same roof |
497
-
498
- All apps live under [kensaur.us](https://kensaur.us).
499
-
500
492
 
501
493
  <!-- mushi-readme-stats-footer -->
502
494
  ---
503
495
 
504
- <sub>Monorepo scale (July 2026): 58 edge functions · 347 SQL migrations · 13 outbound plugins · 11 inbound adapters · 19 pipeline agents. Canonical counts: <a href="https://github.com/kensaurus/mushi-mushi/blob/master/docs/stats.md">docs/stats.md</a> · <code>pnpm docs-stats</code></sub>
496
+ <sub>Monorepo scale (July 2026): 59 edge functions · 374 SQL migrations · 13 outbound plugins · 11 inbound adapters · 19 pipeline agents. Canonical counts: <a href="https://github.com/kensaurus/mushi-mushi/blob/master/docs/stats.md">docs/stats.md</a> · <code>pnpm docs-stats</code></sub>
@@ -7,8 +7,14 @@
7
7
  */
8
8
  /** Public marketing site — also hosts favicon.svg for the docs app. */
9
9
  declare const MUSHI_WEBSITE_URL = "https://kensaur.us/mushi-mushi";
10
- /** 512×512 stamp mark — safe PNG on CDN (Cursor requires png/jpeg reliably). */
11
- declare const MUSHI_ICON_PNG_URL = "https://kensaur.us/mushi-mushi/integrations/mushi-mark-512.png";
10
+ /**
11
+ * 512×512 stamp mark — safe PNG on CDN (Cursor requires png/jpeg reliably).
12
+ * Served from the docs app's `public/integrations/`, which CloudFront exposes
13
+ * under `/mushi-mushi/docs/`; the site root serves only the favicon, so the
14
+ * `/mushi-mushi/integrations/...` form this used until 2026-09-22 was a 404 —
15
+ * which is what every MCP client asking for our icon received.
16
+ */
17
+ declare const MUSHI_ICON_PNG_URL = "https://kensaur.us/mushi-mushi/docs/integrations/mushi-mark-512.png";
12
18
  /** SVG favicon from the docs app (scalable; some clients sanitize SVG). */
13
19
  declare const MUSHI_ICON_SVG_URL = "https://kensaur.us/mushi-mushi/favicon.svg";
14
20
  /** Hosted MCP icon route — same origin as the MCP endpoint when proxied. */
package/dist/branding.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  MUSHI_SERVER_METADATA,
6
6
  MUSHI_WEBSITE_URL,
7
7
  mcpIconUrl
8
- } from "./chunk-EANW5YTI.js";
8
+ } from "./chunk-FJRPC4VR.js";
9
9
  export {
10
10
  MUSHI_ICON_PNG_URL,
11
11
  MUSHI_ICON_SVG_URL,
package/dist/catalog.d.ts CHANGED
@@ -41,6 +41,16 @@ interface ToolSpec {
41
41
  scope: McpScope;
42
42
  /** MCP annotation hints. */
43
43
  hints: ToolHints;
44
+ /**
45
+ * The result carries text neither Mushi nor the operator wrote: reporter
46
+ * descriptions, console logs, comments, timeline bodies, SDK event names, or
47
+ * LLM output derived from them. Reports arrive from a public widget, so both
48
+ * transports wrap these results in data delimiters (wrap-untrusted) before an
49
+ * agent that also holds write tools reads them. The stdio server applies it
50
+ * centrally from this flag; the hosted server's UNTRUSTED_TOOLS set is held
51
+ * to it by scripts/check-catalog-sync.mjs.
52
+ */
53
+ returnsUntrusted?: true;
44
54
  /**
45
55
  * One-liner that tells a human "what problem does calling this tool solve?".
46
56
  * Shown on the admin /mcp catalog cards — should be end-user-shaped, not
@@ -74,6 +84,36 @@ interface UseMushiIntent {
74
84
  hint: string;
75
85
  }
76
86
  declare const USE_MUSHI_INTENTS: Record<string, UseMushiIntent>;
87
+ /** What use_mushi recommends for one intent on one connection. */
88
+ interface UseMushiRoute {
89
+ /** Matched USE_MUSHI_INTENTS key (`status` when nothing matched). */
90
+ key: string;
91
+ label: string;
92
+ /** The intent's tools this connection exposes, in recommendation order. */
93
+ tools: string[];
94
+ /** The intent's tools the active feature groups or key scope hide. */
95
+ hidden: string[];
96
+ /** First tool to call — always one of `tools`, or null when none is exposed. */
97
+ firstTool: string | null;
98
+ /** Orientation sentence; never names a tool the connection does not expose. */
99
+ hint: string;
100
+ }
101
+ /**
102
+ * Route a use_mushi intent against the tools a connection actually exposes.
103
+ * With feature filtering on, the static intent table named tools the lean
104
+ * default does not register (start_skill_pipeline, get_account_overview, …),
105
+ * which is the phantom-tool failure the 2026-08-16 audit fixed, reintroduced.
106
+ */
107
+ declare function routeUseMushiIntent(intent: string, isAvailable: (tool: string) => boolean): UseMushiRoute;
108
+ /**
109
+ * Server instructions returned in `initialize` by both transports. Clients
110
+ * that defer tool loading (Claude Code tool search) show the model only this
111
+ * and the bare tool names at session start, so it says what Mushi is, where
112
+ * to start, and which calls need the user's say-so. The hosted server keeps a
113
+ * copy (functions/mcp/index.ts SERVER_INSTRUCTIONS) that
114
+ * packages/mcp/scripts/check-catalog-sync.mjs holds equal to this one.
115
+ */
116
+ declare const MUSHI_SERVER_INSTRUCTIONS: string;
77
117
  declare const CODEBASE_TOOL_CATALOG: ToolSpec[];
78
118
 
79
- export { ALL_SCOPES, CODEBASE_TOOL_CATALOG, type McpScope, PROMPT_CATALOG, type PromptSpec, RESOURCE_CATALOG, type ResourceSpec, TDD_TOOL_CATALOG, TOOL_CATALOG, type ToolHints, type ToolSpec, USE_MUSHI_INTENTS, type UseMushiIntent };
119
+ export { ALL_SCOPES, CODEBASE_TOOL_CATALOG, MUSHI_SERVER_INSTRUCTIONS, type McpScope, PROMPT_CATALOG, type PromptSpec, RESOURCE_CATALOG, type ResourceSpec, TDD_TOOL_CATALOG, TOOL_CATALOG, type ToolHints, type ToolSpec, USE_MUSHI_INTENTS, type UseMushiIntent, type UseMushiRoute, routeUseMushiIntent };
package/dist/catalog.js CHANGED
@@ -1,18 +1,22 @@
1
1
  import {
2
2
  ALL_SCOPES,
3
3
  CODEBASE_TOOL_CATALOG,
4
+ MUSHI_SERVER_INSTRUCTIONS,
4
5
  PROMPT_CATALOG,
5
6
  RESOURCE_CATALOG,
6
7
  TDD_TOOL_CATALOG,
7
8
  TOOL_CATALOG,
8
- USE_MUSHI_INTENTS
9
- } from "./chunk-FNDGCFSJ.js";
9
+ USE_MUSHI_INTENTS,
10
+ routeUseMushiIntent
11
+ } from "./chunk-RPSPV4FC.js";
10
12
  export {
11
13
  ALL_SCOPES,
12
14
  CODEBASE_TOOL_CATALOG,
15
+ MUSHI_SERVER_INSTRUCTIONS,
13
16
  PROMPT_CATALOG,
14
17
  RESOURCE_CATALOG,
15
18
  TDD_TOOL_CATALOG,
16
19
  TOOL_CATALOG,
17
- USE_MUSHI_INTENTS
20
+ USE_MUSHI_INTENTS,
21
+ routeUseMushiIntent
18
22
  };
@@ -1,6 +1,6 @@
1
1
  // src/branding.ts
2
2
  var MUSHI_WEBSITE_URL = "https://kensaur.us/mushi-mushi";
3
- var MUSHI_ICON_PNG_URL = `${MUSHI_WEBSITE_URL}/integrations/mushi-mark-512.png`;
3
+ var MUSHI_ICON_PNG_URL = `${MUSHI_WEBSITE_URL}/docs/integrations/mushi-mark-512.png`;
4
4
  var MUSHI_ICON_SVG_URL = `${MUSHI_WEBSITE_URL}/favicon.svg`;
5
5
  function mcpIconUrl(mcpBaseUrl) {
6
6
  let end = mcpBaseUrl.length;
@@ -27,6 +27,7 @@ var ALL_FEATURE_GROUPS = FEATURE_GROUPS.filter(
27
27
  );
28
28
  var TOOL_FEATURE_MAP = {
29
29
  // triage
30
+ triage_next_steps: "triage",
30
31
  get_recent_reports: "triage",
31
32
  get_report_detail: "triage",
32
33
  get_report_timeline: "triage",
@@ -48,13 +49,10 @@ var TOOL_FEATURE_MAP = {
48
49
  get_inventory: "inventory",
49
50
  diff_inventory: "inventory",
50
51
  list_gate_findings: "inventory",
51
- inventory_current: "admin",
52
52
  // setup
53
53
  diagnose_setup: "setup",
54
54
  check_sdk_version: "setup",
55
55
  activation_status: "setup",
56
- project_integration_health: "setup",
57
- setup_repo_for_mushi: "setup",
58
56
  get_two_way_comms_health: "setup",
59
57
  // fixes
60
58
  submit_fix_result: "fixes",
@@ -75,13 +73,11 @@ var TOOL_FEATURE_MAP = {
75
73
  get_account_overview: "admin",
76
74
  get_project_context: "admin",
77
75
  get_pipeline_logs: "admin",
78
- project_dashboard: "admin",
79
- project_stats: "admin",
80
- project_settings: "admin",
81
- privacy_status: "admin",
82
- evolution_history: "admin",
83
- // usage / billing
76
+ // usage / billing / product analytics (Mushi.track() funnels)
84
77
  get_usage: "usage",
78
+ query_funnel: "usage",
79
+ get_product_events_summary: "usage",
80
+ get_user_paths: "usage",
85
81
  // qa / tdd
86
82
  map_user_stories: "qa",
87
83
  get_map_run_status: "qa",
@@ -114,8 +110,10 @@ var TOOL_FEATURE_MAP = {
114
110
  get_codebase_domains: "codebase",
115
111
  analyze_codebase_impact: "codebase",
116
112
  analyze_wiki_knowledge: "codebase",
117
- // docs
118
- search_mushi_docs: "docs"
113
+ // docs / orientation
114
+ search_mushi_docs: "docs",
115
+ get_mushi_doc: "docs",
116
+ use_mushi: "docs"
119
117
  };
120
118
  var DEPRECATED_TOOL_ALIASES = {
121
119
  // Removed deprecated tools → successor.
@@ -152,12 +150,11 @@ function parseFeaturesCsv(raw) {
152
150
  }
153
151
  function toolMatchesFeatures(toolName, filter) {
154
152
  if (filter === "all") return true;
155
- const group = TOOL_FEATURE_MAP[toolName];
156
- if (!group) return true;
157
- if (group === "legacy") {
153
+ if (Object.prototype.hasOwnProperty.call(DEPRECATED_TOOL_ALIASES, toolName)) {
158
154
  return filter.includes("legacy");
159
155
  }
160
- return filter.includes(group);
156
+ const group = TOOL_FEATURE_MAP[toolName];
157
+ return group !== void 0 && filter.includes(group);
161
158
  }
162
159
  function featuresQueryString(groups) {
163
160
  return groups.join(",");