@yawlabs/mcp 0.58.3 → 0.58.4

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.
Files changed (2) hide show
  1. package/dist/index.js +41 -49
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -2771,7 +2771,7 @@ function selectFlakyNamespaces(entries, limit) {
2771
2771
  }
2772
2772
 
2773
2773
  // src/doctor-cmd.ts
2774
- var VERSION = true ? "0.58.3" : "dev";
2774
+ var VERSION = true ? "0.58.4" : "dev";
2775
2775
  async function runDoctor(opts = {}) {
2776
2776
  if (opts.json) return runDoctorJson(opts);
2777
2777
  const lines = [];
@@ -2852,10 +2852,8 @@ async function runDoctor(opts = {}) {
2852
2852
  let exitCode = 0;
2853
2853
  if (config.token === null) {
2854
2854
  print("DIAGNOSIS");
2855
- print(" Local mode (Free) \u2014 no account token resolved. yaw-mcp runs fine and serves");
2855
+ print(" Local mode (Free) -- fully functional, no account needed. yaw-mcp serves");
2856
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.");
2859
2857
  } else if (config.warnings.length > 0) {
2860
2858
  exitCode = 2;
2861
2859
  print("DIAGNOSIS");
@@ -2930,7 +2928,7 @@ async function runDoctorJson(opts) {
2930
2928
  let exitCode = 0;
2931
2929
  let summary;
2932
2930
  if (config.token === null) {
2933
- summary = "Local mode (Free) \u2014 running without an account token. Sign in with `yaw-mcp login` for account-synced servers.";
2931
+ summary = "Local mode (Free) -- fully functional, no account needed.";
2934
2932
  } else if (config.warnings.length > 0) {
2935
2933
  exitCode = 2;
2936
2934
  summary = "Token present, but warnings need attention.";
@@ -3444,7 +3442,7 @@ function closestNames(query, candidates, limit) {
3444
3442
  // src/login-cmd.ts
3445
3443
  var LOGIN_USAGE = `Usage: yaw-mcp login --key <license-key>
3446
3444
 
3447
- Sign in to your Yaw Team or Yaw MCP Pro account. Your license
3445
+ Sign in to your Yaw Team account. Your license
3448
3446
  key was emailed after purchase.
3449
3447
 
3450
3448
  --key <license-key> Required. The license key from your purchase email.
@@ -3520,7 +3518,7 @@ async function runLogin(opts, io = {
3520
3518
  // src/logout-cmd.ts
3521
3519
  var LOGOUT_USAGE = `Usage: yaw-mcp logout
3522
3520
 
3523
- Sign out of your Yaw Team or Yaw MCP Pro account. Clears the
3521
+ Sign out of your Yaw Team account. Clears the
3524
3522
  local session cookie at ~/.yaw-mcp/team-session.json. Free mode
3525
3523
  resumes on the next yaw-mcp invocation if no YAW_MCP_TOKEN is set.
3526
3524
 
@@ -3651,33 +3649,27 @@ async function showNagInterstitial(opts = {}) {
3651
3649
  const stdin = opts.stdin ?? process.stdin;
3652
3650
  const tty = opts.isTTY ?? (stdout.isTTY === true && stdin.isTTY === true);
3653
3651
  if (!tty) return;
3654
- const lines = [
3652
+ const content = [
3653
+ "Yaw MCP -- support the project",
3655
3654
  "",
3656
- "+----------------------------------------------------------+",
3657
- "| Yaw MCP -- support the project |",
3658
- "+----------------------------------------------------------+",
3659
- "| |",
3660
- "| You're using Yaw MCP free. |",
3661
- "| |",
3662
- "| Pro ($5/mo or $50/yr) adds: |",
3663
- "| * sync bundles + secrets across machines |",
3664
- "| * encrypted secret vault (never logged) |",
3665
- "| * 90-day analytics on AI tool usage |",
3666
- "| * `yaw-mcp stats` command |",
3667
- "| |",
3668
- "| Yaw Team ($15/seat/mo or $150/seat/yr) adds: |",
3669
- "| * everything in Pro, per seat |",
3670
- "| * shared team bundles |",
3671
- "| * shared org secrets |",
3672
- "| * per-seat audit log |",
3673
- "| * SSO |",
3674
- "| |",
3675
- "| Learn more: https://yaw.sh/mcp |",
3676
- "| |",
3677
- "| Press Enter to continue (Ctrl-C to quit). |",
3678
- "+----------------------------------------------------------+",
3679
- ""
3655
+ "You're using Yaw MCP free -- all features included.",
3656
+ "",
3657
+ "Working with a team? Yaw Team ($15/seat/mo or",
3658
+ "$150/seat/yr) adds:",
3659
+ " * shared team bundles across every seat",
3660
+ " * shared org secrets",
3661
+ " * per-seat audit log",
3662
+ " * SSO",
3663
+ "",
3664
+ "Learn more: https://yaw.sh/mcp",
3665
+ "",
3666
+ "Press Enter to continue (Ctrl-C to quit)."
3680
3667
  ];
3668
+ const PAD = 2;
3669
+ const inner = Math.max(...content.map((l) => l.length));
3670
+ const border = `+${"-".repeat(inner + PAD * 2)}+`;
3671
+ const boxed = content.map((l) => `|${" ".repeat(PAD)}${l.padEnd(inner)}${" ".repeat(PAD)}|`);
3672
+ const lines = ["", border, ...boxed, border, ""];
3681
3673
  stdout.write(`${lines.join("\n")}
3682
3674
  `);
3683
3675
  await new Promise((resolve5) => {
@@ -4558,7 +4550,7 @@ Or re-run with --run to upgrade in place.`);
4558
4550
  return { exitCode: 3, lines };
4559
4551
  }
4560
4552
  function readCurrentVersion() {
4561
- return true ? "0.58.3" : "dev";
4553
+ return true ? "0.58.4" : "dev";
4562
4554
  }
4563
4555
 
4564
4556
  // src/auto-upgrade.ts
@@ -4606,7 +4598,7 @@ function defaultSpawn2(cmd, args) {
4606
4598
  async function maybeAutoUpgrade(deps = {}) {
4607
4599
  const optOut = process.env.YAW_MCP_AUTO_UPGRADE;
4608
4600
  if (optOut === "0" || optOut?.toLowerCase() === "false") return;
4609
- const current = deps.currentVersion ?? (true ? "0.58.3" : "dev");
4601
+ const current = deps.currentVersion ?? (true ? "0.58.4" : "dev");
4610
4602
  if (current === "dev") return;
4611
4603
  const method = detectInstallMethod(deps.argvPath ?? process.argv[1]);
4612
4604
  const latest = await (deps.fetchLatestImpl ?? fetchLatestVersion2)();
@@ -5133,7 +5125,7 @@ async function reportHeartbeat(clientName, clientVersion, isRefresh = false) {
5133
5125
  lastLoggedFailureStatus = null;
5134
5126
  lastLoggedErrorMessage = null;
5135
5127
  if (!isRefresh) {
5136
- log("info", "Reported AI client connect to mcp.hosting", {
5128
+ log("info", "Reported AI client connect to Yaw MCP", {
5137
5129
  clientName: clientName ?? null,
5138
5130
  clientVersion: clientVersion ?? null
5139
5131
  });
@@ -5395,7 +5387,7 @@ async function loadLocalBundles(opts = {}) {
5395
5387
  var META_TOOLS = {
5396
5388
  discover: {
5397
5389
  name: "mcp_connect_discover",
5398
- description: 'List the MCP servers installed on the user\'s mcp.hosting account and ready to use. Call this when browsing what\'s available or when the task isn\'t specific yet. If the task is already clear ("file a github issue", "query postgres", "post to slack"), prefer `mcp_connect_dispatch` \u2014 it picks the right server and loads its tools in one call. Load only the servers the CURRENT task needs; each one adds tools to your context. Shows names, namespaces, tool counts, a token-cost estimate per server (e.g. "22 tools, ~2.8k tokens") so you can budget context before activating \u2014 tilde values are estimates based on cached tool metadata, unprefixed values reflect live tool schemas. Scored servers carry an inline `[A]`\u2013`[F]` compliance grade from the mcp.hosting test suite \u2014 treat it as a trust signal and prefer higher-graded alternatives when otherwise equivalent (ungraded servers are unmarked, not penalized). Also surfaces whether each server is loaded, any local CLI it shadows (prefer the MCP tools over the CLI when a shadow is listed), and usage hints ("used Nx" or "often loaded with X") when the signals are present (counts persist across yaw-mcp restarts). Recurring packs that have been loaded together \u22652 times get their own block at the top with a ready-to-run `activate` call \u2014 skip the extra `mcp_connect_suggest` round-trip when the signal is already there. If a `yaw-mcp://guide` resource is listed, read it FIRST: it carries project/user-specific routing rules and credential conventions that override generic defaults.',
5390
+ description: 'List the MCP servers installed on the user\'s Yaw MCP account and ready to use. Call this when browsing what\'s available or when the task isn\'t specific yet. If the task is already clear ("file a github issue", "query postgres", "post to slack"), prefer `mcp_connect_dispatch` \u2014 it picks the right server and loads its tools in one call. Load only the servers the CURRENT task needs; each one adds tools to your context. Shows names, namespaces, tool counts, a token-cost estimate per server (e.g. "22 tools, ~2.8k tokens") so you can budget context before activating \u2014 tilde values are estimates based on cached tool metadata, unprefixed values reflect live tool schemas. Scored servers carry an inline `[A]`\u2013`[F]` compliance grade from the Yaw MCP test suite \u2014 treat it as a trust signal and prefer higher-graded alternatives when otherwise equivalent (ungraded servers are unmarked, not penalized). Also surfaces whether each server is loaded, any local CLI it shadows (prefer the MCP tools over the CLI when a shadow is listed), and usage hints ("used Nx" or "often loaded with X") when the signals are present (counts persist across yaw-mcp restarts). Recurring packs that have been loaded together \u22652 times get their own block at the top with a ready-to-run `activate` call \u2014 skip the extra `mcp_connect_suggest` round-trip when the signal is already there. If a `yaw-mcp://guide` resource is listed, read it FIRST: it carries project/user-specific routing rules and credential conventions that override generic defaults.',
5399
5391
  inputSchema: {
5400
5392
  type: "object",
5401
5393
  properties: {
@@ -5531,7 +5523,7 @@ var META_TOOLS = {
5531
5523
  },
5532
5524
  install: {
5533
5525
  name: "mcp_connect_install",
5534
- description: 'Install a new MCP server on the user\'s mcp.hosting account so it shows up in `mcp_connect_discover` and is ready to use. Call this when the user asks to install/add a server they don\'t already have (check `mcp_connect_discover` first \u2014 if the namespace is already listed, the server is already installed; use `mcp_connect_activate` to load its tools into this session). Fill the install spec from your knowledge of the server: for most official Model Context Protocol servers this is `{ type: "local", command: "npx", args: ["-y", "@modelcontextprotocol/server-<name>"] }`; for uvx/python it\'s `{ command: "uvx", args: ["mcp-server-<name>"] }`; for remote HTTP it\'s `{ type: "remote", url: "https://..." }`. Namespace must match /^[a-z][a-z0-9_]{0,29}$/ and must not collide with one the user already has. If the server needs secrets (API tokens, etc.) pass them in `env` \u2014 they are stored encrypted and never logged. On 403 with `code: "plan_limit_exceeded"` the user is on the free tier cap (3 servers); surface the returned error body verbatim so they see the upgrade URL. After install yaw-mcp auto-refreshes its server list \u2014 the new namespace becomes callable without a restart.',
5526
+ description: 'Install a new MCP server on the user\'s Yaw MCP account so it shows up in `mcp_connect_discover` and is ready to use. Call this when the user asks to install/add a server they don\'t already have (check `mcp_connect_discover` first \u2014 if the namespace is already listed, the server is already installed; use `mcp_connect_activate` to load its tools into this session). Fill the install spec from your knowledge of the server: for most official Model Context Protocol servers this is `{ type: "local", command: "npx", args: ["-y", "@modelcontextprotocol/server-<name>"] }`; for uvx/python it\'s `{ command: "uvx", args: ["mcp-server-<name>"] }`; for remote HTTP it\'s `{ type: "remote", url: "https://..." }`. Namespace must match /^[a-z][a-z0-9_]{0,29}$/ and must not collide with one the user already has. If the server needs secrets (API tokens, etc.) pass them in `env` \u2014 they are stored encrypted and never logged. On 403 with `code: "plan_limit_exceeded"` the user is on the free tier cap (3 servers); surface the returned error body verbatim so they see the upgrade URL. After install yaw-mcp auto-refreshes its server list \u2014 the new namespace becomes callable without a restart.',
5535
5527
  inputSchema: {
5536
5528
  type: "object",
5537
5529
  properties: {
@@ -6522,7 +6514,7 @@ async function probe(name, p) {
6522
6514
  // node/npx/uvx arrive as `npx.cmd` in PATH, and native spawn
6523
6515
  // with shell:false only resolves .exe. Without this, probes
6524
6516
  // falsely report `npx: false` on every Windows machine and
6525
- // mcp.hosting's Test button pre-flight short-circuits with
6517
+ // Yaw MCP's Test button pre-flight short-circuits with
6526
6518
  // "npx not detected" even though upstream activation (which
6527
6519
  // goes through cross-spawn in the MCP SDK) would work fine.
6528
6520
  // All probe args are fixed `--version` strings with no shell
@@ -6602,7 +6594,7 @@ async function reportRuntimes() {
6602
6594
  if (res.statusCode >= 400 && res.statusCode !== 404) {
6603
6595
  log("warn", "Runtime report failed", { status: res.statusCode });
6604
6596
  } else {
6605
- log("info", "Reported runtimes to mcp.hosting", { runtimes });
6597
+ log("info", "Reported runtimes to Yaw MCP", { runtimes });
6606
6598
  }
6607
6599
  } catch (err) {
6608
6600
  log("warn", "Runtime report error", { error: err?.message });
@@ -7001,7 +6993,7 @@ function categorizeSpawnError(err) {
7001
6993
  }
7002
6994
  async function connectToUpstream(config, onDisconnect, onListChanged) {
7003
6995
  const client = new Client(
7004
- { name: "yaw-mcp", version: true ? "0.58.3" : "dev" },
6996
+ { name: "yaw-mcp", version: true ? "0.58.4" : "dev" },
7005
6997
  { capabilities: {} }
7006
6998
  );
7007
6999
  let transport;
@@ -7310,7 +7302,7 @@ var ConnectServer = class _ConnectServer {
7310
7302
  this.apiUrl = apiUrl5;
7311
7303
  this.token = token5;
7312
7304
  this.server = new Server(
7313
- { name: "yaw-mcp", version: true ? "0.58.3" : "dev" },
7305
+ { name: "yaw-mcp", version: true ? "0.58.4" : "dev" },
7314
7306
  {
7315
7307
  capabilities: {
7316
7308
  tools: { listChanged: true },
@@ -7375,7 +7367,7 @@ var ConnectServer = class _ConnectServer {
7375
7367
  activationFailures = /* @__PURE__ */ new Map();
7376
7368
  // Session-scoped credential overrides supplied by the user via MCP
7377
7369
  // elicitation when a server's stderr indicated a missing env var.
7378
- // Cleared on shutdown — persistence belongs in the mcp.hosting
7370
+ // Cleared on shutdown — persistence belongs in the Yaw MCP
7379
7371
  // dashboard, these are a "get me running now" shortcut.
7380
7372
  elicitedEnv = /* @__PURE__ */ new Map();
7381
7373
  // In-flight activation promises, keyed by namespace. Dedupes
@@ -8948,7 +8940,7 @@ Use mcp_connect_discover to see imported servers.`
8948
8940
  return { content: [{ type: "text", text: `Import error: ${err.message}` }], isError: true };
8949
8941
  }
8950
8942
  }
8951
- // Install a new MCP server on the user's mcp.hosting account. Validates
8943
+ // Install a new MCP server on the user's Yaw MCP account. Validates
8952
8944
  // via the shared buildInstallPayload helper so local/remote + namespace
8953
8945
  // shape errors fail here with a clear message instead of burning a
8954
8946
  // round-trip to the backend. On 403 plan-limit we forward the structured
@@ -9595,15 +9587,15 @@ function truncateVersion(v) {
9595
9587
  import { homedir as homedir12 } from "os";
9596
9588
  var STATS_USAGE = `Usage: yaw-mcp stats [--json] [--limit N] [--days N]
9597
9589
 
9598
- Print a digest of recent AI tool calls recorded against your Yaw MCP
9599
- Pro or Yaw Team account.
9590
+ Print a digest of recent AI tool calls recorded against your Yaw
9591
+ Team account.
9600
9592
 
9601
9593
  --limit N Show the most recent N events (default 50, max 1000).
9602
9594
  --days N Restrict to events from the last N days (default 7).
9603
9595
  --json Emit machine-readable JSON (the full event list + summary).
9604
9596
 
9605
9597
  Requires sign-in: \`yaw-mcp login --key <license-key>\`. Free users
9606
- get a pointer to Pro instead -- analytics requires an account.`;
9598
+ get a pointer to Yaw Team instead -- analytics requires an account.`;
9607
9599
  function parseStatsArgs(argv) {
9608
9600
  const opts = {};
9609
9601
  for (let i = 0; i < argv.length; i++) {
@@ -9710,7 +9702,7 @@ async function runStats(opts, io = {
9710
9702
  const home = opts.home ?? homedir12();
9711
9703
  const session = await getSession({ home, baseUrl: opts.baseUrl });
9712
9704
  if (!session) {
9713
- const msg = "Not signed in. Yaw MCP analytics requires a Pro or Yaw Team account.\n - Pro: $5/mo or $50/yr -- https://yaw.sh/mcp#pricing\n - Yaw Team: $15/seat/mo (includes Yaw Terminal team features)\nSign in with: yaw-mcp login --key <license-key>";
9705
+ const msg = "Not signed in. Yaw MCP analytics requires a Yaw Team account.\n - Yaw Team: $15/seat/mo or $150/seat/yr -- https://yaw.sh/mcp\nSign in with: yaw-mcp login --key <license-key>";
9714
9706
  if (opts.json) io.err(`${JSON.stringify({ ok: false, error: "Not signed in.", upsell: msg })}
9715
9707
  `);
9716
9708
  else io.err(`yaw-mcp stats: ${msg}
@@ -9771,7 +9763,7 @@ import { dirname as dirname4, join as join11 } from "path";
9771
9763
  var SYNC_USAGE = `Usage: yaw-mcp sync <push|pull|status> [--json]
9772
9764
 
9773
9765
  Replicate ~/.yaw-mcp/bundles.json across machines via your Yaw
9774
- Team or Yaw MCP Pro account.
9766
+ Team account.
9775
9767
 
9776
9768
  push Strip env values from the local bundles and upload the
9777
9769
  schema to mcp_bundles. Env values stay machine-local.
@@ -10257,7 +10249,7 @@ if (subcommand === "compliance") {
10257
10249
  `);
10258
10250
  process.exit(0);
10259
10251
  } else if (subcommand === "--version" || subcommand === "-V") {
10260
- process.stdout.write(`yaw-mcp ${true ? "0.58.3" : "dev"}
10252
+ process.stdout.write(`yaw-mcp ${true ? "0.58.4" : "dev"}
10261
10253
  `);
10262
10254
  process.exit(0);
10263
10255
  } else if (subcommand && !subcommand.startsWith("-")) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yawlabs/mcp",
3
- "version": "0.58.3",
3
+ "version": "0.58.4",
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",