@mushi-mushi/mcp 0.24.6 → 0.26.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 +1 -1
- package/dist/clients.d.ts +21 -2
- package/dist/clients.js +35 -1
- package/dist/index.js +20 -9
- package/dist/server.js +20 -9
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ Restart the editor and ask *"what's broken in prod?"*. For Cursor and Claude, `s
|
|
|
29
29
|
"mcpServers": {
|
|
30
30
|
"mushi-mushi": {
|
|
31
31
|
"command": "npx",
|
|
32
|
-
"args": ["-y", "@mushi-mushi/mcp@
|
|
32
|
+
"args": ["-y", "@mushi-mushi/mcp@0.26.0"],
|
|
33
33
|
"env": {
|
|
34
34
|
"MUSHI_API_KEY": "mushi_xxxxxxxxxxxxxxxxxxxx",
|
|
35
35
|
"MUSHI_PROJECT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
|
package/dist/clients.d.ts
CHANGED
|
@@ -31,6 +31,9 @@ import { FeatureGroup } from './feature-groups.js';
|
|
|
31
31
|
* - claude-desktop — copy-config to claude_desktop_config.json
|
|
32
32
|
* - zed — copy-config to ~/.config/zed/settings.json
|
|
33
33
|
* - any — hosted Streamable HTTP URL + Bearer key
|
|
34
|
+
* - buildOAuthInstall() — keyless variant of cursor / vscode(-insiders) /
|
|
35
|
+
* claude-code / windsurf / any for public pages
|
|
36
|
+
* (URL only, the client's OAuth sign-in runs)
|
|
34
37
|
*
|
|
35
38
|
* NOTES:
|
|
36
39
|
* - All builders are pure functions — no side-effects, no DOM, no React.
|
|
@@ -46,7 +49,7 @@ import { FeatureGroup } from './feature-groups.js';
|
|
|
46
49
|
* editor launch. Synced to package.json by `scripts/sync-mcp-pin.mjs` — never
|
|
47
50
|
* hand-edit the version.
|
|
48
51
|
*/
|
|
49
|
-
declare const MCP_PIN_SPEC = "@mushi-mushi/mcp@0.
|
|
52
|
+
declare const MCP_PIN_SPEC = "@mushi-mushi/mcp@0.26.0";
|
|
50
53
|
interface StdioConfig {
|
|
51
54
|
command: string;
|
|
52
55
|
args: string[];
|
|
@@ -123,7 +126,23 @@ declare function projectServerName(projectId: string, projectName: string): stri
|
|
|
123
126
|
declare function buildStdioConfigObj(projectId: string | undefined, apiKey: string, apiEndpoint: string, features?: readonly string[], pinSpec?: string): StdioConfig;
|
|
124
127
|
declare function buildHttpConfigObj(projectId: string | undefined, apiKey: string, mcpHttpUrl: string, features?: readonly string[], readOnly?: boolean): HttpConfig;
|
|
125
128
|
declare const MCP_CLIENTS: McpClientDef[];
|
|
129
|
+
/** Clients with a URL-only (OAuth) install. */
|
|
130
|
+
type McpOAuthClientId = 'cursor' | 'vscode' | 'vscode-insiders' | 'windsurf' | 'claude-code' | 'any';
|
|
131
|
+
declare const MCP_OAUTH_CLIENT_IDS: readonly McpOAuthClientId[];
|
|
132
|
+
/** Server name written into the client's config by an OAuth install. */
|
|
133
|
+
declare const MCP_OAUTH_SERVER_NAME = "mushi";
|
|
134
|
+
interface McpOAuthInstallInput {
|
|
135
|
+
/** Hosted MCP URL that runs the client's own OAuth sign-in. */
|
|
136
|
+
mcpOAuthUrl: string;
|
|
137
|
+
/** Defaults to MCP_OAUTH_SERVER_NAME. */
|
|
138
|
+
serverName?: string;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Keyless install artifact for one client. Nothing it returns carries a key
|
|
142
|
+
* or a header; the client's OAuth sign-in supplies the credential.
|
|
143
|
+
*/
|
|
144
|
+
declare function buildOAuthInstall(id: McpOAuthClientId, input: McpOAuthInstallInput): McpBuildResult;
|
|
126
145
|
/** Look up a client by id — throws if not found. */
|
|
127
146
|
declare function getMcpClient(id: McpClientId): McpClientDef;
|
|
128
147
|
|
|
129
|
-
export { MCP_CLIENTS, MCP_PIN_SPEC, type McpBuildInput, type McpBuildResult, type McpClientDef, type McpClientId, type McpInstallMethod, buildHttpConfigObj as buildRawHttpConfig, buildStdioConfigObj as buildRawStdioConfig, getMcpClient, projectServerName };
|
|
148
|
+
export { MCP_CLIENTS, MCP_OAUTH_CLIENT_IDS, MCP_OAUTH_SERVER_NAME, MCP_PIN_SPEC, type McpBuildInput, type McpBuildResult, type McpClientDef, type McpClientId, type McpInstallMethod, type McpOAuthClientId, type McpOAuthInstallInput, buildOAuthInstall, buildHttpConfigObj as buildRawHttpConfig, buildStdioConfigObj as buildRawStdioConfig, getMcpClient, projectServerName };
|
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.
|
|
11
|
+
var MCP_PIN_SPEC = "@mushi-mushi/mcp@0.26.0";
|
|
12
12
|
var PIN_SPEC_RE = /^@mushi-mushi\/mcp@\d+\.\d+\.\d+$/;
|
|
13
13
|
function pinOf(pinSpec) {
|
|
14
14
|
return pinSpec && PIN_SPEC_RE.test(pinSpec) ? pinSpec : MCP_PIN_SPEC;
|
|
@@ -262,6 +262,37 @@ var MCP_CLIENTS = [
|
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
];
|
|
265
|
+
var MCP_OAUTH_CLIENT_IDS = [
|
|
266
|
+
"cursor",
|
|
267
|
+
"vscode",
|
|
268
|
+
"vscode-insiders",
|
|
269
|
+
"claude-code",
|
|
270
|
+
"windsurf",
|
|
271
|
+
"any"
|
|
272
|
+
];
|
|
273
|
+
var MCP_OAUTH_SERVER_NAME = "mushi";
|
|
274
|
+
function buildOAuthInstall(id, input) {
|
|
275
|
+
const name = input.serverName ?? MCP_OAUTH_SERVER_NAME;
|
|
276
|
+
const url = input.mcpOAuthUrl;
|
|
277
|
+
switch (id) {
|
|
278
|
+
case "cursor":
|
|
279
|
+
return { kind: "deeplink", url: encodeCursorDeeplink(name, { url }) };
|
|
280
|
+
case "vscode":
|
|
281
|
+
case "vscode-insiders":
|
|
282
|
+
return { kind: "deeplink", url: `${id}:mcp/install?${encodeURIComponent(JSON.stringify({ name, type: "http", url }))}` };
|
|
283
|
+
case "claude-code":
|
|
284
|
+
return { kind: "command", text: `claude mcp add --transport http ${name} ${url}` };
|
|
285
|
+
case "windsurf":
|
|
286
|
+
return {
|
|
287
|
+
kind: "config",
|
|
288
|
+
filePath: "~/.codeium/windsurf/mcp_config.json",
|
|
289
|
+
// Windsurf reads `serverUrl`, not `url`.
|
|
290
|
+
json: JSON.stringify({ mcpServers: { [name]: { serverUrl: url } } }, null, 2)
|
|
291
|
+
};
|
|
292
|
+
case "any":
|
|
293
|
+
return { kind: "remote-url", url, headerSnippet: "" };
|
|
294
|
+
}
|
|
295
|
+
}
|
|
265
296
|
function getMcpClient(id) {
|
|
266
297
|
const client = MCP_CLIENTS.find((c) => c.id === id);
|
|
267
298
|
if (!client) throw new Error(`Unknown MCP client id: ${id}`);
|
|
@@ -269,7 +300,10 @@ function getMcpClient(id) {
|
|
|
269
300
|
}
|
|
270
301
|
export {
|
|
271
302
|
MCP_CLIENTS,
|
|
303
|
+
MCP_OAUTH_CLIENT_IDS,
|
|
304
|
+
MCP_OAUTH_SERVER_NAME,
|
|
272
305
|
MCP_PIN_SPEC,
|
|
306
|
+
buildOAuthInstall,
|
|
273
307
|
buildHttpConfigObj as buildRawHttpConfig,
|
|
274
308
|
buildStdioConfigObj as buildRawStdioConfig,
|
|
275
309
|
getMcpClient,
|
package/dist/index.js
CHANGED
|
@@ -1539,7 +1539,7 @@ var MUSHI_DOCS_INDEX = [
|
|
|
1539
1539
|
route: "/admin/dashboard",
|
|
1540
1540
|
markdown: "admin/dashboard.md",
|
|
1541
1541
|
keywords: ["admin", "dashboard"],
|
|
1542
|
-
headings: ["What to look for first", "Flow canvas", "KPI tiles (14-day window)", "Charts row (14 days)", "Triage queue", "Insights row", "Common tasks", "Morning check (2 minutes)"],
|
|
1542
|
+
headings: ["What to look for first", "Flow canvas (Beginner mode)", "KPI tiles (14-day window)", "Charts row (14 days)", "Triage queue", "Insights row", "Common tasks", "Morning check (2 minutes)"],
|
|
1543
1543
|
excerpt: "The Mushi dashboard answers whether anything broke since your last release \u2014 new reports, overnight fix runs and pipeline health on one screen."
|
|
1544
1544
|
},
|
|
1545
1545
|
{
|
|
@@ -1642,13 +1642,13 @@ var MUSHI_DOCS_INDEX = [
|
|
|
1642
1642
|
excerpt: "The Integration health page monitors Mushi's LLM pipelines, cron jobs and provider connections so you catch a degraded integration early."
|
|
1643
1643
|
},
|
|
1644
1644
|
{
|
|
1645
|
-
title: "
|
|
1645
|
+
title: "To-do",
|
|
1646
1646
|
url: docUrl("/admin/inbox"),
|
|
1647
1647
|
route: "/admin/inbox",
|
|
1648
1648
|
markdown: "admin/inbox.md",
|
|
1649
|
-
keywords: ["admin", "inbox", "
|
|
1649
|
+
keywords: ["admin", "inbox", "to-do"],
|
|
1650
1650
|
headings: ["How it works", "Reading an action card", "Cleared stages strip", "Filtering by PDCA phase", "Common tasks", "Morning triage (the fast path)", "Understanding a stage chip colour", "When the Inbox seems wrong"],
|
|
1651
|
-
excerpt: "The
|
|
1651
|
+
excerpt: "The To-do list gathers everything in Mushi that needs a human decision \u2014 reports, queue failures, health and drift alerts \u2014 in one list."
|
|
1652
1652
|
},
|
|
1653
1653
|
{
|
|
1654
1654
|
title: "Integrations",
|
|
@@ -1674,7 +1674,7 @@ var MUSHI_DOCS_INDEX = [
|
|
|
1674
1674
|
route: "/admin/inventory",
|
|
1675
1675
|
markdown: "admin/inventory.md",
|
|
1676
1676
|
keywords: ["admin", "inventory", "user", "stories"],
|
|
1677
|
-
headings: ["What you see", "Run gates / Run crawler", "SDK-driven discovery", "Surface mode in the graph", "Five gates", "Synthetic monitor", "Spec traceability \u2014 every fix carries the originating Action"
|
|
1677
|
+
headings: ["What you see", "Run gates / Run crawler", "SDK-driven discovery", "Surface mode in the graph", "Five gates", "Watch your live site", "Synthetic monitor", "Spec traceability \u2014 every fix carries the originating Action"],
|
|
1678
1678
|
excerpt: "The User stories page manages your inventory.yaml \u2014 every page, action and story your app should have \u2014 and shows which of them the gates cover."
|
|
1679
1679
|
},
|
|
1680
1680
|
{
|
|
@@ -2277,7 +2277,7 @@ var MUSHI_DOCS_INDEX = [
|
|
|
2277
2277
|
route: "/concepts/trigger-modes",
|
|
2278
2278
|
markdown: "concepts/trigger-modes.md",
|
|
2279
2279
|
keywords: ["concepts", "trigger-modes", "trigger", "modes", "where", "report", "button", "lives"],
|
|
2280
|
-
headings: ["Choosing a Mode", "Bring Your Own Button", "Smart Hide", "Native SDKs"],
|
|
2280
|
+
headings: ["Choosing a Mode", "Bring Your Own Button", "Staying out of the way", "Smart Hide", "Native SDKs"],
|
|
2281
2281
|
excerpt: "Choose where Mushi's bug-report button lives \u2014 corner stamp, edge tab, banner, your own button via attach, or fully manual \u2014 on web and mobile."
|
|
2282
2282
|
},
|
|
2283
2283
|
{
|
|
@@ -7495,6 +7495,11 @@ Be specific. No generic advice.`
|
|
|
7495
7495
|
});
|
|
7496
7496
|
}
|
|
7497
7497
|
{
|
|
7498
|
+
const ALIAS_DEFAULT_ARGS = {
|
|
7499
|
+
setup_check: { mode: "dispatch" },
|
|
7500
|
+
ingest_setup_check: { mode: "ingest" },
|
|
7501
|
+
diagnose_connection: { mode: "full" }
|
|
7502
|
+
};
|
|
7498
7503
|
const llAliasServer = server.server;
|
|
7499
7504
|
const innerHandler = llAliasServer?._requestHandlers?.get("tools/call");
|
|
7500
7505
|
if (typeof innerHandler === "function") {
|
|
@@ -7503,9 +7508,15 @@ Be specific. No generic advice.`
|
|
|
7503
7508
|
const originalName = req?.params?.name;
|
|
7504
7509
|
const canonicalName = originalName ? DEPRECATED_TOOL_ALIASES[originalName] : void 0;
|
|
7505
7510
|
if (canonicalName) {
|
|
7511
|
+
const defaults = ALIAS_DEFAULT_ARGS[originalName];
|
|
7512
|
+
const callerArgs = req?.params?.arguments && typeof req.params.arguments === "object" ? req.params.arguments : {};
|
|
7506
7513
|
const rewritten = {
|
|
7507
7514
|
...args[0],
|
|
7508
|
-
params: {
|
|
7515
|
+
params: {
|
|
7516
|
+
...req?.params ?? {},
|
|
7517
|
+
name: canonicalName,
|
|
7518
|
+
...defaults ? { arguments: { ...defaults, ...callerArgs } } : {}
|
|
7519
|
+
}
|
|
7509
7520
|
};
|
|
7510
7521
|
const result = await innerHandler(rewritten, ...args.slice(1));
|
|
7511
7522
|
if (result != null && typeof result === "object" && "content" in result && Array.isArray(result.content)) {
|
|
@@ -7513,11 +7524,11 @@ Be specific. No generic advice.`
|
|
|
7513
7524
|
return {
|
|
7514
7525
|
...r,
|
|
7515
7526
|
content: [
|
|
7527
|
+
...r.content,
|
|
7516
7528
|
{
|
|
7517
7529
|
type: "text",
|
|
7518
7530
|
text: `\u26A0\uFE0F Deprecated: \`${originalName}\` was renamed to \`${canonicalName}\`. Update your agent config \u2014 this alias will be removed in the next release.`
|
|
7519
|
-
}
|
|
7520
|
-
...r.content
|
|
7531
|
+
}
|
|
7521
7532
|
]
|
|
7522
7533
|
};
|
|
7523
7534
|
}
|
package/dist/server.js
CHANGED
|
@@ -149,7 +149,7 @@ var MUSHI_DOCS_INDEX = [
|
|
|
149
149
|
route: "/admin/dashboard",
|
|
150
150
|
markdown: "admin/dashboard.md",
|
|
151
151
|
keywords: ["admin", "dashboard"],
|
|
152
|
-
headings: ["What to look for first", "Flow canvas", "KPI tiles (14-day window)", "Charts row (14 days)", "Triage queue", "Insights row", "Common tasks", "Morning check (2 minutes)"],
|
|
152
|
+
headings: ["What to look for first", "Flow canvas (Beginner mode)", "KPI tiles (14-day window)", "Charts row (14 days)", "Triage queue", "Insights row", "Common tasks", "Morning check (2 minutes)"],
|
|
153
153
|
excerpt: "The Mushi dashboard answers whether anything broke since your last release \u2014 new reports, overnight fix runs and pipeline health on one screen."
|
|
154
154
|
},
|
|
155
155
|
{
|
|
@@ -252,13 +252,13 @@ var MUSHI_DOCS_INDEX = [
|
|
|
252
252
|
excerpt: "The Integration health page monitors Mushi's LLM pipelines, cron jobs and provider connections so you catch a degraded integration early."
|
|
253
253
|
},
|
|
254
254
|
{
|
|
255
|
-
title: "
|
|
255
|
+
title: "To-do",
|
|
256
256
|
url: docUrl("/admin/inbox"),
|
|
257
257
|
route: "/admin/inbox",
|
|
258
258
|
markdown: "admin/inbox.md",
|
|
259
|
-
keywords: ["admin", "inbox", "
|
|
259
|
+
keywords: ["admin", "inbox", "to-do"],
|
|
260
260
|
headings: ["How it works", "Reading an action card", "Cleared stages strip", "Filtering by PDCA phase", "Common tasks", "Morning triage (the fast path)", "Understanding a stage chip colour", "When the Inbox seems wrong"],
|
|
261
|
-
excerpt: "The
|
|
261
|
+
excerpt: "The To-do list gathers everything in Mushi that needs a human decision \u2014 reports, queue failures, health and drift alerts \u2014 in one list."
|
|
262
262
|
},
|
|
263
263
|
{
|
|
264
264
|
title: "Integrations",
|
|
@@ -284,7 +284,7 @@ var MUSHI_DOCS_INDEX = [
|
|
|
284
284
|
route: "/admin/inventory",
|
|
285
285
|
markdown: "admin/inventory.md",
|
|
286
286
|
keywords: ["admin", "inventory", "user", "stories"],
|
|
287
|
-
headings: ["What you see", "Run gates / Run crawler", "SDK-driven discovery", "Surface mode in the graph", "Five gates", "Synthetic monitor", "Spec traceability \u2014 every fix carries the originating Action"
|
|
287
|
+
headings: ["What you see", "Run gates / Run crawler", "SDK-driven discovery", "Surface mode in the graph", "Five gates", "Watch your live site", "Synthetic monitor", "Spec traceability \u2014 every fix carries the originating Action"],
|
|
288
288
|
excerpt: "The User stories page manages your inventory.yaml \u2014 every page, action and story your app should have \u2014 and shows which of them the gates cover."
|
|
289
289
|
},
|
|
290
290
|
{
|
|
@@ -887,7 +887,7 @@ var MUSHI_DOCS_INDEX = [
|
|
|
887
887
|
route: "/concepts/trigger-modes",
|
|
888
888
|
markdown: "concepts/trigger-modes.md",
|
|
889
889
|
keywords: ["concepts", "trigger-modes", "trigger", "modes", "where", "report", "button", "lives"],
|
|
890
|
-
headings: ["Choosing a Mode", "Bring Your Own Button", "Smart Hide", "Native SDKs"],
|
|
890
|
+
headings: ["Choosing a Mode", "Bring Your Own Button", "Staying out of the way", "Smart Hide", "Native SDKs"],
|
|
891
891
|
excerpt: "Choose where Mushi's bug-report button lives \u2014 corner stamp, edge tab, banner, your own button via attach, or fully manual \u2014 on web and mobile."
|
|
892
892
|
},
|
|
893
893
|
{
|
|
@@ -6171,6 +6171,11 @@ Be specific. No generic advice.`
|
|
|
6171
6171
|
});
|
|
6172
6172
|
}
|
|
6173
6173
|
{
|
|
6174
|
+
const ALIAS_DEFAULT_ARGS = {
|
|
6175
|
+
setup_check: { mode: "dispatch" },
|
|
6176
|
+
ingest_setup_check: { mode: "ingest" },
|
|
6177
|
+
diagnose_connection: { mode: "full" }
|
|
6178
|
+
};
|
|
6174
6179
|
const llAliasServer = server.server;
|
|
6175
6180
|
const innerHandler = llAliasServer?._requestHandlers?.get("tools/call");
|
|
6176
6181
|
if (typeof innerHandler === "function") {
|
|
@@ -6179,9 +6184,15 @@ Be specific. No generic advice.`
|
|
|
6179
6184
|
const originalName = req?.params?.name;
|
|
6180
6185
|
const canonicalName = originalName ? DEPRECATED_TOOL_ALIASES[originalName] : void 0;
|
|
6181
6186
|
if (canonicalName) {
|
|
6187
|
+
const defaults = ALIAS_DEFAULT_ARGS[originalName];
|
|
6188
|
+
const callerArgs = req?.params?.arguments && typeof req.params.arguments === "object" ? req.params.arguments : {};
|
|
6182
6189
|
const rewritten = {
|
|
6183
6190
|
...args[0],
|
|
6184
|
-
params: {
|
|
6191
|
+
params: {
|
|
6192
|
+
...req?.params ?? {},
|
|
6193
|
+
name: canonicalName,
|
|
6194
|
+
...defaults ? { arguments: { ...defaults, ...callerArgs } } : {}
|
|
6195
|
+
}
|
|
6185
6196
|
};
|
|
6186
6197
|
const result = await innerHandler(rewritten, ...args.slice(1));
|
|
6187
6198
|
if (result != null && typeof result === "object" && "content" in result && Array.isArray(result.content)) {
|
|
@@ -6189,11 +6200,11 @@ Be specific. No generic advice.`
|
|
|
6189
6200
|
return {
|
|
6190
6201
|
...r,
|
|
6191
6202
|
content: [
|
|
6203
|
+
...r.content,
|
|
6192
6204
|
{
|
|
6193
6205
|
type: "text",
|
|
6194
6206
|
text: `\u26A0\uFE0F Deprecated: \`${originalName}\` was renamed to \`${canonicalName}\`. Update your agent config \u2014 this alias will be removed in the next release.`
|
|
6195
|
-
}
|
|
6196
|
-
...r.content
|
|
6207
|
+
}
|
|
6197
6208
|
]
|
|
6198
6209
|
};
|
|
6199
6210
|
}
|
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.
|
|
4
|
+
"version": "0.26.0",
|
|
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",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@modelcontextprotocol/core": "^2.0.0",
|
|
46
46
|
"@modelcontextprotocol/server": "^2.0.0",
|
|
47
47
|
"zod": "^4.4.3",
|
|
48
|
-
"@mushi-mushi/core": "^1.
|
|
48
|
+
"@mushi-mushi/core": "^1.33.0"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
51
|
"@sentry/node": "^10.57.0"
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
"node": ">=20.19.0"
|
|
109
109
|
},
|
|
110
110
|
"scripts": {
|
|
111
|
-
"build": "tsup",
|
|
111
|
+
"build": "pnpm run clean:types && tsup",
|
|
112
112
|
"clean:types": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
|
|
113
113
|
"dev": "tsup --watch",
|
|
114
114
|
"lint": "eslint src/",
|