# RunCloud MCP by usefulapi (remote · runcloud.usefulapi.io)

Read RunCloud servers, web apps, databases and logs; deploy, restart services, renew SSL.

- Trust score: 65/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-17

## Components

- remote · `runcloud.usefulapi.io`: 65/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-runcloud/runcloud.md), [page](https://verifymcp.io/servers/io-usefulapi-runcloud/runcloud)

## Channel facts

- Endpoint: `https://runcloud.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.0`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-17.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 84/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3964 tokens (~110/item across 36 items; 36 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 17/100
  - Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 37 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the RunCloud MCP by usefulapi server?

RunCloud MCP by usefulapi is a hosted endpoint at https://runcloud.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-runcloud 'https://runcloud.usefulapi.io/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-usefulapi-runcloud": {
      "url": "https://runcloud.usefulapi.io/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-usefulapi-runcloud": {
      "type": "http",
      "url": "https://runcloud.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-runcloud]
url = "https://runcloud.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-runcloud": {
      "type": "remote",
      "url": "https://runcloud.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-runcloud --url 'https://runcloud.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-runcloud:
    url: "https://runcloud.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-runcloud": {
      "Transport": "http",
      "Url": "https://runcloud.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-runcloud -t streamable-http -u 'https://runcloud.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-runcloud": {
      "type": "http",
      "url": "https://runcloud.usefulapi.io/mcp"
    }
  }
}
```

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

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-16 (score 65, +1)

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

### 2026-10-14 (score 64, +2)

- [security] The server rewrote its instructions, which are the text every model session reads
- [functional] The server now declares the “prompts” capability
- [functional] First check of Schema quality: 100
- [functional] New prompt “getting_started”
- [functional] Server version: 1.0.0 → 1.1.0

### 2026-10-13 (score 62, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-12 (score 61)

First indexed and scored.

## MCP tools (36)

### `runcloud_ping` (~29 tokens)

Check API connection

Check that the API key works: RunCloud answers with a message ('pong'). GET /ping.

### `runcloud_list_servers` (~97 tokens)

List servers

List the servers connected to the workspace: id, name, provider, IP address, OS, stack, online/connected state, agent and PHP CLI version, auto-update settings and tags. GET /servers.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).

### `runcloud_get_server` (~60 tokens)

Get server

One server by id: provider, IP, OS and version, stack, online state, agent version, update settings, tags. GET /servers/{id}.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_get_server_stats` (~57 tokens)

Get server counts

How many web applications, databases, cron jobs and supervisor jobs a server has, and its country. GET /servers/{id}/stats.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_get_server_hardware` (~61 tokens)

Get server hardware info

Kernel version, CPU model and cores, memory and disk totals/free, load average and uptime of a server. GET /servers/{id}/hardwareinfo.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_get_server_health` (~62 tokens)

Get latest server health

The latest health sample of a server: total/available/used memory and disk space (MB) and load average. GET /servers/{id}/health/latest.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_list_server_logs` (~100 tokens)

List server activity logs

The server's activity log (what was changed in RunCloud and when), newest first. GET /servers/{id}/logs.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_list_services` (~80 tokens)

List server services

The services on a server (nginx, php-fpm, mariadb, redis, supervisor...) with real name, running state, CPU, memory and version. The realName is what runcloud_control_service needs. GET /servers/{id}/services.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_list_system_users` (~108 tokens)

List system users

The system (Linux) users on a server: id, username, whether deletable. Deployment keys and passwords are never returned. GET /servers/{id}/users.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_list_webapps` (~134 tokens)

List web applications

List the web applications on a server: id, name, root/public path, PHP version, stack, type (wordpress, custom...), default flag, alias. Deployment webhook keys are not returned. GET /servers/{id}/webapps.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `search` (string): Filter by web application name.
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_get_webapp` (~78 tokens)

Get web application

One web application by id (path, PHP version, stack, type, default flag). GET /servers/{id}/webapps/{webapp}.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

### `runcloud_get_webapp_settings` (~89 tokens)

Get web application settings

PHP and FPM/Nginx settings of a web application (disabled functions, timezone, memory and upload limits, process manager...). GET /servers/{id}/webapps/{webapp}/settings.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

### `runcloud_list_webapp_logs` (~128 tokens)

List web application activity logs

The activity log of a web application (settings changes, PHP version changes, deployments), newest first. GET /servers/{id}/webapps/{webapp}/log.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

### `runcloud_list_domains` (~136 tokens)

List domain names

The domain names of a web application: id, name, type (primary/alias), www, redirection, wildcard, DNS integration, status. GET /servers/{id}/webapps/{webapp}/domains.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

### `runcloud_get_domain_dns` (~102 tokens)

Get domain DNS setup instructions

The DNS records (A, CNAME...) a domain name needs to point at the server. GET /servers/{id}/webapps/{webapp}/domains/{domain}/dns.

Input parameters:

- `domain_id` (integer, required): Domain name id (see runcloud_list_domains).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

### `runcloud_get_webapp_ssl` (~89 tokens)

Get web application SSL

The web application's SSL certificate (basic / web-app-level SSL): provider, validity, HTTPS settings. Private keys are never returned. GET /servers/{id}/webapps/{webapp}/ssl.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

### `runcloud_get_ssl_method` (~101 tokens)

Check SSL method and AutoSSL status

Whether the web application uses basic (one certificate for the app) or advanced (one per domain) SSL, and its AutoSSL status. Advanced SSL is a Business/Enterprise feature. GET /servers/{id}/webapps/{webapp}/ssl/advanced.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

### `runcloud_get_git_deployment` (~118 tokens)

Get Git deployment

The Git deployment configured on a web application: provider, branch, repository URL, auto-deploy flag, deployment script and whether it is an atomic deployment. The deployment webhook keys are not returned. The id of the result is the git_id for runcloud_deploy_git. GET /servers/{id}/webapps/{webapp}/git.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

### `runcloud_list_databases` (~99 tokens)

List databases

The databases on a server: id, name, collation. No credentials. GET /servers/{id}/databases.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_list_database_users` (~100 tokens)

List database users

The database users on a server (id, username). Passwords are never returned. GET /servers/{id}/databaseusers.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_list_cronjobs` (~116 tokens)

List cron jobs

The cron jobs of a server: id, label, user, schedule, command, enabled flag. The id is what runcloud_run_cronjob needs. GET /servers/{id}/cronjobs.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_list_supervisors` (~114 tokens)

List supervisor jobs

The supervisor (background worker) jobs of a server: id, label, user, process count, auto start/restart, directory, command. GET /servers/{id}/supervisors.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_get_supervisor_status` (~66 tokens)

Get supervisor job status

The live status (RUNNING, FATAL, BACKOFF...), pid and uptime of every supervisor process, by job label. GET /servers/{id}/supervisors/status.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_list_firewall_rules` (~107 tokens)

List firewall rules

The firewall rules of a server: type (global/rich), port, protocol, IP address, action. GET /servers/{id}/security/firewalls.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_list_blocked_ips` (~57 tokens)

List Fail2Ban blocked IPs

The IP addresses Fail2Ban currently blocks on a server. GET /servers/{id}/security/fail2ban/blockedip.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_list_backups` (~155 tokens)

List backups

The backup instances of the workspace: label, what they cover (web app / database), storage, type, frequency, size, status. Filter by server, storage, status or name. GET /backups.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `search` (string): Filter by backup name.
- `server_id` (integer): Only backups of this server id.
- `status` (string): Backup status, e.g. active.
- `storage` (string): Storage type, e.g. runcloud or local.

### `runcloud_list_backup_snapshots` (~101 tokens)

List backup snapshots

The snapshots of one backup instance: run date, status, type and size. GET /backups/{id}/snapshots.

Input parameters:

- `backup_id` (integer, required): Backup instance id (see runcloud_list_backups).
- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).

### `runcloud_list_atomic_projects` (~97 tokens)

List atomic deployment projects

The atomic Git deployment projects of the workspace: name, provider, repository, branch, auto-deploy, success/failure counts and the latest deployment. Webhook keys are not returned. GET /atomic.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).

### `runcloud_list_atomic_deployments` (~121 tokens)

List atomic deployments

The deployments of an atomic project: commit hash, branch, message, committer, release name, status (DEPLOYING, COMPLETED, FAILED), start and end time. GET /atomic/{project}/deployments.

Input parameters:

- `page` (integer): Page number, from 1 (default 1). Pass the previous reply's next_page.
- `per_page` (integer): Results per page, 1-40 (default 20).
- `project_id` (integer, required): Atomic project id (see runcloud_list_atomic_projects).

### `runcloud_control_service` (~133 tokens)

Start, restart or reload a service

WRITE: run systemctl start, restart or reload on one service of a server (for example nginx-rc or php81rc-fpm). A restart briefly interrupts that service and the sites behind it. 'stop' is deliberately not offered. Get the realName from runcloud_list_services. PATCH /servers/{id}/services.

Input parameters:

- `action` (string, required): systemctl action.
- `real_name` (string, required): The service's realName from runcloud_list_services, e.g. nginx-rc or redis-server.
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_deploy_git` (~131 tokens)

Force a Git deployment

WRITE: force a Git deployment of a web application now: RunCloud pulls the configured branch and runs the deployment script, which changes the live site's files. Get git_id from runcloud_get_git_deployment (its id). PUT /servers/{id}/webapps/{webapp}/git/{git}/script.

Input parameters:

- `git_id` (integer, required): Git deployment id (runcloud_get_git_deployment -> id).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

### `runcloud_force_deploy_atomic` (~65 tokens)

Force an atomic deployment

WRITE: start an atomic deployment of a project now (builds a new release and switches the live symlink when it succeeds). PUT /atomic/{project}/forcedeploy.

Input parameters:

- `project_id` (integer, required): Atomic project id (runcloud_list_atomic_projects).

### `runcloud_run_cronjob` (~105 tokens)

Run a cron job now

WRITE: force-run one cron job of a server once, right now, outside its schedule. The job's command runs on the server with its configured user. Get the id from runcloud_list_cronjobs. POST /servers/{id}/cronjobs/{job}/run.

Input parameters:

- `cronjob_id` (integer, required): Cron job id (runcloud_list_cronjobs).
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).

### `runcloud_reload_supervisor` (~89 tokens)

Reload a supervisor job

WRITE: reload one supervisor job so its worker processes restart (running processes are interrupted). Get the id from runcloud_list_supervisors. POST /servers/{id}/supervisors/{job}/reload.

Input parameters:

- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `supervisor_id` (integer, required): Supervisor job id (runcloud_list_supervisors).

### `runcloud_renew_ssl` (~197 tokens)

Renew a Let's Encrypt certificate

WRITE: redeploy (renew) the Let's Encrypt certificate of a web application, which re-issues it and reloads the web server. Let's Encrypt certificates only. For basic SSL pass the ssl_id from runcloud_get_webapp_ssl; for advanced (per-domain) SSL, which requires advanced SSL mode (check runcloud_get_ssl_method), also pass domain_id. PUT /servers/{id}/webapps/{webapp}/ssl/{ssl} or /domains/{domain}/ssl/{ssl}.

Input parameters:

- `domain_id` (integer): Only for advanced (per-domain) SSL mode (see runcloud_get_ssl_method): the domain's id.
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `ssl_id` (integer, required): SSL certificate id (runcloud_get_webapp_ssl -> id).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

### `runcloud_install_letsencrypt_ssl` (~277 tokens)

Issue a Let's Encrypt certificate

WRITE: issue and install a free Let's Encrypt certificate for a web application (basic SSL) or for one domain of it (advanced SSL, pass domain_id; this requires advanced SSL mode, see runcloud_get_ssl_method). The web server is reloaded; the domain's DNS must already point at the server. Custom certificates are not supported here. POST /servers/{id}/webapps/{webapp}/ssl or /domains/{domain}/ssl.

Input parameters:

- `authorization_method` (string, required): Let's Encrypt challenge: http-01, or dns-01 (needs external_api, a Cloudflare DNS integration).
- `domain_id` (integer): Only for advanced (per-domain) SSL mode (see runcloud_get_ssl_method): the domain's id.
- `enable_hsts` (boolean, required): Send the HSTS header (browsers will insist on HTTPS).
- `enable_http` (boolean, required): Keep plain HTTP enabled alongside HTTPS.
- `environment` (string): live (default, trusted certificate) or staging (test certificate).
- `external_api` (integer): Id of the Cloudflare DNS integration; required for dns-01.
- `server_id` (integer, required): RunCloud server id (see runcloud_list_servers).
- `webapp_id` (integer, required): Web application id (see runcloud_list_webapps).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-runcloud/runcloud#diagnostics

## Score history

- 2026-10-17: 65
- 2026-10-16: 65
- 2026-10-15: 64
- 2026-10-14: 64
- 2026-10-13: 62
- 2026-10-12: 61

## Common questions

### What is the RunCloud MCP by usefulapi server?

RunCloud MCP by usefulapi is listed in the public MCP registry as io.usefulapi/runcloud. Read RunCloud servers, web apps, databases and logs; deploy, restart services, renew SSL. This page covers its hosted endpoint (https://runcloud.usefulapi.io/mcp).

### Is the RunCloud MCP by usefulapi server safe to use?

RunCloud MCP by usefulapi scores 65 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the RunCloud MCP by usefulapi server expose?

RunCloud MCP by usefulapi exposes 36 tools: runcloud_ping, runcloud_list_servers, runcloud_get_server, runcloud_get_server_stats, runcloud_get_server_hardware, and 31 more. Their descriptions and schemas cost roughly 3,759 tokens of context every time the server is loaded.

### Does the RunCloud MCP by usefulapi server require authentication?

Yes. RunCloud MCP by usefulapi asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the RunCloud MCP by usefulapi server still maintained?

RunCloud MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 17 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://runcloud.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/runcloud/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-runcloud/runcloud.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-runcloud/runcloud.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-runcloud/runcloud
