@mushi-mushi/mcp 0.20.1 → 0.21.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
@@ -123,7 +123,7 @@ The server speaks stdio MCP transport by default; your client launches it as a s
123
123
 
124
124
  ### 5. Hosted Streamable HTTP (no subprocess)
125
125
 
126
- The Mushi backend now exposes the same tool catalog over the **Streamable HTTP** transport from the MCP 2025-03-26 spec at `/functions/v1/mcp`. Use this when you want to skip the local subprocess; typical for OpenAI Agents SDK, ChatGPT Agent, hosted CrewAI, or any orchestrator that talks remote MCP:
126
+ The Mushi backend now exposes the same tool catalog over the **Streamable HTTP** transport (dual-era: MCP 2024-11-05 … 2025-11-25 legacy and the current 2026-07-28 revision) at `/functions/v1/mcp`. Use this when you want to skip the local subprocess; typical for OpenAI Agents SDK, ChatGPT Agent, hosted CrewAI, or any orchestrator that talks remote MCP:
127
127
 
128
128
  ```jsonc
129
129
  // .cursor/mcp.json — example (hosted HTTP)
@@ -146,7 +146,7 @@ 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 **71 tools** (stdio / `MUSHI_FEATURES=all`). The hosted HTTP
149
+ Full catalog is **73 tools** (stdio / `MUSHI_FEATURES=all`). The hosted HTTP
150
150
  endpoint exposes a leaner subset filtered by feature groups (see
151
151
  `mcp-hosted-tool-manifest.json`). New installs now default to the lean
152
152
  `triage,fixes,inventory,setup,docs` set automatically (stdio: when
@@ -212,6 +212,7 @@ The endpoint accepts JSON-RPC 2.0 over POST (returns `application/json` or `text
212
212
  | `get_blast_radius` | Graph traversal showing other components a bug group touches |
213
213
  | `get_knowledge_graph` | Traverse the knowledge graph from a seed component or page |
214
214
  | `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
+ | `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. |
215
216
  | `activation_status` | Unified activation posture for the active project: required steps, SDK heartbeat, dispatch preflight, and the next best action |
216
217
  | `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 |
217
218
  | `list_projects` | Discover all Mushi projects accessible to this API key. Returns project id, name, and created date |
@@ -390,7 +391,7 @@ Spawns `dist/index.js` with a dummy unreachable endpoint and confirms it adverti
390
391
  pnpm --filter @mushi-mushi/mcp build
391
392
  pnpm --filter @mushi-mushi/mcp test:smoke
392
393
  # OK; prints live tool/resource/prompt counts from the catalog
393
- # (see packages/mcp/src/catalog.ts — currently 71 tools / 8 resources / 4 prompts)
394
+ # (see packages/mcp/src/catalog.ts — currently 73 tools / 8 resources / 4 prompts)
394
395
  ```
395
396
 
396
397
  ### Layer 3; Full localhost E2E (real binary + real backend behaviour)
@@ -480,8 +481,24 @@ Both are complementary; use Sentry for exception noise, Mushi for "the user says
480
481
 
481
482
  MIT
