vpsnet-mcp 1.0.1 → 1.0.3

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 (3) hide show
  1. package/README.md +22 -6
  2. package/build/index.js +24 -13
  3. package/package.json +5 -3
package/README.md CHANGED
@@ -1,23 +1,39 @@
1
1
  # vpsnet-mcp
2
2
 
3
- [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server for managing [VPSNet](https://www.vpsnet.com) virtual private servers. Gives AI assistants full control over your VPS infrastructure — start/stop servers, change plans, manage DNS, deploy SSH keys, order new servers, and more.
3
+ [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server for managing [VPSnet.com](https://www.vpsnet.com) virtual private servers. Gives AI assistants full control over your VPS infrastructure — order servers, manage plans, deploy SSH keys, and directly access your servers via SSH for software installation and configuration.
4
4
 
5
5
  ## Features
6
6
 
7
- - **49 tools** covering the entire VPSNet API
7
+ - **49 tools** covering the entire VPSnet.com API
8
8
  - Account & profile management
9
9
  - VPS lifecycle (start, stop, restart, reinstall OS)
10
10
  - Plan changes (free upgrades/downgrades)
11
11
  - DNS (rDNS/PTR records)
12
- - SSH key & API key management
12
+ - SSH key management — deploy keys and gain direct server access
13
+ - API key management
13
14
  - Backups, billing, invoices
14
15
  - Ordering new VPS instances
15
16
  - System status & pricing
16
17
 
18
+ ## SSH access workflow
19
+
20
+ This MCP server manages your VPS infrastructure through the VPSnet.com API, including SSH key provisioning. Once an SSH key is deployed to a VPS, the AI assistant can connect directly using its environment's terminal (e.g. Claude Code's Bash tool, Cline's terminal).
21
+
22
+ **Typical flow:**
23
+
24
+ 1. AI reads the local machine's public key (`~/.ssh/id_rsa.pub`)
25
+ 2. Uploads it to VPSnet.com via `create_ssh_key`
26
+ 3. Deploys it to a VPS via `deploy_ssh_key` (or passes it when ordering with `order_service`)
27
+ 4. Connects directly: `ssh root@<vps_ip>`
28
+
29
+ Most AI coding environments (Claude Code, Cline, Cursor, Codex) have built-in terminal access, so the AI can SSH into your VPS immediately after deploying a key — no extra tools needed.
30
+
31
+ For environments without native SSH access, consider pairing this with a dedicated SSH MCP server for direct server connectivity.
32
+
17
33
  ## Requirements
18
34
 
19
35
  - Node.js 18 or newer
20
- - A [VPSNet](https://www.vpsnet.com) account with an API key
36
+ - A [VPSnet.com](https://www.vpsnet.com) account with an API key
21
37
 
22
38
  ## Getting started
23
39
 
@@ -171,7 +187,7 @@ Follow the [Windsurf MCP documentation](https://docs.windsurf.com/windsurf/mcp).
171
187
 
172
188
  | Variable | Required | Description |
173
189
  |----------|----------|-------------|
174
- | `VPSNET_API_KEY` | Yes | Your VPSNet API key |
190
+ | `VPSNET_API_KEY` | Yes | Your VPSnet.com API key |
175
191
  | `VPSNET_API_URL` | No | API base URL (defaults to `https://api.vpsnet.com`) |
176
192
 
177
193
  ## Tools
@@ -274,7 +290,7 @@ Follow the [Windsurf MCP documentation](https://docs.windsurf.com/windsurf/mcp).
274
290
  | Tool | Description |
275
291
  |------|-------------|
276
292
  | `get_pricing` | Get public pricing |
277
- | `get_system_status` | Get VPSNet system status |
293
+ | `get_system_status` | Get VPSnet.com system status |
278
294
  | `get_faq` | Get frequently asked questions |
279
295
 
280
296
  ## Getting an API key
package/build/index.js CHANGED
@@ -5,7 +5,7 @@ import { z } from "zod";
5
5
  import { apiRequest, formatJson } from "./api.js";
6
6
  const server = new McpServer({ name: "vpsnet", version: "1.0.0" }, {
7
7
  instructions: [
8
- "This MCP server controls VPS (Virtual Private Server) services on VPSNet.",
8
+ "This MCP server controls VPS (Virtual Private Server) services on VPSnet.com.",
9
9
  "It manages VPS servers ONLY — not VDS or Dedicated Servers.",
10
10
  "",
11
11
  "## Ordering a new VPS",
@@ -18,16 +18,27 @@ const server = new McpServer({ name: "vpsnet", version: "1.0.0" }, {
18
18
  "After placing an order, wait 10-30 seconds before attempting SSH — the VPS needs time to boot and start SSH daemon.",
19
19
  "",
20
20
  "## SSH key workflow (IMPORTANT for deploying software to VPS)",
21
- "When ordering or accessing a VPS, PREFER using sshKey over rootPassword — unless on Windows without an SSH client.",
22
- "To access a VPS via SSH, you MUST use YOUR OWN local machine's SSH key:",
23
- "1. Read the local machine's public key from ~/.ssh/id_rsa.pub or ~/.ssh/id_ed25519.pub",
24
- "2. Upload it via create_ssh_key(name, public_key) — name it descriptively e.g. 'claude-code-local'",
25
- "3. Deploy it to the VPS via deploy_ssh_key(orderNo, ssh_key_id) OR pass sshKey when ordering",
26
- "4. Then SSH directly: ssh root@<vps_ip>",
27
- "NEVER use someone else's SSH key — always read from the local machine where you are running.",
28
- "Only fall back to rootPassword if the local machine has no SSH key and no SSH client (e.g. Windows without OpenSSH).",
29
- "Note: order_service uses 'sshKey' (camelCase) but deploy_ssh_key uses 'ssh_key' (snake_case) — different field names!",
30
- "To deploy software inside a VPS: first deploy an SSH key to the VPS, then access it directly via SSH. If no SSH client is available (e.g. Windows without OpenSSH), use rootPassword instead and connect via the platform's console or other remote access.",
21
+ "",
22
+ "### When the user asks you to deploy, install, or configure something INSIDE a VPS:",
23
+ "You MUST deploy YOUR OWN SSH key first, then connect directly via SSH.",
24
+ "After deploying your key, you can INSTANTLY access the VPS — no extra tools needed.",
25
+ "Most AI environments (Claude Code, Cline, Cursor, Codex) have a built-in terminal/bash tool.",
26
+ "Use that terminal to run: ssh -o StrictHostKeyChecking=no root@<vps_ip>",
27
+ "",
28
+ "### Step-by-step SSH key flow:",
29
+ "1. Read YOUR local machine's public key from ~/.ssh/id_rsa.pub or ~/.ssh/id_ed25519.pub",
30
+ "2. Upload it via create_ssh_key(name, public_key) — name it descriptively e.g. 'claude-code-key'",
31
+ "3. Deploy it to the VPS via deploy_ssh_key(orderNo, ssh_key_id) OR pass sshKey when ordering a new VPS",
32
+ "4. SSH directly using your environment's terminal: ssh -o StrictHostKeyChecking=no root@<vps_ip>",
33
+ "5. Now you can run any commands inside the VPS (apt install, configure services, deploy apps, etc.)",
34
+ "",
35
+ "### Important SSH notes:",
36
+ "- ALWAYS prefer sshKey over rootPassword — it's more secure and enables direct access.",
37
+ "- NEVER use someone else's SSH key — always read from the local machine where you are running.",
38
+ "- Use -o StrictHostKeyChecking=no when connecting to newly created VPS to avoid host key prompts.",
39
+ "- order_service uses 'sshKey' (camelCase) but deploy_ssh_key uses 'ssh_key' (snake_case) — different field names!",
40
+ "- Only fall back to rootPassword if the local machine has no SSH key (e.g. Windows without OpenSSH).",
41
+ "- If your environment has no terminal/bash access at all, consider using a dedicated SSH MCP server for connectivity.",
31
42
  "",
32
43
  "## Plan changes",
33
44
  "Plan changes are FREE — remaining time is recalculated (upgrade = shorter expiry, downgrade = longer expiry).",
@@ -644,7 +655,7 @@ server.registerTool("get_pricing", {
644
655
  return { content: [{ type: "text", text: formatJson(data) }] };
645
656
  });
646
657
  server.registerTool("get_system_status", {
647
- description: "Get VPSNet system status",
658
+ description: "Get VPSnet.com system status",
648
659
  inputSchema: {},
649
660
  }, async () => {
650
661
  const { data } = await apiRequest("GET", "/public/status");
@@ -661,7 +672,7 @@ server.registerTool("get_faq", {
661
672
  async function main() {
662
673
  const transport = new StdioServerTransport();
663
674
  await server.connect(transport);
664
- console.error("VPSNet MCP server running");
675
+ console.error("VPSnet MCP server running");
665
676
  }
666
677
  main().catch((error) => {
667
678
  console.error("Fatal error:", error);
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "vpsnet-mcp",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
- "description": "MCP server for managing VPSNet virtual private servers",
5
+ "description": "MCP server for managing VPSnet.com virtual private servers",
6
6
  "bin": {
7
7
  "vpsnet-mcp": "./build/index.js"
8
8
  },
@@ -11,7 +11,9 @@
11
11
  "dev": "tsc --watch",
12
12
  "prepublishOnly": "npm run build"
13
13
  },
14
- "files": ["build"],
14
+ "files": [
15
+ "build"
16
+ ],
15
17
  "repository": "github:bacarrdy/vpsnet-mcp",
16
18
  "homepage": "https://github.com/bacarrdy/vpsnet-mcp",
17
19
  "author": "bacarrdy",