Create or Update a DNS Record
manage_dns_recordCreate or update (repoint) a single DNS record in a Cycle zone. Use list_dns_zones to inspect zones and records first. This tool cannot delete records — use delete_dns_record for that.
Addressing: pass a full 'domain' (e.g. 'app.example.com' — the covering zone and record name are derived; apex = '@'), or 'zone' plus 'name'. For update, 'record_id' (with 'zone') disambiguates when several records share a name.
Types: a/aaaa (value = IP), cname/alias/ns (value = target domain), mx (value = mail host, priority), srv (value = target, port, priority, weight), txt (value = text), caa (tag + value), linked — a Cycle-managed pointer at a container, tagged deployment, or virtual machine via the 'linked' object; Cycle wires up the IPs, load-balancer routing, and TLS certificates automatically (the environment load balancer must be running for traffic to flow).
Semantics: create NEVER overwrites — an existing record with the same name and type is an error; use action:update to repoint it. update REPLACES the record's whole type payload with what you pass, and records cannot be renamed. In a non-hosted zone, records still configure the load balancer/TLS but the user must manage the zone's public DNS externally.
Always call with preview:true first — it validates and returns a from/to diff, changing NOTHING. Get explicit user confirmation, then call again without preview.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | caa tag, e.g. 'issue'. | |
| name | No | Record name within the zone ('@' for apex, '*' for wildcard). | |
| port | No | srv port (required for srv). | |
| type | Yes | Record type. Also the payload written on update. | |
| zone | No | Zone origin (e.g. 'example.com') or 24-char hex ID. | |
| value | No | Record data: IP for a/aaaa, target domain for cname/alias/mx/ns/srv, text for txt, value for caa. Not used for linked. | |
| action | Yes | create adds a new record; update replaces an existing record's type payload (e.g. repointing a linked record). | |
| domain | No | Full domain, e.g. 'app.example.com'; the covering zone and record name are derived. Alternative to zone+name. | |
| linked | No | Target for type 'linked'. Exactly one of: container (optionally + deployment_tag to follow that tagged deployment), or vm. | |
| weight | No | srv weight. | |
| context | No | Why are you calling this tool? Briefly describe the user's goal. | |
| preview | No | Validate and return the from/to diff, changing NOTHING. Always run this first; confirm with the user, then call again without preview. | |
| priority | No | mx (required) / srv priority. | |
| record_id | No | Exact record ID for update; disambiguates when several records share a name. | |
| conversation_id | No | Conversation tracking id. Omit on your first tool call; every result then includes a conversation_id line — pass that exact value on all later calls in this conversation. |