MCP Tool Reference
The thin.host MCP server exposes 5 tools for domain provisioning. All tool descriptions are written for agent reasoning — status fields are enums, not prose.
provision_domain
Provision a new custom domain for an AI-generated site or app.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
domain | string | yes | Custom domain (e.g. "mysite.com") |
origin_url | string | yes | Current URL where the site is hosted |
user_email | string | yes | End user's email for billing |
idempotency_key | string | no | Prevent duplicate provisions on retry |
Returns
{
"provision_id": "uuid",
"status": "pending_payment",
"dns_instructions": {
"type": "CNAME",
"name": "mysite.com",
"value": "cname.thin.host",
"human_readable": "Set a CNAME record for mysite.com pointing to cname.thin.host"
},
"claim_url": "https://thin.host/claim/abc123...",
"expected_completion_seconds": 300
}
check_domain_status
Check current provisioning status. Call this to poll until ready: true.
Parameters
| Name | Type | Required |
|---|---|---|
provision_id | string | yes |
Returns
{
"status": "active",
"dns_status": "resolved",
"ssl_status": "active",
"payment_status": "paid",
"ready": true
}
update_origin
Change where a domain points to. Use when the user redeploys to a new URL.
Parameters
| Name | Type | Required |
|---|---|---|
provision_id | string | yes |
new_origin_url | string | yes |
Returns
{ "status": "active", "updated_at": "2026-04-25T02:00:00Z" }
release_domain
Tear down a provisioned domain. Not reversible.
Parameters
| Name | Type | Required |
|---|---|---|
provision_id | string | yes |
Returns
{ "status": "released", "released_at": "2026-04-25T03:00:00Z" }
list_domains
List all domains provisioned through your platform.
Parameters
| Name | Type | Required | Default |
|---|---|---|---|
status_filter | string | no | all |
limit | int | no | 50 |
Returns
{
"domains": [ { "id": "...", "hostname": "...", "status": "...", "ready": true }, ... ],
"total": 42,
"has_more": false
}
Error Format
All tools return structured errors when something goes wrong:
{
"error_code": "domain_taken",
"error_message": "The domain mysite.com is already provisioned",
"agent_should_retry": false,
"suggested_next_tool_call": "Choose a different domain"
}