@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 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 (0.58.0 is the rename from `@yawlabs/mcph`)
379
+ - [CHANGELOG](./CHANGELOG.md) -- Release notes
384
380
  - [GitHub](https://github.com/YawLabs/mcp) -- Source code and issues
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.hosting dashboard",
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.hosting";
1461
- var CLAUDE_CODE_ALLOW_PATTERN = "mcp__mcp_hosting__*";
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
- existingHasEntry = ENTRY_NAME in container;
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((x) => typeof x === "string") : [];
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.hosting configured on ${os}.`);
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.2" : "dev";
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 status = c.unavailable ? "unavailable on this OS" : c.malformed ? "exists but JSON is malformed \u2014 fix or rerun `yaw-mcp install`" : c.hasMcphEntry ? `OK \u2014 has "${ENTRY_NAME}" entry` : c.exists ? `present, no "${ENTRY_NAME}" entry \u2014 run \`yaw-mcp install ${c.clientId}${c.scope === "user" ? "" : ` --scope ${c.scope}`}\`` : `not configured \u2014 run \`yaw-mcp install ${c.clientId}${c.scope === "user" ? "" : ` --scope ${c.scope}`}\``;
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(" No token resolved \u2014 yaw-mcp cannot start.");
2839
- print(" Run `yaw-mcp install <client> --token mcp_pat_\u2026` to seed ~/.yaw-mcp/config.json.");
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
- exitCode = 1;
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) hasMcphEntry = ENTRY_NAME in 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) hasMcphEntry = ENTRY_NAME in 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.2" : "dev";
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.2" : "dev");
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 mcp.hosting 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.",
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.hosting. Max 50 keys."
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.2" : "dev" },
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.2" : "dev" },
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.hosting to get started." }],
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.hosting or re-run mcp_connect_discover.`
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.hosting.`
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.hosting.
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.hosting. Retry in a moment.";
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.hosting (network unreachable or DNS failure). Check your connection and retry.";
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.hosting dashboard.
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.hosting dashboard; the
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.hosting and prints the public URL.
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.2" : "dev"}
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yawlabs/mcp",
3
- "version": "0.58.2",
3
+ "version": "0.58.3",
4
4
  "mcpName": "io.github.YawLabs/mcp",
5
5
  "description": "Yaw MCP -- MCP servers, managed. Run locally, sync across machines with Pro.",
6
6
  "license": "UNLICENSED",