Domain lifecycle
Tandem is a domain registrar as well as a host, so an agent can take a domain from “does this exist?” all the way to renewal — entirely over MCP. This guide covers the registrar lifecycle: check → purchase → attach → renew / auto-renew / transfer. For editing zone records, see Managing DNS records; for the mechanics of pointing a hostname at a service, see Custom domains and DNS.
Every cost-bearing action here runs through the org’s payment + approval policy and requires the org to pass the deploy gate (billing + recovery verified).
The approval branch
purchase_domain, renew_domain, and transfer_domain all charge money, so each returns one of two shapes:
- Org owner → runs synchronously (
status='registered'/'renewed'/'transferring'). - Non-owner → returns
status='awaiting_owner_approval'with anapprovalUrlthe owner clicks to authorize; the action then completes automatically.
Both branches include costCents + currency so you can surface the price before or after. All three need the manage action.
Check availability
{ "name": "check_domain_availability", "arguments": { "stem": "acme" } }
Pass an explicit hostnames[] (max 30) or a stem to fan out across the default TLD set (com, io, ai, dev, app, co). Read-only — no charge, no order. Returns { results: [{ hostname, available, costCents, currency }] }. Use it to quote a price before purchasing.
Purchase
{ "name": "purchase_domain",
"arguments": { "organizationId": "…", "hostname": "acme.dev", "serviceId": "…" } }
Registers the domain via the platform registrar and attaches it to the given service. Requires a paid org. purchase_domain only attaches the exact hostname it bought — to attach a subdomain or an already-owned domain, use attach_domain (see below).
Attach an already-owned or external domain
{ "name": "attach_domain", "arguments": { "serviceId": "…", "hostname": "api.acme.dev" } }
- For a subdomain of an apex the org registered through Tandem (e.g.
api.acme.devwhenacme.devis registered), the A record is published automatically on Tandem’s authoritative NS and TLS is issued within minutes. - For an external hostname (a customer’s own domain hosted elsewhere), the tool records the domain and returns a DNS instructions block to pass to the user. Needs
manage+ developer.
Renew
{ "name": "renew_domain", "arguments": { "organizationId": "…", "hostname": "acme.dev" } }
Renews a Tandem-registered domain for one more year. Identify it by domainOrderId (from the portal’s domain list) or hostname. Needs manage + developer.
Auto-renew
{ "name": "set_domain_auto_renew",
"arguments": { "organizationId": "…", "hostname": "acme.dev", "autoRenew": true } }
Flips automatic renewal on or off. When on, the daily sweep renews before expiry (each renewal still runs through the approval policy — small price drift auto-approves, larger jumps prompt an owner). When off, the domain lapses at expiry unless renewed manually. This only flips the flag — no charge, so no deploy gate applies. Needs manage + developer.
Transfer in
{ "name": "transfer_domain",
"arguments": { "organizationId": "…", "hostname": "acme.com", "authCode": "…" } }
Transfers a domain registered elsewhere into Tandem, charging one year up front. Provide the EPP/auth code from the current registrar (optionally projectId/serviceId). Owner runs synchronously (status='transferring' with a transferOrderId); non-owner gets the approval branch. Completion at the registry typically takes a few days — poll status in the portal. Needs manage + developer.