@hoststack.dev/mcp 0.10.0 → 0.10.2

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
@@ -85,31 +85,31 @@ If `HOSTSTACK_API_KEY` is set in your shell, it gets baked into the snippet; oth
85
85
 
86
86
  ## Tool inventory
87
87
 
88
- 58 tools, grouped by resource:
89
-
90
- | Category | Read | Write |
91
- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
92
- | **projects** | `list_projects`, `get_project` | `create_project`, `update_project` |
93
- | **services** | `list_services`, `get_service`, `get_service_metrics`, `get_service_metrics_history`, `get_service_logs`, `get_service_logs_bulk` | `update_service`, `update_service_config`, `suspend_service`, `resume_service` |
94
- | **deploys** | `list_deploys`, `get_deploy`, `get_deploy_logs`, `diagnose_deploy` | `trigger_deploy`, `cancel_deploy` |
95
- | **environments** | `list_environments` | `create_environment`, `delete_environment`, `promote_deploy` |
96
- | **databases** | `list_databases`, `get_database`, `get_database_cluster`, `query_database` | `update_database`, `upgrade_database_to_ha` (use the dashboard for create/delete/credentials) |
97
- | **volumes** | `list_volumes` | `create_volume`, `update_volume`, `delete_volume` |
98
- | **domains** | `list_domains` | `add_domain`, `verify_domain`, `remove_domain` |
99
- | **dns** | `list_dns_zones`, `list_dns_records`, `get_dns_record` | `create_dns_record`, `update_dns_record`, `delete_dns_record` |
100
- | **env-vars** | `list_env_vars` | `set_env_var`, `delete_env_var`, `bulk_set_env_vars` |
101
- | **cron** | `list_cron_executions`, `get_cron_execution` | — |
102
- | **notifications** | `list_notification_channels` | `create_notification_channel`, `update_notification_channel`, `delete_notification_channel`, `test_notification_channel` |
103
- | **alerts** | `list_alerts` | — |
104
- | **activity-log** | `list_activity_log` | — |
105
- | **meta** | `get_me` | — |
88
+ 60 tools, grouped by resource:
89
+
90
+ | Category | Read | Write |
91
+ | ----------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
92
+ | **projects** | `list_projects`, `get_project` | `create_project`, `update_project` |
93
+ | **services** | `list_services`, `get_service`, `get_service_metrics`, `get_service_metrics_history`, `get_service_logs`, `get_service_logs_bulk` | `create_service`, `create_dev_environment`, `update_service`, `update_service_config`, `suspend_service`, `resume_service` |
94
+ | **deploys** | `list_deploys`, `get_deploy`, `get_deploy_logs`, `diagnose_deploy` | `trigger_deploy`, `cancel_deploy` |
95
+ | **environments** | `list_environments` | `create_environment`, `delete_environment`, `promote_deploy` |
96
+ | **databases** | `list_databases`, `get_database`, `get_database_cluster`, `query_database` | `update_database`, `upgrade_database_to_ha` (use the dashboard for create/delete/credentials) |
97
+ | **volumes** | `list_volumes` | `create_volume`, `update_volume`, `delete_volume` |
98
+ | **domains** | `list_domains` | `add_domain`, `verify_domain`, `remove_domain` |
99
+ | **dns** | `list_dns_zones`, `list_dns_records`, `get_dns_record` | `create_dns_record`, `update_dns_record`, `delete_dns_record` |
100
+ | **env-vars** | `list_env_vars` | `set_env_var`, `delete_env_var`, `bulk_set_env_vars` |
101
+ | **cron** | `list_cron_executions`, `get_cron_execution` | — |
102
+ | **notifications** | `list_notification_channels` | `create_notification_channel`, `update_notification_channel`, `delete_notification_channel`, `test_notification_channel` |
103
+ | **alerts** | `list_alerts` | — |
104
+ | **activity-log** | `list_activity_log` | — |
105
+ | **meta** | `get_me` | — |
106
106
 
107
107
  A few design notes worth knowing as a caller:
108
108
 
109
109
  - **`set_env_var` / `delete_env_var` are key-based.** You don't need an env-var ID; the MCP looks up the existing var by key first, then patches or deletes by ID under the hood.
110
110
  - **`list_env_vars` masks secret values.** Anything stored with `is_secret: true` comes back as `••••••`. The masking happens server-side, so you can't accidentally leak a secret to the agent's context window.
