Custom domains
Reserve and verify DNS, attach custom domains and choose the default address.
Reserve and verify DNS, attach custom domains and choose the default address.
These are action names. In default compact mode, call the indicated group tool with {"action":"<action-name>","params":{...}}; the arguments below go inside params. In ?mode=all, call the action name directly with those arguments. browse_github and read_docs are direct tools in both modes. Expand each schema for nested fields, enum values and validation constraints. Successful results are JSON in both text content and structuredContent; failures use isError and structuredContent.error.
manage_domain
Custom domains for an app (its organization's members who can edit it). action=reserve returns the DNS record the user must create at their DNS provider; action=add verifies that record, issues the certificate and attaches the domain (domain_not_verified with the record until DNS is in place: retry after the user created it); action=remove detaches it; action=set_default picks the domain the dashboard shows as the app's address (null for the Kinesis-issued one). get_app lists attached domains under config.domains.
Group: apps · Behavior: Write
Compact tool: apps_write · Action: manage_domain
MCP annotations: readOnlyHint: false · destructiveHint: true · idempotentHint: false · openWorldHint: true
Permissions and REST equivalents
apps.domains.reserve
POST /projects/{projectId}/apps/{appId}/domains/reserve
apps:write
apps.domains.add
POST /projects/{projectId}/apps/{appId}/domains
apps:write
apps.domains.remove
DELETE /projects/{projectId}/apps/{appId}/domains/{domain}
apps:write
apps.domains.setDefault
POST /projects/{projectId}/apps/{appId}/domains/default
apps:write
Arguments
action
"reserve" / "add" / "remove" / "set_default"
Yes
What to do
projectId
string
Yes
Project id
appId
string
Yes
App id
domain
string or null
Yes
Fully qualified domain name; null only with set_default
Result
apps.domains.reserve
domain(string): See the complete response schema below.ready(boolean): Verified with an unexpired certificate; add attaches it without further DNS stepsdnsRecord(object or null): The record to create; null once no delegation is neededcertificate(object or null): Validity of the issued certificate, when one exists
**`apps.domains.add`**
domain(string): See the complete response schema below.domains(array<string>): Custom domains attached to the appdefaultDomain(string or null): Domain the dashboard shows as the app's address; null for the Kinesis-issued one
Operation-specific errors: 409 domain_not_verified, 400 grid_to_serverless, 400 no_suitable_machines, 429 grid_quota_exceeded. apps.domains.remove
domain(string): See the complete response schema below.domains(array<string>): Custom domains attached to the appdefaultDomain(string or null): Domain the dashboard shows as the app's address; null for the Kinesis-issued onedeleted(true): See the complete response schema below.
Operation-specific errors: 400 grid_to_serverless, 400 no_suitable_machines, 429 grid_quota_exceeded. apps.domains.setDefault
domains(array<string>): Custom domains attached to the appdefaultDomain(string or null): Domain the dashboard shows as the app's address; null for the Kinesis-issued one
Was this helpful?
