What is MCP
The Model Context Protocol is an open standard that lets AI assistants call real tools. Hostwares runs an official MCP server, so an assistant can deploy a repo, read build logs, set environment variables and attach domains for you — in plain language, without leaving your editor.
It is hosted by us at https://mcp.hostwares.com — nothing to install, and it updates as the platform does.
Quickstart (Claude Code)
Create a key at Dashboard → API Keys, then run:
claude mcp add --transport http hostwares https://mcp.hostwares.com \ --header "Authorization: Bearer sk_your_key_here"
That is the whole setup. Now just ask:
> Deploy this repo to Hostwares as my-app > Why is my-app returning 502? Check the logs > Set DATABASE_URL on my-app > Point app.example.com at my-app
Verify it connected with claude mcp list.
Other clients
Claude Desktop, Cursor, VS Code, Windsurf
Add to your client’s MCP config (.cursor/mcp.json for Cursor, claude_desktop_config.json for Claude Desktop):
{
"mcpServers": {
"hostwares": {
"type": "http",
"url": "https://mcp.hostwares.com",
"headers": {
"Authorization": "Bearer sk_your_key_here"
}
}
}
}ChatGPT & other remote-MCP clients
Add a custom MCP connector pointing at https://mcp.hostwares.com with the header Authorization: Bearer sk_.... Any client that speaks Streamable HTTP works — including Base44, which can consume the same URL as a connector or skill wrapper.
Local stdio (clients without remote MCP)
A few clients only speak local stdio. For those, run our bridge — it forwards to the same hosted server, so you get the same tools without them going stale:
{
"mcpServers": {
"hostwares": {
"command": "npx",
"args": ["-y", "github:Hostwares/hostwares-mcp"],
"env": { "HOSTWARES_API_KEY": "sk_your_key_here" }
}
}
}Check it works
A plain GET returns the server descriptor, so you can sanity-check reachability:
curl https://mcp.hostwares.com
Tools
| Tool | What it does |
|---|---|
| deploy | Order a site from a public GitHub repo |
| list_sites | List your sites with status and URL |
| get_status | Detailed status incl. live container state |
| get_logs | Recent build and deployment logs |
| diagnose_site | One-shot diagnosis — container + HTTP + DB + logs |
| verify_site_health | Poll until site serves traffic (use before claiming success) |
| http_check | Check any URL — status, timing, redirects, headers |
| verify_ssl | Real TLS handshake check for a domain |
| get_site_config | Domain, port, git repo/branch, build/start commands |
| list_env_vars | Env var keys (values hidden) + build-time vs runtime |
| set_env | Set or update environment variables |
| add_domain | Attach a custom domain (SSL is automatic) |
| get_domains | List all domains across your sites |
| deployment_history | Deployment history for a site |
| restart_site | Restart a site’s container |
| redeploy_site | Trigger a fresh deployment |
| stop_site | Stop a site’s container |
| start_site | Start a stopped site |
| create_database | Provision Postgres, MySQL, MariaDB, Redis or MongoDB |
| list_databases | List your managed databases |
| get_database_status | Detailed DB status (incl. Coolify status) |
| verify_db_connection | Poll until DB is reachable on host/port |
| create_backup | Scheduled DB backup + take one now |
| list_backups | Backup schedules & last run status |
| check_invoices | List invoices with payment links |
These call the same internal services as the dashboard and the hw CLI, so results are identical whichever way you drive the platform.
How deploys are billed
Hosting is pay-first. deploy creates the site and an invoice, and returns an invoiceUrl — the build starts automatically once that invoice is paid. Your assistant will hand you the payment link; the site is not live until get_status reports it running.
Call deploy without packId first and it returns the available resource packs so you can pick one. Databases currently require an active plan — see Plans.
Security
- Keys are the same
sk_API keys used by the REST API and CLI, stored hashed. Revoke anytime from Dashboard → API Keys. - Every tool is scoped to the key’s owner — a key can only ever see and change that account’s resources.
- Rate limited to 60 requests/minute per key, the same as the REST API.
- Treat a key like a password: it can deploy and restart infrastructure. Prefer a dedicated key per machine so you can revoke one without disturbing the others.
Troubleshooting
| Symptom | Cause & fix |
|---|---|
| 401 / “Invalid or missing API key” | Header must be exactly Authorization: Bearer sk_.... Confirm the key still exists in Dashboard → API Keys. |
| 429 | Over 60 requests/minute for that key. Wait a moment and retry. |
| Tools missing in the client | Reconnect the server (claude mcp remove hostwares then add again) so it re-runs discovery. |
| “Site not found or access denied” | The id belongs to another account, or is wrong — run list_sites to get valid ids. |