delete_v1_projects_slug_domains_host
ReleaseDomain gives a custom hostname back, so the name is free to reuse.
ReleaseDomain gives a custom hostname back, so the name is free to reuse.
A claim is FIRST-COME and global, so an add-only surface was not ownership but a leak: a customer who mistyped a domain, or claimed one they later moved elsewhere, could neither reuse it nor let anyone else. This is the third writer that closes it. The release is scoped to (host, org, slug), so it can only ever drop THIS tenant's own claim, and it is IDEMPOTENT: releasing a host we do not hold is a clean 204, never a 404 that would let a caller probe which hosts other tenants hold. The edge cache-tag is flushed, since the host stops routing here.
Scope: a validated principal is required (403 without one) and the site is resolved within that principal's org, so another tenant's slug is a 404.
| Tool | delete_v1_projects_slug_domains_host |
| Door | https://api.hanzo.ai/v1/mcp |
| Method | tools/call (JSON-RPC 2.0) |
| Arguments | 2, 2 required |
| Operation | DELETE /v1/projects/{slug}/domains/{host} |
| Product | projects |
Arguments
| Field | Type | Required | Default | Values | Description |
|---|---|---|---|---|---|
host | string | yes | — | — | Host is the custom hostname, from the path. It is cleaned to its canonical form (lowercased, trailing dot dropped) before anything is looked up. |
slug | string | yes | — | — | Slug is the project the host is attached to, from the path. |
tools/list declares a type and a description for each field and nothing further. The Required column is taken from DELETE /v1/projects/{slug}/domains/{host}, the operation this tool dispatches to — the same declaration the REST API validates against. A — means neither the door nor that operation constrains the field.
Call it
A tools/call carries every argument in one flat object — nothing binds to a path or a query string. This call carries exactly the arguments the operation requires, so it is the smallest one that can run.
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "delete_v1_projects_slug_domains_host",
"arguments": {
"host": "<host>",
"slug": "<slug>"
}
}
}'Values are the operation's own defaults and enumerated values where it declares them, and a <placeholder> where neither source declares one. tools/list needs no credential; tools/call does — called without one the door answers HTTP 200 with a JSON-RPC result whose isError is set and whose text says what was missing. How to get a key →
The operation behind it
| Operation | Route | Product | Summary |
|---|---|---|---|
cloud_delete_v1_projects_slug_domains_host | DELETE /v1/projects/{slug}/domains/{host} | projects | ReleaseDomain gives a custom hostname back, so the name is free to reuse. |
The same capability over plain HTTP is in the projects API reference, on https://api.hanzo.ai.
All 833 tools · The door · API reference
Generated from tools/list on https://api.hanzo.ai/v1/mcp — 833 tools captured 2026-08-01 (this build read the vendored copy; the door was unreachable).
How is this guide?