MCP Server
redu.cloud provides a Model Context Protocol (MCP) server at mcp.redu.cloud. Connect it to Claude Code, Claude.ai, or ChatGPT to manage your cloud infrastructure in natural language.
Create a large Ubuntu instance called web-prod with my default keypairWhat instances am I running? Stop the staging one.Deploy a reduOS instance and give me the SSH command when it's ready.Connect from Claude Code
You need a redu.cloud API key — generate one at Account → API Keys.
Option A — one command (recommended):
claude mcp add --transport http redu-cloud https://mcp.redu.cloud/mcpClaude Code will prompt for your API key. The server is available immediately.
Option B — .mcp.json file (works in all Claude Code builds):
Create .mcp.json in your project root:
{
"mcpServers": {
"redu-cloud": {
"type": "http",
"url": "https://mcp.redu.cloud/mcp",
"headers": { "Authorization": "Bearer ${REDU_API_KEY}" }
}
}
}Set your key as an environment variable so it never lives in the file:
export REDU_API_KEY=your_api_key_hereThe .mcp.json file is safe to commit — the ${REDU_API_KEY} placeholder expands at load time.
Connect from Claude.ai
Claude.ai supports MCP servers (rolling out 2025–2026).
- Open Claude.ai → Settings → Integrations → Add MCP server
- Enter:
https://mcp.redu.cloud/mcp - Authenticate with your redu.cloud account (OAuth via Keycloak)
Connect from ChatGPT
redu.cloud works as a ChatGPT Custom GPT Action.
- Create a Custom GPT → Configure → Actions
- Set the schema URL to:
https://mcp.redu.cloud/.well-known/oauth-protected-resource - Authentication: OAuth 2.0 — use your redu.cloud Keycloak credentials
Available tools
| Tool | What it does |
|---|---|
list_instances | List your running instances |
list_flavors | List available instance sizes |
list_images | List available OS images |
list_keypairs | List your SSH keypairs |
import_keypair | Register an SSH public key (required before creating instances) |
delete_keypair | Remove an SSH keypair by name |
list_private_networks | List your private networks |
list_security_groups | List your security groups |
list_volumes | List your block storage volumes |
list_snapshots | List instance snapshots |
list_backups | List volume backups |
list_clusters | List autoscaling clusters |
list_domains | List your verified custom domains |
plan_instance | Get all options needed to create an instance |
plan_deploy | Scan a repo → a sized, costed, quota-checked deploy plan (flags multi-container repos) |
deploy_app | Build and deploy a single-container app from a repo, served at https://<name>.redu.cloud |
deploy_compose | Deploy a multi-container docker-compose repo onto one VM, exposing one service publicly |
list_deployments | List your deployments |
get_deployment | Get a deployment’s status + build log |
delete_deployment | Tear down a deployment |
create_database | Provision a managed PostgreSQL server (optional extensions + superuser) |
list_databases | List your managed PostgreSQL servers |
delete_database | Delete a managed PostgreSQL server |
create_instance | Create a new instance |
delete_instance | Delete an instance |
instance_action | Start, stop, or reboot an instance |
get_ssh_command | Get the SSH command for an instance |
get_instance_logs | Get console log output |
create_snapshot | Snapshot an instance |
delete_snapshot | Delete a snapshot |
create_volume | Create a block storage volume |
get_domain_verification | Get TXT record for domain ownership |
whoami | Show your authenticated account |
Example: create an instance
On a fresh account, import your SSH key first:
“Import my SSH key — here it is: ssh-ed25519 AAAA…”
Claude will call import_keypair and confirm the name. Then:
“Create a medium Ubuntu instance called api-server with my default keypair. Use the first available network.”
Claude will call plan_instance to gather the options, then create_instance with the right IDs. You don’t need to know image IDs or flavor IDs.
Example: deploy an app from a Git repo
“Deploy https://github.com/me/my-app to redu.”
Claude calls plan_deploy first to scan the repo, size the VM, estimate cost, and check quota — then shows you the plan before provisioning. On approval it calls deploy_app, which builds the container on a VM and serves it at https://my-app.redu.cloud.
Need a database? Just say so — deploy_app accepts database: "managed" (a dedicated managed-Postgres server, auto-provisioned and wired) or database: "single_vm" (Postgres on the app VM). Either way the connection env (DATABASE_URL + DATABASE_HOST/PORT/USER/PASSWORD/NAME, plus the legacy PG*/MYSQL_*) is injected automatically — frameworks like Rails, Django, and Prisma pick it up without manual mapping. You can request Postgres extensions (db_extensions: ["pgvector", "postgis"]) and a superuser DB role (db_superuser: true).
Multi-container apps — if the repo ships a docker-compose.yml / compose.yaml, plan_deploy flags it and Claude uses deploy_compose instead. It runs the whole stack on one VM via podman-compose up -d --build and exposes one service (you pass its host port) at https://<name>.redu.cloud. By default the compose file’s own db service is used; pass database: "single_vm" or "managed" to add a Postgres outside the compose file — its connection env is appended to the project’s .env (redu never rewrites your compose file).
Example: deploy reduOS
“Deploy a reduOS full-stack instance on a large flavor.”
Claude will call create_instance with cloud_init_template: "reduos", which automatically:
- Picks port 3006 for the dashboard DNS entry
- Injects the full reduOS setup cloud-init
- Starts setup in the background (takes 15–25 min)
After creation, ask:
“Check if the reduOS instance is ready and give me the SSH command.”
API key vs OAuth
| Method | Best for | How |
|---|---|---|
| API key | Claude Code, scripts, local tools | x-api-key header in settings |
| OAuth (Keycloak) | Claude.ai, ChatGPT | Browser-based login flow |
Generate an API key at console.redu.cloud/category/user/api-keys .