@selfhost.dev/mcp-server 0.10.0 → 0.11.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.
package/README.md CHANGED
@@ -106,7 +106,7 @@ Connect a repo, deploy, and it's live - SelfHost takes your code from GitHub to
106
106
  | *"Notify my team channel when a deploy fails"* | Binds a notification channel to the app's deploy outcomes |
107
107
  | *"Stop this build, I pushed the wrong thing"* | Aborts the run in flight, and confirms nothing was rolled back - what is deployed keeps serving |
108
108
  | *"Is my app actually up?"* | Reads `last_deploy_status`, which catches the case a run says `active` but the container has since crashed |
109
- | *"Give me a GitLab / Nextcloud / Metabase / Odoo instance"* | Any of 26 one-click apps, with the right credential shape for each and a real boot-time estimate |
109
+ | *"Give me a GitLab / Nextcloud / Metabase / Odoo instance"* | Any of 36 one-click apps, with the right credential shape for each and a real boot-time estimate |
110
110
  | *"I want a CRM"* | Offers Twenty, EspoCRM or Krayin, asks for the credentials that app actually accepts, and warns when the first visitor to the URL claims the owner account |
111
111
  | *"Why is my n8n container crash-looping?"* | Captures the container's own stdout/stderr from the host - where a failed migration or bad env var actually shows |
112
112
  | *"Why is my project server full?"* | Reads live per-container CPU and memory, so you learn which service is eating the box rather than guessing |
