@selfhost.dev/mcp-server 0.9.0 → 0.10.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.
Files changed (45) hide show
  1. package/README.md +205 -43
  2. package/dist/client.d.ts +7 -0
  3. package/dist/client.js +2 -1
  4. package/dist/client.js.map +1 -1
  5. package/dist/index.js +21 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/tools/alerts.js +12 -2
  8. package/dist/tools/alerts.js.map +1 -1
  9. package/dist/tools/backups.js +29 -5
  10. package/dist/tools/backups.js.map +1 -1
  11. package/dist/tools/billing.js +233 -39
  12. package/dist/tools/billing.js.map +1 -1
  13. package/dist/tools/database-users.js +53 -6
  14. package/dist/tools/database-users.js.map +1 -1
  15. package/dist/tools/deployments.js +47 -3
  16. package/dist/tools/deployments.js.map +1 -1
  17. package/dist/tools/github.js +21 -4
  18. package/dist/tools/github.js.map +1 -1
  19. package/dist/tools/instance-logs.js +2 -2
  20. package/dist/tools/instance-logs.js.map +1 -1
  21. package/dist/tools/instances.js +423 -88
  22. package/dist/tools/instances.js.map +1 -1
  23. package/dist/tools/organizations.js +5 -1
  24. package/dist/tools/organizations.js.map +1 -1
  25. package/dist/tools/pitr.d.ts +22 -0
  26. package/dist/tools/pitr.js +75 -10
  27. package/dist/tools/pitr.js.map +1 -1
  28. package/dist/tools/postgres-extensions.js +176 -57
  29. package/dist/tools/postgres-extensions.js.map +1 -1
  30. package/dist/tools/project-backups.js +130 -0
  31. package/dist/tools/project-backups.js.map +1 -1
  32. package/dist/tools/project-databases.js +16 -23
  33. package/dist/tools/project-databases.js.map +1 -1
  34. package/dist/tools/project-services.js +544 -53
  35. package/dist/tools/project-services.js.map +1 -1
  36. package/dist/tools/project-ssh.d.ts +2 -0
  37. package/dist/tools/project-ssh.js +338 -0
  38. package/dist/tools/project-ssh.js.map +1 -0
  39. package/dist/tools/projects.js +21 -3
  40. package/dist/tools/projects.js.map +1 -1
  41. package/dist/tools/scaling.js +1 -1
  42. package/dist/tools/scaling.js.map +1 -1
  43. package/dist/types/tiers.js +27 -4
  44. package/dist/types/tiers.js.map +1 -1
  45. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"project-services.js","sourceRoot":"","sources":["../../src/tools/project-services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD,kEAAkE;AAClE,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,qBAAqB,EAAE,QAAQ,CAAU,CAAC;AAGrF;;;;GAIG;AACH,MAAM,SAAS,GAMV;IACH,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU;QACjB,cAAc,EAAE,IAAI;QACpB,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,+CAA+C;QAC3D,WAAW,EAAE,4EAA4E;KAC1F;IACD,GAAG,EAAE;QACH,KAAK,EAAE,2BAA2B;QAClC,cAAc,EAAE,KAAK;QACrB,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,gGAAgG;QAC5G,WAAW,EAAE,mBAAmB;KACjC;IACD,qBAAqB,EAAE;QACrB,KAAK,EAAE,0BAA0B;QACjC,cAAc,EAAE,KAAK;QACrB,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,gGAAgG;QAC5G,WAAW,EAAE,mBAAmB;KACjC;IACD,MAAM,EAAE;QACN,KAAK,EAAE,cAAc;QACrB,cAAc,EAAE,KAAK;QACrB,IAAI,EAAE,uFAAuF;QAC7F,UAAU,EAAE,8FAA8F;QAC1G,WAAW,EAAE,mBAAmB;KACjC;CACF,CAAC;AAEF,MAAM,MAAM,GACV,qFAAqF,CAAC;AAExF,SAAS,MAAM;IACb,OAAO,OAAO,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB;;;;;;4JAMwJ,EACxJ;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/B,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,WAAW,EAAE;YACnF,QAAQ,EAAE,uBAAuB;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5H,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB;;;;;;sLAMkL,EAClL;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/B,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QACrC,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,aAAa,WAAW,EAAE,EAAE;YAClG,QAAQ,EAAE,qBAAqB;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kCAAkC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC1H,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB;;;;;;;;;;;;;uWAamW,EACnW;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC/F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACtE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,qKAAqK,CAAC;QACtM,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0GAA0G,CAAC;QAC9K,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oHAAoH,CAAC;QACxL,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;KACvJ,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,EAAE;QAC7G,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAEpE,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;QAE1C,8EAA8E;QAC9E,+EAA+E;QAC/E,2CAA2C;QAC3C,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC/C,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,KAAK,aAAa,uIAAuI;yBAChK,CAAC;iBACH,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,kBAAkB,IAAI,kBAAkB,EAAE,CAAC;YACpD,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,KAAK,aAAa,qIAAqI,QAAQ,CAAC,UAAU,wBAAwB;qBACzM,CAAC;aACH,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAA4B,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAChF,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;YAC7C,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC/C,CAAC;QACD,IAAI,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,aAAa,aAAa,EAAE,EAAE;YACpG,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,QAAQ,EAAE,wBAAwB;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACrH,CAAC;QAED,MAAM,KAAK,GAAG;YACZ,GAAG,QAAQ,CAAC,KAAK,cAAc,IAAI,iDAAiD,QAAQ,CAAC,IAAI,GAAG;YACpG,yEAAyE,QAAQ,CAAC,WAAW,GAAG;SACjG,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CACR,gCAAgC,QAAQ,CAAC,UAAU,wGAAwG,CAC5J,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC7D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,2SAA2S,EAC3S;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAC3E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;KAC9F,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACpD,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,IAAI,OAAO,WAAW,wGAAwG,EAAE,CAAC,EAAE,CAAC;QAC5M,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,aAAa,WAAW,EAAE,EAAE;YAClG,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,EAAE,IAAI,EAAE;YACd,QAAQ,EAAE,wBAAwB;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACrH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC;IAC3E,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"project-services.js","sourceRoot":"","sources":["../../src/tools/project-services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerProjectSshTools(server: McpServer): void;
@@ -0,0 +1,338 @@
1
+ import { z } from "zod";
2
+ import { apiRequest } from "../client.js";
3
+ import { session } from "../session.js";
4
+ /**
5
+ * Customer SSH access to a project's own server - an org-wide public-key library plus
6
+ * per-project installation, and the firewall rule deciding who may reach port 22.
7
+ *
8
+ * The backend shipped this on 2026-08-29 (selfhost#2320, #2322) and NOTHING consumed it for a
9
+ * fortnight: no console surface, no MCP tool, no customer API. The only way in was us adding a
10
+ * key by hand. The console caught up on 2026-09-15; this module is the MCP half.
11
+ *
12
+ * Endpoints:
13
+ * - GET /api/v1/platform/ssh_keys org key library
14
+ * - POST /api/v1/platform/ssh_keys save a public key
15
+ * - DELETE /api/v1/platform/ssh_keys/:pid remove from the library
16
+ * - GET /api/v1/platform/projects/:pid/ssh_keys installed keys + ssh_command + source
17
+ * - POST /api/v1/platform/projects/:pid/ssh_keys install one (optionally + source)
18
+ * - DELETE /api/v1/platform/projects/:pid/ssh_keys/:pid revoke one
19
+ * - PUT /api/v1/platform/projects/:pid/ssh_access which IPs may reach :22
20
+ *
21
+ * IT IS NOT ROOT, AND SAYING "root" HERE WOULD BE WRONG. Customer keys land on a dedicated
22
+ * non-root `shell` user - no sudo, no docker group - so the command is `ssh shell@<ip>`. The
23
+ * box is the customer's own dedicated server but it also runs platform components (the Coolify
24
+ * control plane and its keys, Traefik, our agent), which a root or docker grant would expose.
25
+ * The 2026-09-15 console changelog entry documents `ssh root@<ip>`; the backend moved to the
26
+ * `shell` user after it, and the backend is what answers the request.
27
+ *
28
+ * CONSEQUENCE WORTH VOLUNTEERING: the `shell` user cannot see containers at all - they live
29
+ * under root-owned /var/lib/docker. Someone who wants container logs or resource usage should
30
+ * use `request_project_container_logs` / `request_project_container_stats`, not SSH. Raising a
31
+ * key to docker/root is a separate opt-in that does not exist yet.
32
+ *
33
+ * PUBLIC KEYS ONLY. The platform never sees a private half on this path, and pasting one is
34
+ * refused with a specific message worth relaying verbatim. (A platform-generated keypair is a
35
+ * different path entirely: `create_project` with `generate_ssh_key`, which returns the private
36
+ * key exactly once and never stores it.)
37
+ *
38
+ * SCOPE IS PER SERVER. `authorized_keys` is a per-box file, so a key on project A grants
39
+ * nothing on project B. Adding a key to production and staging is two explicit acts.
40
+ */
41
+ const PLATFORM_BASE = "/api/v1/platform";
42
+ const PROJECTS_BASE = `${PLATFORM_BASE}/projects`;
43
+ const ORG_KEYS_BASE = `${PLATFORM_BASE}/ssh_keys`;
44
+ /** Max keys installed on one project server (422 beyond). */
45
+ const PROJECT_KEY_CAP = 10;
46
+ /** Max entries in a `custom` source list. */
47
+ const MAX_CIDRS = 10;
48
+ const SSH_SOURCE_MODES = ["anywhere", "my_ip", "custom"];
49
+ const ACCESS_LEVELS = ["read_only", "write"];
50
+ const NO_ORG = "No active organization. Call `list_organizations` then `select_organization` first.";
51
+ function hasOrg() {
52
+ return session.getActiveOrgId() !== null;
53
+ }
54
+ const KEY_STATUS_NOTE = "Per-key `status`: `installed` (live on the box), `queued` (added while the project was still provisioning - it installs by itself once provisioning finishes), `pending_approval` (a `write` request waiting on a platform admin) or `rejected` (a write request an admin declined). `access_level` and `approval_status` are on each key too.";
55
+ const SOURCE_NOTE = "`source` / `cidrs` / `requester_ip` ride this payload as well, so one call answers both 'who has a key' and 'which IPs can even reach port 22'. `requester_ip` is the address the backend would store for `my_ip` - useful to show the user, and it reveals whether they are on IPv4 or IPv6 right now.";
56
+ export function registerProjectSshTools(server) {
57
+ server.tool("list_org_ssh_keys", `List the organization's SSH public-key library. Each entry has \`pid\`, \`name\`, \`public_key\`, \`fingerprint\`, who added it and when.
58
+
59
+ This is a LIBRARY, not access: a key here grants nothing until it is installed on a specific project with \`add_project_ssh_key\` (or selected at \`create_project\`). Any org member can read it.`, {}, async () => {
60
+ if (!hasOrg())
61
+ return { content: [{ type: "text", text: NO_ORG }] };
62
+ const result = await apiRequest(ORG_KEYS_BASE, { toolName: "list_org_ssh_keys" });
63
+ if (!result.success) {
64
+ return { content: [{ type: "text", text: `Failed to list SSH keys (${result.statusCode}): ${result.message}` }] };
65
+ }
66
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
67
+ });
68
+ server.tool("add_org_ssh_key", `Save an SSH PUBLIC key to the organization's library so it can be installed on projects.
69
+
70
+ PUBLIC HALF ONLY - the string starting \`ssh-ed25519 \` or \`ssh-rsa \`, normally from \`~/.ssh/id_ed25519.pub\`. Never ask for, accept or forward a private key. The backend refuses one with a specific warning; if you see it, relay it verbatim and tell the user to rotate that key, because they have just pasted a secret somewhere it did not belong.
71
+
72
+ If the user has no key yet, have them run \`ssh-keygen -t ed25519 -C "<their email>"\` and paste the \`.pub\` file. Alternatively \`create_project\` can mint a keypair for them with \`generate_ssh_key\` - that returns the private key ONCE and never stores it.
73
+
74
+ Saving a key does NOT grant access anywhere. Install it per project with \`add_project_ssh_key\`.
75
+
76
+ Owner/admin only. Keys are unique by SHA256 fingerprint within an org, so re-adding the same key 422s and names the collision - that means it is already there, not that something is wrong.`, {
77
+ name: z.string().min(1).max(255).describe("A label the user will recognise later, e.g. \"mac-laptop\""),
78
+ public_key: z.string().min(1).describe("The full public key line, e.g. `ssh-ed25519 AAAA... user@host`. NEVER a private key."),
79
+ }, async ({ name, public_key }) => {
80
+ if (!hasOrg())
81
+ return { content: [{ type: "text", text: NO_ORG }] };
82
+ // Refuse an obvious private key here rather than transmitting it. The backend also
83
+ // rejects it, but by then the secret has already crossed the wire and been logged.
84
+ if (/-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(public_key)) {
85
+ return {
86
+ content: [{
87
+ type: "text",
88
+ text: "That is a PRIVATE key, and it was NOT sent anywhere. Never share a private key - it is the secret half. Send the PUBLIC half instead: the one-line file ending in `.pub` (`ssh-ed25519 AAAA... user@host`), usually `~/.ssh/id_ed25519.pub`. Because this private key has now been pasted into a conversation, treat it as compromised and generate a new keypair.",
89
+ }],
90
+ };
91
+ }
92
+ const result = await apiRequest(ORG_KEYS_BASE, {
93
+ method: "POST",
94
+ body: { name, public_key },
95
+ toolName: "add_org_ssh_key",
96
+ });
97
+ if (!result.success) {
98
+ return { content: [{ type: "text", text: `Failed to save SSH key (${result.statusCode}): ${result.message}` }] };
99
+ }
100
+ return {
101
+ content: [
102
+ { type: "text", text: "Key saved to the organization library. It grants no access yet - install it on a project with `add_project_ssh_key`, or select it when creating one." },
103
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
104
+ ],
105
+ };
106
+ });
107
+ server.tool("delete_org_ssh_key", `Remove a key from the organization's library.
108
+
109
+ THIS DOES NOT REVOKE ACCESS. It is the single most important thing to say before doing it: the key material stays in \`authorized_keys\` on every server it was already installed on, so anyone holding the private half keeps their shell. To actually revoke, call \`remove_project_ssh_key\` on each project the key is installed on FIRST, then delete it here.
110
+
111
+ If the user's intent is "stop this person getting in", deleting the library entry alone does not achieve it. Check \`list_project_ssh_keys\` on their projects and say which ones still carry it.
112
+
113
+ Owner/admin only.`, {
114
+ ssh_key_pid: z.string().min(1).describe("Library key pid (orgkey_...)"),
115
+ confirm: z.boolean().describe("Must be true. Removes the library entry only - it does NOT remove the key from servers it is already installed on."),
116
+ }, async ({ ssh_key_pid, confirm }) => {
117
+ if (!hasOrg())
118
+ return { content: [{ type: "text", text: NO_ORG }] };
119
+ if (!confirm) {
120
+ return {
121
+ content: [{
122
+ type: "text",
123
+ text: `About to delete library key ${ssh_key_pid}.\n\nThis removes the LIBRARY ENTRY ONLY. Any server it is already installed on keeps the key in authorized_keys, so shell access continues. If the goal is to revoke access, first call \`remove_project_ssh_key\` for every project listing this key (\`list_project_ssh_keys\`), then delete it here.\n\nCall again with confirm=true.`,
124
+ }],
125
+ };
126
+ }
127
+ const result = await apiRequest(`${ORG_KEYS_BASE}/${ssh_key_pid}`, {
128
+ method: "DELETE",
129
+ toolName: "delete_org_ssh_key",
130
+ });
131
+ if (!result.success) {
132
+ return { content: [{ type: "text", text: `Failed to delete SSH key (${result.statusCode}): ${result.message}` }] };
133
+ }
134
+ return {
135
+ content: [{
136
+ type: "text",
137
+ text: "Library entry deleted. Reminder: any server this key was already installed on still has it in authorized_keys - use `remove_project_ssh_key` per project to actually revoke shell access.",
138
+ }],
139
+ };
140
+ });
141
+ server.tool("list_project_ssh_keys", `Show shell access for one project: the ready-to-copy \`ssh_command\`, the server's \`public_ip\`, every installed or pending key, and the SSH source firewall rule.
142
+
143
+ \`ssh_command\` is \`ssh shell@<public_ip>\` - a NON-ROOT user, deliberately. Do not tell a user to \`ssh root@\`; it will be refused.
144
+
145
+ IF THE PLAIN COMMAND FAILS WITH "Permission denied (publickey)", the cause is almost always that their key is not one of SSH's default identities, not that the install is broken. The fix is \`ssh -i ~/.ssh/<their key> shell@<public_ip>\`. Offer that before investigating anything else.
146
+
147
+ ${KEY_STATUS_NOTE}
148
+
149
+ ${SOURCE_NOTE}
150
+
151
+ Cap: ${PROJECT_KEY_CAP} keys per project.`, {
152
+ project_pid: z.string().min(1),
153
+ }, async ({ project_pid }) => {
154
+ if (!hasOrg())
155
+ return { content: [{ type: "text", text: NO_ORG }] };
156
+ const result = await apiRequest(`${PROJECTS_BASE}/${project_pid}/ssh_keys`, {
157
+ toolName: "list_project_ssh_keys",
158
+ });
159
+ if (!result.success) {
160
+ return { content: [{ type: "text", text: `Failed to list project SSH keys (${result.statusCode}): ${result.message}` }] };
161
+ }
162
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
163
+ });
164
+ server.tool("add_project_ssh_key", `Install an SSH key on one project's server, giving its holder a shell on the non-root \`shell\` user.
165
+
166
+ TWO WAYS TO NAME THE KEY:
167
+ - \`org_ssh_key_pid\` - an existing library key (\`list_org_ssh_keys\`). Preferred.
168
+ - \`name\` + \`public_key\` - an inline key, which is ALSO saved to the library (or silently reused if a key with the same fingerprint is already there).
169
+
170
+ ACCESS LEVEL, and the difference is who signs off, not what the key can do:
171
+ - \`read_only\` (default) - auto-approves and installs immediately.
172
+ - \`write\` - NOT INSTALLED. It files a request that a SELFHOST PLATFORM ADMIN must approve; admins are emailed, and the requester is emailed on the decision. The call still returns 201, with the key at \`pending_approval\`. Tell the user plainly that they are waiting on us and cannot self-serve it, so they do not sit refreshing.
173
+ Both levels land on the SAME non-root user with the same on-box powers - \`access_level\` is a governance and audit label plus the approval gate, not a capability.
174
+
175
+ You can set the SSH source firewall in the same call with \`source\` (+ \`cidrs\`). KEY AND SOURCE SAVE AS A UNIT: if the key install fails, the source change is discarded with it.
176
+
177
+ Cap ${PROJECT_KEY_CAP} keys per project. Owner/admin only. A key added while the project is still provisioning comes back \`queued\` and installs automatically once provisioning completes - that is normal, not a failure. A failed on-box apply rolls the record back and 422s, so the list never claims a key is installed when it is not.`, {
178
+ project_pid: z.string().min(1),
179
+ org_ssh_key_pid: z.string().optional().describe("Existing library key pid (orgkey_...). Use this OR name+public_key."),
180
+ name: z.string().max(255).optional().describe("Label, when supplying an inline public_key"),
181
+ public_key: z.string().optional().describe("Inline PUBLIC key line. Also saved to the org library. NEVER a private key."),
182
+ access_level: z.enum(ACCESS_LEVELS).optional().describe("read_only (default, installs at once) or write (queued for SelfHost platform-admin approval, NOT installed)"),
183
+ source: z.enum(SSH_SOURCE_MODES).optional().describe("Optionally set the SSH source firewall in the same save: anywhere | my_ip | custom"),
184
+ cidrs: z.array(z.string().min(1)).max(MAX_CIDRS).optional().describe(`Only with source="custom": 1-${MAX_CIDRS} entries. Ignored for my_ip.`),
185
+ }, async ({ project_pid, org_ssh_key_pid, name, public_key, access_level, source, cidrs }) => {
186
+ if (!hasOrg())
187
+ return { content: [{ type: "text", text: NO_ORG }] };
188
+ if (!org_ssh_key_pid && !public_key) {
189
+ return {
190
+ content: [{
191
+ type: "text",
192
+ text: "Give either `org_ssh_key_pid` (from `list_org_ssh_keys`) or an inline `public_key` with a `name`.",
193
+ }],
194
+ };
195
+ }
196
+ if (public_key && /-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(public_key)) {
197
+ return {
198
+ content: [{
199
+ type: "text",
200
+ text: "That is a PRIVATE key, and it was NOT sent anywhere. Send the PUBLIC half - the `.pub` one-liner (`ssh-ed25519 AAAA... user@host`). Treat the pasted private key as compromised and generate a new keypair.",
201
+ }],
202
+ };
203
+ }
204
+ if (source === "custom" && (!cidrs || cidrs.length === 0)) {
205
+ return { content: [{ type: "text", text: `source="custom" needs 1-${MAX_CIDRS} entries in \`cidrs\`.` }] };
206
+ }
207
+ const body = {};
208
+ if (org_ssh_key_pid)
209
+ body.org_ssh_key_pid = org_ssh_key_pid;
210
+ if (public_key) {
211
+ body.public_key = public_key;
212
+ if (name)
213
+ body.name = name;
214
+ }
215
+ if (access_level)
216
+ body.access_level = access_level;
217
+ if (source) {
218
+ body.source = source;
219
+ if (source === "custom" && cidrs)
220
+ body.cidrs = cidrs;
221
+ }
222
+ const result = await apiRequest(`${PROJECTS_BASE}/${project_pid}/ssh_keys`, { method: "POST", body, toolName: "add_project_ssh_key" });
223
+ if (!result.success) {
224
+ return { content: [{ type: "text", text: `Failed to add project SSH key (${result.statusCode}): ${result.message}` }] };
225
+ }
226
+ const lines = [];
227
+ if (access_level === "write") {
228
+ lines.push("Write-access request filed - THE KEY IS NOT INSTALLED. A SelfHost platform admin has to approve it, and they have been emailed. The requester gets an email either way. Nothing further can be done from here; the key shows as `pending_approval` until a decision lands.");
229
+ }
230
+ else {
231
+ lines.push("Key accepted. Check its `status` in the response: `installed` means it is live on the box now, `queued` means the project is still provisioning and it will install automatically when that finishes.");
232
+ lines.push("Connect with the `ssh_command` from `list_project_ssh_keys` - it is `ssh shell@<ip>`, a NON-ROOT user. If that fails with \"Permission denied (publickey)\", the key is not one of SSH's default identities: use `ssh -i ~/.ssh/<key> shell@<ip>`.");
233
+ lines.push("The `shell` user has no sudo and no docker access, so it cannot see containers. For container logs or resource usage use `request_project_container_logs` / `request_project_container_stats` instead.");
234
+ }
235
+ if (source && result.data?.applied === false) {
236
+ lines.push(`SSH source saved but NOT yet applied to the firewall: ${result.data.apply_note ?? "the project is not ready to take it"}. The setting is not lost - a background job applies it.`);
237
+ }
238
+ return {
239
+ content: [
240
+ { type: "text", text: lines.join("\n\n") },
241
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
242
+ ],
243
+ };
244
+ });
245
+ server.tool("remove_project_ssh_key", `Revoke one key's shell access on one project. Unlike deleting a library entry, THIS is what actually removes the key from the server's \`authorized_keys\`.
246
+
247
+ Scope is this project only: the same key stays installed on any other project it was added to. To revoke someone everywhere, do this for each project that lists the key.
248
+
249
+ Owner/admin only. If the on-box removal fails the call 422s and the record is left alone, so the list never claims a key is gone while it still works.`, {
250
+ project_pid: z.string().min(1),
251
+ project_ssh_key_pid: z.string().min(1).describe("The PROJECT key pid (prjkey_...) from `list_project_ssh_keys` - not the library pid"),
252
+ confirm: z.boolean().describe("Must be true. Whoever holds this key loses their shell on this server."),
253
+ }, async ({ project_pid, project_ssh_key_pid, confirm }) => {
254
+ if (!hasOrg())
255
+ return { content: [{ type: "text", text: NO_ORG }] };
256
+ if (!confirm) {
257
+ return {
258
+ content: [{
259
+ type: "text",
260
+ text: `About to remove key ${project_ssh_key_pid} from project ${project_pid}. Whoever holds the private half loses shell access to THIS server; other projects carrying the same key are unaffected.\n\nCall again with confirm=true.`,
261
+ }],
262
+ };
263
+ }
264
+ const result = await apiRequest(`${PROJECTS_BASE}/${project_pid}/ssh_keys/${project_ssh_key_pid}`, {
265
+ method: "DELETE",
266
+ toolName: "remove_project_ssh_key",
267
+ });
268
+ if (!result.success) {
269
+ return { content: [{ type: "text", text: `Failed to remove project SSH key (${result.statusCode}): ${result.message}` }] };
270
+ }
271
+ return {
272
+ content: [
273
+ { type: "text", text: "Key removed from this server's authorized_keys. If the user is revoking access generally, check the org's other projects with `list_project_ssh_keys` - the key survives on each one separately." },
274
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
275
+ ],
276
+ };
277
+ });
278
+ server.tool("set_project_ssh_access", `Set which source IPs may reach the project server's SSH port (22). This is the firewall, separate from which keys are installed - both have to allow you in.
279
+
280
+ THREE MODES:
281
+ - \`anywhere\` (default) - port 22 open to all IPs, protected by key auth alone. Clears any stored list.
282
+ - \`my_ip\` - only the address the REQUEST came from. CAPTURED SERVER-SIDE: any \`cidrs\` you pass are ignored, and because the MCP server makes the request, the address stored is the MACHINE RUNNING THIS MCP SERVER, not the user's laptop. If those differ - and with a remote or containerised MCP they do - you will lock the user out. Read \`requester_ip\` from \`list_project_ssh_keys\` first and confirm it is really the address they SSH from; if not, use \`custom\`.
283
+ - \`custom\` - 1-${MAX_CIDRS} CIDRs you supply. Bare IPs are normalised (\`203.0.113.25\` becomes \`/32\`, IPv6 \`/128\`) and HOST BITS ARE ZEROED, so \`10.1.2.3/8\` is stored as \`10.0.0.0/8\`. Show the stored value back rather than what was typed.
284
+
285
+ LOCKOUT IS ALWAYS RECOVERABLE. This API does not travel over SSH, so a user whose address changed just sets it again. Say so if they hesitate. The platform's own egress is always unioned in, so a user cannot cut us off from the server we manage - do not list those addresses, only the customer's choice.
286
+
287
+ READ \`applied\` IN THE RESPONSE. \`true\` means the firewall was rewritten (or already matched). \`false\` with an \`apply_note\` means the setting was SAVED BUT NOT YET IN FORCE - usually the project is still provisioning - and a retrying job applies it later. The setting is never lost, but do not tell the user the port is locked down until it is.
288
+
289
+ A restricted mode can 422 with "try again shortly": the backend could not verify its own address, and saving then would compose a rule locking the platform out. Retrying is the right answer, not an escalation.
290
+
291
+ IPv4 vs IPv6 catch: \`my_ip\` stores whichever family the API call used. Someone who reaches the API over IPv6 but SSHes over IPv4 needs \`custom\` with both.`, {
292
+ project_pid: z.string().min(1),
293
+ source: z.enum(SSH_SOURCE_MODES).describe("anywhere | my_ip | custom"),
294
+ cidrs: z.array(z.string().min(1)).max(MAX_CIDRS).optional().describe(`Required for source="custom" (1-${MAX_CIDRS}). Ignored otherwise.`),
295
+ confirm: z.boolean().optional().describe("Required for my_ip and custom - both can lock the user out of their own server if the address is wrong."),
296
+ }, async ({ project_pid, source, cidrs, confirm }) => {
297
+ if (!hasOrg())
298
+ return { content: [{ type: "text", text: NO_ORG }] };
299
+ if (source === "custom" && (!cidrs || cidrs.length === 0)) {
300
+ return { content: [{ type: "text", text: `source="custom" needs 1-${MAX_CIDRS} entries in \`cidrs\`.` }] };
301
+ }
302
+ if (source !== "anywhere" && confirm !== true) {
303
+ const warning = source === "my_ip"
304
+ ? "`my_ip` stores the address THIS MCP SERVER connects from, which is not the user's laptop unless the MCP runs there. Check `requester_ip` in `list_project_ssh_keys` and confirm the user really SSHes from it - otherwise use `custom` with their actual address."
305
+ : `Restricting to ${cidrs?.join(", ")} will refuse SSH from every other address.`;
306
+ return {
307
+ content: [{
308
+ type: "text",
309
+ text: `About to restrict SSH on project ${project_pid} to \`${source}\`.\n\n${warning}\n\nThis is recoverable - you can always widen it again from here, since this API does not go over SSH.\n\nCall again with confirm=true.`,
310
+ }],
311
+ };
312
+ }
313
+ const body = { source };
314
+ if (source === "custom" && cidrs)
315
+ body.cidrs = cidrs;
316
+ const result = await apiRequest(`${PROJECTS_BASE}/${project_pid}/ssh_access`, { method: "PUT", body, toolName: "set_project_ssh_access" });
317
+ if (!result.success) {
318
+ const retry = /shortly/i.test(result.message ?? "")
319
+ ? " This one is transient: the backend could not confirm its own address, and saving would have locked the platform out. Retry in a moment."
320
+ : "";
321
+ return { content: [{ type: "text", text: `Failed to set SSH access (${result.statusCode}): ${result.message}.${retry}` }] };
322
+ }
323
+ const applied = result.data?.applied;
324
+ const note = applied === false
325
+ ? `Setting SAVED BUT NOT YET APPLIED to the firewall: ${result.data?.apply_note ?? "the project is not ready to take it"}. Port 22 is still on its previous rule; a background job applies this. Do not report the server as locked down yet.`
326
+ : "Firewall updated - the rule is in force now.";
327
+ const stored = result.data?.cidrs?.length
328
+ ? `\n\nStored as: ${result.data.cidrs.join(", ")} (host bits are zeroed and bare IPs get a /32 or /128, so this can differ from what was typed - quote this version back to the user).`
329
+ : "";
330
+ return {
331
+ content: [
332
+ { type: "text", text: note + stored },
333
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
334
+ ],
335
+ };
336
+ });
337
+ }
338
+ //# sourceMappingURL=project-ssh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-ssh.js","sourceRoot":"","sources":["../../src/tools/project-ssh.ts"],"names":[],"mappings":"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"}
@@ -178,17 +178,28 @@ PLACE IT DELIBERATELY: \`location\` decides where the server runs AND what it co
178
178
 
179
179
  CHECK STOCK FIRST. A cheap size is frequently out of stock in every location that sells it, so a \`server_type\` chosen from the list above without reading \`available\` will often 422. When that happens the 422 names the locations that do have it - use them rather than silently falling back.
180
180
 
181
+ SHELL ACCESS IS OPT-IN AND OFF BY DEFAULT. No customer SSH key is installed unless you ask for one, two ways:
182
+ - \`ssh_key_pids\` - install existing library keys (\`list_org_ssh_keys\`). They show as \`queued\` until the server finishes provisioning, then install by themselves.
183
+ - \`generate_ssh_key: true\` - the platform mints a keypair. **The 202 response carries \`generated_ssh_key.private_key\`, ONCE. It is never stored and cannot be re-fetched.** Hand it to the user immediately, tell them to save it to a file and \`chmod 600\` it, and say plainly that losing it means adding a different key later. Do not summarise the response and drop the key.
184
+ Either way access is to a NON-ROOT \`shell\` user (\`ssh shell@<ip>\`) with no sudo and no docker - it cannot see containers. Keys can also be added later with \`add_project_ssh_key\`.
185
+
181
186
  BACK IT UP AT CREATE: \`backups_requested\` turns on automatic daily server backups (7 kept) as soon as the server exists. It is FREE - there is no backup SKU for projects, so it adds nothing to the bill. Recommend it for anything that will hold data. It can also be turned on later with \`enable_project_backups\`.
182
187
 
183
- COSTS MONEY: the server bills hourly against wallet credit from the moment provisioning starts. A 402 means the wallet is empty or no payment method is linked (\`create_topup\` / \`link_billing_payment_method\`).`, {
188
+ COSTS MONEY: the server bills hourly against wallet credit from the moment provisioning starts. A 402 means the wallet is empty - top up with \`create_topup\`.`, {
184
189
  name: z.string().min(1).max(255).describe("Project name; unique per org, <=255 chars"),
185
190
  description: z.string().optional().describe("Optional free-text description"),
186
191
  backups_requested: z.boolean().optional().describe("Enable automatic daily server backups (7 kept) once provisioned. Free - no backup charge for projects. Defaults to off."),
192
+ ssh_key_pids: z.array(z.string().min(1)).optional()
193
+ .describe("Org SSH library keys (orgkey_..., from `list_org_ssh_keys`) to install on this server as it finishes provisioning. Default is NONE - no customer key is ever installed unless asked for. Unknown pids are skipped silently and never fail the create."),
194
+ generate_ssh_key: z.boolean().optional()
195
+ .describe("Have the platform mint an SSH keypair for this project. The PRIVATE key comes back in this response ONCE and is never stored - see the SSH section of the description before using it."),
196
+ ssh_key_name: z.string().max(255).optional()
197
+ .describe("Label for the generated key (only with generate_ssh_key)"),
187
198
  server_type: z.enum(SERVER_TYPES).optional()
188
199
  .describe(`Server size to provision. Defaults to ${DEFAULT_SERVER_TYPE} (${SERVER_TYPE_SPECS[DEFAULT_SERVER_TYPE]}) - ask the user rather than accepting the default silently.`),
189
200
  location: z.enum(LOCATIONS).optional()
190
201
  .describe(`Where the server runs: ${LOCATIONS.map((l) => `${l} (${LOCATION_LABELS[l]})`).join(", ")}. A location you name is honoured or refused with a 422 - never silently swapped - so an unavailable (server_type, location) pair fails and names locations that would work. Omit to let the platform place it, which picks the first location with stock. A server CANNOT be moved afterwards, and the price is the price of the location it runs in.`),
191
- }, async ({ name, description, server_type, location, backups_requested }) => {
202
+ }, async ({ name, description, server_type, location, backups_requested, ssh_key_pids, generate_ssh_key, ssh_key_name }) => {
192
203
  if (!requireOrg())
193
204
  return { content: [{ type: "text", text: NO_ORG }] };
194
205
  const project = { name };
@@ -200,6 +211,13 @@ COSTS MONEY: the server bills hourly against wallet credit from the moment provi
200
211
  project.location = location;
201
212
  if (backups_requested !== undefined)
202
213
  project.backups_requested = backups_requested;
214
+ if (ssh_key_pids?.length)
215
+ project.ssh_key_pids = ssh_key_pids;
216
+ if (generate_ssh_key) {
217
+ project.generate_ssh_key = true;
218
+ if (ssh_key_name)
219
+ project.ssh_key_name = ssh_key_name;
220
+ }
203
221
  const result = await apiRequest(PROJECTS_BASE, {
204
222
  method: "POST",
205
223
  body: { project },
@@ -213,7 +231,7 @@ COSTS MONEY: the server bills hourly against wallet credit from the moment provi
213
231
  content: [
214
232
  {
215
233
  type: "text",
216
- text: `Project \`${name}\` created on ${size} (${SERVER_TYPE_SPECS[size]})${server_type ? "" : " - the default size, because none was chosen"}${location ? ` in ${LOCATION_LABELS[location]}` : " in a location the platform picked"} and provisioning started (status: pending). ${backups_requested ? "Daily backups will be enabled once the server is up." : "Backups are OFF - `enable_project_backups` turns them on for free."} Billing starts now. This takes ~2-5 min - poll \`get_project\` until status is \`active\` before deploying.`,
234
+ text: `Project \`${name}\` created on ${size} (${SERVER_TYPE_SPECS[size]})${server_type ? "" : " - the default size, because none was chosen"}${location ? ` in ${LOCATION_LABELS[location]}` : " in a location the platform picked"} and provisioning started (status: pending). ${backups_requested ? "Daily backups will be enabled once the server is up." : "Backups are OFF - `enable_project_backups` turns them on for free."} Billing starts now. This takes ~2-5 min - poll \`get_project\` until status is \`active\` before deploying.${generate_ssh_key ? "\n\nSAVE THE PRIVATE KEY NOW. `generated_ssh_key.private_key` in the payload below is returned exactly once and is never stored anywhere - not by us, not retrievable later. Give it to the user verbatim, tell them to write it to a file (e.g. ~/.ssh/selfhost_" + name + ") and run `chmod 600` on it. If it is lost, the only fix is installing a different key with `add_project_ssh_key`." : ""}${ssh_key_pids?.length ? `\n\n${ssh_key_pids.length} SSH key(s) are queued and install automatically once the server is up. Then connect with \`ssh shell@<public_ip>\` - a non-root user with no sudo and no docker access.` : ""}`,
217
235
  },
218
236
  { type: "text", text: JSON.stringify(result.data, null, 2) },
219
237
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
@@ -171,7 +171,7 @@ function validateExpandTrigger(scalingAction, threshold, comparisonOperator) {
171
171
  function explainPolicyError(action, statusCode, message) {
172
172
  const base = `Failed to ${action} scaling policy (${statusCode}): ${message}`;
173
173
  if (/free plan|upgrade to a paid plan/i.test(message)) {
174
- return `${base}\n\nThis is the payment-method gate, not a plan: auto-scaling policies need a linked card on the org. Call \`link_billing_payment_method\` and open the returned URL, then retry. (SelfHost has no plans or tiers - the backend's wording is stale.)`;
174
+ return `${base}\n\nThis is the payment-method gate, not a plan: auto-scaling policies need a saved card on the org. There is no separate linking call - run a real \`create_topup\` with \`save_card: true\` (which needs \`billing_contact_phone\`), then retry. (SelfHost has no plans or tiers - the backend's wording is stale.)`;
175
175
  }
176
176
  return base;
177
177
  }