@mcpcloud/cli 0.26.0-next-20260927194202 → 0.26.0-next-20260927194247

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
@@ -103,7 +103,7 @@ mcp servers get my-api --probe # verify the endpoint serves what the con
103
103
  mcp invoke my-api getUser --args '{"id":"abc"}'
104
104
  ```
105
105
 
106
- Servers are addressable by id, name, or memorable slug throughout the CLI. Two verbs keep a server current after its API changes: `mcp servers push-spec` diffs a local spec against the stored tools (preview by default; `--apply` reconciles schemas by stable operation key, preserving curated descriptions, tags, risk classes, and enrichment), and `mcp servers regenerate` re-fetches the original source spec and rebuilds with the current codegen (`--dry-run` previews the per-tool changes first). To read a server from a different spec URL from now on, `mcp servers update <server> --source-url <url>` checks the new URL, shows what a regenerate from it would change, and stores it (`--dry-run` checks without storing); then regenerate and deploy. Operations a spec marks `x-mcp: false` never become tools.
106
+ Servers are addressable by id, name, or memorable slug throughout the CLI. Two verbs keep a server current after its API changes: `mcp servers push-spec` diffs a local spec against the stored tools (preview by default; `--apply` reconciles schemas by stable operation key, preserving curated descriptions, tags, risk classes, and enrichment), and `mcp servers regenerate` re-fetches the original source spec and rebuilds with the current codegen (`--dry-run` previews the per-tool changes first), storing the spec document it read so the generated code and the drift check follow it. To read a server from a different spec URL from now on, `mcp servers update <server> --source-url <url>` checks the new URL, shows what a regenerate from it would change, and stores it (`--dry-run` checks without storing); then regenerate and deploy. Operations a spec marks `x-mcp: false` never become tools.
107
107
 
108
108
  Neither verb renames a tool — both match tools on their stable operation key. Codegen now keeps an operationId's own case (`getRecording`); servers created before that change keep their lowercased names (`getrecording`), and both previews say how many. `mcp tools rename --from-operation-ids --server <server>` (or `push-spec --rename-to-operation-ids`) adopts the new names while keeping tool ids, access grants, and saved scenarios; `mcp tools rename <old> <new>` renames one tool. Deploy afterwards — the live server keeps the old names until then.
109
109
 
package/dist/index.js CHANGED
@@ -8278,11 +8278,16 @@ async function runPushSpec(serverRef, opts) {
8278
8278
 
8279
8279
  // src/commands/servers-regenerate.ts
8280
8280
  function registerServerRegenerateCommand(servers) {
8281
- servers.command("regenerate <server>").description("Re-fetch a server's source spec and rebuild its tools with the current codegen (preserves customizations). Works for spec-URL, OpenAPI, and GraphQL sources; a pasted or manual server has nothing to re-fetch. Wraps POST /api/v1/server/regenerate.").option("--org <organizationId>", "Organization ID").option("--project <project>", "Project (id or name; defaults to the server's project)").option("--source-url <url>", "Read the spec from this URL for this run only — nothing is stored (needed for GraphQL servers whose introspection endpoint wasn't persisted). To change the stored source, use `mcp servers update <server> --source-url <url>`.").option("--dry-run", "Report what would change (per tool) without writing anything").addHelpText("after", [
8281
+ servers.command("regenerate <server>").description("Re-fetch a server's source spec and rebuild its tools with the current codegen (preserves customizations). Works for spec-URL, OpenAPI, and GraphQL sources; a pasted or manual server has nothing to re-fetch. Wraps POST /api/v1/server/regenerate.").option("--org <organizationId>", "Organization ID").option("--project <project>", "Project (id or name; defaults to the server's project)").option("--source-url <url>", "Read the spec from this URL for this run only: the tools are rebuilt from it, but the stored source and its document are left as they are (needed for GraphQL servers whose introspection endpoint wasn't persisted). To change the stored source, use `mcp servers update <server> --source-url <url>`.").option("--dry-run", "Report what would change (per tool) without writing anything").addHelpText("after", [
8282
8282
  "",
8283
8283
  "Regenerate re-introspects/re-parses the source and rebuilds each tool with",
8284
- "the current codegen, so codegen fixes reach existing servers. It does not",
8285
- "deploy — run `mcp servers deploy` afterwards to ship the rebuilt bundle.",
8284
+ "the current codegen, so codegen fixes AND upstream spec changes reach",
8285
+ "existing servers. It stores the spec document it read — codegen builds",
8286
+ "from that document and the daily drift check compares against it — and",
8287
+ "resets the drift check. It does not deploy — run `mcp servers deploy`",
8288
+ "afterwards to ship the rebuilt bundle.",
8289
+ "With --source-url for a different URL, the document is NOT stored: an",
8290
+ "override is for one run, and the stored source keeps pointing where it did.",
8286
8291
  "It never renames a tool: names that predate the current naming rule",
8287
8292
  "(getrecording vs getRecording) are reported, and",
8288
8293
  "`mcp tools rename --from-operation-ids` adopts the rule.",
@@ -8343,7 +8348,8 @@ function printRegeneration(r, serverId) {
8343
8348
  [`tools ${dryRun ? "that would be added" : "added"}`]: String(r.inserted),
8344
8349
  ...r.unchanged !== undefined ? { "tools unchanged": String(r.unchanged) } : {},
8345
8350
  "tools dropped from spec": String(r.removed),
8346
- generation: r.generationStatus
8351
+ generation: r.generationStatus,
8352
+ ...r.storedDocument ? { "spec document": storedDocumentLine(r.storedDocument) } : {}
8347
8353
  });
8348
8354
  for (const change of r.changes ?? []) {
8349
8355
  printInfo(` ~ ${change.name}${change.fields.length > 0 ? ` (${change.fields.join(", ")})` : ""}`);
@@ -8360,8 +8366,21 @@ function printRegeneration(r, serverId) {
8360
8366
  });
8361
8367
  if (drift)
8362
8368
  printWarn(` ! ${drift}`);
8369
+ if (r.storedDocument === "keptForOverride") {
8370
+ printInfo(c.dim(` → to read ${serverId} from that URL from now on: \`mcp servers update ${serverId} --source-url <url>\`, then regenerate.`));
8371
+ }
8363
8372
  printInfo(c.dim(dryRun ? ` → run \`mcp servers regenerate ${serverId}\` (without --dry-run) to apply, then \`mcp servers deploy ${serverId} --wait\`.` : ` → run \`mcp servers deploy ${serverId} --wait\` to ship the regenerated bundle.`));
8364
8373
  }
8374
+ function storedDocumentLine(disposition) {
8375
+ switch (disposition) {
8376
+ case "refreshed":
8377
+ return "stored — codegen builds from it; drift check reset";
8378
+ case "wouldRefresh":
8379
+ return "would be stored (and the drift check reset)";
8380
+ case "keptForOverride":
8381
+ return "kept — --source-url reads another URL for this run only";
8382
+ }
8383
+ }
8365
8384
 
8366
8385
  // src/commands/servers-lifecycle.ts
8367
8386
  function registerServerLifecycleCommands(servers) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcpcloud/cli",
3
- "version": "0.26.0-next-20260927194202",
3
+ "version": "0.26.0-next-20260927194247",
4
4
  "description": "The official CLI for MCPCloud — manage projects, servers, skills, and API keys from the terminal",
5
5
  "type": "module",
6
6
  "bin": {