@@ -564,14 +564,18 @@ Postgres/Redis/MySQL/MongoDB provisioned inside a project (distinct from the man
564
564
  | `delete_project_database` | Delete a project database (exact name match + confirmation) |
565
565
 
566
566
  ### PaaS - Project Services (one-click apps)
567
- **Twenty-six templates**, not four: `supabase`, `n8n`, `n8n-with-postgresql`, `twenty`, `wordpress`, `gitlab`, `elasticsearch`, `elasticsearch-with-kibana`, `immich`, `nextcloud`, `jenkins`, `grafana`, `grafana-with-postgresql`, `strapi`, `metabase`, `anythingllm`, `stalwart`, `chatwoot`, `mautic`, `minio`, `open-webui-with-ollama`, `litellm`, `odoo`, `paperless`, `espocrm`, `krayin`. The backend auto-discovers them from its strategy files, so it ships templates ahead of its clients - an unrecognised `template_type` still lists, deletes, inspects and takes a domain.
567
+ **Thirty-six templates**, every one the backend serves: `supabase`, `n8n`, `n8n-with-postgresql`, `twenty`, `wordpress`, `gitlab`, `elasticsearch`, `elasticsearch-with-kibana`, `immich`, `nextcloud`, `jenkins`, `grafana`, `grafana-with-postgresql`, `strapi`, `metabase`, `anythingllm`, `stalwart`, `chatwoot`, `mautic`, `minio`, `open-webui-with-ollama`, `litellm`, `odoo`, `paperless`, `espocrm`, `krayin`, `mysterium`, `mysterium-gateway`, `urnetwork`, `nginx`, `wireguard`, `code-server`, `openssh-server`, `jupyterlab`, `jupyter-datascience`, `laravel`. The backend auto-discovers them from its strategy files, so it ships templates ahead of its clients - an unrecognised `template_type` still lists, deletes, inspects and takes a domain.
568
568
 
569
- **Three credential shapes, and the wrong one is refused before the request goes out** (the backend silently drops fields a template does not accept, which would leave a user believing they set a password):
570
- - *username + password* - becomes the app's admin login. The accepted username form varies: a slug for Jenkins/Grafana/EspoCRM, an **email** for Krayin (a bare `admin` creates an account nobody can sign in as), anything for the rest.
571
- - *password only* - the app owns the username (GitLab is always `root`, Elasticsearch always `elastic`).
569
+ **Five credential shapes, and the wrong one is refused before the request goes out** (the backend silently drops fields a template does not accept, which would leave a user believing they set a password):
570
+ - *username + password* - becomes the app's admin login. The accepted username form varies: a slug for Jenkins/Grafana/EspoCRM, an **email** for Krayin (a bare `admin` creates an account nobody can sign in as), a Linux login name for the OpenSSH server, anything for the rest. WireGuard and the OpenSSH server default it (`admin`, `dev`).
571
+ - *password only* - the app owns the username (GitLab is always `root`, Elasticsearch `elastic`, Mysterium `myst`) or has none (code-server, JupyterLab, Jupyter Data Science).
572
572
  - *nothing* - **the first visitor to the public URL claims the owner account.** Every create of one of these says so unprompted.
573
+ - *no login and nothing to claim* - a static site (Nginx), a fresh app with no accounts yet (Laravel) or an HTTP proxy with no UI (the Mysterium VPN Gateway).
574
+ - *an auth code* - URnetwork takes the token from ur.io/app, and it is never repeated back.
573
575
 
574
- **Capacity is a refusal at declare time, not slow degradation.** A project is one VM: `heavy` templates must leave more headroom (65% memory / 75% disk vs 80% / 85%), some need a minimum *total* host RAM, at most 5 children exist per project, Stalwart is one-per-project (its mail ports are fixed on the host), and Krayin cannot run on an ARM (`cax*`) server at all. A project server cannot be resized, so exhausting it means a new project.
576
+ **Template-specific fields**, each refused on any other template: Mysterium's `panel_source` and the gateway's `proxy_source` (the IP or CIDR allowed in; never a world range), the gateway's `country` and `service_type`, and the OpenSSH server's `public_key` and `password_access` (key-only sign-in needs a key). Mysterium, the gateway and URnetwork share the server's network with other people or spend MYST outside the platform, so each needs `acknowledge_network_terms: true` from the user. Four templates have no web UI (Mysterium, the gateway, URnetwork, the OpenSSH server), so no URL and no custom domain, and four refuse `is_public: false` because the backend would never open the port they are reached on (Mysterium, the gateway, WireGuard, the OpenSSH server).
577
+
578
+ **Capacity is a refusal at declare time, not slow degradation.** A project is one VM: `heavy` templates must leave more headroom (65% memory / 75% disk vs 80% / 85%), some need a minimum *total* host RAM, at most 5 children exist per project, Stalwart, WireGuard, Mysterium and the Mysterium VPN Gateway are one-per-project (their ports are fixed on the host), and Krayin cannot run on an ARM (`cax*`) server at all. A project server cannot be resized, so exhausting it means a new project.
575
579
 
576
580
  Boot windows run from ~3 min (MinIO) to ~25 (GitLab). The create response names the expected window so nothing gets called stuck early.
577
581
 
@@ -579,9 +583,9 @@ Boot windows run from ~3 min (MinIO) to ~25 (GitLab). The create response names
579
583
  |------|-------------|
580
584
  | `list_project_services` | List deployed templates (status, `provisioning` stages, `error_message`) - **no credentials** |
581
585
  | `get_project_service` | One service **including its credentials** - the only endpoint that returns them |
582
- | `create_project_service` | Deploy any of the 26 templates into a project, with per-template credential validation |
586
+ | `create_project_service` | Deploy any of the 36 templates into a project, with per-template credential validation |
583
587
  | `delete_project_service` | Delete a project service (exact name match + confirmation) |
584
- | `set_project_service_custom_domain` | Point a domain at a service's web UI. **DNS must already resolve to the project IP** - the backend refuses otherwise, to avoid burning Let's Encrypt quota on certain-to-fail issuance |
588
+ | `set_project_service_custom_domain` | Point a domain at a service's web UI (every template but the four without one). **DNS must already resolve to the project IP** - the backend refuses otherwise, to avoid burning Let's Encrypt quota on certain-to-fail issuance |
585
589
  | `remove_project_service_custom_domain` | Re-pin the platform hostname (with confirmation) - breaks anything registered against the custom domain |
586
590
 
587
591
  #### Container inspection (services **and** project databases)
@@ -1,11 +1,16 @@
1
+ import { isIP } from "node:net";
1
2
  import { z } from "zod";
2
3
  import { apiRequest } from "../client.js";
3
4
  import { session } from "../session.js";
4
5
  /**
5
6
  * Project services (CoolifyService) - one-click application templates deployed into a project.
6
- * TWENTY-SIX templates are live, resolved backend-side from `ServiceProvisioning::Strategy.all`
7
+ * THIRTY-SIX templates are live, resolved backend-side from `ServiceProvisioning::Strategy.all`
7
8
  * (one strategy file per template, auto-discovered). This module shipped knowing four of them
8
- * until the 2026-09 sync, which meant an agent could only reach a sixth of the catalogue.
9
+ * until the 2026-09 sync, which meant an agent could only reach a sixth of the catalogue; the
10
+ * 2026-09-25 sync added the ten the backend gained after it (Mysterium, Mysterium VPN Gateway,
11
+ * URnetwork, Nginx, WireGuard, code-server, OpenSSH server, JupyterLab, Jupyter Data Science,
12
+ * Laravel). The backend's `compose` strategy is bring-your-own Docker Compose, not a template,
13
+ * and has no tool here.
9
14
  *
10
15
  * Endpoints:
11
16
  * - GET /api/v1/platform/projects/:pid/services
@@ -27,16 +32,33 @@ import { session } from "../session.js";
27
32
  * return a `template_type` this module does not know. Report it by its wire string
28
33
  * rather than guessing - list, delete, logs, stats and custom domains work on any type.
29
34
  *
30
- * THREE CREDENTIAL SHAPES, and getting this wrong is the main failure mode here:
35
+ * FIVE CREDENTIAL SHAPES, and getting this wrong is the main failure mode here:
31
36
  * - `dashboardLogin` - the create takes `dashboard_username` + `dashboard_password`, and they
32
37
  * become the app's admin login. The username's accepted FORM varies:
33
- * any string, a slug (`[a-zA-Z0-9_-]+`), or an email address (Krayin
34
- * signs in by email, so a bare `admin` creates an unusable account).
38
+ * any string, a slug (`[a-zA-Z0-9_-]+`), an email address (Krayin signs
39
+ * in by email, so a bare `admin` creates an unusable account) or a Linux
40
+ * login name (OpenSSH server). WireGuard and OpenSSH default the username
41
+ * (`admin`, `dev`), so it is optional for those two only.
35
42
  * - `fixedRootPassword` - password only; the app owns the username (GitLab is always `root`,
36
- * Elasticsearch always `elastic`). Sending a username is refused here.
43
+ * Elasticsearch `elastic`, Mysterium `myst`) or has none (code-server,
44
+ * JupyterLab, Jupyter Data Science, Odoo, AnythingLLM). Sending a
45
+ * username is refused here.
37
46
  * - `none` - no admin env at all. THE FIRST VISITOR TO THE PUBLIC URL CLAIMS THE
38
47
  * OWNER ACCOUNT. This is a real security consequence and every create
39
48
  * of one of these says so unprompted.
49
+ * - `noLogin` - no login AND nothing to claim: a static site (Nginx), a fresh app with
50
+ * no accounts yet (Laravel) or an HTTP proxy with no UI (Mysterium VPN
51
+ * Gateway). Not the first-visitor warning.
52
+ * - `authCode` - a vendor token instead of a login (URnetwork's code from ur.io/app).
53
+ * It is a secret: never echo it back.
54
+ *
55
+ * THREE TEMPLATES SHARE THE SERVER'S NETWORK WITH OTHER PEOPLE OR SPEND MONEY OUTSIDE THE
56
+ * PLATFORM (Mysterium, Mysterium VPN Gateway, URnetwork), so their create demands
57
+ * `acknowledge_network_terms: true`, the same gate the console puts in front of them. Four
58
+ * templates have NO web component (Mysterium, the gateway, URnetwork, OpenSSH server): no
59
+ * public URL and no custom domain. Four are only reachable through a firewall rule the
60
+ * backend opens when `is_public` is true (Mysterium's panel, the gateway's proxy, WireGuard's
61
+ * UDP port, the OpenSSH port), so `is_public: false` is refused for them.
40
62
  *
41
63
  * CAPACITY IS A DECLARE-TIME REFUSAL, NOT A RUNTIME DEGRADATION. A project is ONE VM.
42
64
  * `heavy` templates (many containers, large pulls, first-boot migrations) are held to
@@ -54,7 +76,9 @@ const TEMPLATE_TYPES = [
54
76
  "grafana-with-postgresql", "strapi", "metabase", "anythingllm",
55
77
  "stalwart", "chatwoot", "mautic", "minio",
56
78
  "open-webui-with-ollama", "litellm", "odoo", "paperless",
57
- "espocrm", "krayin",
79
+ "espocrm", "krayin", "mysterium", "mysterium-gateway",
80
+ "urnetwork", "nginx", "wireguard", "code-server",
81
+ "openssh-server", "jupyterlab", "jupyter-datascience", "laravel",
58
82
  ];
59
83
  const TEMPLATES = {
60
84
  "supabase": {
@@ -316,26 +340,194 @@ const TEMPLATES = {
316
340
  bootMinutes: 15,
317
341
  loginNote: "Krayin signs in with an EMAIL ADDRESS, so dashboard_username must be one - a bare `admin` creates an account nobody can sign in as. The admin is seeded before the first boot.",
318
342
  },
343
+ "mysterium": {
344
+ label: "Mysterium (VPN node)",
345
+ tagline: "A VPN node that shares the server's bandwidth on the Mysterium network, and earns for it.",
346
+ recommendedRamGb: 4,
347
+ heavy: false,
348
+ creds: "fixedRootPassword",
349
+ fixedUsername: "myst",
350
+ minPasswordLength: 12,
351
+ maxPasswordBytes: 72,
352
+ passwordForbids: "nul",
353
+ singleton: true,
354
+ noWebComponent: true,
355
+ requiresPublic: "its node panel (HTTP on port 4449) is reachable only through a firewall rule the backend opens for a public service, restricted to `panel_source` - that restriction, not `is_public: false`, is what keeps it private",
356
+ networkTerms: "a Mysterium node shares this server's bandwidth with strangers on the Mysterium network: their traffic leaves from the project's IP address, under Mysterium's terms",
357
+ bootMinutes: 4,
358
+ loginNote: "The node panel is plain HTTP on port 4449 of the project IP (`public_url` from get_project_service), reachable ONLY from `panel_source`. Sign in as `myst` with the password; on first boot the password can take a minute to apply. Then claim the node on mystnodes.com. A running container does not mean the node is claimed or earning. The allowed IPs can be changed later in the console (Settings, Panel access); this MCP has no tool for that yet.",
359
+ },
360
+ "mysterium-gateway": {
361
+ label: "Mysterium VPN Gateway",
362
+ tagline: "An HTTP proxy that routes your apps through the Mysterium VPN network, paid for in MYST.",
363
+ recommendedRamGb: 4,
364
+ heavy: false,
365
+ creds: "noLogin",
366
+ singleton: true,
367
+ noWebComponent: true,
368
+ requiresPublic: "its HTTP proxy (port 3128) is reachable only through a firewall rule the backend opens for a public service, restricted to `proxy_source` - that restriction, not `is_public: false`, is what keeps it from being an open proxy",
369
+ networkTerms: "the gateway consumes the Mysterium network and is paid for in MYST per GB from a funded identity, separately from the project server, under Mysterium's terms",
370
+ bootMinutes: 10,
371
+ loginNote: "No login and no web UI: it is an HTTP proxy on port 3128 (`proxy_endpoint` from get_project_service), reachable ONLY from `proxy_source`. It carries NO traffic until its identity is registered and funded with MYST: request the `connector` container's logs (request_project_container_logs) for the identity address to fund, the registration state and the exit IP. Then set HTTP_PROXY / HTTPS_PROXY in the app to `proxy_endpoint`.",
372
+ },
373
+ "urnetwork": {
374
+ label: "URnetwork (bandwidth node)",
375
+ tagline: "A provider node that shares the server's bandwidth with the URnetwork network.",
376
+ recommendedRamGb: 4,
377
+ heavy: false,
378
+ creds: "authCode",
379
+ noWebComponent: true,
380
+ networkTerms: "a URnetwork provider shares this server's bandwidth with the URnetwork network: other people's traffic leaves from the project's IP address, under URnetwork's terms",
381
+ bootMinutes: 10,
382
+ loginNote: "No UI and no ports: the node dials out to URnetwork. Manage it (earnings, pausing) at ur.io/app. A running container does NOT prove the auth code was accepted: check the account, or the container logs for `init proxy auth failed`. Auth codes expire; a new one can replace it without recreating the node from the console (Settings, URnetwork account); this MCP has no tool for that yet.",
383
+ },
384
+ "nginx": {
385
+ label: "Nginx (static site)",
386
+ tagline: "A static website served over HTTPS, with custom domains.",
387
+ recommendedRamGb: 4,
388
+ heavy: false,
389
+ creds: "noLogin",
390
+ bootMinutes: 10,
391
+ loginNote: "No login: it serves a welcome page until you upload a site. get_project_service returns `credentials.content_path` (for example `~/nginx-def123`); install a project SSH key (add_project_ssh_key), connect as `shell` to the project IP, and put the site's files there. They are served immediately, with no sudo or Docker. The directory can outlive a deleted service, and a recreated service gets a new one.",
392
+ },
393
+ "wireguard": {
394
+ label: "WireGuard (wg-easy)",
395
+ tagline: "A private WireGuard VPN with an HTTPS admin panel.",
396
+ recommendedRamGb: 4,
397
+ heavy: false,
398
+ creds: "dashboardLogin",
399
+ usernameShape: "any",
400
+ defaultUsername: "admin",
401
+ usernameMaxLength: 64,
402
+ minPasswordLength: 12,
403
+ singleton: true,
404
+ requiresPublic: "VPN clients reach it on UDP 51820 only through a firewall rule the backend opens for a public service; the admin panel is password-protected HTTPS",
405
+ bootMinutes: 10,
406
+ loginNote: "Sign in to the admin panel over HTTPS with this login, add VPN peers there, and import their configurations into WireGuard clients. Clients connect to `wireguard_endpoint` (the project IP, UDP 51820). A running container does not prove a working tunnel.",
407
+ },
408
+ "code-server": {
409
+ label: "code-server",
410
+ tagline: "VS Code in the browser, with a terminal and your extensions.",
411
+ recommendedRamGb: 4,
412
+ heavy: false,
413
+ creds: "fixedRootPassword",
414
+ fixedUsername: "",
415
+ minPasswordLength: 12,
416
+ bootMinutes: 10,
417
+ loginNote: "There is no username: the sign-in screen asks for the password alone, and the same password unlocks sudo in the terminal. Settings, extensions and /config/workspace persist across restarts.",
418
+ },
419
+ "openssh-server": {
420
+ label: "OpenSSH server",
421
+ tagline: "A Linux container you reach over SSH, with sudo and a home that persists.",
422
+ recommendedRamGb: 4,
423
+ heavy: false,
424
+ creds: "dashboardLogin",
425
+ usernameShape: "unix",
426
+ defaultUsername: "dev",
427
+ minPasswordLength: 12,
428
+ passwordForbids: "control",
429
+ noWebComponent: true,
430
+ requiresPublic: "its SSH port (`public_port`, default 2222) is reachable only through a firewall rule the backend opens for a public service",
431
+ publicPortNote: "the host port sshd listens on (default 2222); each SSH server in a project needs its own",
432
+ bootMinutes: 10,
433
+ loginNote: "Connect with `credentials.ssh_command` from get_project_service (`ssh -p <public_port> <user>@<project IP>`). The SSH port is open to the whole internet, which is why the password is required even with a key; sudo uses the same password. It is its own SSH server in a container, separate from the project server's `shell` access, and everything under /config persists across restarts.",
434
+ },
435
+ "jupyterlab": {
436
+ label: "JupyterLab",
437
+ tagline: "Python notebooks with numpy, pandas and scikit-learn installed.",
438
+ recommendedRamGb: 8,
439
+ heavy: true,
440
+ creds: "fixedRootPassword",
441
+ fixedUsername: "",
442
+ minPasswordLength: 12,
443
+ bootMinutes: 15,
444
+ loginNote: "There is no username: paste the password into the `Password or token` box on the sign-in page. The whole home folder (notebooks, settings, `pip install --user` packages) persists across restarts.",
445
+ },
446
+ "jupyter-datascience": {
447
+ label: "Jupyter Data Science",
448
+ tagline: "JupyterLab with Python, R and Julia notebooks.",
449
+ recommendedRamGb: 8,
450
+ heavy: true,
451
+ creds: "fixedRootPassword",
452
+ fixedUsername: "",
453
+ minPasswordLength: 12,
454
+ bootMinutes: 20,
455
+ loginNote: "There is no username: paste the password into the `Password or token` box on the sign-in page. It is JupyterLab with the R (tidyverse) and Julia kernels added, a ~2.7 GB image; `jupyterlab` is the lighter Python-only choice. The whole home folder persists across restarts.",
456
+ },
457
+ "laravel": {
458
+ label: "Laravel",
459
+ tagline: "A fresh Laravel app on its own MySQL database.",
460
+ recommendedRamGb: 4,
461
+ heavy: false,
462
+ creds: "noLogin",
463
+ bootMinutes: 15,
464
+ loginNote: "No login to set: the URL serves the Laravel welcome page on its own MySQL database, and the app built on it defines its own sign-in. First boot runs `composer create-project`, so the URL can take several minutes to serve.",
465
+ },
319
466
  };
467
+ /** `RESERVED_USERNAMES` on the OpenSSH server's validator: root and the image's own accounts. */
468
+ const UNIX_RESERVED_USERNAMES = new Set(["root", "abc", "daemon", "bin", "sys", "nobody", "sshd"]);
320
469
  /** Username validation per shape, mirroring the backend validators. */
321
470
  const USERNAME_SHAPE_RULES = {
322
471
  any: { test: (v) => v.length > 0, hint: "any non-empty string" },
323
472
  slug: { test: (v) => /^[a-zA-Z0-9_-]+$/.test(v), hint: "letters, digits, hyphen and underscore only" },
324
473
  email: { test: (v) => /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(v), hint: "an email address - this app signs in by email" },
474
+ unix: {
475
+ test: (v) => /^[a-z_][a-z0-9_-]{0,31}$/.test(v) && !UNIX_RESERVED_USERNAMES.has(v),
476
+ hint: "a lowercase Linux login name (letters, digits, - and _, starting with a letter or _, up to 32) and never root or a system account",
477
+ },
325
478
  };
479
+ /** The key algorithms the OpenSSH server's `PUBLIC_KEY_FORMAT` accepts. */
480
+ const OPENSSH_KEY_ALGORITHMS = new Set([
481
+ "ssh-ed25519", "ssh-rsa", "ecdsa-sha2-nistp256", "ecdsa-sha2-nistp384",
482
+ "ecdsa-sha2-nistp521", "sk-ssh-ed25519@openssh.com", "sk-ecdsa-sha2-nistp256@openssh.com",
483
+ ]);
484
+ /** Gateway service types (`MysteriumGatewayServiceValidator::SERVICE_TYPES`), default first. */
485
+ const GATEWAY_SERVICE_TYPES = ["wireguard", "scraping", "data_transfer", "quic"];
486
+ /** URnetwork's `AUTH_CODE_FORMAT`, with its 20-character floor. */
487
+ const URNETWORK_AUTH_CODE = /^[A-Za-z0-9_\-=+/.]{20,}$/;
488
+ /**
489
+ * One IP or CIDR the backend's `IPAddr.new` would accept, never an everything-range: the
490
+ * console refuses a world-open panel or proxy at create, and so does this. Returns an error
491
+ * sentence, or null when the value is fine.
492
+ */
493
+ function sourceError(value, field) {
494
+ const v = value.trim();
495
+ const [address, prefix, extra] = v.split("/");
496
+ const family = isIP(address ?? "");
497
+ const bits = family === 4 ? 32 : 128;
498
+ if (!family || extra !== undefined || (prefix !== undefined && !/^\d{1,3}$/.test(prefix))
499
+ || (prefix !== undefined && Number(prefix) > bits)) {
500
+ return `${field} \`${v}\` is not an IP address or CIDR range (for example 203.0.113.7 or 203.0.113.0/24).`;
501
+ }
502
+ if (prefix !== undefined && Number(prefix) === 0) {
503
+ return `${field} \`${v}\` is every address on the internet. Pass the IP (or range) that should reach it; opening it to everyone is a deliberate choice made later in the console, never at create.`;
504
+ }
505
+ return null;
506
+ }
326
507
  /** Rendered into the create description so the catalogue cannot drift from the code. */
327
508
  const TEMPLATE_CATALOGUE_TEXT = TEMPLATE_TYPES.map((t) => {
328
509
  const f = TEMPLATES[t];
510
+ const username = f.defaultUsername
511
+ ? `optional username (default \`${f.defaultUsername}\`; ${USERNAME_SHAPE_RULES[f.usernameShape ?? "any"].hint})`
512
+ : `username (${USERNAME_SHAPE_RULES[f.usernameShape ?? "any"].hint})`;
513
+ const password = `password${f.minPasswordLength && f.minPasswordLength > 8 ? ` (${f.minPasswordLength}+)` : ""}`;
329
514
  const creds = f.creds === "dashboardLogin"
330
- ? `username + password (${USERNAME_SHAPE_RULES[f.usernameShape ?? "any"].hint})`
515
+ ? `${username} + ${password}`
331
516
  : f.creds === "fixedRootPassword"
332
- ? `password only${f.fixedUsername ? `, user is always \`${f.fixedUsername}\`` : ""}`
333
- : "NO admin creds - first visitor owns it";
517
+ ? `${password} only${f.fixedUsername ? `, user is always \`${f.fixedUsername}\`` : ", no username"}`
518
+ : f.creds === "noLogin"
519
+ ? "no login and nothing to claim"
520
+ : f.creds === "authCode"
521
+ ? "an `auth_code` from ur.io/app"
522
+ : "NO admin creds - first visitor owns it";
334
523
  const flags = [
335
524
  f.heavy ? "heavy" : null,
336
525
  f.hostFloorGb ? `needs a ${f.hostFloorGb} GB+ host` : null,
337
526
  f.singleton ? "one per project" : null,
338
527
  f.unsupportedArchitectures?.length ? `no ${f.unsupportedArchitectures.join("/")} hosts` : null,
528
+ f.noWebComponent ? "no URL, no custom domain" : null,
529
+ f.requiresPublic ? "is_public must be true" : null,
530
+ f.networkTerms ? "needs acknowledge_network_terms" : null,
339
531
  ].filter(Boolean).join(", ");
340
532
  return `- \`${t}\` (${f.label}) - ${f.tagline} ${creds}. ~${f.bootMinutes} min, ${f.recommendedRamGb} GB recommended${flags ? ` [${flags}]` : ""}`;
341
533
  }).join("\n");
