helipod-mcp 0.5.1 → 0.5.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 +1 -1
- package/dist/http.js +10 -12
- package/dist/index.js +10 -12
- package/dist/stdio.js +10 -12
- package/package.json +1 -1
- package/skills/helipod-vps/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -198,7 +198,7 @@ Pick your agents when asked (or pass `-a codex cursor gemini-cli opencode -y`).
|
|
|
198
198
|
| Email | status, plan (buy, renew, change, inbox add-ons, with dry runs), send, sent log, sending domains, templates, contacts, segments, topics, broadcasts, suppressions, webhooks, inbox |
|
|
199
199
|
| Account | wallet and transactions, invoices, monthly statements, notifications, project activity, support tickets |
|
|
200
200
|
| AI | models and prices, balance, usage, metrics, AI keys (list, revoke), top-up and auto top-up |
|
|
201
|
-
| Other | `
|
|
201
|
+
| Other | `helipod_api_get` to read any other documented endpoint (read only) |
|
|
202
202
|
|
|
203
203
|
Each tool is marked read-only, write or destructive, so clients can ask before running the risky ones. Calls that cost money support a dry run, and the server tells the agent to show the price and wait for your OK.
|
|
204
204
|
|
package/dist/http.js
CHANGED
|
@@ -35673,7 +35673,7 @@ function register(server, api2, defs) {
|
|
|
35673
35673
|
annotations: {
|
|
35674
35674
|
title: d.title,
|
|
35675
35675
|
readOnlyHint: d.kind === "read",
|
|
35676
|
-
destructiveHint: d.kind
|
|
35676
|
+
destructiveHint: d.kind !== "read",
|
|
35677
35677
|
idempotentHint: d.kind === "read" || !!d.idempotent,
|
|
35678
35678
|
openWorldHint: true
|
|
35679
35679
|
}
|
|
@@ -37958,16 +37958,14 @@ var aiTools = [
|
|
|
37958
37958
|
var API_PREFIXES = ["/containers/", "/databases", "/vps", "/backup/", "/domains", "/account/", "/ai/"];
|
|
37959
37959
|
var generalTools = [
|
|
37960
37960
|
defineTool({
|
|
37961
|
-
name: "
|
|
37962
|
-
title: "
|
|
37963
|
-
kind: "
|
|
37964
|
-
description: "
|
|
37961
|
+
name: "helipod_api_get",
|
|
37962
|
+
title: "Read any Helipod API endpoint",
|
|
37963
|
+
kind: "read",
|
|
37964
|
+
description: "GET an endpoint of the Helipod public API that has no dedicated read tool (Helipod API reference: https://docs.helipod.io/docs/helipod). api=core for the Container, Database, VPS, Domain, Account and AI APIs (paths like /vps/{id}/backup/runs, /account/wallet, /ai/usage), api=email for the Email API (paths like /broadcasts). Read only: it never changes anything.",
|
|
37965
37965
|
input: {
|
|
37966
37966
|
api: exports_external.enum(["core", "email"]),
|
|
37967
|
-
|
|
37968
|
-
|
|
37969
|
-
query: exports_external.record(exports_external.string(), exports_external.string()).optional(),
|
|
37970
|
-
body: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
37967
|
+
path: exports_external.string().regex(/^\/[A-Za-z0-9/_.\-:]*$/).describe("Path after the base URL, e.g. /vps/abc/backup/runs"),
|
|
37968
|
+
query: exports_external.record(exports_external.string(), exports_external.string()).optional()
|
|
37971
37969
|
},
|
|
37972
37970
|
run: (a, api2) => {
|
|
37973
37971
|
if (a.path.includes(".."))
|
|
@@ -37975,15 +37973,15 @@ var generalTools = [
|
|
|
37975
37973
|
if (a.api === "core") {
|
|
37976
37974
|
if (!API_PREFIXES.some((p) => a.path.startsWith(p)))
|
|
37977
37975
|
throw new Error(`Core API paths start with one of: ${API_PREFIXES.join(", ")}`);
|
|
37978
|
-
return api2.api(
|
|
37976
|
+
return api2.api("GET", a.path, { query: a.query });
|
|
37979
37977
|
}
|
|
37980
|
-
return api2.email(
|
|
37978
|
+
return api2.email("GET", a.path, { query: a.query });
|
|
37981
37979
|
}
|
|
37982
37980
|
})
|
|
37983
37981
|
];
|
|
37984
37982
|
|
|
37985
37983
|
// src/server.ts
|
|
37986
|
-
var VERSION = "0.5.
|
|
37984
|
+
var VERSION = "0.5.2";
|
|
37987
37985
|
var INSTRUCTIONS = `Helipod is a cloud platform (Indonesia): containers, managed Postgres databases, VPS, domains, email and an AI gateway, billed from a prepaid wallet in Rupiah.
|
|
37988
37986
|
- Start with list_projects to find projects and environment ids. Account tools (get_wallet, invoices, statements, notifications, get_project_activity, support tickets) cover the account; AI tools (list_ai_models, get_ai_overview, get_ai_usage, AI keys, top-ups) cover the AI gateway.
|
|
37989
37987
|
- Anything that costs money (create/deploy/scale services, resize volumes, upgrade a database plan, create/renew/upgrade VPS, VPS backups, register/renew/transfer domains, email plans and inbox add-ons, AI top-ups and auto top-up): call it with dryRun=true first (or the price lookup when it has no dry run), tell the user the cost in IDR and the wallet balance after, and wait for an explicit yes before the real call. Never treat silence or an earlier general OK as a yes.
|
package/dist/index.js
CHANGED
|
@@ -34818,7 +34818,7 @@ function register(server, api2, defs) {
|
|
|
34818
34818
|
annotations: {
|
|
34819
34819
|
title: d.title,
|
|
34820
34820
|
readOnlyHint: d.kind === "read",
|
|
34821
|
-
destructiveHint: d.kind
|
|
34821
|
+
destructiveHint: d.kind !== "read",
|
|
34822
34822
|
idempotentHint: d.kind === "read" || !!d.idempotent,
|
|
34823
34823
|
openWorldHint: true
|
|
34824
34824
|
}
|
|
@@ -37103,16 +37103,14 @@ var aiTools = [
|
|
|
37103
37103
|
var API_PREFIXES = ["/containers/", "/databases", "/vps", "/backup/", "/domains", "/account/", "/ai/"];
|
|
37104
37104
|
var generalTools = [
|
|
37105
37105
|
defineTool({
|
|
37106
|
-
name: "
|
|
37107
|
-
title: "
|
|
37108
|
-
kind: "
|
|
37109
|
-
description: "
|
|
37106
|
+
name: "helipod_api_get",
|
|
37107
|
+
title: "Read any Helipod API endpoint",
|
|
37108
|
+
kind: "read",
|
|
37109
|
+
description: "GET an endpoint of the Helipod public API that has no dedicated read tool (Helipod API reference: https://docs.helipod.io/docs/helipod). api=core for the Container, Database, VPS, Domain, Account and AI APIs (paths like /vps/{id}/backup/runs, /account/wallet, /ai/usage), api=email for the Email API (paths like /broadcasts). Read only: it never changes anything.",
|
|
37110
37110
|
input: {
|
|
37111
37111
|
api: exports_external.enum(["core", "email"]),
|
|
37112
|
-
|
|
37113
|
-
|
|
37114
|
-
query: exports_external.record(exports_external.string(), exports_external.string()).optional(),
|
|
37115
|
-
body: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
37112
|
+
path: exports_external.string().regex(/^\/[A-Za-z0-9/_.\-:]*$/).describe("Path after the base URL, e.g. /vps/abc/backup/runs"),
|
|
37113
|
+
query: exports_external.record(exports_external.string(), exports_external.string()).optional()
|
|
37116
37114
|
},
|
|
37117
37115
|
run: (a, api2) => {
|
|
37118
37116
|
if (a.path.includes(".."))
|
|
@@ -37120,15 +37118,15 @@ var generalTools = [
|
|
|
37120
37118
|
if (a.api === "core") {
|
|
37121
37119
|
if (!API_PREFIXES.some((p) => a.path.startsWith(p)))
|
|
37122
37120
|
throw new Error(`Core API paths start with one of: ${API_PREFIXES.join(", ")}`);
|
|
37123
|
-
return api2.api(
|
|
37121
|
+
return api2.api("GET", a.path, { query: a.query });
|
|
37124
37122
|
}
|
|
37125
|
-
return api2.email(
|
|
37123
|
+
return api2.email("GET", a.path, { query: a.query });
|
|
37126
37124
|
}
|
|
37127
37125
|
})
|
|
37128
37126
|
];
|
|
37129
37127
|
|
|
37130
37128
|
// src/server.ts
|
|
37131
|
-
var VERSION = "0.5.
|
|
37129
|
+
var VERSION = "0.5.2";
|
|
37132
37130
|
var INSTRUCTIONS = `Helipod is a cloud platform (Indonesia): containers, managed Postgres databases, VPS, domains, email and an AI gateway, billed from a prepaid wallet in Rupiah.
|
|
37133
37131
|
- Start with list_projects to find projects and environment ids. Account tools (get_wallet, invoices, statements, notifications, get_project_activity, support tickets) cover the account; AI tools (list_ai_models, get_ai_overview, get_ai_usage, AI keys, top-ups) cover the AI gateway.
|
|
37134
37132
|
- Anything that costs money (create/deploy/scale services, resize volumes, upgrade a database plan, create/renew/upgrade VPS, VPS backups, register/renew/transfer domains, email plans and inbox add-ons, AI top-ups and auto top-up): call it with dryRun=true first (or the price lookup when it has no dry run), tell the user the cost in IDR and the wallet balance after, and wait for an explicit yes before the real call. Never treat silence or an earlier general OK as a yes.
|
package/dist/stdio.js
CHANGED
|
@@ -34925,7 +34925,7 @@ function register(server, api2, defs) {
|
|
|
34925
34925
|
annotations: {
|
|
34926
34926
|
title: d.title,
|
|
34927
34927
|
readOnlyHint: d.kind === "read",
|
|
34928
|
-
destructiveHint: d.kind
|
|
34928
|
+
destructiveHint: d.kind !== "read",
|
|
34929
34929
|
idempotentHint: d.kind === "read" || !!d.idempotent,
|
|
34930
34930
|
openWorldHint: true
|
|
34931
34931
|
}
|
|
@@ -37210,16 +37210,14 @@ var aiTools = [
|
|
|
37210
37210
|
var API_PREFIXES = ["/containers/", "/databases", "/vps", "/backup/", "/domains", "/account/", "/ai/"];
|
|
37211
37211
|
var generalTools = [
|
|
37212
37212
|
defineTool({
|
|
37213
|
-
name: "
|
|
37214
|
-
title: "
|
|
37215
|
-
kind: "
|
|
37216
|
-
description: "
|
|
37213
|
+
name: "helipod_api_get",
|
|
37214
|
+
title: "Read any Helipod API endpoint",
|
|
37215
|
+
kind: "read",
|
|
37216
|
+
description: "GET an endpoint of the Helipod public API that has no dedicated read tool (Helipod API reference: https://docs.helipod.io/docs/helipod). api=core for the Container, Database, VPS, Domain, Account and AI APIs (paths like /vps/{id}/backup/runs, /account/wallet, /ai/usage), api=email for the Email API (paths like /broadcasts). Read only: it never changes anything.",
|
|
37217
37217
|
input: {
|
|
37218
37218
|
api: exports_external.enum(["core", "email"]),
|
|
37219
|
-
|
|
37220
|
-
|
|
37221
|
-
query: exports_external.record(exports_external.string(), exports_external.string()).optional(),
|
|
37222
|
-
body: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
37219
|
+
path: exports_external.string().regex(/^\/[A-Za-z0-9/_.\-:]*$/).describe("Path after the base URL, e.g. /vps/abc/backup/runs"),
|
|
37220
|
+
query: exports_external.record(exports_external.string(), exports_external.string()).optional()
|
|
37223
37221
|
},
|
|
37224
37222
|
run: (a, api2) => {
|
|
37225
37223
|
if (a.path.includes(".."))
|
|
@@ -37227,15 +37225,15 @@ var generalTools = [
|
|
|
37227
37225
|
if (a.api === "core") {
|
|
37228
37226
|
if (!API_PREFIXES.some((p) => a.path.startsWith(p)))
|
|
37229
37227
|
throw new Error(`Core API paths start with one of: ${API_PREFIXES.join(", ")}`);
|
|
37230
|
-
return api2.api(
|
|
37228
|
+
return api2.api("GET", a.path, { query: a.query });
|
|
37231
37229
|
}
|
|
37232
|
-
return api2.email(
|
|
37230
|
+
return api2.email("GET", a.path, { query: a.query });
|
|
37233
37231
|
}
|
|
37234
37232
|
})
|
|
37235
37233
|
];
|
|
37236
37234
|
|
|
37237
37235
|
// src/server.ts
|
|
37238
|
-
var VERSION = "0.5.
|
|
37236
|
+
var VERSION = "0.5.2";
|
|
37239
37237
|
var INSTRUCTIONS = `Helipod is a cloud platform (Indonesia): containers, managed Postgres databases, VPS, domains, email and an AI gateway, billed from a prepaid wallet in Rupiah.
|
|
37240
37238
|
- Start with list_projects to find projects and environment ids. Account tools (get_wallet, invoices, statements, notifications, get_project_activity, support tickets) cover the account; AI tools (list_ai_models, get_ai_overview, get_ai_usage, AI keys, top-ups) cover the AI gateway.
|
|
37241
37239
|
- Anything that costs money (create/deploy/scale services, resize volumes, upgrade a database plan, create/renew/upgrade VPS, VPS backups, register/renew/transfer domains, email plans and inbox add-ons, AI top-ups and auto top-up): call it with dryRun=true first (or the price lookup when it has no dry run), tell the user the cost in IDR and the wallet balance after, and wait for an explicit yes before the real call. Never treat silence or an earlier general OK as a yes.
|
package/package.json
CHANGED
|
@@ -25,4 +25,4 @@ Follow the `helipod` skill rules. A VPS is prepaid per period: creating one char
|
|
|
25
25
|
- Billing: `get_vps_renewal_options` → `renew_vps`; `upgrade_vps` to a larger plan (charges the difference, restarts); `toggle_vps_auto_renew`.
|
|
26
26
|
- Terminate: `terminate_vps` is permanent, no refund: confirm explicitly.
|
|
27
27
|
|
|
28
|
-
Backups (paid add-on)
|
|
28
|
+
Backups (paid add-on) have dedicated tools; to read anything else use `helipod_api_get` with paths from https://docs.helipod.io/docs/vps-api
|