@mushi-mushi/mcp 0.24.1 → 0.24.3
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-IC7PPRRZ.js → chunk-3IVSUYFV.js} +4 -4
- package/dist/clients.d.ts +9 -2
- package/dist/clients.js +19 -15
- package/dist/index.js +16 -7
- package/dist/server.js +13 -4
- 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 · 422 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
|
@@ -507,7 +507,7 @@ var TOOL_CATALOG = [
|
|
|
507
507
|
{
|
|
508
508
|
name: "test_gen_from_report",
|
|
509
509
|
title: "Generate Playwright test from report",
|
|
510
|
-
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 {
|
|
510
|
+
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 { prUrl, prNumber, branch, path }. 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.",
|
|
511
511
|
scope: "mcp:write",
|
|
512
512
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
513
513
|
useCase: "Turn this regression report into an E2E test PR."
|
|
@@ -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.3";
|
|
50
50
|
interface StdioConfig {
|
|
51
51
|
command: string;
|
|
52
52
|
args: string[];
|
|
@@ -84,6 +84,13 @@ interface McpBuildInput {
|
|
|
84
84
|
* of an `mcp:read` key for defence in depth. No-op for stdio configs.
|
|
85
85
|
*/
|
|
86
86
|
readOnly?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* The `@mushi-mushi/mcp@x.y.z` spec to write into stdio configs. The console
|
|
89
|
+
* passes the published version from the sdk_versions catalog, so a release
|
|
90
|
+
* reaches its install buttons without a console redeploy. Anything that is
|
|
91
|
+
* not an exact `@mushi-mushi/mcp@<semver>` falls back to MCP_PIN_SPEC.
|
|
92
|
+
*/
|
|
93
|
+
pinSpec?: string;
|
|
87
94
|
}
|
|
88
95
|
type McpBuildResult = {
|
|
89
96
|
kind: 'deeplink';
|
|
@@ -113,7 +120,7 @@ interface McpClientDef {
|
|
|
113
120
|
}
|
|
114
121
|
/** Build a stable, unique, human-readable MCP server slug for a project. */
|
|
115
122
|
declare function projectServerName(projectId: string, projectName: string): string;
|
|
116
|
-
declare function buildStdioConfigObj(projectId: string | undefined, apiKey: string, apiEndpoint: string, features?: readonly string[]): StdioConfig;
|
|
123
|
+
declare function buildStdioConfigObj(projectId: string | undefined, apiKey: string, apiEndpoint: string, features?: readonly string[], pinSpec?: string): StdioConfig;
|
|
117
124
|
declare function buildHttpConfigObj(projectId: string | undefined, apiKey: string, mcpHttpUrl: string, features?: readonly string[], readOnly?: boolean): HttpConfig;
|
|
118
125
|
declare const MCP_CLIENTS: McpClientDef[];
|
|
119
126
|
/** Look up a client by id — throws if not found. */
|
package/dist/clients.js
CHANGED
|
@@ -8,13 +8,17 @@ 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.3";
|
|
12
|
+
var PIN_SPEC_RE = /^@mushi-mushi\/mcp@\d+\.\d+\.\d+$/;
|
|
13
|
+
function pinOf(pinSpec) {
|
|
14
|
+
return pinSpec && PIN_SPEC_RE.test(pinSpec) ? pinSpec : MCP_PIN_SPEC;
|
|
15
|
+
}
|
|
12
16
|
function projectServerName(projectId, projectName) {
|
|
13
17
|
const nameSlug = projectName.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 22);
|
|
14
18
|
const idSuffix = projectId.replace(/-/g, "").slice(0, 6);
|
|
15
19
|
return `mushi-${nameSlug}-${idSuffix}`;
|
|
16
20
|
}
|
|
17
|
-
function buildStdioConfigObj(projectId, apiKey, apiEndpoint, features = DEFAULT_FEATURE_GROUPS) {
|
|
21
|
+
function buildStdioConfigObj(projectId, apiKey, apiEndpoint, features = DEFAULT_FEATURE_GROUPS, pinSpec) {
|
|
18
22
|
const env = {
|
|
19
23
|
MUSHI_API_ENDPOINT: apiEndpoint,
|
|
20
24
|
MUSHI_API_KEY: apiKey,
|
|
@@ -23,7 +27,7 @@ function buildStdioConfigObj(projectId, apiKey, apiEndpoint, features = DEFAULT_
|
|
|
23
27
|
if (projectId) env.MUSHI_PROJECT_ID = projectId;
|
|
24
28
|
return {
|
|
25
29
|
command: "npx",
|
|
26
|
-
args: ["-y",
|
|
30
|
+
args: ["-y", pinOf(pinSpec)],
|
|
27
31
|
env,
|
|
28
32
|
icon: MUSHI_ICON_PNG_URL
|
|
29
33
|
};
|
|
@@ -67,9 +71,9 @@ var MCP_CLIENTS = [
|
|
|
67
71
|
method: "deeplink",
|
|
68
72
|
transport: "stdio",
|
|
69
73
|
cliIde: "cursor",
|
|
70
|
-
build({ projectId, projectName, apiKey, endpoint, features }) {
|
|
74
|
+
build({ projectId, projectName, apiKey, endpoint, features, pinSpec }) {
|
|
71
75
|
const name = projectId ? projectServerName(projectId, projectName) : `mushi-${projectName.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, 24)}`;
|
|
72
|
-
const config = buildStdioConfigObj(projectId, apiKey, endpoint, features);
|
|
76
|
+
const config = buildStdioConfigObj(projectId, apiKey, endpoint, features, pinSpec);
|
|
73
77
|
return { kind: "deeplink", url: encodeCursorDeeplink(name, config) };
|
|
74
78
|
}
|
|
75
79
|
},
|
|
@@ -80,9 +84,9 @@ var MCP_CLIENTS = [
|
|
|
80
84
|
description: "One-click install via VS Code MCP extension",
|
|
81
85
|
method: "deeplink",
|
|
82
86
|
transport: "stdio",
|
|
83
|
-
build({ projectId, projectName, apiKey, endpoint, features }) {
|
|
87
|
+
build({ projectId, projectName, apiKey, endpoint, features, pinSpec }) {
|
|
84
88
|
const name = projectId ? projectServerName(projectId, projectName) : `mushi-${projectName.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, 24)}`;
|
|
85
|
-
const config = buildStdioConfigObj(projectId, apiKey, endpoint, features);
|
|
89
|
+
const config = buildStdioConfigObj(projectId, apiKey, endpoint, features, pinSpec);
|
|
86
90
|
return { kind: "deeplink", url: encodeVsCodeDeeplink("vscode", name, config) };
|
|
87
91
|
}
|
|
88
92
|
},
|
|
@@ -93,9 +97,9 @@ var MCP_CLIENTS = [
|
|
|
93
97
|
description: "One-click install via VS Code Insiders MCP extension",
|
|
94
98
|
method: "deeplink",
|
|
95
99
|
transport: "stdio",
|
|
96
|
-
build({ projectId, projectName, apiKey, endpoint, features }) {
|
|
100
|
+
build({ projectId, projectName, apiKey, endpoint, features, pinSpec }) {
|
|
97
101
|
const name = projectId ? projectServerName(projectId, projectName) : `mushi-${projectName.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, 24)}`;
|
|
98
|
-
const config = buildStdioConfigObj(projectId, apiKey, endpoint, features);
|
|
102
|
+
const config = buildStdioConfigObj(projectId, apiKey, endpoint, features, pinSpec);
|
|
99
103
|
return { kind: "deeplink", url: encodeVsCodeDeeplink("vscode-insiders", name, config) };
|
|
100
104
|
}
|
|
101
105
|
},
|
|
@@ -137,7 +141,7 @@ var MCP_CLIENTS = [
|
|
|
137
141
|
description: "Copy config into cline_mcp_settings.json",
|
|
138
142
|
method: "config-json",
|
|
139
143
|
transport: "stdio",
|
|
140
|
-
build({ projectId, projectName, apiKey, endpoint, features }) {
|
|
144
|
+
build({ projectId, projectName, apiKey, endpoint, features, pinSpec }) {
|
|
141
145
|
const name = projectId ? projectServerName(projectId, projectName) : `mushi-${projectName.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, 24)}`;
|
|
142
146
|
const env = {
|
|
143
147
|
MUSHI_API_ENDPOINT: endpoint,
|
|
@@ -147,7 +151,7 @@ var MCP_CLIENTS = [
|
|
|
147
151
|
if (projectId) env.MUSHI_PROJECT_ID = projectId;
|
|
148
152
|
const clineConfig = {
|
|
149
153
|
mcpServers: {
|
|
150
|
-
[name]: { command: "npx", args: ["-y",
|
|
154
|
+
[name]: { command: "npx", args: ["-y", pinOf(pinSpec)], env }
|
|
151
155
|
}
|
|
152
156
|
};
|
|
153
157
|
return {
|
|
@@ -183,7 +187,7 @@ var MCP_CLIENTS = [
|
|
|
183
187
|
description: "Copy config into claude_desktop_config.json",
|
|
184
188
|
method: "config-json",
|
|
185
189
|
transport: "stdio",
|
|
186
|
-
build({ projectId, projectName, apiKey, endpoint, features }) {
|
|
190
|
+
build({ projectId, projectName, apiKey, endpoint, features, pinSpec }) {
|
|
187
191
|
const name = projectId ? projectServerName(projectId, projectName) : `mushi-${projectName.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, 24)}`;
|
|
188
192
|
const env = {
|
|
189
193
|
MUSHI_API_ENDPOINT: endpoint,
|
|
@@ -193,7 +197,7 @@ var MCP_CLIENTS = [
|
|
|
193
197
|
if (projectId) env.MUSHI_PROJECT_ID = projectId;
|
|
194
198
|
const desktopConfig = {
|
|
195
199
|
mcpServers: {
|
|
196
|
-
[name]: { command: "npx", args: ["-y",
|
|
200
|
+
[name]: { command: "npx", args: ["-y", pinOf(pinSpec)], env }
|
|
197
201
|
}
|
|
198
202
|
};
|
|
199
203
|
return {
|
|
@@ -211,7 +215,7 @@ var MCP_CLIENTS = [
|
|
|
211
215
|
method: "config-json",
|
|
212
216
|
transport: "stdio",
|
|
213
217
|
cliIde: "zed",
|
|
214
|
-
build({ projectId, projectName, apiKey, endpoint, features }) {
|
|
218
|
+
build({ projectId, projectName, apiKey, endpoint, features, pinSpec }) {
|
|
215
219
|
const name = projectId ? projectServerName(projectId, projectName) : `mushi-${projectName.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, 24)}`;
|
|
216
220
|
const env = {
|
|
217
221
|
MUSHI_API_ENDPOINT: endpoint,
|
|
@@ -224,7 +228,7 @@ var MCP_CLIENTS = [
|
|
|
224
228
|
[name]: {
|
|
225
229
|
command: {
|
|
226
230
|
path: "npx",
|
|
227
|
-
args: ["-y",
|
|
231
|
+
args: ["-y", pinOf(pinSpec)],
|
|
228
232
|
env
|
|
229
233
|
},
|
|
230
234
|
settings: {}
|
package/dist/index.js
CHANGED
|
@@ -583,7 +583,7 @@ var TOOL_CATALOG = [
|
|
|
583
583
|
{
|
|
584
584
|
name: "test_gen_from_report",
|
|
585
585
|
title: "Generate Playwright test from report",
|
|
586
|
-
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 {
|
|
586
|
+
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 { prUrl, prNumber, branch, path }. 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.",
|
|
587
587
|
scope: "mcp:write",
|
|
588
588
|
hints: { readOnly: false, destructive: false, idempotent: false, openWorld: true },
|
|
589
589
|
useCase: "Turn this regression report into an E2E test PR."
|
|
@@ -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"),
|
|
@@ -2709,7 +2718,7 @@ var MUSHI_DOCS_INDEX = [
|
|
|
2709
2718
|
route: "/quickstart/incident-loop",
|
|
2710
2719
|
markdown: "quickstart/incident-loop.md",
|
|
2711
2720
|
keywords: ["quickstart", "incident-loop", "incident", "loop", "bug", "fix", "prompt"],
|
|
2712
|
-
headings: ["Prerequisites", "Step 1 \u2014 Capture or pick a report", "Step 2 \u2014 Pull fix context", "Step 3 \u2014 Generate the fix prompt", "Step 4 \u2014 Paste and ship", "Troubleshooting", "See also"],
|
|
2721
|
+
headings: ["No MCP? Copy the fix prompt", "Prerequisites", "Step 1 \u2014 Capture or pick a report", "Step 2 \u2014 Pull fix context", "Step 3 \u2014 Generate the fix prompt", "Step 4 \u2014 Paste and ship", "Troubleshooting", "See also"],
|
|
2713
2722
|
excerpt: "Run npx mushi-mushi, ship, and turn your first user-reported bug into a plain-English diagnosis and a paste-ready fix for Cursor or Claude Code."
|
|
2714
2723
|
},
|
|
2715
2724
|
{
|
|
@@ -6629,7 +6638,7 @@ Be specific. No generic advice.`
|
|
|
6629
6638
|
description: descOf("improve_qa_story", TDD_TOOL_CATALOG),
|
|
6630
6639
|
annotations: annotationsFor("improve_qa_story", TDD_TOOL_CATALOG),
|
|
6631
6640
|
inputSchema: z.object({
|
|
6632
|
-
projectId: z.string().optional().describe("Project id (
|
|
6641
|
+
projectId: z.string().optional().describe("Project id (defaults to the configured project; one project per call)")
|
|
6633
6642
|
})
|
|
6634
6643
|
},
|
|
6635
6644
|
async ({ projectId: projectId2 }) => {
|
|
@@ -6684,7 +6693,7 @@ Be specific. No generic advice.`
|
|
|
6684
6693
|
annotations: annotationsFor("add_byok_key", TDD_TOOL_CATALOG),
|
|
6685
6694
|
inputSchema: z.object({
|
|
6686
6695
|
projectId: z.string().describe("Project id"),
|
|
6687
|
-
provider: z.enum(["anthropic", "openai", "firecrawl", "browserbase", "cursor"]).describe("Provider slug"),
|
|
6696
|
+
provider: z.enum(["anthropic", "openai", "firecrawl", "browserbase", "cursor", "supabase"]).describe("Provider slug"),
|
|
6688
6697
|
key: z.string().min(8).max(4096).describe("The API key value to add"),
|
|
6689
6698
|
label: z.string().optional().describe("Human-readable label for this key"),
|
|
6690
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-3IVSUYFV.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"),
|
|
@@ -1319,7 +1328,7 @@ var MUSHI_DOCS_INDEX = [
|
|
|
1319
1328
|
route: "/quickstart/incident-loop",
|
|
1320
1329
|
markdown: "quickstart/incident-loop.md",
|
|
1321
1330
|
keywords: ["quickstart", "incident-loop", "incident", "loop", "bug", "fix", "prompt"],
|
|
1322
|
-
headings: ["Prerequisites", "Step 1 \u2014 Capture or pick a report", "Step 2 \u2014 Pull fix context", "Step 3 \u2014 Generate the fix prompt", "Step 4 \u2014 Paste and ship", "Troubleshooting", "See also"],
|
|
1331
|
+
headings: ["No MCP? Copy the fix prompt", "Prerequisites", "Step 1 \u2014 Capture or pick a report", "Step 2 \u2014 Pull fix context", "Step 3 \u2014 Generate the fix prompt", "Step 4 \u2014 Paste and ship", "Troubleshooting", "See also"],
|
|
1323
1332
|
excerpt: "Run npx mushi-mushi, ship, and turn your first user-reported bug into a plain-English diagnosis and a paste-ready fix for Cursor or Claude Code."
|
|
1324
1333
|
},
|
|
1325
1334
|
{
|
|
@@ -5305,7 +5314,7 @@ Be specific. No generic advice.`
|
|
|
5305
5314
|
description: descOf("improve_qa_story", TDD_TOOL_CATALOG),
|
|
5306
5315
|
annotations: annotationsFor("improve_qa_story", TDD_TOOL_CATALOG),
|
|
5307
5316
|
inputSchema: z.object({
|
|
5308
|
-
projectId: z.string().optional().describe("Project id (
|
|
5317
|
+
projectId: z.string().optional().describe("Project id (defaults to the configured project; one project per call)")
|
|
5309
5318
|
})
|
|
5310
5319
|
},
|
|
5311
5320
|
async ({ projectId: projectId2 }) => {
|
|
@@ -5360,7 +5369,7 @@ Be specific. No generic advice.`
|
|
|
5360
5369
|
annotations: annotationsFor("add_byok_key", TDD_TOOL_CATALOG),
|
|
5361
5370
|
inputSchema: z.object({
|
|
5362
5371
|
projectId: z.string().describe("Project id"),
|
|
5363
|
-
provider: z.enum(["anthropic", "openai", "firecrawl", "browserbase", "cursor"]).describe("Provider slug"),
|
|
5372
|
+
provider: z.enum(["anthropic", "openai", "firecrawl", "browserbase", "cursor", "supabase"]).describe("Provider slug"),
|
|
5364
5373
|
key: z.string().min(8).max(4096).describe("The API key value to add"),
|
|
5365
5374
|
label: z.string().optional().describe("Human-readable label for this key"),
|
|
5366
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.3",
|
|
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",
|