Use VPSNine from Claude, Cursor and other AI tools (MCP)

Connect Claude, Cursor or VS Code to VPSNine with MCP, so an assistant can check and manage your servers with your API token.

VPSNine has an MCP server, so AI tools that speak the Model Context Protocol (Claude Desktop, Claude Code, Cursor, VS Code and others) can work with your servers: list them, read a server's firewall, take a snapshot, reboot, set reverse DNS, look at invoices, open a support ticket. It uses an API token, and it can do exactly what that token can do through the API, nothing more.

There are two ways to connect:

Remote (a URL) Local (a program on your computer)
Address https://my.vpsnine.com/mcp vpsnine-mcp.mjs, run with Node.js 18 or later
Install Nothing One file, once its download is published
Works with Claude Code, Cursor, VS Code and any client that sends a header Claude Desktop, and any client that starts a local process

Both offer the same tools and answer the same way.

Start with a read-only token

Make a token for the assistant in the panel at my.vpsnine.com/account/api-tokens. Name it after the tool, like Claude Desktop, and pick read only to start.

The Create a token form with the name Claude Desktop (read only) and the read only scope chosen
A read-only token lets the assistant look at everything and change nothing.

With a read-only token the assistant only sees the tools that look. When you want it to make changes, make a second token with read and write and swap it in. Give the token an expiry, and limit it to your own addresses if your computer's address doesn't change.

Claude Code

Add the remote server with one command. Replace vps9_... with your token:

bash
claude mcp add --transport http vpsnine https://my.vpsnine.com/mcp --header "Authorization: Bearer vps9_..."

claude mcp list should show vpsnine as connected. Then ask, for example, "list my VPSNine servers". Add --scope user to use it in every project rather than only the current one.

Cursor

Add this to ~/.cursor/mcp.json (every project) or .cursor/mcp.json in one project, and keep the token in an environment variable named VPSNINE_API_TOKEN:

json
{
  "mcpServers": {
    "vpsnine": {
      "url": "https://my.vpsnine.com/mcp",
      "headers": { "Authorization": "Bearer ${env:VPSNINE_API_TOKEN}" }
    }
  }
}

VS Code

Add this to .vscode/mcp.json in your project. VS Code asks for the token the first time and stores it encrypted, so it never sits in the file:

json
{
  "inputs": [
    { "type": "promptString", "id": "vpsnine-token", "description": "VPSNine API token", "password": true }
  ],
  "servers": {
    "vpsnine": {
      "type": "http",
      "url": "https://my.vpsnine.com/mcp",
      "headers": { "Authorization": "Bearer ${input:vpsnine-token}" }
    }
  }
}

Open Copilot Chat in agent mode and the VPSNine tools are in its tools list.

Claude Desktop

Claude Desktop starts MCP servers as local programs, so it uses vpsnine-mcp.mjs, a single file that needs Node.js 18 or later and nothing else. Its download opens at launch at https://vpsnine.com/downloads/mcp/, with a SHA256SUMS file to check it against, like the vps9 CLI. Save it somewhere permanent, then open Settings, Developer, Edit Config and add it to claude_desktop_config.json:

json
{
  "mcpServers": {
    "vpsnine": {
      "command": "node",
      "args": ["/Users/you/vpsnine/vpsnine-mcp.mjs"],
      "env": { "VPSNINE_API_TOKEN": "vps9_..." }
    }
  }
}

On Windows the path looks like "C:\\Users\\you\\vpsnine\\vpsnine-mcp.mjs". Restart Claude Desktop; VPSNine appears under the tools button in a new chat.

The local server takes two more settings. --read-only in args (or "VPSNINE_MCP_READ_ONLY": "1" in env) offers only the tools that look, whatever the token allows. VPSNINE_API_URL points it at another API address, which you won't normally need.

What the assistant can do

Area Tools
Account and catalog get_account, list_ssh_keys, add_ssh_key, list_images, list_apps, get_prices, get_status
Servers list_servers, get_server, create_server, power_server (start, stop, reboot), reinstall_server, delete_server, update_server_details
Snapshots list_snapshots, create_snapshot, revert_snapshot, delete_snapshot
Network get_firewall, set_firewall, list_reverse_dns, set_reverse_dns, clear_reverse_dns
Billing get_addons, change_addons, get_billing_summary, list_invoices, get_invoice
Support list_tickets, get_ticket, open_ticket, reply_to_ticket

There are also two ready-made prompts, check_server (looks over one server and reports what needs attention) and review_spending (what each server costs and where you could save), and each server is readable as a summary at vpsnine://servers/<id>. Neither changes anything.

Safety: what asks before it runs

The assistant acts as your token, so it can't do more than the token allows: a read-only token can't change anything, a team member's token is limited by their role, and an address-limited token only works from those addresses. Every tool call is an API request, with the same rate limits and a request id you can give support.

On top of that, the tools that cost money or destroy data stop first:

  • create_server and change_addons answer with the price and do nothing. The assistant has to show you the price and call again with confirm: true. An order makes an invoice; the server is built once you pay it.
  • reinstall_server, delete_server, revert_snapshot and delete_snapshot first say what would be lost. To go ahead the assistant has to send confirm: true and the server's hostname typed back, and we check the hostname against the server. A wrong one does nothing.

Most AI tools also ask you before each tool call; keep that on for anything that changes your servers. Root passwords can't be set through MCP, so a password never ends up in a chat; new servers use your SSH keys. Every change is in your activity log, marked as made through the API via MCP.

If a token might have leaked, or you stop using an assistant, revoke its token in the panel. It stops working at once.

When it doesn't connect

  • 401 unauthorized: the token is wrong, revoked or expired. Check it starts with vps9_ and that nothing was cut off when you pasted it.
  • 403 ip_not_allowed: the token only works from certain addresses, and this request came from another.
  • Only read tools show up: the token is read only, or the local server runs with --read-only.
  • 429 rate_limited: the assistant made too many calls in a minute. It can try again after the time the error gives.

Anything else comes back with a request id like req_7d2kq4m5x3n6p2r4s7t2v3w4. Put it in a support ticket and we can find the request.

Be first when orders open

Join the waitlist and we'll send you one email when VPSNine launches. Pick a plan if you already know which one you want, and we'll size the first servers around it.

  • One email, on launch day
  • Monthly or yearly, no lock-in
  • 14-day money-back guarantee