Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

cloud.redu/mcp

REMOTE · MCP.REDU.CLOUD · SCANNED AUG 3

Agent-native cloud, EU-hosted. Provision VMs, networks & databases on redu.cloud via MCP.

Available components

+10 this week 71 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security94
Transport & Reachability100
Schema Quality & AI Usability24
  • AI-judged instruction clarity (poor).Fail
  • Context-footprint check failed: tool/resource definitions use about 21109 tokens (~289/item across 73 items; 73 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage96
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 87% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · mcp.redu.cloud

# add to Claude Code
claude mcp add --transport http cloud-redu-mcp https://mcp.redu.cloud/mcp
# ~/.codex/config.toml
[mcp_servers.cloud-redu-mcp]
url = "https://mcp.redu.cloud/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cloud-redu-mcp": {
      "type": "remote",
      "url": "https://mcp.redu.cloud/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add cloud-redu-mcp --url https://mcp.redu.cloud/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  cloud-redu-mcp:
    url: "https://mcp.redu.cloud/mcp"
// mcp.json
{
  "mcpServers": {
    "cloud-redu-mcp": {
      "type": "http",
      "url": "https://mcp.redu.cloud/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Jul 26 +8
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 29 Jul 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “update_cluster” rewrote its description, which is the text the model reads security
    • Tool “upgrade_to_cluster” rewrote its description, which is the text the model reads security
    • “upgrade_to_cluster” added an optional parameter “high_availability” cosmetic
    • “upgrade_to_cluster” reworded the description of “max_size” cosmetic
  • 28 Jul 26 0
    • New tool “delete_volume”, which the server declares destructive security
    • Tool “restore_backup” rewrote its description, which is the text the model reads security
    • “create_instance” added an optional parameter “boot_volume_id” cosmetic
  • 27 Jul 26 +2
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 59

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://mcp.redu.cloud/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=*.redu.cloud CN=YE2,O=Let's Encrypt,C=US 7 Jun 2026 5 Sept 2026 ECDSA 384 ECDSA-SHA384 53c6e6799a05b45d592175b4714fc4cc8ac
SANs: *.redu.cloud, redu.cloud
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd
DNSSEC insecure

Validation of mcp.redu.cloud. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
cloud. present 7041 13 Verified
redu.cloud. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://mcp.redu.cloud/.well-known/oauth-protected-resource", scope="openid"

Bearer resource_metadata="https://mcp.redu.cloud/.well-known/oauth-protected-resource", scope="openid"
Header Value
strict-transport-security max-age=63072000; preload

Protected resource metadata

Document https://mcp.redu.cloud/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://mcp.redu.cloud
Authorisation server https://login.redu.cloud/realms/eu-central-1
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.redu.cloud/mcp Verified 200
http (plaintext) http://mcp.redu.cloud/mcp HTTPS enforced 301 https://mcp.redu.cloud/mcp
MCP tools — 73 exposed · ~18,431 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
get_domain_verification ~57

Returns the DNS TXT record to add for custom domain ownership verification. Add the record to your DNS provider, then call verify_domain.

NameTypeReqDescription
domainstringyesThe custom domain to verify ownership of (e.g. app.example.com).
NameTypeReqDescription
modestring

No examples provided.

get_instance_logs ~35

Returns the console log output from an instance.

NameTypeReqDescription
instance_idstringyesID of the instance to fetch console logs for.
NameTypeReqDescription
logs
modestring

No examples provided.

get_ssh_command ~217

Returns the SSH command to connect to an instance via the redu.cloud TCP proxy. For a DEPLOYMENT VM (created by deploy_app/deploy_compose) pass keypair_name — read it from get_deployment — so the command uses `-i ~/.ssh/<keypair_name>` and authenticates with the RIGHT key instead of your default identity (without it, SSH to a deploy VM usually fails). The tool also best-effort looks up the keypair from the deployment if you omit it. Example: ssh -i ~/.ssh/redu-deploy -o IdentitiesOnly=yes -p 22011 [email protected]

NameTypeReqDescription
instance_idstringyesID of the instance to get the SSH command for.
keypair_namestringThe SSH keypair the instance was created with (read it from get_deployment for a deploy VM). When given, the command uses `-i ~/.ssh/<keypair_name>` so it authenticates with the right key.
NameTypeReqDescription
floating_ipstring
hoststring
instance_namestring
instance_statusstring
keypair_namestring
modestring
portstring
ssh_commandstring
userstring

No examples provided.

import_keypair ~97

Registers an existing SSH public key on your account. Use this to import your own public key so you can SSH into instances. The private key never leaves your machine.

NameTypeReqDescription
namestringyesName for the keypair (e.g. 'my-laptop'). Must be unique on your account.
public_keystringyesSSH public key to import (the contents of your id_rsa.pub or id_ed25519.pub).
NameTypeReqDescription
available_keypairsarray
duplicateboolean
errorboolean
idempotency_keystring
invalid_keypair_nameboolean
modestring
needs_keypairboolean
needs_keypair_nameboolean
needs_planboolean
nextstring
plan_toolstring
request
result
validation

No examples provided.

instance_action ~50

Start, stop, or reboot an instance. action must be START, STOP, REBOOT_SOFT, or REBOOT_HARD.

NameTypeReqDescription
actionstringyes
instanceIdstringyes
NameTypeReqDescription
available_keypairsarray
duplicateboolean
errorboolean
idempotency_keystring
invalid_keypair_nameboolean
modestring
needs_keypairboolean
needs_keypair_nameboolean
needs_planboolean
nextstring
plan_toolstring
request
result
validation

No examples provided.

integrate_overview ~121

Orientation for wiring a redu.cloud capability (backups, DNS, extra storage, a managed DB, ...) INTO an app already deployed on redu, e.g. 'add a backup feature to the Supabase I deployed on redu'. Explains the pattern: mint a LEAST-PRIVILEGE scoped API key (with the user's approval via create_api_key), inject it into the app, and call the redu API from the app. Call this when a user asks to add/integrate a redu feature into a running deployment and you are unsure how.

Input schema present but exposes no named parameters.

NameTypeReqDescription
nextstring
patternarray
recipes
scopes_hintstring

No examples provided.

list_backups ~14

Lists your volume backups.

Input schema present but exposes no named parameters.

NameTypeReqDescription
backupsarray
modestring
nextstring

No examples provided.

list_clickhouse_databases ~66

Lists your managed ClickHouse databases (OLAP / analytics — its own resource, not a relational DB). Once a row's status is 'ready' it carries the private-network connection details (private_ip, ClickHouse HTTP port 8123, db_name, db_user).

Input schema present but exposes no named parameters.

NameTypeReqDescription
clickhousearray
modestring
nextstring

No examples provided.

list_clusters ~14

Lists your autoscaling clusters.

Input schema present but exposes no named parameters.

NameTypeReqDescription
clustersarray
modestring
nextstring

No examples provided.

list_databases ~47

Lists your managed PostgreSQL databases. Once a row's status is 'ready', it carries the private-network connection details (private_ip, port 5432, db_name, db_user).

Input schema present but exposes no named parameters.

NameTypeReqDescription
databasesarray
modestring
nextstring

No examples provided.

list_deployments ~62

Lists your app deployments. Each row carries status (provisioning/ready/build_failed/error), the current build phase while provisioning (installing/source/building/built/starting), the public access_point URL, port, repo, and build_log on failure.

Input schema present but exposes no named parameters.

NameTypeReqDescription
deploymentsarray
modestring
nextstring

No examples provided.

list_dns_entries ~15

Lists DNS proxy host entries.

Input schema present but exposes no named parameters.

NameTypeReqDescription
dnsarray
modestring
nextstring

No examples provided.

list_domains ~17

Lists custom domains you have verified ownership of.

Input schema present but exposes no named parameters.

NameTypeReqDescription
domainsarray
modestring
nextstring

No examples provided.

list_flavors ~14

Lists available instance sizes.

Input schema present but exposes no named parameters.

NameTypeReqDescription
flavorsarray
modestring
nextstring

No examples provided.

list_images ~13

Lists available OS images.

Input schema present but exposes no named parameters.

NameTypeReqDescription
imagesarray
modestring
nextstring

No examples provided.

list_instances ~13

Lists your compute instances.

Input schema present but exposes no named parameters.

NameTypeReqDescription
instancesarray
modestring
nextstring

No examples provided.

list_keypairs ~27

Lists your SSH keypairs. If empty, call import_keypair first before creating instances.

Input schema present but exposes no named parameters.

NameTypeReqDescription
keypairsarray
modestring
nextstring

No examples provided.

list_media_spaces ~70

Lists Redu media spaces: private NFS media VMs backed by persistent volumes. For WordPress/WooCommerce clusters, reuse one on the app's private network for wp-content/uploads, or pass create_media_space:true to deploy_app/deploy_compose/upgrade_to_cluster so Redu creates one.

Input schema present but exposes no named parameters.

NameTypeReqDescription
media_spacesarray
modestring
nextstring

No examples provided.

list_private_networks ~15

Lists your private networks.

Input schema present but exposes no named parameters.

NameTypeReqDescription
modestring
networksarray
nextstring

No examples provided.

list_redis ~69

Lists your managed Redis instances. Once a row's status is 'ready' it carries the private-network connection details (private_ip, port 6379) — connect from another instance on the same private network with redis-cli -h <private_ip> -p 6379 -a <password>.

Input schema present but exposes no named parameters.

NameTypeReqDescription
modestring
nextstring
redisarray

No examples provided.

list_regions ~12

Lists available regions.

Input schema present but exposes no named parameters.

NameTypeReqDescription
modestring
nextstring
regionsarray

No examples provided.

list_relational_databases ~68

Lists your managed MySQL/MariaDB databases (the relational-database resource). Each row carries its engine ('mysql'|'mariadb'); once status is 'ready' it has the private-network connection details (private_ip, port 3306, db_name, db_user).

Input schema present but exposes no named parameters.

NameTypeReqDescription
modestring
nextstring
relational_databasesarray

No examples provided.

list_security_groups ~14

Lists your security groups.

Input schema present but exposes no named parameters.

NameTypeReqDescription
modestring
nextstring
security_groupsarray

No examples provided.

list_snapshots ~14

Lists your instance snapshots.

Input schema present but exposes no named parameters.

NameTypeReqDescription
modestring
nextstring
snapshotsarray

No examples provided.

list_volumes ~15

Lists your block storage volumes.

Input schema present but exposes no named parameters.

NameTypeReqDescription
modestring
nextstring
volumesarray

No examples provided.

plan_deploy ~2,188

Turns YOUR repo classification (you scan the repo and pass what you found) into a complete, approvable deploy plan WITHOUT creating anything: picks the VM + managed-Postgres sizes, prices them at the real pricing_rules rates, and checks they FIT your quota — so a plan that can't provision is caught HERE, before any spend. You pass what you detected in the repo (runtime, port, needs_postgres/redis/vector_db); it returns resources + £/hr + £/mo + a feasibility verdict + a checkpoint summary to confirm with the user. Defaults: app VM m1.medium, managed Postgres m1.small; pass single_vm to collapse onto one VM. Only Postgres is auto-provisionable today — Redis / vector-DB needs are flagged, not provisioned. Any containerizable app works (node, python, go, ...) — it deploys as a container, so the language doesn't gate it. Set serves_http:false for a non-web repo (a library, CLI, or language runtime with no HTTP server) and it returns a clean not-a-web-service verdict instead of a costed VM plan. Set heavy_build:true for resource-heavy builds (compiled-from-source native code, a monorepo/turborepo build, a large Node heap) and it raises the app VM to a build-capable floor so the on-VM build doesn't get OOM-killed. Set memory_heavy:true for a RAM-forward app whose persistent state lives in a MANAGED DB / external store (Next.js like cal.com/cal.diy, Rails, Django, JVM/Java apps) — it sizes onto a memory-optimized SMALL-DISK flavor (m1.mem16/m1.mem32: full RAM, a lean 40 GB disk instead of 160 GB) that costs less and snapshots/clusters far faster; do NOT set it if the app keeps lots of data on local disk. Also returns a brand-named markdown report (Mermaid diagram + cost) to save as redu-deploy-plan.md and show the user. Every deploy leaves TWO MANDATORY files at the repo root with DIFFERENT purposes: redu-deploy-plan.md = THIS run's plan/estimate, and redu.md = the DURABLE deploy memory the NEXT deploy reads. If a redu.md exists, READ it FIRST and reuse its known-good pla…

NameTypeReqDescription
app_flavorstringPreferred app VM size (default m1.medium). Resolved against the real flavor list.
app_profilestringDetected app profile. Set wordpress/woocommerce when source inspection finds wp-config.php, wp-content, WordPress/WooCommerce packages/plugins, or wordpress/woocommerce compose images. This is used f…
cluster_media_modestringFor WordPress/WooCommerce cluster_target:true, use media_space as the default real fix: Redu creates/reuses an NFS media VM backed by a volume and mounts it at wp-content/uploads. central_media_origi…
cluster_targetbooleanSet TRUE when the user asked to deploy this app as an autoscaling cluster. For WordPress/WooCommerce this requires managed MySQL/MariaDB plus a Redu media space mounted at wp-content/uploads (or an e…
containerizablebooleanWhether the app can run in a container. Almost always true (a container is the delivery unit); set false ONLY if the app fundamentally can't be containerized — then redu can't deploy it yet.
create_media_spacebooleanFor WordPress/WooCommerce cluster_target:true: set TRUE when no suitable media space exists. The plan will include a small media VM + attached volume and deploy_app/deploy_compose will create it.
db_enginestringManaged DB engine to plan. For WordPress/WooCommerce clusters use mariadb or mysql.
db_flavorstringPreferred managed Postgres VM size (default m1.small). Resolved against the real flavor list.
deploy_modestringguided (default) = ONE approval gate: the user approves the plan, then you proceed with the plan's defaults WITHOUT further sub-questions. yolo = auto-proceed end to end without stopping to ask, usin…
has_containerbooleanWhether the repo already has a Dockerfile / compose file.
heavy_buildbooleanSet TRUE when the BUILD (not the running app) is resource-heavy — the container is built ON the VM today, so a build that needs more RAM/CPU than the idle app must be sized up or it OOMs mid-build. S…
media_mount_pathstringHost mount path on app members for the shared uploads filesystem. Redu mounts this into /var/www/html/wp-content/uploads.
media_origin_urlstringPublic base URL where WordPress wp-content/uploads is served when cluster_media_mode:'central_media_origin'. Do not use the DB VM as this origin.
media_space_flavorstringPreferred media VM size when create_media_space:true. Resolved against list_flavors.
media_space_idintegerExisting Redu media space id to reuse for WordPress/WooCommerce cluster uploads. Get it from list_media_spaces. Omit when create_media_space:true.
media_space_size_gbintegerSize of the media space data volume in GB when create_media_space:true.
memory_heavybooleanSet TRUE for a RAM-forward RUNNING app whose persistent state lives in a MANAGED DB / external store (NOT on the VM's local disk) — so it needs lots of memory but only a lean disk. Sizes onto a memor…
needs_composebooleanSet TRUE when the repo ships a docker-compose.yml / compose.yaml that runs MULTIPLE services (app + its own db/redis/worker containers) as a stack — then deploy with deploy_compose (podman-compose on…
needs_postgresbooleanApp uses Postgres (deps pg/prisma/sqlalchemy/drizzle or DATABASE_URL).
needs_redisbooleanApp uses Redis (deps redis/ioredis/bullmq/celery or REDIS_URL).
needs_vector_dbbooleanApp uses a vector DB (deps qdrant-client / langchain+embeddings or QDRANT_URL).
portintegerPort the app's HTTP server listens on (PORT env / framework default / Dockerfile EXPOSE of a real app port — NOT a debug/IPC port). Omit if the repo has no HTTP server.
runtimestringyesDetected app language/runtime (node, python, go, ruby, ...). Informational — the app deploys as a container, so the language does not gate the deploy.
serves_httpbooleanWhether the repo actually RUNS an HTTP server that listens on a port. Set FALSE for a library, CLI tool, or language runtime that has no web server (e.g. a package you `import`, or a `bun`/`node`-sty…
single_vmbooleanForce everything onto a single VM if the user prefers.
startstringHow the app starts (package.json start script / Procfile / Dockerfile CMD).
vm_countintegerNumber of app VMs (microservices). v1: usually 1.
workerbooleanHEADLESS WORKER / daemon: the repo runs a long-lived process with NO HTTP server (a chaos-monkey, a background/queue worker, an on-infra agent runner). Set TRUE to plan a WORKER deploy — a private VM…
NameTypeReqDescription
deployableboolean
feasibleboolean
generated_dockerfilestring|null
modestring
nextstring
plan
reasonstring
report_filenamestring
report_markdownstring

No examples provided.

plan_instance ~79

Aggregates images/flavors/keypairs/networks/security groups into human-friendly choices. Does not create anything. Happy path: import_keypair → plan_instance → create_instance → get_ssh_command. Call this second (after import_keypair, if you have no keypairs).

NameTypeReqDescription
osHintstring
sizeHintstring
NameTypeReqDescription
modestring
options

No examples provided.

plan_managed_datastore ~78

Plans a direct managed datastore create without provisioning anything. Use this before create_database, create_relational_database, create_redis, or create_clickhouse. For app deployments, prefer deploy_app database:'managed' so plan_deploy includes and wires the datastore automatically.

NameTypeReqDescription
enginestring
sizeHintstring
NameTypeReqDescription
modestring
nextstring
options
suggested

No examples provided.

prepare_upload ~192

Returns the LOCAL shell commands to package your working directory and upload it for an upload-mode deploy (no git, no PAT). Run them in the user's terminal, capture `source_token` from the upload's JSON response, then call deploy_app with that source_token (omit repo). The upload authenticates AUTOMATICALLY with a short-lived ticket minted from your MCP credential — NO API key needed in the command and nothing secret is printed (it falls back to needing $REDU_API_KEY only if minting is unavailable). Excludes node_modules/.git/.venv/build output and .env by default; honors .gitignore when is_git_repo=true.

NameTypeReqDescription
is_git_repobooleanIf the dir is a git checkout, set true to honor .gitignore (tar only tracked + non-ignored files).
project_dirstringPath to the local app directory to upload (default current dir).
NameTypeReqDescription
commandsarray
endpointstring
excludesarray
nextstring

No examples provided.

restore_backup ~258

Restores a backup into an existing volume (volumeId), an instance's volume (instanceId), or a new one (volumeName). Poll list_volumes for the restored volume. DISASTER RECOVERY (the original VM is gone, so its volume died with it): restore with volumeName to rebuild the data as a NEW volume. To bring the MACHINE back, pass that volume as create_instance's boot_volume_id - it boots from the restored disk, so the VM returns with its filesystem intact and nothing to mount. Use attach_volume instead only when you want the data as an EXTRA disk on an existing machine (then get_ssh_command -> lsblk -> mount). A restored volume is inert until it is booted from or attached.

NameTypeReqDescription
backupIdstringyesID of the backup to restore (see list_backups).
instanceIdstringOptional: restore into this instance's volume (resolved automatically). The target volume must be available (detached), so stop the instance first.
volumeIdstringOptional: restore into this existing volume.
volumeNamestringOptional: name for a new volume to restore into. Omit volumeId and instanceId to restore into a new volume.
NameTypeReqDescription
available_keypairsarray
duplicateboolean
errorboolean
idempotency_keystring
invalid_keypair_nameboolean
modestring
needs_keypairboolean
needs_keypair_nameboolean
needs_planboolean
nextstring
plan_toolstring
request
result
validation

No examples provided.

scaffold_local ~202

OPTIONAL preflight: returns a podman-compose.yml + .env so the user can run the app (and a throwaway local Postgres) on THEIR machine before deploying to redu — to see it run / sanity-check the container. Requires local podman/podman-compose. It's a suggestion, not a gate — skip it and go straight to deploy_app any time. Honest caveat: the local Postgres is NOT the managed Postgres, so a green local run does not prove the prod DB wiring.

NameTypeReqDescription
has_containerbooleanRepo already has a Dockerfile/Containerfile (the compose builds it). If false, write the plan_deploy-generated Dockerfile to ./Dockerfile first.
needs_postgresbooleanInclude a local Postgres container + wire PG* env.
portintegerPort the app listens on.
runtimestringyesApp runtime (node/python/go/…) — from plan_deploy.
NameTypeReqDescription
caveatsarray
commandsarray
files
nextstring

No examples provided.

select_surface ~219

For a repo with SEVERAL runnable parts, call this BEFORE plan_deploy. You enumerate the candidate surfaces (find every Dockerfile/Containerfile, OPEN each, classify by its EXPOSE + CMD — never by directory name) and pass them in; redu RANKS them with fixed rules (a standalone browser desktop/noVNC > a self-contained web app > a keys-required playground > an API > a headless worker > docs/examples). GUIDED: returns the ranked list to present to the user, who picks. YOLO: auto-selects the TOP-ranked surface. Then run plan_deploy on the chosen surface's path + http_port. (A single-surface repo doesn't need this.)

NameTypeReqDescription
modestringDrive mode; omit to use the session's sticky mode.
surfacesarrayyesEVERY runnable surface you found (run `find . -name Dockerfile -o -name Containerfile`, open each). Be exhaustive — a missed browser-desktop subdir is the #1 cause of a wrong pick.
NameTypeReqDescription
chosen
modestring
nextstring
rankedarray

No examples provided.

set_managed_backups ~274

Turns nightly AUTOMATED (scheduled) backups ON or OFF for a MANAGED data service — the toggle that create_backup (a one-off volume snapshot) is NOT. Once enabled, redu's nightly job backs the service up on its own and prunes to the retention window; see them with list_backups and recover with the service's restore. Works for managed Postgres/MySQL/MariaDB/Redis/Qdrant/ClickHouse and can be flipped ANY time after provisioning, not only at create. Requires a card (automated backups are a paid feature; no-card trials cannot enable them). Pass the service type + its numeric id, enabled, and optional retention (days).

NameTypeReqDescription
enabledbooleanyestrue = turn ON nightly AUTOMATED backups for this service; false = turn them off.
idyesNumeric id of the managed service (from list_databases / list_redis / list_relational_databases / etc.).
retentionintegerHow many days of nightly backups to keep (optional; keeps the current setting if omitted).
servicestringyesWhich managed data-service type the id belongs to. A managed Postgres from create_database/list_databases is 'postgres'; MySQL/MariaDB from create_relational_database; plus redis/qdrant/clickhouse.
NameTypeReqDescription
errorboolean
modestring
nextstring
result

No examples provided.

setup_agent_fleet ~501

Complete one-shot setup: validates prerequisites, creates a controller VM + worker VMs, auto-creates a public HTTPS URL on port 7070, seeds a starter ROADMAP.md into the repo if absent, and returns the trigger token. Call this when a user says 'set up autocoding agents for my repo' or 'I want agents to work on my codebase'. HOW THE AGENT WORKS: each worker runs Claude Code inside the repo, implements one task, runs the test suite, and opens a pull request. It excels at focused, single-PR, testable units of work — add an endpoint, write tests for a module, fix a specific bug, add a UI page — and is poor at vague/large tasks, design decisions, or anything needing external credentials. TASK FORMAT (strict, one line each): `- [ ] **Title** — short description *(agent-ready)*` — the `- [ ]` checkbox, `**bold title**`, ` — ` separator, and `*(agent-ready)*` are ALL required; `##` headings and plain bullets are ignored. After this returns, the user needs to: (1) authorize the fleet by running the authorize.sh one-liner it returns (it runs `claude setup-token` for a long-lived token installed on the controller) — agents use the user's existing Claude Max/Pro subscription, NOT an API key. This is a shell command the USER runs in their own terminal; do NOT try to read or push the user's credentials yourself. The controller takes ~7 min to boot, so PREFER to poll get_agent_status until it reports the controller is reachable and present the authorize command only once it's ready — that way the user doesn't run it into a long wait. (The command also waits on its own, showing a live progress counter, so a user who runs it early is fine too.) (2) add well-scoped tasks in the format above to ROADMAP.md; (3) call trigger_agent_batch.

NameTypeReqDescription
github_patstringyesGitHub Personal Access Token with repo + workflow scopes. Used to clone the repo and open PRs.
repostringyesGitHub repo to run agents on, e.g. 'owner/my-app'. Must be accessible with the PAT.
worker_countintegerNumber of parallel worker VMs (default 3). Each works on a separate task simultaneously.
NameTypeReqDescription
authorize_commandstring
controller_hoststring
controller_urlstring
fleet_idstring
instance_idstring
log_tokenstring
modestring
next_stepsarray
repostring
ssh_key_namestring
ssh_private_keystring
ssh_userstring
trigger_tokenstring
worker_idsarray

No examples provided.

setup_agent_session ~92

One-shot tool that guides you through the complete agent setup: checks prerequisites, creates the controller VM, and returns next steps. Ideal for first-time setup. Call this when a user says 'set up autocoding agents for my repo'.

NameTypeReqDescription
github_patstringyesGitHub Personal Access Token (repo + workflow scopes)
repostringyesGitHub repo, e.g. 'owner/repo'
NameTypeReqDescription
next_toolstring
readyboolean
repostring

No examples provided.

trigger_agent_batch ~167

Starts the autonomous agent batch on your controller VM. Agents read agent-ready tasks from your ROADMAP.md, implement them in parallel, and open PRs. No VPN needed — runs over HTTPS; the controller stays running after you disconnect. Each ROADMAP task MUST be a single checkbox line `- [ ] **Title** — short description *(agent-ready)*` (the `- [ ]`, `**bold title**`, and `*(agent-ready)*` are all required; `##` headings and plain bullets are ignored). If this returns 'No agent-ready tasks', the tasks are mis-formatted — fix them to that exact format and retry.

NameTypeReqDescription
controller_urlstringyesHTTPS URL of your controller VM
trigger_tokenstringyesTrigger token from the controller
NameTypeReqDescription
finalize_notestring
fleet_idstring
messagestring
okboolean
workers_readyboolean

No examples provided.

update_cluster ~399

Updates a running autoscaling cluster to a new app version IN PLACE, with NO URL change: snapshots the 'hero' VM (the source/master VM you SSH into and change — it is also the always-on baseline member that serves traffic), then Heat rolling-updates the autoscaled extra members to that snapshot ONE AT A TIME and refreshes the image the group boots future members from — the SAME load balancer and SAME *.redu.cloud URL are kept, and the service stays up during the roll. This is the ONLY way to update a cluster: you do NOT edit live members (they are disposable clones); you change the hero VM (SSH into it, deploy the new version), then update_cluster snapshots it and spreads it to the fleet (the hero already runs your change; this propagates it to the autoscaled members). Zero-downtime is measured, not aspirational: a full roll of every member of a 3-member cluster served 699/699 requests with no failures and never dropped below a majority. That holds ONLY if the app starts on every boot - a member whose app is launched by a first-boot-only script returns empty after replacement, never rejoins the pool, and the roll silently drains the cluster. The snapshot upload can take several minutes on a large disk; poll list_clusters until the stack status is UPDATE_COMPLETE.

NameTypeReqDescription
idempotency_keystring
instance_idstringyesThe 'hero' VM to snapshot and roll to every extra member: the source/master VM you upgraded to a cluster and SSH into to make changes. It is your cluster's always-on baseline member. Its CURRENT disk…
stack_idstringyesCluster (Heat stack) id — from list_clusters (id).
stack_namestringyesCluster (Heat stack) name — from list_clusters (stack_name).
NameTypeReqDescription
available_keypairsarray
duplicateboolean
errorboolean
idempotency_keystring
invalid_keypair_nameboolean
modestring
needs_keypairboolean
needs_keypair_nameboolean
needs_planboolean
nextstring
plan_toolstring
request
result
validation

No examples provided.

upgrade_to_cluster ~2,707

THE WAY TO MAKE AN EXISTING APP HIGHLY AVAILABLE. If the user asks for high availability, redundancy, no single point of failure, surviving a host or VM failure, or 'stay up if a machine dies', this is the tool: point it at their running VM and pass high_availability:true. It needs no rebuild and no redeploy, and the URL does not change. Turns a single running instance into a horizontally-autoscaling cluster: snapshots the instance and puts your SOURCE VM behind an Octavia load balancer as its ALWAYS-ON BASELINE MEMBER, then an autoscaling group adds EXTRA members (booted from that snapshot) on CPU load and scales them back down to zero. FLAVOR — LEAD WITH A MEMORY-OPTIMIZED SMALL-DISK FLAVOR (m1.mem16/m1.mem32) for the cluster, and ideally have the SOURCE VM on one too: clustering snapshots the source VM's FULL disk, so DISK size (not RAM) drives how long the cluster takes to build and to add each member under load — a 40 GB mem flavor is several times faster to snapshot and scale than a 160 GB standard flavor (m1.xlarge) and costs less for the same RAM. If the source VM is on a big-disk flavor, RECOMMEND migrating the app onto a mem-flavor VM first (a root disk cannot be shrunk in place), even though it is extra work — it pays off on every scale-out, and a clustered app is stateless anyway (state in the managed DB) so the lean disk fits. Expect a DRASTICALLY better clustering experience on a mem flavor: far faster cluster-create, snapshots, and every scale-out. The user can override with any flavor. At rest ONLY your source VM serves — there is NO idle extra VM to pay for (the source VM is the cluster's minimum, so the floor is 0 extra members). Use it to LOAD-SCALE a stateless app tier while managed services hold state: it becomes highly-available UNDER LOAD (multiple members behind the LB), but at rest a SINGLE source VM serves — and that source VM is a plain Nova server, not an autoscaled member, so it is NOT auto-replaced if it fails while idle (only the auto…

NameTypeReqDescription
app_profilestringSet wordpress/woocommerce when upgrading an older deployment or raw VM that the backend has not profiled. WordPress/WooCommerce clusters require managed MySQL/MariaDB plus a media_space or explicitly…
auto_restructurebooleanInstead of just refusing a stateful VM, have redu get its co-located database OFF the VM first, then cluster. FULLY AUTO for a single_vm Postgres (redu deployed it): redu provisions a managed Postgre…
cluster_media_modestringFor WordPress/WooCommerce, use media_space as the default real cluster fix. local_uploads is refused because wp-content/uploads would diverge across members.
confirm_statelessbooleanOverride the stateful-VM safety refusal. redu REFUSES to cluster a VM that holds its own data (deployed with database:'single_vm' or a compose 'db' service) - a cluster clones the VM into members, so…
create_media_spacebooleanSet TRUE when upgrading a WordPress/WooCommerce deployment that has no media_space_id yet. Redu creates a small NFS media VM + volume, records it, and mounts it on all members.
dnamestringOptional public DNS name for the cluster's load-balancer access point (a .redu.cloud name is auto-generated if omitted).
flavor_idstringyesMember VM size — from list_flavors. Every autoscaling member uses this flavor. STRONGLY prefer m1.mem16/m1.mem32 (memory-optimized, 40 GB disk): clustering snapshots the source disk, so a lean disk m…
high_availabilitybooleanSet TRUE whenever the user asks for HIGH AVAILABILITY, redundancy, 'no single point of failure', 'survive a host/node failure', or 'stay up if a VM dies'. This is the ONLY way to get an HA cluster an…
idempotency_keystring
instance_idstringyesThe instance to turn into a cluster (from list_instances, or the VM of a deploy_app/deploy_compose deployment). It is snapshotted, and the autoscaling members are booted from that snapshot.
keypair_namestringyesSSH keypair name — from list_keypairs.
max_sizeintegerPeak member count under load (default 5). In the default mode this is EXTRA members added on top of your always-on source VM, and the floor is 0 extra. With high_availability:true the group runs betw…
media_mount_pathstringHost mount path on cluster members. Redu mounts this into /var/www/html/wp-content/uploads for WordPress/WooCommerce.
media_origin_urlstringPublic base URL where WordPress wp-content/uploads is served from the central media origin. This should be a separate media origin, not the DB VM.
media_space_flavor_idstringFlavor id for the media VM when create_media_space:true. Defaults to the cluster member flavor.
media_space_idintegerExisting Redu media space id to mount on every WordPress/WooCommerce cluster member.
media_space_namestringOptional name for the media space when create_media_space:true. Defaults to <cluster-name>-media.
media_space_size_gbintegerMedia space data volume size in GB when create_media_space:true (default 20).
namestringyesName for the cluster (lowercase letters, numbers, hyphens).
network_idstringyesPrivate network id — from list_private_networks. Use the SAME network the app's managed DB / other services are on, so members can reach them by private IP.
portintegerPort the app listens on / the load balancer forwards to (default 80). Your source VM must actually serve on this port — the load balancer health-checks it.
restructure_db_flavor_idstringOptional VM size for the provisioned managed database (from list_flavors). Defaults to the member flavor; pick a smaller one (e.g. m1.small) if the DB is light.
restructure_enginestringFor the ASSISTED path (a compose-stack database), which managed engine to provision. WordPress/WooCommerce = 'mysql' (or 'mariadb'). Required when auto_restructure is set and the DB runs inside the c…
scale_in_thresholdnumberAverage CPU fraction (0-1) below which a member is removed (default 0.2).
scale_out_thresholdnumberAverage CPU fraction (0-1) above which a member is added (default 0.7).
startup_commandstringSingle-line shell command to (re)start the app on each fresh member if the snapshot's own services do not auto-start it. For a podman-compose app: 'cd /opt/app && podman-compose up -d'. Omit to rely…
NameTypeReqDescription
available_keypairsarray
duplicateboolean
errorboolean
idempotency_keystring
invalid_keypair_nameboolean
modestring
needs_keypairboolean
needs_keypair_nameboolean
needs_planboolean
nextstring
plan_toolstring
request
result
validation

No examples provided.

verify_domain ~73

Checks the DNS TXT ownership record for a custom domain and marks it verified when the record is present. Call get_domain_verification first, add the TXT record at your DNS provider, then call this until status is verified.

NameTypeReqDescription
domainstringyesThe custom domain to verify ownership of (e.g. app.example.com).
NameTypeReqDescription
domainstring
modestring
nextstring
result
statusstring
verified_atstring|null

No examples provided.

whoami ~54

Verifies your redu.cloud credential with a REAL server round-trip and returns your identity + live quota. A green result means the key actually works — not merely that one is configured. Use this first if anything is 401ing.

Input schema present but exposes no named parameters.

NameTypeReqDescription
auth_typestring
nextstring
quota
user
verifiedboolean

No examples provided.