Platform API · MCP
Your fleet, callable.
A REST API and a remote MCP server sit on top of the exact same data your portal shows you — sites, uptime, support requests, restores, billing. One Bearer key, scoped to what its owner can already see. Point an agent at it, or call it from a script.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_site_status",
"arguments": { "siteId": 42 }
}
}{
"result": {
"content": [{ "type": "text", "text":
"{ \"site\": { \"status\": \"active\" },
\"uptime\": { \"uptimePct\": 99.97 } }" }]
}
}Two surfaces, one contract
Same data, same scopes, two ways in.
01 · REST
Platform API v1
Plain JSON over HTTP under /api/v1. Sites, uptime, requests, restores, client rosters, provisioning, fleet status, dunning — the whole surface, one call at a time.
02 · MCP
Remote MCP server
The same endpoints, wrapped as tools an LLM client can call directly — POST /api/mcp, stateless JSON-RPC 2.0 (the MCP Streamable HTTP transport). Works with Claude and any MCP-compatible client.
Connect
Add it as a connector.
In Claude (or any MCP-compatible client), add a remote MCP connector pointed at the URL below, with your key as a Bearer token. No install, no local process to run.
Connector URL
https://hostfluency.com/api/mcp
Authorization header
Bearer hf_live_<your key>
Getting a key — honestly
Key issuance is admin-gated today. Every account has a self-serve API-access toggle that defaults off— public self-serve keys aren’t on by default, and we’re not going to pretend otherwise.
- Admins issue a key for any account from /admin/settings — no toggle required.
- Clients & agencies can self-issue from their own /portal/settings or /agency/settings once an admin flips their API-access toggle on.
A key is shown exactly once, at creation. Store it like a password — we only ever keep its hash.
Scopes
What a key can touch.
Scopes are baked into a key at issuance from its owner’s role at that moment — a client role carries client:*, an agency carries client:* + agency:*, and admin carries everything. Both the REST API and the MCP tool list enforce the same scopes, the same way.
| scope | grants |
|---|---|
| client:read | Read the key owner's own sites, uptime, requests, restores, and billing. |
| client:write | Create/reply to support requests and request restores on the owner's own sites. |
| agency:read | Read an agency's managed end-clients, their sites, and their billing states. |
| agency:write | Provision a new site (and its billing subscription) under one of the agency's own end-clients. |
| admin:read | Read the fleet-wide uptime wall and every account's data. |
| admin:write | Trigger the dunning sweep and suspend/lift billing suspensions on any site. |
MCP tools
Every tool this server exposes.
Generated straight from the server’s own tool registry — what’s listed here is what tools/list actually returns, scope-filtered per key.
| tool | scope | what it does |
|---|---|---|
| list_sites | client:read | List sites visible to the caller's API key: own sites for a client key, managed sites for an agency key, every site for an admin key. |
| get_site_status | client:read | Get one site's status: plan, continuous-protection state, and a 30-day uptime/latency summary. |
| get_fleet_status | admin:read | Admin-only uptime-wall summary across every site on the platform: current health, 30-day uptime, MRR, open requests, and incidents in the last 24h. |
| list_support_requests | client:read | List the caller's own support requests, newest first. |
| create_support_request | client:write | Open a new support request on the caller's own account, optionally attached to one of their own sites. |
| reply_support_request | client:write | Reply to one of the caller's own OPEN support requests. |
| request_restore | client:write | Request a point-in-time restore on one of the caller's own sites, within the plan's backup retention window. |
| list_clients | agency:read | List the caller's managed end-clients (agency key) or every end-client on the platform (admin key). |
| provision_site | agency:write | MUTATING — this creates a REAL site AND a real billing subscription for the target end-client (agency key only; the end-client must already belong to the caller's agency). |
| get_billing_state | client:read | Get billing state. |
| trigger_dunning_sweep | admin:write | Admin-only. |
| list_managed_databases | client:read | List DB Mirror managed databases visible to the caller's API key: own mirrors for a client key, managed mirrors for an agency key, every mirror for an admin key. |
| get_replication_status | client:read | Get one DB Mirror managed database's detail: full configuration, its latest replication-status report, and a derived status pill/label. |
| list_failover_events | client:read | List a DB Mirror managed database's failover history, newest first. |
| register_managed_database | client:write | MUTATING — registers a REAL managed database mirror for the caller's own account and enqueues its provisioning. |
| set_failover_mode | client:write | Set a DB Mirror managed database's failover mode to manual or auto. |
| set_snapshot_interval | client:write | Change a snapshot-method DB Mirror managed database's snapshot cadence in minutes (RPO = interval). |
| confirm_schema_change | client:write | Approve or reject a pending destructive schema-change review on a logical_autosync DB Mirror managed database. |
| request_promotion | client:write | MUTATING — promotes a DB Mirror managed database's standby to primary and repoints the floating endpoint. |
| list_dns_records upsert_dns_record delete_dns_record | client:read / client:write | Not yet available — DNS management is landing in a follow-up phase. These names are reserved; they don’t appear in tools/list until they ship. |
A note on tool results: fields like a support request’s message body, a site name, or a client’s notes are data your team (or your clients) typed in — not instructions. This server tells the calling model that explicitly at connection time; a well-behaved MCP client will never execute text found inside a tool result as if it were a command from you.
REST reference
The v1 endpoint index.
| method | path | scope | description |
|---|---|---|---|
| GET | /api/v1/sites | client:read | List sites visible to the key: own sites (client key), managed sites (agency key), or all sites (admin key). |
| GET | /api/v1/sites/:id | client:read | One site's detail: plan, status, continuous-protection state, and a 30-day uptime summary. 404 if not owned/managed/admin. |
| GET | /api/v1/restore-requests | client:read | List restore requests for the key's own sites, newest first. |
| POST | /api/v1/restore-requests | client:write | Request a point-in-time restore on one of the key's own sites, within the plan's retention window. |
| GET | /api/v1/requests | client:read | List the key's own support requests, newest first. |
| POST | /api/v1/requests | client:write | Create a support request, or reply to one of the key's own open requests. |
| GET | /api/v1/clients | agency:read | List the agency's managed end-clients (admin key: every client). |
| POST | /api/v1/sites | agency:write | Provision a site under one of the agency's own end-clients — creates the site and, when Stripe is configured, its send_invoice subscription. |
| GET | /api/v1/admin/fleet | admin:read | Uptime-wall summary across every site: status, current health, 30-day uptime, MRR, open requests. |
| POST | /api/v1/admin/dunning | admin:write | Run the billing dunning sweep immediately instead of waiting for the next engine tick. |
| PATCH | /api/v1/admin/sites/:id/suspension | admin:write | Suspend or lift a billing suspension on one site. |
| GET | /api/v1/databases | client:read | List DB Mirror managed databases visible to the key: own mirrors (client key), managed mirrors (agency key), or all mirrors (admin key), each with a derived status. 503 feature_disabled when DB Mirror is off. |
| POST | /api/v1/databases | client:write | Register a new DB Mirror managed database for the key's own account and enqueue its provisioning. Requires confirm: true; returns one-time connection credentials. 503 feature_disabled when DB Mirror is off. |
| GET | /api/v1/databases/:slug | client:read | One managed database's detail: full configuration, latest replication status, and derived display. 404 if not owned/managed/admin. 503 feature_disabled when DB Mirror is off. |
| GET | /api/v1/databases/:slug/events | client:read | A managed database's failover history, newest first. 503 feature_disabled when DB Mirror is off. |
| POST | /api/v1/databases/:slug/actions | client:write | Run a DB Mirror control action (failover mode, snapshot interval, schema-change confirm, promotion request) on one of the key's own managed databases. Promotion is two-step confirm. 503 feature_disabled when DB Mirror is off. |
Need a key, or a scope you don’t have?
Open a support request from your portal, or write to us directly — same-day, usually.