vpsnet-mcp 1.0.5 → 1.0.7
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/build/index.js +7 -7
- package/package.json +4 -1
package/build/index.js
CHANGED
|
@@ -16,6 +16,7 @@ const server = new McpServer({ name: "vpsnet", version: "1.0.0" }, {
|
|
|
16
16
|
"rootPassword rules: 6-40 chars, alphanumeric only, MUST contain uppercase + lowercase + digit. Example: 'MyPass123'.",
|
|
17
17
|
"sshKey and rootPassword are mutually exclusive — provide one or the other (or neither for auto-generated password).",
|
|
18
18
|
"After placing an order, wait 10-30 seconds before attempting SSH — the VPS needs time to boot and start SSH daemon.",
|
|
19
|
+
"deploy_ssh_key is also async — wait 15-30 seconds after deploying a key before attempting SSH to any VPS (not just new ones).",
|
|
19
20
|
"",
|
|
20
21
|
"## SSH key workflow (IMPORTANT for deploying software to VPS)",
|
|
21
22
|
"",
|
|
@@ -23,6 +24,7 @@ const server = new McpServer({ name: "vpsnet", version: "1.0.0" }, {
|
|
|
23
24
|
"You MUST deploy YOUR OWN SSH key first, then connect directly via SSH.",
|
|
24
25
|
"After deploying your key, you can INSTANTLY access the VPS — no extra tools needed.",
|
|
25
26
|
"Most AI environments (Claude Code, Cline, Cursor, Codex) have a built-in terminal/bash tool.",
|
|
27
|
+
"IMPORTANT: Grant FULL permissions/access to the AI tool — restricted/sandbox modes may block npm installs or SSH connections.",
|
|
26
28
|
"Use that terminal to run: ssh -o StrictHostKeyChecking=no root@<vps_ip>",
|
|
27
29
|
"",
|
|
28
30
|
"### Step-by-step SSH key flow:",
|
|
@@ -244,7 +246,7 @@ server.registerTool("toggle_extra_settings", {
|
|
|
244
246
|
return { content: [{ type: "text", text: formatJson(data) }] };
|
|
245
247
|
});
|
|
246
248
|
server.registerTool("deploy_ssh_key", {
|
|
247
|
-
description: "Deploy an SSH key to VPS. Use list_ssh_keys to get available key IDs. To add your own key first: read ~/.ssh/id_rsa.pub from local machine, then create_ssh_key, then deploy it here.",
|
|
249
|
+
description: "Deploy an SSH key to VPS. Returns noty UUID for tracking. ASYNC — wait 15-30 seconds after deploying before attempting SSH. Use list_ssh_keys to get available key IDs. To add your own key first: read ~/.ssh/id_rsa.pub from local machine, then create_ssh_key, then deploy it here.",
|
|
248
250
|
inputSchema: {
|
|
249
251
|
orderNo: z.string().describe("Order number"),
|
|
250
252
|
ssh_key: z.number().describe("SSH key ID from list_ssh_keys"),
|
|
@@ -558,7 +560,6 @@ server.registerTool("create_api_key", {
|
|
|
558
560
|
description: "Create a new API key",
|
|
559
561
|
inputSchema: {
|
|
560
562
|
name: z.string().describe("Key name"),
|
|
561
|
-
scope: z.string().describe("Permission scope"),
|
|
562
563
|
allowed_ips: z
|
|
563
564
|
.string()
|
|
564
565
|
.optional()
|
|
@@ -568,8 +569,8 @@ server.registerTool("create_api_key", {
|
|
|
568
569
|
.optional()
|
|
569
570
|
.describe("Expiry date (YYYY-MM-DD)"),
|
|
570
571
|
},
|
|
571
|
-
}, async ({ name,
|
|
572
|
-
const body = { name
|
|
572
|
+
}, async ({ name, allowed_ips, expires_at }) => {
|
|
573
|
+
const body = { name };
|
|
573
574
|
if (allowed_ips)
|
|
574
575
|
body.allowed_ips = allowed_ips;
|
|
575
576
|
if (expires_at)
|
|
@@ -582,7 +583,6 @@ server.registerTool("update_api_key", {
|
|
|
582
583
|
inputSchema: {
|
|
583
584
|
id: z.number().describe("API key ID"),
|
|
584
585
|
name: z.string().describe("Key name"),
|
|
585
|
-
scope: z.string().describe("Permission scope"),
|
|
586
586
|
allowed_ips: z
|
|
587
587
|
.string()
|
|
588
588
|
.optional()
|
|
@@ -592,8 +592,8 @@ server.registerTool("update_api_key", {
|
|
|
592
592
|
.optional()
|
|
593
593
|
.describe("Expiry date (YYYY-MM-DD)"),
|
|
594
594
|
},
|
|
595
|
-
}, async ({ id, name,
|
|
596
|
-
const body = { name
|
|
595
|
+
}, async ({ id, name, allowed_ips, expires_at }) => {
|
|
596
|
+
const body = { name };
|
|
597
597
|
if (allowed_ips)
|
|
598
598
|
body.allowed_ips = allowed_ips;
|
|
599
599
|
if (expires_at)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vpsnet-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MCP server for managing VPSnet.com virtual private servers",
|
|
6
6
|
"bin": {
|
|
@@ -27,6 +27,9 @@
|
|
|
27
27
|
"server-management",
|
|
28
28
|
"hosting"
|
|
29
29
|
],
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=18"
|
|
32
|
+
},
|
|
30
33
|
"dependencies": {
|
|
31
34
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
32
35
|
"zod": "^3.24.2"
|