@mushi-mushi/mcp 0.24.0 → 0.24.2
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 +1 -1
- package/dist/catalog.js +1 -1
- package/dist/{chunk-2NW2VVWV.js → chunk-Y757GGQH.js} +4 -4
- package/dist/clients.d.ts +1 -1
- package/dist/clients.js +1 -1
- package/dist/index.js +18 -5
- package/dist/server.js +15 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -494,4 +494,4 @@ MIT
|
|
|
494
494
|
<!-- mushi-readme-stats-footer -->
|
|
495
495
|
---
|
|
496
496
|
|
|
497
|
-
<sub>Monorepo scale (July 2026): 64 edge functions ·
|
|
497
|
+
<sub>Monorepo scale (July 2026): 64 edge functions · 413 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
|
@@ -491,7 +491,7 @@ var TOOL_CATALOG = [
|
|
|
491
491
|
{
|
|
492
492
|
name: "dispatch_fix",
|
|
493
493
|
title: "Dispatch Mushi fix agent",
|
|
494
|
-
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.',
|
|
494
|
+
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). For a project with several linked repos, set targetRepoId (a project_repos.id) to choose the repo the PR opens against; omit it for the primary repo. 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.',
|
|
495
495
|
scope: "mcp:write",
|
|
496
496
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
497
497
|
useCase: "Let the in-repo agent attempt this fix for me (or: dispatch a Cursor Cloud Agent)."
|
|
@@ -820,7 +820,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
820
820
|
{
|
|
821
821
|
name: "list_byok_keys",
|
|
822
822
|
title: "List your API key pool",
|
|
823
|
-
description: "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 \u2014 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.",
|
|
823
|
+
description: "List the project's BYOK API keys grouped by provider (anthropic | openai | firecrawl | browserbase | cursor | supabase). 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 \u2014 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.",
|
|
824
824
|
scope: "mcp:read",
|
|
825
825
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
826
826
|
useCase: "Which API keys are active and which are rate-limited?"
|
|
@@ -828,7 +828,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
828
828
|
{
|
|
829
829
|
name: "add_byok_key",
|
|
830
830
|
title: "Add an API key",
|
|
831
|
-
description: "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.",
|
|
831
|
+
description: "Add and immediately validate a BYOK API key for anthropic | openai | firecrawl | browserbase | cursor | supabase (a scoped, read-only Supabase access token, checked against the linked supabase_project_ref). 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.",
|
|
832
832
|
scope: "mcp:write",
|
|
833
833
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
834
834
|
useCase: "Add a backup Anthropic key to the pool."
|
|
@@ -984,7 +984,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
984
984
|
{
|
|
985
985
|
name: "run_fullstack_audit",
|
|
986
986
|
title: "Run a full-stack health audit",
|
|
987
|
-
description: "Fan out a full-stack health audit for the current project: DB schema + advisors, API contract gate results (Gates 3\u20138), recent backend error logs, and RLS gap detection. Returns a PM-readable scorecard with severity-ranked findings and fix hints.
|
|
987
|
+
description: "Fan out a full-stack health audit for the current project: DB schema + advisors, API contract gate results (Gates 3\u20138), recent backend error logs, and RLS gap detection. Returns a PM-readable scorecard with severity-ranked findings and fix hints. Backend analysis needs supabase_project_ref set (Settings \u2192 General) and a scoped, read-only Supabase access token added (Settings \u2192 AI keys, slug: supabase). The audit completes synchronously in ~10 s. Triggers a background gate run for orphan_endpoint and unknown_call gates if they have not run today.",
|
|
988
988
|
scope: "mcp:write",
|
|
989
989
|
hints: { readOnly: false, destructive: false, idempotent: true, openWorld: true },
|
|
990
990
|
useCase: "Is this project healthy? Run a one-click full-stack audit to find API contract mismatches, unlinked backend features, schema drift, and security gaps."
|
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.24.
|
|
49
|
+
declare const MCP_PIN_SPEC = "@mushi-mushi/mcp@0.24.2";
|
|
50
50
|
interface StdioConfig {
|
|
51
51
|
command: string;
|
|
52
52
|
args: string[];
|
package/dist/clients.js
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "./chunk-F65T4IGT.js";
|
|
9
9
|
|
|
10
10
|
// src/clients.ts
|
|
11
|
-
var MCP_PIN_SPEC = "@mushi-mushi/mcp@0.24.
|
|
11
|
+
var MCP_PIN_SPEC = "@mushi-mushi/mcp@0.24.2";
|
|
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);
|
package/dist/index.js
CHANGED
|
@@ -567,7 +567,7 @@ var TOOL_CATALOG = [
|
|
|
567
567
|
{
|
|
568
568
|
name: "dispatch_fix",
|
|
569
569
|
title: "Dispatch Mushi fix agent",
|
|
570
|
-
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.',
|
|
570
|
+
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). For a project with several linked repos, set targetRepoId (a project_repos.id) to choose the repo the PR opens against; omit it for the primary repo. 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.',
|
|
571
571
|
scope: "mcp:write",
|
|
572
572
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
573
573
|
useCase: "Let the in-repo agent attempt this fix for me (or: dispatch a Cursor Cloud Agent)."
|
|
@@ -812,7 +812,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
812
812
|
{
|
|
813
813
|
name: "list_byok_keys",
|
|
814
814
|
title: "List your API key pool",
|
|
815
|
-
description: "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 \u2014 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.",
|
|
815
|
+
description: "List the project's BYOK API keys grouped by provider (anthropic | openai | firecrawl | browserbase | cursor | supabase). 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 \u2014 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.",
|
|
816
816
|
scope: "mcp:read",
|
|
817
817
|
hints: { readOnly: true, idempotent: true, openWorld: true },
|
|
818
818
|
useCase: "Which API keys are active and which are rate-limited?"
|
|
@@ -820,7 +820,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
820
820
|
{
|
|
821
821
|
name: "add_byok_key",
|
|
822
822
|
title: "Add an API key",
|
|
823
|
-
description: "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.",
|
|
823
|
+
description: "Add and immediately validate a BYOK API key for anthropic | openai | firecrawl | browserbase | cursor | supabase (a scoped, read-only Supabase access token, checked against the linked supabase_project_ref). 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.",
|
|
824
824
|
scope: "mcp:write",
|
|
825
825
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
826
826
|
useCase: "Add a backup Anthropic key to the pool."
|
|
@@ -976,7 +976,7 @@ var TDD_TOOL_CATALOG = [
|
|
|
976
976
|
{
|
|
977
977
|
name: "run_fullstack_audit",
|
|
978
978
|
title: "Run a full-stack health audit",
|
|
979
|
-
description: "Fan out a full-stack health audit for the current project: DB schema + advisors, API contract gate results (Gates 3\u20138), recent backend error logs, and RLS gap detection. Returns a PM-readable scorecard with severity-ranked findings and fix hints.
|
|
979
|
+
description: "Fan out a full-stack health audit for the current project: DB schema + advisors, API contract gate results (Gates 3\u20138), recent backend error logs, and RLS gap detection. Returns a PM-readable scorecard with severity-ranked findings and fix hints. Backend analysis needs supabase_project_ref set (Settings \u2192 General) and a scoped, read-only Supabase access token added (Settings \u2192 AI keys, slug: supabase). The audit completes synchronously in ~10 s. Triggers a background gate run for orphan_endpoint and unknown_call gates if they have not run today.",
|
|
980
980
|
scope: "mcp:write",
|
|
981
981
|
hints: { readOnly: false, destructive: false, idempotent: true, openWorld: true },
|
|
982
982
|
useCase: "Is this project healthy? Run a one-click full-stack audit to find API contract mismatches, unlinked backend features, schema drift, and security gaps."
|
|
@@ -1875,6 +1875,15 @@ var MUSHI_DOCS_INDEX = [
|
|
|
1875
1875
|
headings: ["What it shows", "Out-of-date detection", "Setup checklist integration", "Where it lives", "Related"],
|
|
1876
1876
|
excerpt: "The SDK health card shows the live heartbeat of every Mushi SDK that reported in the last 24 hours, so an SDK that never shipped is obvious."
|
|
1877
1877
|
},
|
|
1878
|
+
{
|
|
1879
|
+
title: "SDK upgrade lockfile helper",
|
|
1880
|
+
url: docUrl("/admin/sdk-upgrade-lockfile"),
|
|
1881
|
+
route: "/admin/sdk-upgrade-lockfile",
|
|
1882
|
+
markdown: "admin/sdk-upgrade-lockfile.md",
|
|
1883
|
+
keywords: ["admin", "sdk-upgrade-lockfile", "sdk", "upgrade", "lockfile", "helper"],
|
|
1884
|
+
headings: ["How it works", "Add the workflow", "What the action does", "Private registries", "Pinning", "Why Mushi does not write the lockfile or the workflow", "Limits"],
|
|
1885
|
+
excerpt: "Add one workflow to your repo so Mushi's SDK upgrade PRs arrive with a refreshed lockfile and pass npm ci or pnpm install --frozen-lockfile."
|
|
1886
|
+
},
|
|
1878
1887
|
{
|
|
1879
1888
|
title: "Settings",
|
|
1880
1889
|
url: docUrl("/admin/settings"),
|
|
@@ -5797,6 +5806,9 @@ function createMushiServer(config) {
|
|
|
5797
5806
|
),
|
|
5798
5807
|
inventoryActionNodeId: z.string().uuid().optional().describe(
|
|
5799
5808
|
"Optional inventory Action node UUID for spec-traceability (\xA72.10). When provided, the fix-worker embeds the expected_outcome contract in the LLM prompt and runs validateAgainstSpec before opening the PR."
|
|
5809
|
+
),
|
|
5810
|
+
targetRepoId: z.string().uuid().optional().describe(
|
|
5811
|
+
"Optional linked repo id (project_repos.id) to open the fix PR against, for a project with several repos. Omit for the project's primary repo. Another project's repo id is rejected with 400 TARGET_REPO_NOT_IN_PROJECT."
|
|
5800
5812
|
)
|
|
5801
5813
|
}),
|
|
5802
5814
|
outputSchema: z.object({
|
|
@@ -5827,6 +5839,7 @@ function createMushiServer(config) {
|
|
|
5827
5839
|
reportId: args.reportId,
|
|
5828
5840
|
agent: args.agent,
|
|
5829
5841
|
inventoryActionNodeId: args.inventoryActionNodeId,
|
|
5842
|
+
...args.targetRepoId ? { targetRepoId: args.targetRepoId } : {},
|
|
5830
5843
|
...pid ? { projectId: pid } : {}
|
|
5831
5844
|
})
|
|
5832
5845
|
});
|
|
@@ -6680,7 +6693,7 @@ Be specific. No generic advice.`
|
|
|
6680
6693
|
annotations: annotationsFor("add_byok_key", TDD_TOOL_CATALOG),
|
|
6681
6694
|
inputSchema: z.object({
|
|
6682
6695
|
projectId: z.string().describe("Project id"),
|
|
6683
|
-
provider: z.enum(["anthropic", "openai", "firecrawl", "browserbase", "cursor"]).describe("Provider slug"),
|
|
6696
|
+
provider: z.enum(["anthropic", "openai", "firecrawl", "browserbase", "cursor", "supabase"]).describe("Provider slug"),
|
|
6684
6697
|
key: z.string().min(8).max(4096).describe("The API key value to add"),
|
|
6685
6698
|
label: z.string().optional().describe("Human-readable label for this key"),
|
|
6686
6699
|
priority: z.number().int().min(0).max(1e4).optional().describe("Priority for ordering (lower = higher priority)"),
|
package/dist/server.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
TDD_TOOL_CATALOG,
|
|
5
5
|
TOOL_CATALOG,
|
|
6
6
|
routeUseMushiIntent
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-Y757GGQH.js";
|
|
8
8
|
import {
|
|
9
9
|
MUSHI_SERVER_METADATA
|
|
10
10
|
} from "./chunk-FJRPC4VR.js";
|
|
@@ -485,6 +485,15 @@ var MUSHI_DOCS_INDEX = [
|
|
|
485
485
|
headings: ["What it shows", "Out-of-date detection", "Setup checklist integration", "Where it lives", "Related"],
|
|
486
486
|
excerpt: "The SDK health card shows the live heartbeat of every Mushi SDK that reported in the last 24 hours, so an SDK that never shipped is obvious."
|
|
487
487
|
},
|
|
488
|
+
{
|
|
489
|
+
title: "SDK upgrade lockfile helper",
|
|
490
|
+
url: docUrl("/admin/sdk-upgrade-lockfile"),
|
|
491
|
+
route: "/admin/sdk-upgrade-lockfile",
|
|
492
|
+
markdown: "admin/sdk-upgrade-lockfile.md",
|
|
493
|
+
keywords: ["admin", "sdk-upgrade-lockfile", "sdk", "upgrade", "lockfile", "helper"],
|
|
494
|
+
headings: ["How it works", "Add the workflow", "What the action does", "Private registries", "Pinning", "Why Mushi does not write the lockfile or the workflow", "Limits"],
|
|
495
|
+
excerpt: "Add one workflow to your repo so Mushi's SDK upgrade PRs arrive with a refreshed lockfile and pass npm ci or pnpm install --frozen-lockfile."
|
|
496
|
+
},
|
|
488
497
|
{
|
|
489
498
|
title: "Settings",
|
|
490
499
|
url: docUrl("/admin/settings"),
|
|
@@ -4473,6 +4482,9 @@ function createMushiServer(config) {
|
|
|
4473
4482
|
),
|
|
4474
4483
|
inventoryActionNodeId: z.string().uuid().optional().describe(
|
|
4475
4484
|
"Optional inventory Action node UUID for spec-traceability (\xA72.10). When provided, the fix-worker embeds the expected_outcome contract in the LLM prompt and runs validateAgainstSpec before opening the PR."
|
|
4485
|
+
),
|
|
4486
|
+
targetRepoId: z.string().uuid().optional().describe(
|
|
4487
|
+
"Optional linked repo id (project_repos.id) to open the fix PR against, for a project with several repos. Omit for the project's primary repo. Another project's repo id is rejected with 400 TARGET_REPO_NOT_IN_PROJECT."
|
|
4476
4488
|
)
|
|
4477
4489
|
}),
|
|
4478
4490
|
outputSchema: z.object({
|
|
@@ -4503,6 +4515,7 @@ function createMushiServer(config) {
|
|
|
4503
4515
|
reportId: args.reportId,
|
|
4504
4516
|
agent: args.agent,
|
|
4505
4517
|
inventoryActionNodeId: args.inventoryActionNodeId,
|
|
4518
|
+
...args.targetRepoId ? { targetRepoId: args.targetRepoId } : {},
|
|
4506
4519
|
...pid ? { projectId: pid } : {}
|
|
4507
4520
|
})
|
|
4508
4521
|
});
|
|
@@ -5356,7 +5369,7 @@ Be specific. No generic advice.`
|
|
|
5356
5369
|
annotations: annotationsFor("add_byok_key", TDD_TOOL_CATALOG),
|
|
5357
5370
|
inputSchema: z.object({
|
|
5358
5371
|
projectId: z.string().describe("Project id"),
|
|
5359
|
-
provider: z.enum(["anthropic", "openai", "firecrawl", "browserbase", "cursor"]).describe("Provider slug"),
|
|
5372
|
+
provider: z.enum(["anthropic", "openai", "firecrawl", "browserbase", "cursor", "supabase"]).describe("Provider slug"),
|
|
5360
5373
|
key: z.string().min(8).max(4096).describe("The API key value to add"),
|
|
5361
5374
|
label: z.string().optional().describe("Human-readable label for this key"),
|
|
5362
5375
|
priority: z.number().int().min(0).max(1e4).optional().describe("Priority for ordering (lower = higher priority)"),
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mushi-mushi/mcp",
|
|
3
3
|
"mcpName": "io.github.kensaurus/mushi-mushi",
|
|
4
|
-
"version": "0.24.
|
|
4
|
+
"version": "0.24.2",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "MCP server for Cursor, Claude Code and Copilot. The bug mediator for AI-built apps: plain-English diagnosis + a ready fix, in your editor.",
|
|
7
7
|
"type": "module",
|