Domain & DNS Tools
MCP tools for managing custom domains, DNS zones, and DNS records
These tools give your agent full programmatic control over domains and DNS. Your agent can assign custom domains to services, manage DNS zones, and create any record type — enabling custom service routing, email configuration, domain verification, and more.
add_custom_domain
Attach a custom domain to a deployed service. Creates a DNS record and configures TLS automatically.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
name | string | yes | — | Name of the service to attach a custom domain to |
domain | string | yes | — | Custom domain (e.g. api.apps.example.com). Must be under a delegated zone |
workspace | string | no | default | Workspace slug |
project | string | no | default | Project name |
Returns: service_id, domain, status, message
The domain must be within an active delegated zone. Ink creates the DNS record and provisions a TLS certificate automatically.
remove_custom_domain
Remove a custom domain from a service. Reverts to the default *.ml.ink URL.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
name | string | yes | — | Name of the service to remove custom domain from |
workspace | string | no | default | Workspace slug |
project | string | no | default | Project name |
Returns: service_id, message
list_delegations
List all delegated DNS zones with their status. Zone delegation can be set up at ml.ink/dns.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
workspace | string | no | default | Workspace slug |
Returns: Array of zones with zone_id, zone, status, error, created_at
Zone status values: pending_verification, pending_delegation, provisioning, active, failed
list_dns_records
List all DNS records within a delegated zone. Shows both user-created and managed (system) records.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
zone | string | yes | — | The hosted zone (e.g. example.com) |
workspace | string | no | default | Workspace slug |
Returns: Array of records with id, name, type, content, ttl, managed, created_at
add_dns_record
Add a DNS record to a hosted zone. Managed records (created by the system) cannot be overwritten.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
zone | string | yes | — | The hosted zone (e.g. example.com) |
name | string | yes | — | Record name (e.g. www or mail.sub) |
type | string | yes | — | Record type. Values: A, AAAA, CNAME, MX, TXT, CAA |
content | string | yes | — | Record value (e.g. IP address, hostname, or text) |
ttl | integer | no | 300 | TTL in seconds |
workspace | string | no | default | Workspace slug |
Returns: record object with id, name, type, content, ttl, managed, created_at
Examples by record type
A record — Point a subdomain to an IP address:
add_dns_record(
"zone": "apps.example.com",
"name": "api",
"type": "A",
"content": "1.2.3.4"
)MX record — Route email to a mail provider:
add_dns_record(
"zone": "apps.example.com",
"name": "@",
"type": "MX",
"content": "10 mail.example.com"
)TXT record — Email authentication (SPF, DKIM, DMARC) or domain verification:
add_dns_record(
"zone": "apps.example.com",
"name": "@",
"type": "TXT",
"content": "v=spf1 include:_spf.google.com ~all"
)CNAME record — Alias to another domain:
add_dns_record(
"zone": "apps.example.com",
"name": "docs",
"type": "CNAME",
"content": "docs.example.com"
)CAA record — Restrict which CAs can issue certificates:
add_dns_record(
"zone": "apps.example.com",
"name": "@",
"type": "CAA",
"content": "0 issue letsencrypt.org"
)delete_dns_record
Delete a DNS record from a delegated zone. Managed records (auto-created by Ink for custom domains) cannot be deleted.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
zone | string | yes | — | The hosted zone (e.g. example.com) |
record_id | string | yes | — | ID of the DNS record to delete (from list_dns_records) |
workspace | string | no | default | Workspace slug |
Returns: message