111
111
  - **`get_service_logs` and `get_deploy_logs` are snapshots.** Streaming logs over MCP isn't supported — re-call the tool to get newer entries. Use the dashboard's `/dashboard/services/:id/logs` for live tails.
112
- - **No `delete_project`, `delete_service`, or `create_service`.** Destructive cascades and the wizard flow are dashboard-only — too risky / too complex for v0.x.
112
+ - **No `delete_project` or `delete_service`.** Destructive cascades are dashboard-only — too risky for an agent to call. Creating is supported via `create_service` / `create_dev_environment`.
113
113
  - **Telemetry, hosted only.** When you use `https://hoststack.dev/api/mcp`, we record one row per tool call (tool name, duration, ok/error, SHA-derived hash of input args — never the args themselves) for the analytics page and on-call alerts. Retained 30 days. The local stdio install records nothing.
114
114
 
115
115
  ## Environment variables
@@ -1940,6 +1940,7 @@ defineTool({
1940
1940
 
1941
1941
  // src/tools/projects.ts
1942
1942
  import { z as z12 } from "zod";
1943
+ var REGION_IDS = ["eu-central-1", "eu-central-2", "eu-west-1", "us-east-1"];
1943
1944
  defineTool({
1944
1945
  name: "list_projects",
1945
1946
  category: "projects",
@@ -1972,20 +1973,22 @@ defineTool({
1972
1973
  "Inputs:",
1973
1974
  " - name: human-readable project name (1\u201360 chars).",
1974
1975
  " - description (optional): short blurb shown in the dashboard.",
1975
- ' - region (optional): "fsn1" (Falkenstein) | "nbg1" (Nuremberg) | "hel1" (Helsinki). Default depends on team plan.',
1976
+ ' - region (optional): "eu-central-1" (Falkenstein) | "eu-central-2" (Nuremberg) | "eu-west-1" (Helsinki) | "us-east-1" (Ashburn). Defaults to eu-central-2.',
1976
1977
  "",
1977
1978
  "Returns: { project: Project } \u2014 includes the new id and publicId.",
1978
1979
  "",
1979
- 'Example: create_project({ name: "billing-api", description: "Stripe webhooks", region: "fsn1" }) \u2192 { project: { id: 12, publicId: "prj_\u2026", \u2026 } }'
1980
+ 'Example: create_project({ name: "billing-api", description: "Stripe webhooks", region: "eu-central-1" }) \u2192 { project: { id: 12, publicId: "prj_\u2026", \u2026 } }'
1980
1981
  ].join("\n"),
1981
1982
  input: {
1982
1983
  name: z12.string().min(1).max(60).describe("Project name (1\u201360 chars)."),
1983
1984
  description: z12.string().max(500).optional().describe("Short description (\u2264500 chars)."),
1984
- region: z12.enum(["fsn1", "nbg1", "hel1"]).optional().describe("Hetzner region: fsn1 | nbg1 | hel1.")
1985
+ region: z12.enum(REGION_IDS).optional().describe("Region: eu-central-1 | eu-central-2 | eu-west-1 | us-east-1.")
1985
1986
  },
1986
1987
  handler: async (args2, ctx) => {
1987
1988
  const teamId = await ctx.resolveTeamId();
1988
- const input = { name: args2.name };
1989
+ const input = {
1990
+ name: args2.name
1991
+ };
1989
1992
  if (args2.description !== void 0) input.description = args2.description;
1990
1993
  if (args2.region !== void 0) input.region = args2.region;
1991
1994
  const response = await ctx.hoststack.projects.create(teamId, input);
@@ -2290,7 +2293,7 @@ defineTool({
2290
2293
  const deploy = await ctx.hoststack.deploys.trigger(teamId, service.id);
2291
2294
  const deployId = deploy.deploy?.id ?? null;
2292
2295
  return respond({
2293
- summary: `Created AI dev environment "${name}" (${service.publicId})${volumeAttached ? " with a /workspace volume" : ""} \u2014 deploying. Open its Terminal tab once running.`,
2296
+ summary: `Created AI dev environment "${name}" (${service.publicId})${volumeAttached ? " with a /workspace volume" : ""} \u2014 deploying. Open it in the dashboard's Development section (or the service's Terminal tab) once running.`,
2294
2297
  data: { service: shapeService(service), volumeAttached, deployId }
2295
2298
  });
2296
2299
  }