Contabo MCP

CI npm version Socket Badge

MCP server for the Contabo cloud API — virtual machines, images, snapshots, networking, DNS, object storage, secrets, domains, and tags.

Manage Contabo VPS/VDS instances, images, snapshots, firewalls, private networks, VIPs, DNS, S3-compatible object storage, secrets, domains, and tags from Cursor, Claude Desktop, or any MCP client. Published on npm as @kieksme/contabo-mcp.

Quick start

npx -y @kieksme/contabo-mcp

npm: @kieksme/contabo-mcp · Releases

Set CONTABO_CLIENT_ID, CONTABO_CLIENT_SECRET, CONTABO_API_USER, and CONTABO_API_PASSWORD in your environment or MCP client config. How to get them from the Contabo API details page: see Obtaining API credentials in the package README.

Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "contabo": {
      "command": "npx",
      "args": ["-y", "@kieksme/contabo-mcp"],
      "env": {
        "CONTABO_CLIENT_ID": "...",
        "CONTABO_CLIENT_SECRET": "...",
        "CONTABO_API_USER": "...",
        "CONTABO_API_PASSWORD": "..."
      }
    }
  }
}

Remote MCP (HTTP)

Besides stdio, the server runs as a remote MCP over Streamable HTTP with Bearer-token auth — the mode used in Docker. Select it via MCP_TRANSPORT=http (default is stdio, fully backward compatible).

Run the published image from GHCR:

docker run --rm -p 3000:3000 \
  -e MCP_TRANSPORT=http \
  -e MCP_AUTH_TOKEN="$(openssl rand -hex 32)" \
  -e CONTABO_CLIENT_ID=... -e CONTABO_CLIENT_SECRET=... \
  -e CONTABO_API_USER=... -e CONTABO_API_PASSWORD=... \
  ghcr.io/kieksme/contabo-mcp:latest

The server listens on http://localhost:3000/; GET /health returns {"status":"ok"} (unauthenticated) for orchestrator probes. The CONTABO_* credentials are still required — the HTTP transport only changes how clients reach the server, not how it authenticates to Contabo.

Connect an MCP client (present the MCP_AUTH_TOKEN as a Bearer token):

{
  "mcpServers": {
    "contabo-remote": {
      "type": "streamable-http",
      "url": "https://your-host:3000/",
      "headers": { "Authorization": "Bearer <MCP_AUTH_TOKEN>" }
    }
  }
}

For stdio-only clients, bridge with mcp-remote:

npx -y mcp-remote https://your-host:3000/ --header "Authorization: Bearer <MCP_AUTH_TOKEN>"

Security: the server speaks plain HTTP — terminate TLS at a reverse proxy / ingress and never expose the raw port unencrypted. Beyond localhost, enable MCP_HTTP_DNS_REBINDING_PROTECTION=true with MCP_HTTP_ALLOWED_HOSTS. See Remote HTTP transport (Docker) in the package README for all MCP_* variables, Docker Compose, and scaling notes.

See contabo-mcp/README.md for the full tool list and install options. To develop or release, see CONTRIBUTING.md. Releases on main are proposed by release-please via pull request.