Create, list and destroy hourly-billed servers on Vultr, DigitalOcean, Hetzner and Linode.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
NoctHost API key, created in the dashboard under Profile, API keys.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Creates 1 to 10 servers (default limit 3 per call) and waits up to about two minutes for ACTIVE, then returns ids, IPv4 and the SSH command. Spends money: billed per hour from the balance until destroy_server. Show the user the price from quote first. Refused with the quote if the total hourly price is above max_hourly_usd (default $1); more than 3 servers also need an explicit max_hourly_usd. Pass ssh_public_key whenever possible; without it a random root password is generated and returned once, and it stays in the chat history.
Plan id from list_options, e.g. "vc2-1c-1gb", or a plan name like "Micro".
City id or name, e.g. "fra" or "Frankfurt".
OS id or name, default "ubuntu-24.04". Ignored for GPU plans.
How many identical servers, default 1.
Server name: Latin letters, digits, dot, dash, underscore. With count > 1 it gets -1, -2, ...
Cloud; default is the cheapest that deploys this plan in this city.
Upper bound for the total hourly price of this call, default 1.
One public key line (ssh-ed25519 ..., ssh-rsa ...), installed for root.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mcp https://mcp.nocthost.com/mcp \ --header 'Authorization: YOUR_CREDENTIALS'
Headers
Authorization (required): NoctHost API key, created in the dashboard under Profile, API keys.Creates 1 to 10 servers (default limit 3 per call) and waits up to about two minutes for ACTIVE, then returns ids, IPv4 and the SSH command. Spends money: billed per hour from the balance until destroy_server. Show the user the price from quote first. Refused with the quote if the total hourly price is above max_hourly_usd (default $1); more than 3 servers also need an explicit max_hourly_usd. Pass ssh_public_key whenever possible; without it a random root password is generated and returned once, and it stays in the chat history.
| Argument | Type | Description |
|---|---|---|
| os | string | OS id or name, default "ubuntu-24.04". Ignored for GPU plans. |
| plan* | string | Plan id from list_options, e.g. "vc2-1c-1gb", or a plan name like "Micro". |
| count | integer | How many identical servers, default 1. |
| label | string | Server name: Latin letters, digits, dot, dash, underscore. With count > 1 it gets -1, -2, ... |
| region* | string | City id or name, e.g. "fra" or "Frankfurt". |
| provider | string | Cloud; default is the cheapest that deploys this plan in this city. |
| max_hourly_usd | number | Upper bound for the total hourly price of this call, default 1. |
| ssh_public_key | string | One public key line (ssh-ed25519 ..., ssh-rsa ...), installed for root. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"plan",
"region"
],
"properties": {
"os": {
"type": "string",
"maxLength": 64,
"description": "OS id or name, default \"ubuntu-24.04\". Ignored for GPU plans."
},
"plan": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Plan id from list_options, e.g. \"vc2-1c-1gb\", or a plan name like \"Micro\"."
},
"count": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "How many identical servers, default 1."
},
"label": {
"type": "string",
"maxLength": 61,
"description": "Server name: Latin letters, digits, dot, dash, underscore. With count > 1 it gets -1, -2, ..."
},
"region": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "City id or name, e.g. \"fra\" or \"Frankfurt\"."
},
"provider": {
"enum": [
"vultr",
"digitalocean",
"hetzner",
"linode",
"ovh"
],
"type": "string",
"description": "Cloud; default is the cheapest that deploys this plan in this city."
},
"max_hourly_usd": {
"type": "number",
"maximum": 10000,
"description": "Upper bound for the total hourly price of this call, default 1.",
"exclusiveMinimum": 0
},
"ssh_public_key": {
"type": "string",
"maxLength": 4096,
"description": "One public key line (ssh-ed25519 ..., ssh-rsa ...), installed for root."
}
},
"additionalProperties": false
}Permanently deletes a server and its disk; billing stops in the hour it is destroyed. Needs confirm: true and the server's exact label. Without both it only describes what would be destroyed.
| Argument | Type | Description |
|---|---|---|
| id* | string | Server id. |
| label | string | The server's exact label, as a second check. |
| confirm | boolean | Must be true to destroy. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Server id."
},
"label": {
"type": "string",
"maxLength": 64,
"description": "The server's exact label, as a second check."
},
"confirm": {
"type": "boolean",
"description": "Must be true to destroy."
}
},
"additionalProperties": false
}Balance in USD, current hourly spend, how long the balance lasts at that rate, and how many servers the account runs and may run. Call this before creating a server.
No arguments.
{
"type": "object",
"properties": {}
}One server by id: status (PROVISIONING, ACTIVE, STOPPED, ERROR and so on), IPv4, SSH command, plan, city, cloud and hourly price. Use it to follow a server that was still provisioning.
| Argument | Type | Description |
|---|---|---|
| id* | string | Server id from create_server or list_servers. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Server id from create_server or list_servers."
}
},
"additionalProperties": false
}What can be deployed right now: sizes (shared vCPU, dedicated CPU, NVIDIA GPU, bare metal) with vCPU, RAM, disk, included traffic, hourly and monthly price in USD, and the clouds (Vultr, DigitalOcean, Hetzner, Linode, OVHcloud for GPU) and city ids each one deploys in. Sorted by hourly price. Filter by city, country or continent, cloud, kind, GPU, minimum vCPU/RAM/disk and maximum hourly price. Paginated; also returns the OS images.
| Argument | Type | Description |
|---|---|---|
| gpu | boolean | true = only GPU servers, false = no GPU servers. |
| kind | string | vps = shared vCPU, dedicated = dedicated CPU cores, gpu = NVIDIA GPU, metal = bare metal. |
| limit | integer | Sizes per page, default 15. |
| offset | integer | Skip this many sizes (from next_offset). |
| region | string | City id or name ("fra", "Frankfurt"), country ("Germany", "US") or continent ("Europe"). |
| min_vcpu | integer | |
| provider | string | Only this cloud. |
| min_ram_gb | number | |
Servers on the account (everything not destroyed): id, label, status, cloud, city, plan, IPv4, hourly price and a ready SSH command for running Linux servers.
No arguments.
{
"type": "object",
"properties": {}
}Price of a specific order: plan in a city (and optionally cloud, OS, count, hours). Returns the hourly price per server and in total, the cost for the given hours, the monthly price, and whether the current balance covers the first hour. Without a cloud it picks the cheapest one that deploys there. Does not create anything.
| Argument | Type | Description |
|---|---|---|
| os | string | OS id or name, default "ubuntu-24.04". Windows changes the price. |
| plan* | string | Plan id from list_options, e.g. "vc2-1c-1gb", or a plan name like "Micro". |
| count | integer | Number of servers, default 1. |
| hours | number | How long they run, default 1 hour. |
| region* | string | City id or name, e.g. "fra" or "Frankfurt". |
| provider | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"plan",
"region"
],
"properties": {
"os": {
"type": "string",
"maxLength": 64,
"description": "OS id or name, default \"ubuntu-24.04\". Windows changes the price."
},
"plan": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Plan id from list_options, e.g. \"vc2-1c-1gb\", or a plan name like \"Micro\"."
},
"count": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Number of servers, default 1."
},
"hours": {
"type": "number",
"maximum": 8784,
"description": "How long they run, default 1 hour.",
"exclusiveMinimum": 0
},
"region": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "City id or name, e.g. \"fra\" or \"Frankfurt\"."
},
"provider": {
"enum": [
"vultr",
"digitalocean",
"hetzner",
"linode",
"ovh"
],
"type": "string"
}
},
"additionalProperties": false
}reboot, stop (power off) or start a server by id. A stopped server keeps its IP and disk and is still billed per hour while it exists; destroy_server ends billing.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| action* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"action"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"action": {
"enum": [
"reboot",
"stop",
"start"
],
"type": "string"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 11, 2026.
| min_disk_gb |
| number |
| max_hourly_usd | number | Only sizes at or below this price per hour in some city. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"gpu": {
"type": "boolean",
"description": "true = only GPU servers, false = no GPU servers."
},
"kind": {
"enum": [
"vps",
"dedicated",
"gpu",
"metal"
],
"type": "string",
"description": "vps = shared vCPU, dedicated = dedicated CPU cores, gpu = NVIDIA GPU, metal = bare metal."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Sizes per page, default 15."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Skip this many sizes (from next_offset)."
},
"region": {
"type": "string",
"maxLength": 64,
"description": "City id or name (\"fra\", \"Frankfurt\"), country (\"Germany\", \"US\") or continent (\"Europe\")."
},
"min_vcpu": {
"type": "integer",
"minimum": 1
},
"provider": {
"enum": [
"vultr",
"digitalocean",
"hetzner",
"linode",
"ovh"
],
"type": "string",
"description": "Only this cloud."
},
"min_ram_gb": {
"type": "number",
"minimum": 0
},
"min_disk_gb": {
"type": "number",
"minimum": 0
},
"max_hourly_usd": {
"type": "number",
"description": "Only sizes at or below this price per hour in some city.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}