482
483
 
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=""> | [How to Talk to Girls](https://talk.kensaur.us/?utm_source=github&utm_medium=readme) | BYOK Claude practice coach for sticky chats |
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
+
483
500
 
484
501
  <!-- mushi-readme-stats-footer -->
485
502
  ---
486
503
 
487
- <sub>Monorepo scale (July 2026): 55 edge functions · 331 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>
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>
package/dist/catalog.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  TDD_TOOL_CATALOG,
7
7
  TOOL_CATALOG,
8
8
  USE_MUSHI_INTENTS
9
- } from "./chunk-TP2QQWDJ.js";
9
+ } from "./chunk-FNDGCFSJ.js";
10
10
  export {
11
11
  ALL_SCOPES,
12
12
  CODEBASE_TOOL_CATALOG,
@@ -139,6 +139,14 @@ var TOOL_CATALOG = [
139
139
  hints: { readOnly: true, idempotent: true, openWorld: true },
140
140
  useCase: "Why is Mushi setup broken \u2014 one call, clear next step."
141
141
  },
142
+ {
143
+ name: "check_sdk_version",
144
+ title: "Check SDK freshness",
145
+ description: "Compare a published @mushi-mushi/* package version against the catalog (GET /v1/sdk/latest-version). Returns { package, current, latest, outdated } and, when outdated, suggestedActions (Sentry-style, max 1) pointing at search_mushi_docs plus the mushi-sdk-upgrade skill. Read-only. Use when Dependabot or mushi upgrade --check reports a drift, or before dispatching a fix that assumes a current SDK. Does not bump the pin \u2014 that stays a human/Dependabot change.",
146
+ scope: "mcp:read",
147
+ hints: { readOnly: true, idempotent: true, openWorld: true },
148
+ useCase: "Is this project on the current Mushi SDK?"
149
+ },
142
150
  {
143
151
  name: "search_mushi_docs",
144
152
  title: "Search Mushi documentation",
@@ -160,7 +168,7 @@ var TOOL_CATALOG = [
160
168
  {
161
169
  name: "dispatch_fix",
162
170
  title: "Dispatch Mushi fix agent",
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.',
171
+ 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 { 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 \u2014 without it each call starts a new attempt. Report must be classified \u2014 run triage_issue if not.',
164
172
  scope: "mcp:write",
165
173
  hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
166
174
  useCase: "Let the in-repo agent attempt this fix for me (or: dispatch a Cursor Cloud Agent)."
@@ -295,6 +303,14 @@ var TOOL_CATALOG = [
295
303
  hints: { readOnly: true, idempotent: true, openWorld: true },
296
304
  useCase: "Analyze this bug report end-to-end and tell me what to do."
297
305
  },
306
+ {
307
+ name: "triage_next_steps",
308
+ title: "What should I work on now?",
309
+ description: '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".',
310
+ scope: "mcp:read",
311
+ hints: { readOnly: true, idempotent: true, openWorld: true },
312
+ useCase: "What should I triage or fix right now?"
313
+ },
298
314
  // ── Lessons / evolution loop ─────────────────────────────────────────────
299
315
  {
300
316
  name: "query_lessons",
@@ -620,24 +636,29 @@ var TDD_TOOL_CATALOG = [
620
636
  }
621
637
  ];
622
638
  var USE_MUSHI_INTENTS = {
639
+ // NOTE: every name below MUST be a registered TOOL (scopes.test.ts guards
640
+ // this). 2026-08-16 audit P0-3 found phantom names (get_report,
641
+ // get_dashboard, list_qa_stories) and prompts listed as tools
642
+ // (summarize_report_for_fix, mushi_setup) — agents routed here then
643
+ // failed the call and gave up.
623
644
  fix: {
624
645
  label: "Fix a bug",
625
646
  tools: [
626
647
  "get_recent_reports",
627
- "get_report",
628
- "summarize_report_for_fix",
648
+ "get_report_detail",
649
+ "triage_issue",
629
650
  "dispatch_fix",
630
651
  "start_skill_pipeline",
631
652
  "checkin_pipeline_step",
632
653
  "get_pipeline_run"
633
654
  ],
634
- hint: "Call get_recent_reports to find the top unresolved bug, then summarize_report_for_fix before dispatching."
655
+ hint: "Call get_recent_reports to find the top unresolved bug, then triage_issue before dispatching."
635
656
  },
636
657
  status: {
637
658
  label: "Check project status",
638
659
  tools: [
639
- "get_dashboard",
640
660
  "triage_next_steps",
661
+ "get_account_overview",
641
662
  "get_usage",
642
663
  "get_backend_health",
643
664
  "activation_status"
@@ -647,7 +668,8 @@ var USE_MUSHI_INTENTS = {
647
668
  setup: {
648
669
  label: "Set up Mushi",
649
670
  tools: [
650
- "mushi_setup",
671
+ "diagnose_setup",
672
+ "check_sdk_version",
651
673
  "activation_status",
652
674
  "get_backend_health",
653
675
  "list_byok_keys",
@@ -655,12 +677,11 @@ var USE_MUSHI_INTENTS = {
655
677
  "test_byok_key",
656
678
  "remove_byok_key"
657
679
  ],
658
- hint: "Call mushi_setup first \u2014 it diagnoses setup gaps and returns the next command to run."
680
+ hint: "Call diagnose_setup first \u2014 it diagnoses setup gaps and returns the next action to take."
659
681
  },
660
682
  qa: {
661
683
  label: "Run / review QA tests",
662
684
  tools: [
663
- "list_qa_stories",
664
685
  "run_qa_story",
665
686
  "list_qa_story_runs",
666
687
  "get_qa_story_run",
@@ -668,7 +689,7 @@ var USE_MUSHI_INTENTS = {
668
689
  "approve_qa_story",
669
690
  "improve_qa_story"
670
691
  ],
671
- hint: "Call list_qa_stories to see what test coverage exists; run_qa_story to trigger a run."
692
+ hint: "Call list_qa_story_runs to see recent coverage and outcomes; run_qa_story to trigger a run."
672
693
  },
673
694
  pipeline: {
674
695
  label: "Run an agent pipeline / skill",
@@ -683,7 +704,7 @@ var USE_MUSHI_INTENTS = {
683
704
  },
684
705
  audit: {
685
706
  label: "Audit / health check",
686
- tools: ["run_fullstack_audit", "get_backend_health", "get_dashboard", "get_usage"],
707
+ tools: ["run_fullstack_audit", "get_backend_health", "get_account_overview", "get_usage"],
687
708
  hint: "Call run_fullstack_audit for a full-stack health scorecard."
688
709
  }
689
710
  };
@@ -51,6 +51,7 @@ var TOOL_FEATURE_MAP = {
51
51
  inventory_current: "admin",
52
52
  // setup
53
53
  diagnose_setup: "setup",
54
+ check_sdk_version: "setup",
54
55
  activation_status: "setup",
55
56
  project_integration_health: "setup",
56
57
  setup_repo_for_mushi: "setup",
package/dist/clients.d.ts CHANGED
@@ -46,7 +46,7 @@ import { FeatureGroup } from './feature-groups.js';
46
46
  * editor launch. Synced to package.json by `scripts/sync-mcp-pin.mjs` — never
47
47
  * hand-edit the version.
48
48
  */
49
- declare const MCP_PIN_SPEC = "@mushi-mushi/mcp@0.20.1";
49
+ declare const MCP_PIN_SPEC = "@mushi-mushi/mcp@0.21.0";
50
50
  interface StdioConfig {
51
51
  command: string;
52
52
  args: string[];
package/dist/clients.js CHANGED
@@ -5,10 +5,10 @@ import {
5
5
  DEFAULT_FEATURE_GROUPS,
6
6
  appendFeaturesToUrl,
7
7
  featuresQueryString
8
- } from "./chunk-ZSVRLSW5.js";
8
+ } from "./chunk-XSL2FPLV.js";
9
9
 
10
10
  // src/clients.ts
11
- var MCP_PIN_SPEC = "@mushi-mushi/mcp@0.20.1";
11
+ var MCP_PIN_SPEC = "@mushi-mushi/mcp@0.21.0";
12
12
  function projectServerName(projectId, projectName) {
13
13
  const nameSlug = projectName.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 22);
14
14
  const idSuffix = projectId.replace(/-/g, "").slice(0, 6);
@@ -9,7 +9,7 @@ import {
9
9
  parseFeaturesCsv,
10
10
  parseFeaturesParam,
11
11
  toolMatchesFeatures
12
- } from "./chunk-ZSVRLSW5.js";
12
+ } from "./chunk-XSL2FPLV.js";
13
13
  export {
14
14
  ALL_FEATURE_GROUPS,
15
15
  DEFAULT_FEATURE_GROUPS,