API and MCP
API and MCP
Deploy and manage Ubuntu VPS instances with the RepoCloud REST API or from MCP clients that can send a custom Authorization header
Overview
The RepoCloud API lets you deploy, manage, and destroy Ubuntu VPS instances programmatically. It works on servers that were created through the API with a key: an Ubuntu VPS made in the dashboard answers 404 to every API call. It is ideal for:
- AI coding agents (Cursor, Claude Code, Codex) that need to provision servers on demand
- Automation scripts that deploy infrastructure as part of CI/CD pipelines
- Custom dashboards that manage RepoCloud instances alongside other services
The API is available at https://repocloud.io/api/v1/ and follows REST conventions with JSON request and response bodies, with the exceptions listed under Response Format.
MCP Integration
The same API powers the Model Context Protocol (MCP) integration. An MCP client that can send a custom Authorization header connects to RepoCloud as a tool server at https://mcp.repocloud.io/mcp, and its AI agent can deploy servers, check instance status, and manage Ubuntu VPS servers created through the API, in natural language. The server offers five tools, and each one calls one REST endpoint with your own key.
Create API keys and authenticate requests
Deploy new Ubuntu VPS instances
List, inspect, and delete instances
Power on/off, reboot, and resize instances
Create, list, and revoke keys (needs your dashboard session)
Configure AI agents to use RepoCloud as an MCP server
Quick Start
Get an API Key
Make a payment of $1 or more on your account, then go to the API / MCP tab in your dashboard. The first visit creates a key called
Defaultand shows it once (“Copy it now — it won’t be shown again.”). Later keys come from Generate New Key. Without the payment, the page shows no key.Deploy a VPS
bashcurl -X POST https://repocloud.io/api/v1/instances \ -H "Authorization: Bearer rcmcp_your_key_here" \ -H "Content-Type: application/json" \ -d '{"project_name": "my-server", "flavor": "s-1vcpu-2gb"}'The call needs a balance above $3 and answers HTTP 202 with the details of the new server, including the
instance_idthat the next call uses. See Deploy Instances for the whole reply.Check Status
bashcurl https://repocloud.io/api/v1/instances/123 \ -H "Authorization: Bearer rcmcp_your_key_here"The number is the
instance_idof the deploy reply, an integer.
Scope
The API currently supports Ubuntu VPS instances only, and it sees only the servers created through it with a key. It has no endpoints for snapshots, SSH keys, custom domains, billing, Container Apps, or AI Deploy. Container App deployment and management are available through the web dashboard. Applications that RepoCloud installs on a VPS (Coolify, Dokploy, and others) go through AI Deploy, which puts a GitHub project on an Ubuntu VPS and is not part of the API.
Base URL
All API endpoints use the base URL:
https://repocloud.io/api/v1/Paths are appended directly, for example https://repocloud.io/api/v1/instances.
Response Format
Responses are JSON. Successful responses return the requested data directly. Errors return a JSON object with an error field and an optional detail field; some also carry hint, retry_after, or balance:
{
"error": "Insufficient balance",
"detail": "Balance must be greater than $3 to deploy. Deposit at /billing.",
"balance": 2.5
}Not every failure is JSON. An unknown path answers an HTML 404 page and a wrong method an HTML 405 page. A request body that is not a JSON object (or that has a number where text is expected) answers the default HTML 500 page, as does an unexpected fault while deleting a server.
Rate Limits
| Scope | Limit |
|---|---|
| General (every call that carries a key) | 60 requests per 60 seconds per API key |
Deploy (POST /instances) |
5 requests per hour per API key; every attempt counts, including one that fails validation |
When rate-limited, the API returns HTTP 429 with a Retry-After header indicating how many seconds to wait (at most 60 for the general limit and at most 3600 for deploys), and the same number in the JSON field retry_after:
{
"error": "Rate limit exceeded",
"retry_after": 42
}The key management routes (which use your dashboard session) and the OpenAPI file are not counted. The counters live in the memory of each web server process.