NordBastion MCP server
Provision KYC-free, crypto-paid Nordic VPS and dedicated servers from any AI agent — Claude, Cursor, Zed, Continue, or your own MCP client.
nordbastion-mcp exposes the NordBastion API as Model Context Protocol tools, so an AI assistant can do the whole hosting workflow in natural language: compare VPS tiers, pick a Nordic region, top up with Monero or Bitcoin, and spin up an anonymous server — without you ever touching a dashboard.
NordBastion is a privacy-first hosting provider running four bastions in Stockholm, Helsinki, Oslo and Reykjavík. Accounts need only an email and a password — no name, phone number, or ID document, ever — and billing is crypto-native. The API was built for agents from day one (scoped API keys, OAuth 2.1 with Dynamic Client Registration, a public agent directory), which makes it a natural fit for MCP.
Why this exists
Agentic workflows increasingly need infrastructure on demand: a throwaway box to run a scraper, a WireGuard VPN, a Tor hidden service, or a self-hosted Lightning node. This server lets the agent do that end-to-end against a host that doesn't demand identity documents and accepts Monero and Bitcoin.
Install & run
The server speaks MCP over stdio, so any MCP client launches it as a subprocess. The simplest path uses uv (no manual virtualenv):
# Run straight from this repository
uvx --from git+https://github.com/CryptoServers/nordbastion-mcp nordbastion-mcp
Or install it into your environment with pip / pipx:
pip install git+https://github.com/CryptoServers/nordbastion-mcp
# then the console script is on your PATH:
nordbastion-mcp
Configuration
| Variable | Required | Default | Purpose |
|---|---|---|---|
NORDBASTION_API_KEY |
for authenticated tools | — | An nb_live_* API key (mint it in the panel or via create_api_key) or an nb_at_* OAuth token. |
NORDBASTION_BASE_URL |
no | https://nordbastion.com/v1 |
Override the API base URL (testing/self-host). |
Public tools — list_vps, list_dedicated, list_bastions, list_os_images, list_coins, get_status, get_canary, get_peering — work with no key at all.
Claude Desktop
Add to claude_desktop_config.json (see examples/):
{
"mcpServers": {
"nordbastion": {
"command": "uvx",
"args": ["--from", "git+https://github.com/CryptoServers/nordbastion-mcp", "nordbastion-mcp"],
"env": { "NORDBASTION_API_KEY": "nb_live_xxxxxxxxxxxxxxxx" }
}
}
}
Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"nordbastion": {
"command": "uvx",
"args": ["--from", "git+https://github.com/CryptoServers/nordbastion-mcp", "nordbastion-mcp"],
"env": { "NORDBASTION_API_KEY": "nb_live_xxxxxxxxxxxxxxxx" }
}
}
}
Try it
Once connected, ask your assistant things like:
- "List NordBastion's VPS tiers and tell me the cheapest one with 4 GB RAM."
- "Top up my balance with $30 of Monero and wait for it to confirm."
- "Provision an
NB-V2in Helsinki running Debian 13, hostnamewg-gw, and show me the root password." - "What's the current status of the Reykjavík bastion?"
There's also a built-in onboard_to_nordbastion prompt that drives the full account → top-up → order flow.
Tools
34 tools, mapped 1:1 onto the REST API. Tools marked public need no API key.
| Group | Tools |
|---|---|
| Catalog (public) | list_catalog, list_vps, list_dedicated, list_bastions, list_os_images |
| Transparency (public) | get_status, get_canary, get_peering |
| Billing | list_coins (public), list_bonus_tiers (public), create_topup, get_topup, list_topups, cancel_topup |
| Servers | order_server, list_servers, get_server, cancel_server |
| Account | get_account, get_balance, get_audit_log |
| SSH keys | add_ssh_key, list_ssh_keys, remove_ssh_key |
| Auth | register_account, login, login_totp, refresh_token, create_api_key, list_api_keys, revoke_api_key |
| Webhooks | create_webhook, list_webhooks, delete_webhook |
Resources
nordbastion://catalog— full catalog bundle (JSON)nordbastion://coins— accepted cryptocurrencies (JSON)nordbastion://canary— latest warrant canary excerpt (JSON)nordbastion://doctrine— the operating principles (text)
How it works
AI agent ──MCP/stdio──▶ nordbastion-mcp ──HTTPS──▶ https://nordbastion.com/v1
The registry in tools.py mirrors NordBastion's own server-side MCP catalog and binds each tool to its REST endpoint, so the surface stays in lock-step with the upstream API. Authentication is a single bearer credential; nothing is cached to disk.
Security
- Your API key lives only in the client's environment — never written to disk by this server.
- Scope your key:
read,billing,servers, orfull. Use the narrowest scope an agent needs and an IP allow-list where possible. order_serverandcreate_topupmove real money/balance. Review your agent's confirmations before grantingservers/billing/fullscope.
Development
git clone https://github.com/CryptoServers/nordbastion-mcp
cd nordbastion-mcp
uv venv && uv pip install -e ".[dev]" mcp httpx ruff
python -m nordbastion_mcp # starts the stdio server
ruff check .
Links
- 🌐 Website — https://nordbastion.com
- 📚 API reference — https://nordbastion.com/api/
- 🧭 Guides (anonymous VPS, Monero, Tor, WireGuard…) — https://nordbastion.com/guides/
- 🔒 Warrant canary — https://nordbastion.com/warrant-canary/
- 📡 Status — https://nordbastion.com/status/
License
MIT © NordBastion OÜ. This is an open-source client for the NordBastion API; "NordBastion" is a trademark of NordBastion OÜ.
Metadata
Release files for nordbastion-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nordbastion_mcp-0.1.0.tar.gz | 11.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nordbastion_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.5 kB
Release files / nordbastion_mcp-0.1.0.tar.gz
| Download URL | nordbastion_mcp-0.1.0.tar.gz |
|---|---|
| Size | 11.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
24c6721b48e1d23476a2c68f9132db85611f0675e700eb7b4edbbff63b6cbf8d
|
|
BLAKE2b-256 checksum How to use checksums |
cd2e9b0823e0198ceb2cbfb87a42861b571b34f53053799732be4ddcbbfdb4c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|
Release files / nordbastion_mcp-0.1.0-py3-none-any.whl
| Download URL | nordbastion_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8347a1b4db7738c1c7b698e50f6d24410eebe371d7d8067336c07774a5897c6b
|
|
BLAKE2b-256 checksum How to use checksums |
fbdfbed75934bdaef1f94f638342723b5e84acf215944204ac019511c033c164
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|