@mushi-mushi/mcp 0.24.2 → 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-Y757GGQH.js → chunk-3IVSUYFV.js} +1 -1
- package/dist/clients.d.ts +9 -2
- package/dist/clients.js +19 -15
- package/dist/index.js +3 -3
- package/dist/server.js +3 -3
- 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."
|
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."
|
|
@@ -2718,7 +2718,7 @@ var MUSHI_DOCS_INDEX = [
|
|
|
2718
2718
|
route: "/quickstart/incident-loop",
|
|
2719
2719
|
markdown: "quickstart/incident-loop.md",
|
|
2720
2720
|
keywords: ["quickstart", "incident-loop", "incident", "loop", "bug", "fix", "prompt"],
|
|
2721
|
-
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"],
|
|
2722
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."
|
|
2723
2723
|
},
|
|
2724
2724
|
{
|
|
@@ -6638,7 +6638,7 @@ Be specific. No generic advice.`
|
|
|
6638
6638
|
description: descOf("improve_qa_story", TDD_TOOL_CATALOG),
|
|
6639
6639
|
annotations: annotationsFor("improve_qa_story", TDD_TOOL_CATALOG),
|
|
6640
6640
|
inputSchema: z.object({
|
|
6641
|
-
projectId: z.string().optional().describe("Project id (
|
|
6641
|
+
projectId: z.string().optional().describe("Project id (defaults to the configured project; one project per call)")
|
|
6642
6642
|
})
|
|
6643
6643
|
},
|
|
6644
6644
|
async ({ projectId: projectId2 }) => {
|
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";
|
|
@@ -1328,7 +1328,7 @@ var MUSHI_DOCS_INDEX = [
|
|
|
1328
1328
|
route: "/quickstart/incident-loop",
|
|
1329
1329
|
markdown: "quickstart/incident-loop.md",
|
|
1330
1330
|
keywords: ["quickstart", "incident-loop", "incident", "loop", "bug", "fix", "prompt"],
|
|
1331
|
-
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"],
|
|
1332
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."
|
|
1333
1333
|
},
|
|
1334
1334
|
{
|
|
@@ -5314,7 +5314,7 @@ Be specific. No generic advice.`
|
|
|
5314
5314
|
description: descOf("improve_qa_story", TDD_TOOL_CATALOG),
|
|
5315
5315
|
annotations: annotationsFor("improve_qa_story", TDD_TOOL_CATALOG),
|
|
5316
5316
|
inputSchema: z.object({
|
|
5317
|
-
projectId: z.string().optional().describe("Project id (
|
|
5317
|
+
projectId: z.string().optional().describe("Project id (defaults to the configured project; one project per call)")
|
|
5318
5318
|
})
|
|
5319
5319
|
},
|
|
5320
5320
|
async ({ projectId: projectId2 }) => {
|
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",
|