@@ -394,9 +586,19 @@ A \`template_type\` you do not recognise means the backend shipped a template ne
394
586
  });
395
587
  server.tool("get_project_service", `Get one deployed service, INCLUDING ITS CREDENTIALS. This is the only endpoint that returns them - \`list_project_services\` deliberately does not.
396
588
 
397
- Credentials appear once the service reaches \`active\`; before that the block is simply absent and the right answer is "not ready yet", not an error. What you get depends on the template: Supabase returns the dashboard username and password plus \`public_url\` (and the anon key when present); n8n, n8n-with-postgresql and Twenty return \`public_url\` only, because their first admin is created through the app's own first-run screen rather than from env.
589
+ The block can be absent or partial until the service reaches \`active\`; then the right answer is "not ready yet", not an error. What it holds depends on the template:
590
+ - Login templates: the username and password plus \`public_url\`; Supabase adds the anon key.
591
+ - First-visitor templates (n8n, n8n-with-postgresql, Twenty, WordPress, Immich, Strapi, Metabase, Chatwoot, Mautic, Open WebUI + Ollama): \`public_url\` only, because their first admin is created through the app's own first-run screen rather than from env.
592
+ - code-server, JupyterLab and Jupyter Data Science: \`password\` and \`public_url\`, and no username.
593
+ - Laravel: \`public_url\` only. A fresh app with no accounts, so there is nothing to claim and no warning to give.
594
+ - OpenSSH server: \`host\`, \`port\`, \`username\`, \`password\` and a ready-made \`ssh_command\`; no URL.
595
+ - WireGuard: the admin \`username\` and \`password\`, the HTTPS \`public_url\`, and \`wireguard_endpoint\` (the project IP, UDP 51820) for VPN clients.
596
+ - Mysterium: \`public_url\` (its HTTP panel on port 4449), the fixed username \`myst\`, the password, and the \`panel_sources\` allowed to open it.
597
+ - Mysterium VPN Gateway: \`proxy_endpoint\`, \`proxy_sources\`, \`country\` and \`service_type\`; no login.
598
+ - Nginx: \`content_path\`, the directory to upload the site to over SSH.
599
+ - URnetwork: a \`hint\` only; the node is managed at ur.io/app.
398
600
 
399
- HAND THE URL OVER WITH THE WARNING ATTACHED for n8n and Twenty: the account is claimed by whoever opens it first, so an unattended public URL is an open door until the user completes setup.
601
+ HAND THE URL OVER WITH THE WARNING ATTACHED for the first-visitor templates: the account is claimed by whoever opens it first, so an unattended public URL is an open door until the user completes setup.
400
602
 
401
603
  Call this after \`create_project_service\` reports \`active\`, and give the user the credentials - creating a service and not passing on how to log into it leaves the job half done.`, {
402
604
  project_pid: z.string().min(1),
@@ -412,103 +614,192 @@ Call this after \`create_project_service\` reports \`active\`, and give the user
412
614
  }
413
615
  return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
414
616
  });
415
- server.tool("create_project_service", `Deploy a one-click application template into a project. TWENTY-SIX are available:
617
+ server.tool("create_project_service", `Deploy a one-click application template into a project. THIRTY-SIX are available:
416
618
 
417
619
  ${TEMPLATE_CATALOGUE_TEXT}
418
620
 
419
621
  CREDENTIALS DIFFER PER TEMPLATE AND THE WRONG SHAPE IS REFUSED HERE rather than sent and silently dropped:
420
- - Templates taking a username + password: pass \`dashboard_username\` and \`dashboard_password\`. The accepted username FORM varies - a slug for Jenkins/Grafana/EspoCRM, an EMAIL for Krayin, anything for the rest. The catalogue above says which.
421
- - Templates taking a password only: pass \`dashboard_password\` alone. The app owns the username (GitLab is \`root\`, Elasticsearch is \`elastic\`). Passing a username is refused.
422
- - Templates taking nothing: pass neither.
622
+ - Templates taking a username + password: pass \`dashboard_username\` and \`dashboard_password\`. The accepted username FORM varies - a slug for Jenkins/Grafana/EspoCRM, an EMAIL for Krayin, a Linux login name for the OpenSSH server, anything for the rest. WireGuard and the OpenSSH server default the username (\`admin\`, \`dev\`), so it is optional for those two. The catalogue above says which.
623
+ - Templates taking a password only: pass \`dashboard_password\` alone. The app owns the username (GitLab is \`root\`, Elasticsearch \`elastic\`, Mysterium \`myst\`) or has none (code-server, JupyterLab, Jupyter Data Science). Passing a username is refused.
624
+ - Templates taking nothing: pass neither. "No login and nothing to claim" (Nginx, Laravel, the Mysterium VPN Gateway) is NOT the first-visitor case below.
625
+ - URnetwork takes an \`auth_code\` from ur.io/app instead of a login. It is a secret: never repeat it back.
626
+
627
+ TEMPLATE-SPECIFIC FIELDS, each refused on any other template:
628
+ - Mysterium: \`panel_source\`, the IP or CIDR allowed to open its HTTP panel on 4449.
629
+ - Mysterium VPN Gateway: \`proxy_source\`, the IP or CIDR of the apps that will use the proxy on 3128; \`country\` (two-letter code, optional); \`service_type\` (wireguard, the default, or scraping, data_transfer, quic).
630
+ For both, an omitted source makes the backend use the IP this MCP's requests come from, which is the machine running this server and not necessarily where the user or their apps are. Pass it explicitly; \`list_project_ssh_keys\` shows the \`requester_ip\` the backend sees. A world range (\`/0\`) is refused.
631
+ - OpenSSH server: \`public_key\` (one OpenSSH public key line, optional) and \`password_access\` (default true; false only with a key, and the password still gates sudo). \`public_port\` is its SSH port, default 2222, and a second SSH server in the same project needs another one.
632
+ - Mysterium, the Mysterium VPN Gateway and URnetwork share the server's network with other people or spend MYST outside the platform, so each needs \`acknowledge_network_terms: true\`. Explain what they are agreeing to and ask; never set it on the user's behalf.
423
633
 
424
634
  FIRST-ADMIN SECURITY WARNING, for every template marked "first visitor owns it": these ship with no admin credentials whatsoever. Whoever opens the public URL first gets the owner account. Say this UNPROMPTED, tell the user to finish setup the moment it is up, and tell them not to share the URL before then.
425
635
 
426
- \`is_public\` is REQUIRED with no default: ASK THE USER. These are web apps whose first-run setup happens at the public URL, so \`true\` is usually what they want, but do not assume it.
636
+ \`is_public\` is REQUIRED with no default: ASK THE USER. Most templates are web apps whose first-run setup happens at the public URL, so \`true\` is usually what they want, but do not assume it. Four are refused with \`false\` because the backend would never open the port they are reached on: Mysterium, the Mysterium VPN Gateway, WireGuard and the OpenSSH server (the first two stay private through their source IP lock, not through \`is_public\`).
427
637
 
428
- CAPACITY: a project is ONE server, and these limits are refusals at declare time, not slow degradation. \`heavy\` templates must leave more headroom (65% memory / 75% disk vs 80% / 85%); some need a minimum TOTAL host RAM whatever is free; at most 5 children per project; Stalwart is one-per-project. A project server CANNOT be resized, so exhausting it means creating a new project - check the recommended RAM against the project's server BEFORE promising a deploy.
638
+ CAPACITY: a project is ONE server, and these limits are refusals at declare time, not slow degradation. \`heavy\` templates must leave more headroom (65% memory / 75% disk vs 80% / 85%); some need a minimum TOTAL host RAM whatever is free; at most 5 children per project; Stalwart, WireGuard, Mysterium and the Mysterium VPN Gateway are one-per-project (their ports are fixed on the host). A project server CANNOT be resized, so exhausting it means creating a new project - check the recommended RAM against the project's server BEFORE promising a deploy.
429
639
 
430
640
  The project must be \`active\` (409 otherwise). Returns 202 with status \`creating\`; poll \`list_project_services\`, then call \`get_project_service\` for the credentials once it is \`active\`.
431
641
 
432
- EXPECT THESE 422s: a duplicate service name inside the same project; \`public_port\` already claimed by another database or service; the capacity guard refusing the template; a second Stalwart; and Krayin on an ARM (\`cax*\`) host, whose image has no ARM manifest at any tag.`, {
642
+ EXPECT THESE 422s: a duplicate service name inside the same project; \`public_port\` already claimed by another database or service (a second OpenSSH server left on 2222 is the common one); the capacity guard refusing the template; a second Stalwart, WireGuard, Mysterium or Mysterium VPN Gateway; and Krayin on an ARM (\`cax*\`) host, whose image has no ARM manifest at any tag.`, {
433
643
  project_pid: z.string().min(1),
434
- template_type: z.enum(TEMPLATE_TYPES).describe("One of the 26 template slugs - see the catalogue in the description"),
644
+ template_type: z.enum(TEMPLATE_TYPES).describe("One of the 36 template slugs - see the catalogue in the description"),
435
645
  name: z.string().min(1).max(255).describe("Unique within the project"),
436
646
  is_public: z.boolean().describe("Required choice (ask the user, do not assume): true = internet-reachable; false = private to the project. First-run setup for these apps happens at the public URL."),
437
- dashboard_username: z.string().min(1).max(255).optional().describe("For templates that take a username + password only. The accepted form varies per template (slug / email / any) - see the catalogue. Refused for password-only and no-credential templates."),
438
- dashboard_password: z.string().min(8).max(255).optional().describe("For templates that take any password. 8+ chars (GitLab requires 12+). Refused for no-credential templates."),
439
- public_port: z.number().int().min(1024).max(65535).optional().describe("Optional. Must not collide with another database or service in this project."),
440
- }, async ({ project_pid, template_type, name, is_public, dashboard_username, dashboard_password, public_port }) => {
647
+ dashboard_username: z.string().min(1).max(255).optional().describe("For templates that take a username + password only. The accepted form varies per template (slug / email / Linux login name / any) - see the catalogue. Optional for WireGuard (default admin) and the OpenSSH server (default dev). Refused for password-only and no-credential templates."),
648
+ dashboard_password: z.string().min(8).max(255).optional().describe("For templates that take any password. 8+ chars; 12+ for GitLab, Mysterium, WireGuard, code-server, the OpenSSH server, JupyterLab and Jupyter Data Science (see the catalogue). Refused for no-credential templates."),
649
+ public_port: z.number().int().min(1024).max(65535).optional().describe("Optional. Must not collide with another database or service in this project. For the OpenSSH server it is the SSH port (default 2222)."),
650
+ panel_source: z.string().min(1).max(64).optional().describe("Mysterium only: the IP or CIDR allowed to open its HTTP panel on 4449. Omitted, the backend uses the IP this MCP's requests come from."),
651
+ proxy_source: z.string().min(1).max(64).optional().describe("Mysterium VPN Gateway only: the IP or CIDR of the apps that will use the proxy on 3128. Omitted, the backend uses the IP this MCP's requests come from."),
652
+ country: z.string().length(2).optional().describe("Mysterium VPN Gateway only: a two-letter country code to exit from. Optional."),
653
+ service_type: z.enum(GATEWAY_SERVICE_TYPES).optional().describe("Mysterium VPN Gateway only: the Mysterium service to consume. Default wireguard."),
654
+ auth_code: z.string().min(1).max(512).optional().describe("URnetwork only, and required there: the auth code from ur.io/app (20+ characters, letters, digits and _-=+/. only). A secret: never repeat it back."),
655
+ public_key: z.string().min(1).max(16384).optional().describe("OpenSSH server only: one OpenSSH PUBLIC key line (ssh-ed25519, ssh-rsa, ecdsa-sha2-nistp256/384/521 or their sk- variants). Never a private key."),
656
+ password_access: z.boolean().optional().describe("OpenSSH server only: false turns password sign-in off, which needs a public_key. Default true. The password still gates sudo."),
657
+ acknowledge_network_terms: z.boolean().optional().describe("Mysterium, Mysterium VPN Gateway and URnetwork only, and required true there: the user has agreed to what the catalogue says the template does with the server's network or their money. Ask; never set it on their behalf."),
658
+ }, async ({ project_pid, template_type, name, is_public, dashboard_username, dashboard_password, public_port, panel_source, proxy_source, country, service_type, auth_code, public_key, password_access, acknowledge_network_terms }) => {
441
659
  if (!hasOrg())
442
660
  return { content: [{ type: "text", text: NO_ORG }] };
443
661
  const template = TEMPLATES[template_type];
444
662
  const minPw = template.minPasswordLength ?? 8;
663
+ const refuse = (text) => ({ content: [{ type: "text", text }] });
664
+ // Trimmed like the console does, and blank means absent. " admin" would otherwise reach
665
+ // a validator that does not trim and fail a shape check the user cannot see.
666
+ const username = dashboard_username?.trim() || undefined;
667
+ // A field that belongs to one template is refused on every other one: the backend would
668
+ // drop it silently, and for `auth_code` that means a secret sent somewhere it is not used.
669
+ const ownFields = [
670
+ ["panel_source", panel_source, "mysterium"],
671
+ ["proxy_source", proxy_source, "mysterium-gateway"],
672
+ ["country", country, "mysterium-gateway"],
673
+ ["service_type", service_type, "mysterium-gateway"],
674
+ ["auth_code", auth_code, "urnetwork"],
675
+ ["public_key", public_key, "openssh-server"],
676
+ ["password_access", password_access, "openssh-server"],
677
+ ];
678
+ for (const [field, value, owner] of ownFields) {
679
+ if (value !== undefined && template_type !== owner) {
680
+ return refuse(`\`${field}\` belongs to \`${owner}\` only, so it was NOT sent for \`${template_type}\`. Re-run without it.`);
681
+ }
682
+ }
683
+ if (template.requiresPublic && !is_public) {
684
+ return refuse(`${template.label} needs is_public: true, because ${template.requiresPublic}. With false the backend never opens that port and the service cannot be reached. Re-run with is_public true.`);
685
+ }
686
+ if (template.networkTerms && acknowledge_network_terms !== true) {
687
+ return refuse(`${template.label} needs acknowledge_network_terms: true, because ${template.networkTerms}. Explain that to the user and ask; re-run with the flag only once they agree.`);
688
+ }
445
689
  // Validate the credential SHAPE before sending. The backend drops fields a template
446
690
  // does not accept, so a silently-ignored password leaves the user believing they set
447
691
  // one - which for a "first visitor owns it" template is a security problem, not a
448
692
  // cosmetic one.
449
693
  if (template.creds === "dashboardLogin") {
450
- if (!dashboard_username || !dashboard_password) {
451
- return {
452
- content: [{
453
- type: "text",
454
- text: `\`${template_type}\` (${template.label}) requires BOTH dashboard_username and dashboard_password - they become its admin login. Username must be ${USERNAME_SHAPE_RULES[template.usernameShape ?? "any"].hint}; password ${minPw}+ chars. Ask the user for them.`,
455
- }],
456
- };
457
- }
458
694
  const rule = USERNAME_SHAPE_RULES[template.usernameShape ?? "any"];
459
- if (!rule.test(dashboard_username)) {
460
- return {
461
- content: [{
462
- type: "text",
463
- text: `dashboard_username \`${dashboard_username}\` is not valid for ${template.label}: it must be ${rule.hint}.${template.usernameShape === "email" ? " Krayin signs in by email address, so a non-email username creates an admin account nobody can log in as." : ""}`,
464
- }],
465
- };
695
+ const usernameOptional = template.defaultUsername !== undefined;
696
+ if (!dashboard_password || (!username && !usernameOptional)) {
697
+ return refuse(usernameOptional
698
+ ? `\`${template_type}\` (${template.label}) requires dashboard_password (${minPw}+ chars). dashboard_username is optional and defaults to \`${template.defaultUsername}\`; if given it must be ${rule.hint}. Ask the user for the password.`
699
+ : `\`${template_type}\` (${template.label}) requires BOTH dashboard_username and dashboard_password - they become its admin login. Username must be ${rule.hint}; password ${minPw}+ chars. Ask the user for them.`);
700
+ }
701
+ if (username !== undefined && !rule.test(username)) {
702
+ return refuse(`dashboard_username \`${username}\` is not valid for ${template.label}: it must be ${rule.hint}.${template.usernameShape === "email" ? " Krayin signs in by email address, so a non-email username creates an admin account nobody can log in as." : ""}`);
703
+ }
704
+ if (username !== undefined && template.usernameMaxLength && [...username].length > template.usernameMaxLength) {
705
+ return refuse(`dashboard_username is too long for ${template.label}: ${template.usernameMaxLength} characters at most.`);
466
706
  }
467
707
  }
468
708
  else if (template.creds === "fixedRootPassword") {
469
709
  if (!dashboard_password) {
470
- return {
471
- content: [{
472
- type: "text",
473
- text: `\`${template_type}\` (${template.label}) requires dashboard_password (${minPw}+ chars).${template.fixedUsername ? ` The username is fixed by the app: \`${template.fixedUsername}\`.` : " The app does not use a username here."}${template.loginNote ? `\n\n${template.loginNote}` : ""}`,
474
- }],
475
- };
710
+ return refuse(`\`${template_type}\` (${template.label}) requires dashboard_password (${minPw}+ chars).${template.fixedUsername ? ` The username is fixed by the app: \`${template.fixedUsername}\`.` : " The app does not use a username here."}${template.loginNote ? `\n\n${template.loginNote}` : ""}`);
476
711
  }
477
- if (dashboard_username) {
478
- return {
479
- content: [{
480
- type: "text",
481
- text: `\`${template_type}\` does not accept a username - ${template.fixedUsername ? `the app's account is always \`${template.fixedUsername}\`` : "it has no username"}, so dashboard_username was not sent. Re-run with the password alone.`,
482
- }],
483
- };
712
+ if (username) {
713
+ return refuse(`\`${template_type}\` does not accept a username - ${template.fixedUsername ? `the app's account is always \`${template.fixedUsername}\`` : "it has no username"}, so dashboard_username was not sent. Re-run with the password alone.`);
484
714
  }
485
715
  }
486
- else if (dashboard_username || dashboard_password) {
487
- return {
488
- content: [{
489
- type: "text",
490
- text: `\`${template_type}\` (${template.label}) has no admin credentials to set, so dashboard_username / dashboard_password do not apply and were NOT sent. Its owner account goes to the first person who opens the public URL. Re-run without them.`,
491
- }],
492
- };
716
+ else if (username || dashboard_password) {
717
+ return refuse(template.creds === "none"
718
+ ? `\`${template_type}\` (${template.label}) has no admin credentials to set, so dashboard_username / dashboard_password do not apply and were NOT sent. Its owner account goes to the first person who opens the public URL. Re-run without them.`
719
+ : `\`${template_type}\` (${template.label}) has no login to set, so dashboard_username / dashboard_password do not apply and were NOT sent.${template.creds === "authCode" ? " It takes an `auth_code` from ur.io/app instead." : ""} Re-run without them.`);
493
720
  }
494
- if (dashboard_password && dashboard_password.length < minPw) {
495
- return {
496
- content: [{
497
- type: "text",
498
- text: `${template.label} requires a password of at least ${minPw} characters (got ${dashboard_password.length}).`,
499
- }],
500
- };
721
+ if (dashboard_password) {
722
+ if (dashboard_password.length < minPw) {
723
+ return refuse(`${template.label} requires a password of at least ${minPw} characters (got ${dashboard_password.length}).`);
724
+ }
725
+ if (dashboard_password.trim() === "") {
726
+ return refuse(`${template.label} needs a real password: one made only of spaces fails the backend's presence check.`);
727
+ }
728
+ if (template.maxPasswordBytes && Buffer.byteLength(dashboard_password, "utf8") > template.maxPasswordBytes) {
729
+ return refuse(`${template.label} takes a password of at most ${template.maxPasswordBytes} bytes (its image hashes it with bcrypt, which cannot take more). Use a shorter one.`);
730
+ }
731
+ if (template.passwordForbids === "nul" && dashboard_password.includes("\u0000")) {
732
+ return refuse(`${template.label} cannot take a password with a null character in it.`);
733
+ }
734
+ if (template.passwordForbids === "control" && /[\u0000-\u001f\u007f-\u009f]/.test(dashboard_password)) {
735
+ return refuse(`${template.label} cannot take a password with a tab, line break or other control character: the image feeds it to chpasswd as one line, so a line break would inject a second entry.`);
736
+ }
737
+ }
738
+ if (panel_source !== undefined) {
739
+ const error = sourceError(panel_source, "panel_source");
740
+ if (error)
741
+ return refuse(error);
742
+ }
743
+ if (proxy_source !== undefined) {
744
+ const error = sourceError(proxy_source, "proxy_source");
745
+ if (error)
746
+ return refuse(error);
747
+ }
748
+ if (country !== undefined && !/^[A-Za-z]{2}$/.test(country)) {
749
+ return refuse("country must be a two-letter ISO-3166 code, like DE or US.");
750
+ }
751
+ let authCode;
752
+ if (template.creds === "authCode") {
753
+ authCode = auth_code?.trim();
754
+ if (!authCode) {
755
+ return refuse("URnetwork requires auth_code: the token the user creates at ur.io/app. Ask them for it.");
756
+ }
757
+ if (!URNETWORK_AUTH_CODE.test(authCode)) {
758
+ return refuse("That auth_code is not a URnetwork auth code: it must be one token of 20 or more characters using letters, digits and _-=+/. only, copied exactly from ur.io/app. It was NOT sent.");
759
+ }
760
+ }
761
+ let publicKey;
762
+ if (public_key !== undefined) {
763
+ const key = public_key.trim();
764
+ if (/-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(key)) {
765
+ return refuse("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.");
766
+ }
767
+ const parts = /^(\S+)\s+(\S+)(?:\s+(.*))?$/.exec(key);
768
+ if (/[\r\n]/.test(key) || !parts || !OPENSSH_KEY_ALGORITHMS.has(parts[1])
769
+ || !/^[A-Za-z0-9+/]+={0,3}$/.test(parts[2]) || parts[2].length < 40) {
770
+ return refuse(`public_key must be ONE OpenSSH public key line: an algorithm (${[...OPENSSH_KEY_ALGORITHMS].join(", ")}), the base64 key, and an optional comment - the contents of a \`.pub\` file.`);
771
+ }
772
+ // Single spaces between the parts, as the backend's PUBLIC_KEY_FORMAT expects.
773
+ publicKey = [parts[1], parts[2], parts[3]?.trim()].filter(Boolean).join(" ");
774
+ }
775
+ if (password_access === false && !publicKey) {
776
+ return refuse("password_access: false needs a public_key: without one nobody could sign in. Pass the user's public key, or leave password sign-in on.");
501
777
  }
502
778
  const body = { name, is_public, instant_deploy: true };
503
779
  if (template.creds === "dashboardLogin") {
504
- body.dashboard_username = dashboard_username;
780
+ body.dashboard_username = username ?? template.defaultUsername;
505
781
  body.dashboard_password = dashboard_password;
506
782
  }
507
783
  else if (template.creds === "fixedRootPassword") {
508
784
  body.dashboard_password = dashboard_password;
509
785
  }
786
+ else if (template.creds === "authCode") {
787
+ body.auth_code = authCode;
788
+ }
510
789
  if (public_port !== undefined)
511
790
  body.public_port = public_port;
791
+ if (panel_source !== undefined)
792
+ body.panel_source = panel_source.trim();
793
+ if (proxy_source !== undefined)
794
+ body.proxy_source = proxy_source.trim();
795
+ if (country !== undefined)
796
+ body.country = country.toUpperCase();
797
+ if (service_type !== undefined)
798
+ body.service_type = service_type;
799
+ if (publicKey !== undefined)
800
+ body.public_key = publicKey;
801
+ if (password_access !== undefined)
802
+ body.password_access = password_access;
512
803
  const result = await apiRequest(`${PROJECTS_BASE}/${project_pid}/services/${template_type}`, {
513
804
  method: "POST",
514
805
  body,
@@ -625,7 +916,7 @@ THIS IS THE TOOL FOR "why is my project server full?". A project is ONE VM share
625
916
  }
626
917
  return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
627
918
  });
628
- server.tool("set_project_service_custom_domain", `Point a custom domain at a project service's web UI, replacing its platform-generated hostname. Every one of the 26 templates exposes a web component, so this works for all of them.
919
+ server.tool("set_project_service_custom_domain", `Point a custom domain at a project service's web UI, replacing its platform-generated hostname. Every template exposes a web component except four with no web UI to route: Mysterium, the Mysterium VPN Gateway, URnetwork and the OpenSSH server. The backend refuses a domain for those, so do not offer one.
629
920
 
630
921
  DNS MUST ALREADY BE POINTING HERE BEFORE YOU CALL THIS. The backend resolves the domain and refuses if it does not already answer with the project's public IP - deliberately, because applying a domain before DNS lands burns Let's Encrypt rate limits on certificate requests that are guaranteed to fail. The correct order is:
631
922
  1. \`get_project\` for the project's \`public_ip\`.
@@ -1 +1 @@
1
- {"version":3,"file":"project-services.js","sourceRoot":"","sources":["../../src/tools/project-services.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-services.js","sourceRoot":"","sources":["../../src/tools/project-services.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@selfhost.dev/mcp-server",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "MCP server for SelfHost.dev - provision managed databases and deploy apps (PaaS) via natural language",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",