Skip to Content
APIMCP Server (AI)

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 keypair
What 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/mcp

Claude 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_here

The .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).

  1. Open Claude.ai → Settings → Integrations → Add MCP server
  2. Enter: https://mcp.redu.cloud/mcp
  3. Authenticate with your redu.cloud account (OAuth via Keycloak)

Connect from ChatGPT

redu.cloud works as a ChatGPT Custom GPT Action.

  1. Create a Custom GPT → Configure → Actions
  2. Set the schema URL to: https://mcp.redu.cloud/.well-known/oauth-protected-resource
  3. Authentication: OAuth 2.0 — use your redu.cloud Keycloak credentials

Available tools

ToolWhat it does
list_instancesList your running instances
list_flavorsList available instance sizes
list_imagesList available OS images
list_keypairsList your SSH keypairs
import_keypairRegister an SSH public key (required before creating instances)
delete_keypairRemove an SSH keypair by name
list_private_networksList your private networks
list_security_groupsList your security groups
list_volumesList your block storage volumes
list_snapshotsList instance snapshots
list_backupsList volume backups
list_clustersList autoscaling clusters
list_domainsList your verified custom domains
plan_instanceGet all options needed to create an instance
plan_deployScan a repo → a sized, costed, quota-checked deploy plan (flags multi-container repos)
deploy_appBuild and deploy a single-container app from a repo, served at https://<name>.redu.cloud
deploy_composeDeploy a multi-container docker-compose repo onto one VM, exposing one service publicly
list_deploymentsList your deployments
get_deploymentGet a deployment’s status + build log
delete_deploymentTear down a deployment
create_databaseProvision a managed PostgreSQL server (optional extensions + superuser)
list_databasesList your managed PostgreSQL servers
delete_databaseDelete a managed PostgreSQL server
create_instanceCreate a new instance
delete_instanceDelete an instance
instance_actionStart, stop, or reboot an instance
get_ssh_commandGet the SSH command for an instance
get_instance_logsGet console log output
create_snapshotSnapshot an instance
delete_snapshotDelete a snapshot
create_volumeCreate a block storage volume
get_domain_verificationGet TXT record for domain ownership
whoamiShow 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

MethodBest forHow
API keyClaude Code, scripts, local toolsx-api-key header in settings
OAuth (Keycloak)Claude.ai, ChatGPTBrowser-based login flow

Generate an API key at console.redu.cloud/category/user/api-keys .

Last updated on