@yawlabs/mcp 0.58.2 → 0.58.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 -5
- package/dist/chunk-C3WU6HAG.js +0 -0
- package/dist/index.js +74 -31
- package/dist/team-sync-4JF5LBRB.js +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,8 +11,6 @@ Yaw MCP (the `yaw-mcp` CLI, package `@yawlabs/mcp`) is an MCP server that fronts
|
|
|
11
11
|
|
|
12
12
|
If you use one client on one machine with a handful of servers, `claude mcp add` or hand-editing `mcp.json` is fine -- yaw-mcp's value shows up when that setup stops scaling.
|
|
13
13
|
|
|
14
|
-
> **Renamed from `@yawlabs/mcph`** (0.58.0). The old binary `mcph`, env-var prefix `MCPH_*`, config dir `~/.mcph/`, and guide file `MCPH.md` are all renamed -- see [CHANGELOG](./CHANGELOG.md) for the full migration list. The `mcph` package is deprecated with a pointer here.
|
|
15
|
-
|
|
16
14
|
## How it works
|
|
17
15
|
|
|
18
16
|
```
|
|
@@ -338,8 +336,6 @@ Rotate a credential in one place (the dashboard), every machine picks up the new
|
|
|
338
336
|
| `MCP_CONNECT_TIMEOUT` | No | Connection timeout in ms for upstream servers (default: `15000`) |
|
|
339
337
|
| `MCP_CONNECT_IDLE_THRESHOLD` | No | Baseline for idle auto-unload (default: `10`). The per-namespace adaptive cap is `[5, 50]` -- bursty namespaces extend past the baseline, long-idle ones unload at it. |
|
|
340
338
|
|
|
341
|
-
> Legacy `MCPH_*` env vars are no longer read. If a script still sets `MCPH_TOKEN`, rename it to `YAW_MCP_TOKEN`. The migration is in [CHANGELOG](./CHANGELOG.md) under 0.58.0.
|
|
342
|
-
|
|
343
339
|
## Runtime detection
|
|
344
340
|
|
|
345
341
|
On startup, yaw-mcp probes your machine for `node`, `npx`, `python`, `uvx`, and `docker` and reports the snapshot to yaw.sh/mcp. The dashboard uses this to warn before you add a catalog server whose runtime isn't installed (e.g., adding the Sentry server when Python isn't on your PATH). No prompt, no LLM round-trip -- just a yellow banner on the Add Server form.
|
|
@@ -380,5 +376,5 @@ If you find a security issue in yaw-mcp itself, report it via [GitHub's private
|
|
|
380
376
|
|
|
381
377
|
- [yaw.sh/mcp](https://yaw.sh/mcp) -- Dashboard and server management
|
|
382
378
|
- [@yawlabs/mcp-compliance](https://www.npmjs.com/package/@yawlabs/mcp-compliance) -- Test your MCP servers for spec compliance
|
|
383
|
-
- [CHANGELOG](./CHANGELOG.md) -- Release notes
|
|
379
|
+
- [CHANGELOG](./CHANGELOG.md) -- Release notes
|
|
384
380
|
- [GitHub](https://github.com/YawLabs/mcp) -- Source code and issues
|
package/dist/chunk-C3WU6HAG.js
CHANGED
|
File without changes
|
package/dist/index.js
CHANGED
|
@@ -758,7 +758,7 @@ function renderZsh() {
|
|
|
758
758
|
const subcommandDescriptions = {
|
|
759
759
|
install: "Auto-edit an MCP client's config",
|
|
760
760
|
doctor: "Print diagnostic of yaw-mcp setup",
|
|
761
|
-
servers: "List servers in your mcp
|
|
761
|
+
servers: "List servers in your yaw.sh/mcp dashboard",
|
|
762
762
|
bundles: "Browse curated multi-server bundles",
|
|
763
763
|
compliance: "Run the compliance suite against a server",
|
|
764
764
|
"reset-learning": "Clear cross-session learning history",
|
|
@@ -1457,8 +1457,9 @@ function buildLaunchEntry(opts) {
|
|
|
1457
1457
|
if (opts.token) entry.env = { YAW_MCP_TOKEN: opts.token };
|
|
1458
1458
|
return entry;
|
|
1459
1459
|
}
|
|
1460
|
-
var ENTRY_NAME = "mcp
|
|
1461
|
-
var
|
|
1460
|
+
var ENTRY_NAME = "yaw-mcp";
|
|
1461
|
+
var LEGACY_ENTRY_NAME = "mcp.hosting";
|
|
1462
|
+
var CLAUDE_CODE_ALLOW_PATTERN = "mcp__yaw_mcp__*";
|
|
1462
1463
|
function resolveClaudeCodeSettingsPath(scope, opts) {
|
|
1463
1464
|
const { home, projectDir, claudeConfigDir } = opts;
|
|
1464
1465
|
const cfgDir = claudeConfigDir && claudeConfigDir.length > 0 ? claudeConfigDir : null;
|
|
@@ -1686,6 +1687,7 @@ ${USAGE}`);
|
|
|
1686
1687
|
const containerPath = resolved.containerPath;
|
|
1687
1688
|
let existing = {};
|
|
1688
1689
|
let existingHasEntry = false;
|
|
1690
|
+
let legacyPresent = false;
|
|
1689
1691
|
if (existsSync(resolved.absolute)) {
|
|
1690
1692
|
let raw;
|
|
1691
1693
|
try {
|
|
@@ -1713,7 +1715,9 @@ ${USAGE}`);
|
|
|
1713
1715
|
}
|
|
1714
1716
|
const container = readNested(existing, containerPath);
|
|
1715
1717
|
if (typeof container === "object" && container !== null && !Array.isArray(container)) {
|
|
1716
|
-
|
|
1718
|
+
const c = container;
|
|
1719
|
+
existingHasEntry = ENTRY_NAME in c;
|
|
1720
|
+
legacyPresent = LEGACY_ENTRY_NAME in c;
|
|
1717
1721
|
}
|
|
1718
1722
|
}
|
|
1719
1723
|
if (existingHasEntry) {
|
|
@@ -1769,6 +1773,11 @@ ${mcphConfigJson}`);
|
|
|
1769
1773
|
${clientJson}`);
|
|
1770
1774
|
if (settingsPatch?.changed) log2(`# ${settingsPatch.path}
|
|
1771
1775
|
${settingsPatch.nextJson}`);
|
|
1776
|
+
if (legacyPresent) {
|
|
1777
|
+
log2(
|
|
1778
|
+
`Note: legacy "${LEGACY_ENTRY_NAME}" entry at ${resolved.absolute} would remain \u2014 remove it to avoid running yaw-mcp twice.`
|
|
1779
|
+
);
|
|
1780
|
+
}
|
|
1772
1781
|
const wouldWrite = [];
|
|
1773
1782
|
if (writeMcphConfig) wouldWrite.push(mcphConfigPath);
|
|
1774
1783
|
wouldWrite.push(resolved.absolute);
|
|
@@ -1812,6 +1821,11 @@ ${settingsPatch.nextJson}`);
|
|
|
1812
1821
|
}
|
|
1813
1822
|
}
|
|
1814
1823
|
if (target.notes) log2(`Note: ${target.notes}`);
|
|
1824
|
+
if (legacyPresent) {
|
|
1825
|
+
log2(
|
|
1826
|
+
`Note: legacy "${LEGACY_ENTRY_NAME}" entry remains at ${resolved.absolute}. Remove it to avoid running yaw-mcp twice.`
|
|
1827
|
+
);
|
|
1828
|
+
}
|
|
1815
1829
|
log2(`
|
|
1816
1830
|
\u2713 ${target.label} is configured. Restart it to pick up the new MCP server.`);
|
|
1817
1831
|
return { written, wouldWrite: [], messages, exitCode: 0 };
|
|
@@ -1847,12 +1861,15 @@ async function prepareClaudeCodeSettingsPatch(opts) {
|
|
|
1847
1861
|
return { path: path3, nextJson: `${JSON.stringify(merged, null, 2)}
|
|
1848
1862
|
`, changed: true };
|
|
1849
1863
|
}
|
|
1864
|
+
var LEGACY_CLAUDE_CODE_ALLOW_PATTERN = "mcp__mcp_hosting__*";
|
|
1850
1865
|
function mergePermissionsAllow(existing, patterns) {
|
|
1851
1866
|
const out = { ...existing };
|
|
1852
1867
|
const prev = out.permissions;
|
|
1853
1868
|
const perms = typeof prev === "object" && prev !== null && !Array.isArray(prev) ? { ...prev } : {};
|
|
1854
1869
|
const prevAllow = perms.allow;
|
|
1855
|
-
const allow = Array.isArray(prevAllow) ? prevAllow.filter(
|
|
1870
|
+
const allow = Array.isArray(prevAllow) ? prevAllow.filter(
|
|
1871
|
+
(x) => typeof x === "string" && x !== LEGACY_CLAUDE_CODE_ALLOW_PATTERN
|
|
1872
|
+
) : [];
|
|
1856
1873
|
for (const p of patterns) {
|
|
1857
1874
|
if (!allow.includes(p)) allow.push(p);
|
|
1858
1875
|
}
|
|
@@ -2055,7 +2072,7 @@ async function runInstallList(opts, log2) {
|
|
|
2055
2072
|
}));
|
|
2056
2073
|
const installed = probes.filter((p) => p.hasMcphEntry).length;
|
|
2057
2074
|
const available = probes.filter((p) => !p.unavailable).length;
|
|
2058
|
-
log2(`${installed}/${available} client scopes have mcp
|
|
2075
|
+
log2(`${installed}/${available} client scopes have yaw-mcp configured on ${os}.`);
|
|
2059
2076
|
log2("");
|
|
2060
2077
|
const widths = {
|
|
2061
2078
|
client: Math.max("CLIENT".length, ...rows.map((r) => r.client.length)),
|
|
@@ -2754,7 +2771,7 @@ function selectFlakyNamespaces(entries, limit) {
|
|
|
2754
2771
|
}
|
|
2755
2772
|
|
|
2756
2773
|
// src/doctor-cmd.ts
|
|
2757
|
-
var VERSION = true ? "0.58.
|
|
2774
|
+
var VERSION = true ? "0.58.3" : "dev";
|
|
2758
2775
|
async function runDoctor(opts = {}) {
|
|
2759
2776
|
if (opts.json) return runDoctorJson(opts);
|
|
2760
2777
|
const lines = [];
|
|
@@ -2799,7 +2816,8 @@ async function runDoctor(opts = {}) {
|
|
|
2799
2816
|
const clients = probeClients({ home, os, cwd, claudeConfigDir });
|
|
2800
2817
|
print("INSTALLED CLIENTS (probed config files)");
|
|
2801
2818
|
for (const c of clients) {
|
|
2802
|
-
const
|
|
2819
|
+
const installCmd = `yaw-mcp install ${c.clientId}${c.scope === "user" ? "" : ` --scope ${c.scope}`}`;
|
|
2820
|
+
const status = renderClientStatus(c, installCmd);
|
|
2803
2821
|
const label = INSTALL_TARGETS.find((t) => t.clientId === c.clientId)?.label ?? c.clientId;
|
|
2804
2822
|
print(` ${label} (${c.scope}): ${status}`);
|
|
2805
2823
|
print(` ${c.path}`);
|
|
@@ -2833,10 +2851,11 @@ async function runDoctor(opts = {}) {
|
|
|
2833
2851
|
}
|
|
2834
2852
|
let exitCode = 0;
|
|
2835
2853
|
if (config.token === null) {
|
|
2836
|
-
exitCode = 1;
|
|
2837
2854
|
print("DIAGNOSIS");
|
|
2838
|
-
print("
|
|
2839
|
-
print("
|
|
2855
|
+
print(" Local mode (Free) \u2014 no account token resolved. yaw-mcp runs fine and serves");
|
|
2856
|
+
print(" whatever servers are configured locally in ~/.yaw-mcp/bundles.json.");
|
|
2857
|
+
print(" Sign in with `yaw-mcp login` (or set YAW_MCP_TOKEN) to add account-synced");
|
|
2858
|
+
print(" servers and compliance grades.");
|
|
2840
2859
|
} else if (config.warnings.length > 0) {
|
|
2841
2860
|
exitCode = 2;
|
|
2842
2861
|
print("DIAGNOSIS");
|
|
@@ -2911,8 +2930,7 @@ async function runDoctorJson(opts) {
|
|
|
2911
2930
|
let exitCode = 0;
|
|
2912
2931
|
let summary;
|
|
2913
2932
|
if (config.token === null) {
|
|
2914
|
-
|
|
2915
|
-
summary = "No token resolved \u2014 yaw-mcp cannot start.";
|
|
2933
|
+
summary = "Local mode (Free) \u2014 running without an account token. Sign in with `yaw-mcp login` for account-synced servers.";
|
|
2916
2934
|
} else if (config.warnings.length > 0) {
|
|
2917
2935
|
exitCode = 2;
|
|
2918
2936
|
summary = "Token present, but warnings need attention.";
|
|
@@ -3095,6 +3113,19 @@ function schemaSuffix(f) {
|
|
|
3095
3113
|
return ` (schema v${f.version}, this yaw-mcp supports v${CURRENT_SCHEMA_VERSION})`;
|
|
3096
3114
|
return ` (schema v${f.version})`;
|
|
3097
3115
|
}
|
|
3116
|
+
function renderClientStatus(c, installCmd) {
|
|
3117
|
+
if (c.unavailable) return "unavailable on this OS";
|
|
3118
|
+
if (c.malformed) return "exists but JSON is malformed \u2014 fix or rerun `yaw-mcp install`";
|
|
3119
|
+
if (c.hasMcphEntry && c.hasLegacyEntry) {
|
|
3120
|
+
return `OK \u2014 has "${ENTRY_NAME}" entry; legacy "${LEGACY_ENTRY_NAME}" entry also present \u2014 remove it to avoid running yaw-mcp twice`;
|
|
3121
|
+
}
|
|
3122
|
+
if (c.hasMcphEntry) return `OK \u2014 has "${ENTRY_NAME}" entry`;
|
|
3123
|
+
if (c.hasLegacyEntry) {
|
|
3124
|
+
return `legacy "${LEGACY_ENTRY_NAME}" entry present \u2014 run \`${installCmd}\` to migrate, then remove the legacy entry by hand`;
|
|
3125
|
+
}
|
|
3126
|
+
if (c.exists) return `present, no "${ENTRY_NAME}" entry \u2014 run \`${installCmd}\``;
|
|
3127
|
+
return `not configured \u2014 run \`${installCmd}\``;
|
|
3128
|
+
}
|
|
3098
3129
|
function probeClients(opts) {
|
|
3099
3130
|
const out = [];
|
|
3100
3131
|
for (const target of INSTALL_TARGETS) {
|
|
@@ -3106,6 +3137,7 @@ function probeClients(opts) {
|
|
|
3106
3137
|
path: "(n/a)",
|
|
3107
3138
|
exists: false,
|
|
3108
3139
|
hasMcphEntry: false,
|
|
3140
|
+
hasLegacyEntry: false,
|
|
3109
3141
|
malformed: false,
|
|
3110
3142
|
unavailable: true
|
|
3111
3143
|
});
|
|
@@ -3127,6 +3159,7 @@ function probeClients(opts) {
|
|
|
3127
3159
|
}
|
|
3128
3160
|
const exists3 = existsSync3(resolved.absolute);
|
|
3129
3161
|
let hasMcphEntry = false;
|
|
3162
|
+
let hasLegacyEntry = false;
|
|
3130
3163
|
let malformed = false;
|
|
3131
3164
|
if (exists3) {
|
|
3132
3165
|
try {
|
|
@@ -3136,7 +3169,10 @@ function probeClients(opts) {
|
|
|
3136
3169
|
const parsed = parseJsonc(raw);
|
|
3137
3170
|
if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
|
|
3138
3171
|
const container = walkContainer(parsed, resolved.containerPath);
|
|
3139
|
-
if (container)
|
|
3172
|
+
if (container) {
|
|
3173
|
+
hasMcphEntry = ENTRY_NAME in container;
|
|
3174
|
+
hasLegacyEntry = LEGACY_ENTRY_NAME in container;
|
|
3175
|
+
}
|
|
3140
3176
|
} else {
|
|
3141
3177
|
malformed = true;
|
|
3142
3178
|
}
|
|
@@ -3151,6 +3187,7 @@ function probeClients(opts) {
|
|
|
3151
3187
|
path: resolved.absolute,
|
|
3152
3188
|
exists: exists3,
|
|
3153
3189
|
hasMcphEntry,
|
|
3190
|
+
hasLegacyEntry,
|
|
3154
3191
|
malformed,
|
|
3155
3192
|
unavailable: false
|
|
3156
3193
|
});
|
|
@@ -3178,6 +3215,7 @@ async function probeClientsAsync(opts) {
|
|
|
3178
3215
|
path: "(n/a)",
|
|
3179
3216
|
exists: false,
|
|
3180
3217
|
hasMcphEntry: false,
|
|
3218
|
+
hasLegacyEntry: false,
|
|
3181
3219
|
malformed: false,
|
|
3182
3220
|
unavailable: true
|
|
3183
3221
|
});
|
|
@@ -3194,6 +3232,7 @@ async function probeClientsAsync(opts) {
|
|
|
3194
3232
|
});
|
|
3195
3233
|
const exists3 = existsSync3(resolved.absolute);
|
|
3196
3234
|
let hasMcphEntry = false;
|
|
3235
|
+
let hasLegacyEntry = false;
|
|
3197
3236
|
let malformed = false;
|
|
3198
3237
|
if (exists3) {
|
|
3199
3238
|
try {
|
|
@@ -3202,7 +3241,10 @@ async function probeClientsAsync(opts) {
|
|
|
3202
3241
|
const parsed = parseJsonc(raw);
|
|
3203
3242
|
if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
|
|
3204
3243
|
const container = walkContainer(parsed, resolved.containerPath);
|
|
3205
|
-
if (container)
|
|
3244
|
+
if (container) {
|
|
3245
|
+
hasMcphEntry = ENTRY_NAME in container;
|
|
3246
|
+
hasLegacyEntry = LEGACY_ENTRY_NAME in container;
|
|
3247
|
+
}
|
|
3206
3248
|
} else {
|
|
3207
3249
|
malformed = true;
|
|
3208
3250
|
}
|
|
@@ -3217,6 +3259,7 @@ async function probeClientsAsync(opts) {
|
|
|
3217
3259
|
path: resolved.absolute,
|
|
3218
3260
|
exists: exists3,
|
|
3219
3261
|
hasMcphEntry,
|
|
3262
|
+
hasLegacyEntry,
|
|
3220
3263
|
malformed,
|
|
3221
3264
|
unavailable: false
|
|
3222
3265
|
});
|
|
@@ -4515,7 +4558,7 @@ Or re-run with --run to upgrade in place.`);
|
|
|
4515
4558
|
return { exitCode: 3, lines };
|
|
4516
4559
|
}
|
|
4517
4560
|
function readCurrentVersion() {
|
|
4518
|
-
return true ? "0.58.
|
|
4561
|
+
return true ? "0.58.3" : "dev";
|
|
4519
4562
|
}
|
|
4520
4563
|
|
|
4521
4564
|
// src/auto-upgrade.ts
|
|
@@ -4563,7 +4606,7 @@ function defaultSpawn2(cmd, args) {
|
|
|
4563
4606
|
async function maybeAutoUpgrade(deps = {}) {
|
|
4564
4607
|
const optOut = process.env.YAW_MCP_AUTO_UPGRADE;
|
|
4565
4608
|
if (optOut === "0" || optOut?.toLowerCase() === "false") return;
|
|
4566
|
-
const current = deps.currentVersion ?? (true ? "0.58.
|
|
4609
|
+
const current = deps.currentVersion ?? (true ? "0.58.3" : "dev");
|
|
4567
4610
|
if (current === "dev") return;
|
|
4568
4611
|
const method = detectInstallMethod(deps.argvPath ?? process.argv[1]);
|
|
4569
4612
|
const latest = await (deps.fetchLatestImpl ?? fetchLatestVersion2)();
|
|
@@ -5427,7 +5470,7 @@ var META_TOOLS = {
|
|
|
5427
5470
|
},
|
|
5428
5471
|
import_config: {
|
|
5429
5472
|
name: "mcp_connect_import",
|
|
5430
|
-
description: "Install MCP servers on the user's
|
|
5473
|
+
description: "Install MCP servers on the user's Yaw MCP account by importing an existing client config (Claude Desktop, Cursor, VS Code, etc.). Reads the file, parses the mcpServers section, and creates matching entries on the account so they show up in `mcp_connect_discover`. Supported files: claude_desktop_config.json, mcp.json, settings.json. Env vars are NOT imported \u2014 set them in the dashboard.",
|
|
5431
5474
|
inputSchema: {
|
|
5432
5475
|
type: "object",
|
|
5433
5476
|
properties: {
|
|
@@ -5517,7 +5560,7 @@ var META_TOOLS = {
|
|
|
5517
5560
|
env: {
|
|
5518
5561
|
type: "object",
|
|
5519
5562
|
additionalProperties: { type: "string" },
|
|
5520
|
-
description: "Environment variables the server needs (API tokens, connection strings). Stored encrypted on mcp.
|
|
5563
|
+
description: "Environment variables the server needs (API tokens, connection strings). Stored encrypted on yaw.sh/mcp. Max 50 keys."
|
|
5521
5564
|
},
|
|
5522
5565
|
url: {
|
|
5523
5566
|
type: "string",
|
|
@@ -6958,7 +7001,7 @@ function categorizeSpawnError(err) {
|
|
|
6958
7001
|
}
|
|
6959
7002
|
async function connectToUpstream(config, onDisconnect, onListChanged) {
|
|
6960
7003
|
const client = new Client(
|
|
6961
|
-
{ name: "yaw-mcp", version: true ? "0.58.
|
|
7004
|
+
{ name: "yaw-mcp", version: true ? "0.58.3" : "dev" },
|
|
6962
7005
|
{ capabilities: {} }
|
|
6963
7006
|
);
|
|
6964
7007
|
let transport;
|
|
@@ -7267,7 +7310,7 @@ var ConnectServer = class _ConnectServer {
|
|
|
7267
7310
|
this.apiUrl = apiUrl5;
|
|
7268
7311
|
this.token = token5;
|
|
7269
7312
|
this.server = new Server(
|
|
7270
|
-
{ name: "yaw-mcp", version: true ? "0.58.
|
|
7313
|
+
{ name: "yaw-mcp", version: true ? "0.58.3" : "dev" },
|
|
7271
7314
|
{
|
|
7272
7315
|
capabilities: {
|
|
7273
7316
|
tools: { listChanged: true },
|
|
@@ -8543,7 +8586,7 @@ ${activeCount} loaded in this session, ${totalTools} tools in context${tokenSumm
|
|
|
8543
8586
|
}
|
|
8544
8587
|
if (!this.config || this.config.servers.length === 0) {
|
|
8545
8588
|
return {
|
|
8546
|
-
content: [{ type: "text", text: "No servers installed. Add servers at mcp
|
|
8589
|
+
content: [{ type: "text", text: "No servers installed. Add servers at yaw.sh/mcp to get started." }],
|
|
8547
8590
|
isError: true
|
|
8548
8591
|
};
|
|
8549
8592
|
}
|
|
@@ -8554,7 +8597,7 @@ ${activeCount} loaded in this session, ${totalTools} tools in context${tokenSumm
|
|
|
8554
8597
|
content: [
|
|
8555
8598
|
{
|
|
8556
8599
|
type: "text",
|
|
8557
|
-
text: `No servers enabled${note}. Enable servers at mcp
|
|
8600
|
+
text: `No servers enabled${note}. Enable servers at yaw.sh/mcp or re-run mcp_connect_discover.`
|
|
8558
8601
|
}
|
|
8559
8602
|
],
|
|
8560
8603
|
isError: true
|
|
@@ -8571,7 +8614,7 @@ ${activeCount} loaded in this session, ${totalTools} tools in context${tokenSumm
|
|
|
8571
8614
|
content: [
|
|
8572
8615
|
{
|
|
8573
8616
|
type: "text",
|
|
8574
|
-
text: `No installed server matches "${trimmed}". Use mcp_connect_discover to see what's installed, or add a relevant server at mcp
|
|
8617
|
+
text: `No installed server matches "${trimmed}". Use mcp_connect_discover to see what's installed, or add a relevant server at yaw.sh/mcp.`
|
|
8575
8618
|
}
|
|
8576
8619
|
],
|
|
8577
8620
|
isError: true
|
|
@@ -8896,7 +8939,7 @@ Only one will be kept.` : "";
|
|
|
8896
8939
|
type: "text",
|
|
8897
8940
|
text: `Imported ${body.imported || 0} servers (${namespaceList})${body.skipped ? `, ${body.skipped} skipped (already exist)` : ""} from ${resolved}.${collisionWarning}
|
|
8898
8941
|
|
|
8899
|
-
Note: environment variables (API keys, tokens) were NOT imported for security \u2014 set them at mcp.
|
|
8942
|
+
Note: environment variables (API keys, tokens) were NOT imported for security \u2014 set them at yaw.sh/mcp.
|
|
8900
8943
|
Use mcp_connect_discover to see imported servers.`
|
|
8901
8944
|
}
|
|
8902
8945
|
]
|
|
@@ -8996,9 +9039,9 @@ Use mcp_connect_discover to see imported servers.`
|
|
|
8996
9039
|
const code = typeof err === "object" && err !== null ? err.code || err.cause?.code : void 0;
|
|
8997
9040
|
let text;
|
|
8998
9041
|
if (code === "UND_ERR_HEADERS_TIMEOUT" || code === "UND_ERR_BODY_TIMEOUT" || code === "UND_ERR_CONNECT_TIMEOUT") {
|
|
8999
|
-
text = "Install timed out talking to mcp.
|
|
9042
|
+
text = "Install timed out talking to yaw.sh/mcp. Retry in a moment.";
|
|
9000
9043
|
} else if (code === "ECONNREFUSED" || code === "ENOTFOUND" || code === "EAI_AGAIN" || code === "UND_ERR_SOCKET") {
|
|
9001
|
-
text = "Couldn't reach mcp
|
|
9044
|
+
text = "Couldn't reach yaw.sh/mcp (network unreachable or DNS failure). Check your connection and retry.";
|
|
9002
9045
|
} else {
|
|
9003
9046
|
text = "Install failed unexpectedly. Check yaw-mcp logs on this machine for the underlying error.";
|
|
9004
9047
|
}
|
|
@@ -9450,7 +9493,7 @@ ${SERVERS_USAGE}` };
|
|
|
9450
9493
|
}
|
|
9451
9494
|
var SERVERS_USAGE = `Usage: yaw-mcp servers [<namespace-filter>] [--json]
|
|
9452
9495
|
|
|
9453
|
-
List the servers configured in your mcp
|
|
9496
|
+
List the servers configured in your yaw.sh/mcp dashboard.
|
|
9454
9497
|
|
|
9455
9498
|
<namespace-filter> Case-insensitive substring filter on namespace (e.g.,
|
|
9456
9499
|
\`yaw-mcp servers git\` matches github + gitlab).
|
|
@@ -10150,7 +10193,7 @@ if (subcommand === "compliance") {
|
|
|
10150
10193
|
Inspection:
|
|
10151
10194
|
doctor Diagnose setup: config, token, clients, learning,
|
|
10152
10195
|
upgrade, flaky-namespace reliability rollup.
|
|
10153
|
-
servers [<filter>] List servers in your mcp
|
|
10196
|
+
servers [<filter>] List servers in your yaw.sh/mcp dashboard; the
|
|
10154
10197
|
positional arg substring-filters by namespace.
|
|
10155
10198
|
bundles [list|match] Browse curated multi-server bundles. \`list\` shows
|
|
10156
10199
|
all; \`match\` partitions against your enabled
|
|
@@ -10168,7 +10211,7 @@ if (subcommand === "compliance") {
|
|
|
10168
10211
|
Other:
|
|
10169
10212
|
compliance <target> Run the 88-test compliance suite against an MCP
|
|
10170
10213
|
server. --publish posts the report to
|
|
10171
|
-
mcp
|
|
10214
|
+
yaw.sh/mcp and prints the public URL.
|
|
10172
10215
|
help, --help, -h Show this help.
|
|
10173
10216
|
--version, -V Print yaw-mcp version.
|
|
10174
10217
|
|
|
@@ -10214,7 +10257,7 @@ if (subcommand === "compliance") {
|
|
|
10214
10257
|
`);
|
|
10215
10258
|
process.exit(0);
|
|
10216
10259
|
} else if (subcommand === "--version" || subcommand === "-V") {
|
|
10217
|
-
process.stdout.write(`yaw-mcp ${true ? "0.58.
|
|
10260
|
+
process.stdout.write(`yaw-mcp ${true ? "0.58.3" : "dev"}
|
|
10218
10261
|
`);
|
|
10219
10262
|
process.exit(0);
|
|
10220
10263
|
} else if (subcommand && !subcommand.startsWith("-")) {
|
|
File without changes
|