gpu.nz MCP server
Connect gpu.nz to your AI assistant over the Model Context Protocol. It picks a GPU for the model, works out the VRAM, rents a server, reads its logs and stops it when the job is done.
https://gpu.nz/mcp- Nothing to install: the server runs on gpu.nz
- Search and estimates work without a key
- Renting needs your API key
Connect
Pick your app. Replace gpz_… with a key from the Keys page of the console. Without a key only GPU search, prices and VRAM estimates work.
claude mcp add --transport http gpunz https://gpu.nz/mcp \
--header "Authorization: Bearer gpz_…"- Claude Desktop connects through mcp-remote (Node.js 18+). On claude.ai you can add https://gpu.nz/mcp under Connectors without a key: search and estimates will work.
- VS Code asks for the key on first use and keeps it in its secret storage.
- Codex reads the key from the GPUNZ_API_KEY environment variable.
- For clients that only run local servers there is a bridge on Docker and GitHub: github.com/gpunz/gpunz-mcp
Tools
The tools call the same REST API as the site: the key's scopes, the rate limits and the audit log are shared.
No key needed
| Tool | What it does |
|---|---|
| list_gpu_models | GPU models in stock: memory, class, price per hour. |
| search_offers | Servers with prices: filter by model, GPU count, memory, price, country and reliability. |
| get_offer | One server and its current price. |
| list_templates | Ready environments: ComfyUI, Forge, Ollama, vLLM, Jupyter, LoRA training, your own Docker image. |
| estimate_vram | How much GPU memory a model needs (Qwen, DeepSeek, Llama, Gemma, GPT-OSS, FLUX, Wan…) and which GPUs fit it, by price. |
| topup_link | A link to top up the balance. Payment happens in the browser only. |
With a key
| Tool | What it does | Key scope |
|---|---|---|
| get_account | Account, balance, hourly spend and how long the money lasts. | user:read, billing:read |
| list_instances | Your servers: status, GPU, price, SSH command. | instances:read |
| get_instance | One server: SSH, app links, cost since it started. | instances:read |
| get_instance_logs | The last log lines: boot, app start-up, errors. | instances:read |
| create_instance | Rents a server with a template. Billing starts right away. | instances:write |
| stop_instance | Stops a server: only its disk is billed from then on. | instances:write |
| start_instance | Starts a stopped server. | instances:write |
| destroy_instance | Destroys a server and its disk. Irreversible. | instances:write |
| list_ssh_keys | The account's SSH keys. | user:read |
| add_ssh_key | Adds an SSH key. | user:write |
API key
Create a key on the Keys page of the console. Give it only what the agent needs: renting and stopping servers takes the instance scopes and billing read.
instances:read, instances:write, billing:read, user:readSet an expiry, say 30 days, and revoke the key when the agent no longer needs it.
Never paste the key into the chat with the model: it belongs in the app's settings only.
Example prompts
Ask in plain words — the agent picks the tools.
- How much VRAM does Qwen3.8 27B need with a 32k context, and where is it cheapest?
- Find the cheapest RTX 4090 with reliability above 0.98 and start ComfyUI on it with an 80 GB disk.
- Run GPT-OSS 120B on one H100 and give me the chat link when the server is ready.
- Show my servers and what they cost per hour, and stop the ones I haven't touched since yesterday.
- Give me a top-up link for $20.
Money and safety
- The agent cannot spend more than the balance holds: top-ups happen in the browser only.
- Renting, starting and destroying are flagged to the client as consequential: Claude, Cursor and Codex ask for confirmation.
- The root password stays out of answers unless the agent asks for it explicitly: your SSH keys are installed on every server.
- The limit is 120 requests a minute per key. Renting, stopping and destroying go to the account's audit log, like API calls.
Troubleshooting
The agent says a key is required
The Authorization header did not reach the server. Check that the key starts with gpz_ and is sent as “Bearer gpz_…”, then restart the app.
Forbidden
The key lacks the scope for this action. Create a new key with the instance scopes.
The client waits for an event stream (SSE)
The server is stateless and answers POST /mcp with plain JSON. Update the client: every current version speaks Streamable HTTP.