OnlyDNS MCP Server
OfficialManage OnlyDNS DNS zones, records, DNSSEC, and TSIG keys through MCP tools.
List and create domains/zones with pagination.
List DNS records with optional type or hostname filtering.
Add, update, delete, or batch-replace DNS records, including A, AAAA, CNAME, MX, TXT, SRV, CAA, NS, URL, and PROXY records.
Inspect DNSSEC status and DS/DNSKEY keys; enable or disable DNSSEC signing.
List, create, and delete TSIG keys.
Configure or remove domain TSIG permissions for AXFR zone transfers and RFC 2136 dynamic updates.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OnlyDNS MCP Serveradd an A record for www.example.com pointing to 203.0.113.10"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OnlyDNS MCP Server (@onlydns/mcp)
Official Model Context Protocol (MCP) server for OnlyDNS, built on the official TypeScript SDK (@onlydns/sdk). Enables AI agents (such as Claude Desktop, Cursor, Junie, Windsurf, and Claude Code) to inspect and manage DNS zones, DNS records, DNSSEC configuration, and TSIG keys directly with your OnlyDNS account.
Features
🌐 Domain Management: List all managed domains and create new DNS zones.
📝 DNS Record Operations:
list_records: Query DNS records with optional filtering by type (A, AAAA, CNAME, MX, TXT, SRV, CAA, etc.) or hostname.add_record: Create new records or append values to existing record sets with automatic domain normalization.update_record: Modify existing DNS records and update TTLs.delete_record: Delete specific record values or entire record sets.set_records: Batch replace full zone record sets.
🔐 DNSSEC Management: Inspect DNSSEC status, fetch DS/DNSKEY records, enable, and disable DNSSEC signing.
🔑 TSIG Keys: Generate and manage TSIG keys for secondary DNS zone transfers (AXFR) and RFC 2136 dynamic updates.
Related MCP server: Cloudflare DNS MCP Server
Installation & Quick Start
Using npx (No installation needed)
You can run the server directly using npx:
export ONLYDNS_API_TOKEN="your_onlydns_api_token"
npx -y @onlydns/mcpGlobal Installation
npm install -g @onlydns/mcpConfiguration
The server requires an OnlyDNS API Bearer Token.
Environment Variables
Variable | Description | Default |
| Your OnlyDNS API Bearer Token (Required) | - |
| OnlyDNS REST API base URL |
|
Client Integration Examples
Claude Desktop
Add the following to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"onlydns": {
"command": "npx",
"args": ["-y", "@onlydns/mcp"],
"env": {
"ONLYDNS_API_TOKEN": "YOUR_ONLYDNS_BEARER_TOKEN"
}
}
}
}Cursor (or Windsurf / Claude Code)
Add to your MCP settings or .cursor/mcp.json:
{
"mcpServers": {
"onlydns": {
"command": "npx",
"args": ["-y", "@onlydns/mcp"],
"env": {
"ONLYDNS_API_TOKEN": "YOUR_ONLYDNS_BEARER_TOKEN"
}
}
}
}Available MCP Tools
🌐 Domains
list_domains(limit?, offset?): Lists all domains in the account.create_domain(domainName): Creates a new DNS zone for a domain.
📝 DNS Records
list_records(domainName, type?, name?): Lists DNS records for a domain, with optional filtering.add_record(domainName, name, type, value, ttl?): Adds/appends a DNS record (e.g.A,CNAME,MX,TXT,URL,PROXY).update_record(domainName, name, type, value, ttl?): Replaces values and/or TTL for a record type.delete_record(domainName, name, type, value?): Deletes a record or specific value.set_records(domainName, records): Batch replaces all records for a zone.
🔐 DNSSEC
get_dnssec(domainName): Fetches DNSSEC status and keys (DS, DNSKEY).enable_dnssec(domainName): Enables DNSSEC signing for a zone.disable_dnssec(domainName): Disables DNSSEC signing.
🔑 TSIG Keys
list_tsig_keys(): Lists all account TSIG keys.get_tsig_key(keyName): Retrieves TSIG key details.create_tsig_key(algorithm?): Generates a new TSIG key (hmac-sha256,hmac-sha512, etc.).configure_domain_tsig(domainName, keyName, allowAxfr, allowDnsUpdate): Configures AXFR or DDNS permissions for a domain.remove_domain_tsig(domainName): Removes all TSIG keys from a domain.
Development & Testing
# Clone and install dependencies
git clone https://github.com/onlydns/onlydns-mcp.git
cd onlydns-mcp
npm install
# Run unit tests
npm test
# Build TypeScript
npm run build
# Run locally in development
npm run devLicense
MIT © 2026 OnlyDNS
Available Tools
15 toolsadd_recordA
Add a DNS record to a domain. If a record with the same name and type already exists, the new value is appended to the record set.
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Time to live in seconds (default: 300) | |
| name | Yes | Record name/subdomain (e.g. "@", "www", "mail", or "app.example.com") | |
| type | Yes | DNS record type (e.g. A, AAAA, CNAME, MX, TXT, SRV, CAA, NS, URL, PROXY) | |
| value | Yes | Record content/value (e.g. "1.2.3.4", "v=spf1 include:... ~all", "10 mail.example.com"). Can be a single string or array of strings. | |
| domainName | Yes | Domain name (e.g. example.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that a same-name/same-type record causes the new value to be appended rather than replacing existing data, which is a non-obvious mutation trait. However, it says nothing about required permissions, failure modes, propagation, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero padding; the core action leads and the important edge-case behavior follows immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 5-parameter mutation with a fully documented schema and no output schema, the description covers the essential action plus the key non-obvious behavior (append semantics). It is only short of permission/auth context, which is a minor gap at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters including TTL default and accepted record types. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a DNS record to a domain') and the second sentence clarifies the append-not-replace semantics, which meaningfully distinguishes it from siblings like update_record and set_records. It does not name those siblings directly, so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The append-on-duplicate behavior implies when this tool is appropriate (adding to an existing record set rather than replacing it), but the description never names update_record or set_records as alternatives or states when to prefer them. Usage is inferable, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_domain_tsigC
Attach and configure TSIG permissions (AXFR transfer / dynamic DNS updates) for a domain.
| Name | Required | Description | Default |
|---|---|---|---|
| keyName | Yes | TSIG key name | |
| allowAxfr | Yes | Whether to allow AXFR zone transfers for this domain using this key | |
| domainName | Yes | Domain name (e.g. example.com) | |
| allowDnsUpdate | Yes | Whether to allow RFC 2136 DNS updates for this domain using this key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does not say whether this grants permissions to an existing key or creates a binding, whether it overwrites prior TSIG config for the domain, whether it is idempotent, or what permissions the caller needs — all critical for a mutation tool with four required parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the distinguishing detail (AXFR / dynamic updates) is placed immediately after the verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-required-parameter mutation with no annotations and no output schema, the description leaves out prerequisites, reversibility, overwrite behavior, and failure modes. It is too thin to let an agent call this safely without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so keyName, domainName, allowAxfr and allowDnsUpdate are already documented in the schema, including the RFC 2136 reference. The description's parenthetical restates the two booleans' purpose without adding format, default, or interaction semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (attach/configure) and resource (TSIG permissions for a domain), and names the two capabilities it controls (AXFR transfers, dynamic DNS updates). This is enough to distinguish it from create_tsig_key or list_tsig_keys, though it never names its inverse sibling remove_domain_tsig.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (a TSIG key must presumably exist first via create_tsig_key), and no mention of remove_domain_tsig as the way to undo it. The agent must infer all routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_domainC
Create/add a new DNS zone/domain under the OnlyDNS account.
| Name | Required | Description | Default |
|---|---|---|---|
| domainName | Yes | Domain name to create (e.g. example.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Because no annotations are provided, the description carries the full burden. 'Create/add' implies a write operation, but there is no disclosure of permissions needed, whether the call is reversible, what happens on duplicate domain names, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. However, 'Create/add' and 'zone/domain' are mildly redundant synonym pairs, so it is concise without being maximally precise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no annotations and no output schema, the description is too thin. It does not explain the result of the call, error behavior, or operational context beyond 'under the OnlyDNS account,' leaving the agent without enough behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single parameter (domainName) already has a clear example in the schema. The description adds no parameter-level format, validation, or constraint details beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description supplies a specific verb and resource ('Create/add a new DNS zone/domain') and scopes it to the OnlyDNS account. It is distinct from record-level siblings such as add_record, but it never names or contrasts those siblings explicitly, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided; the description only states what the tool does. It does not direct the agent to alternatives like add_record or list_domains or mention prerequisites like account ownership.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tsig_keyB
Generate a new TSIG key for secondary DNS transfers (AXFR) or dynamic DNS updates.
| Name | Required | Description | Default |
|---|---|---|---|
| algorithm | No | TSIG algorithm (default: hmac-sha256) | hmac-sha256 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and leaves key traits unstated: whether the generated secret is returned once and must be stored, whether the key is persisted to a keystore, whether it is idempotent, and what privileges are required. For a credential-generation tool these omissions matter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb and resource first and no filler. It is appropriately sized, though it spends its one clause on use cases rather than the behavior an agent most needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional enum param, no output schema), so little is required, but with no output schema the description should say something about the returned key material and that it must be captured. That gap keeps it at minimum-viable completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single algorithm parameter is fully documented with an enum and a default in the schema, so the baseline of 3 applies. The description adds no guidance on algorithm selection tradeoffs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (generate) and resource (TSIG key) plus the intended purpose (secondary DNS transfers via AXFR, dynamic DNS updates). That distinguishes it from read-only siblings like list_tsig_keys and destructive ones like delete_tsig_key, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The AXFR/dynamic-update phrasing implies when the key is needed, which is more than nothing, but there is no explicit when-to-use vs when-not guidance and no mention of the related siblings configure_domain_tsig or delete_tsig_key that follow creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_recordC
Delete a DNS record or specific value from a domain.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Record name/subdomain to delete (e.g. "@", "www") | |
| type | Yes | Record type to delete (e.g. A, CNAME, TXT) | |
| value | No | Specific record value to delete. If omitted, all values for this name and type are deleted. | |
| domainName | Yes | Domain name (e.g. example.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It hints that omitting a value deletes all values, but says nothing about irreversibility, required permissions, or whether the deletion can be undone — significant gaps for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the verb front-loaded and no filler. It is appropriately sized, though it is arguably too terse given what it omits rather than overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, no-annotations, no-output-schema tool, so the description should at minimum address irreversibility, confirmation expectations, or failure modes. Instead it covers only the bare action, leaving the agent without safety-relevant context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter's meaning, including the value-omission behavior, is already documented in the schema. The description's 'or specific value' phrasing adds a marginal framing but no new syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (DNS record / specific value), so the agent knows exactly what the tool does. It does not distinguish itself from similar siblings such as set_records or update_record, which could also remove values, leaving differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of update_record or set_records, nor any note about prerequisites or when deletion is appropriate. The agent gets a purpose statement but no routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_dnssecB
Disable DNSSEC signing and remove DNSSEC keys for a domain in OnlyDNS.
| Name | Required | Description | Default |
|---|---|---|---|
| domainName | Yes | Domain name (e.g. example.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that keys are removed, which implies a destructive effect, but does not describe permissions required, reversibility, side effects on existing records, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It conveys the core action efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one fully documented parameter, and the description states the action clearly. However, for a destructive operation with no annotations and no output schema, it lacks important behavioral context such as permissions and irreversibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single 'domainName' parameter. The description adds no additional parameter semantics beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Disable') and resource ('DNSSEC signing and DNSSEC keys') and scopes it to a domain. It clearly distinguishes the tool from the sibling 'enable_dnssec' by indicating the opposite operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives such as 'enable_dnssec' or 'get_dnssec'. It only states the action, leaving usage conditions and prerequisites to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_dnssecC
Enable DNSSEC signing for a domain in OnlyDNS.
| Name | Required | Description | Default |
|---|---|---|---|
| domainName | Yes | Domain name (e.g. example.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a state-changing operation but says nothing about required permissions, whether the change is reversible, what happens if DNSSEC is already enabled, or what the response contains. For a mutation tool with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It is efficient, though it is so terse that it omits context that would have been worth the extra words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with a fully documented schema and no output schema, the description is minimally adequate. It nonetheless omits any behavior on error or re-invocation, which matters for a state-changing DNS operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, so the schema fully documents 'domainName' with an example. The description adds no syntax or format detail beyond that, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: enabling DNSSEC signing for a domain. It is clear what the tool does and distinguishable from siblings like get_dnssec and disable_dnssec by the verb and the tool name. It does not explicitly contrast itself with disable_dnssec or note the domain must already exist, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives, nor any mention of prerequisites such as the domain existing, DNSSEC being currently disabled, or DS records needing configuration at the registrar. The agent must infer the entire usage context from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dnssecB
Get DNSSEC configuration status, NSEC3 parameters, and DS / DNSKEY keys for a domain.
| Name | Required | Description | Default |
|---|---|---|---|
| domainName | Yes | Domain name (e.g. example.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. It does usefully disclose the shape of what comes back (NSEC3 parameters, DS and DNSKEY keys), but says nothing about permission requirements, whether the call fails or returns an empty/disabled status when DNSSEC is off, or any rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler; the verb and resource lead and the enumerated content follows. Nothing could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, enumerating the returned data (status, NSEC3, DS/DNSKEY) is exactly the compensation needed. It is only incomplete on edge-case behavior — what happens when DNSSEC is not enabled on the domain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, with the schema documenting domainName and an example format. The description's phrase 'for a domain' adds no syntax or constraints beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('DNSSEC configuration') and enumerates the payload it covers (status, NSEC3 parameters, DS/DNSKEY keys), which makes it clearly the read counterpart to the sibling enable_dnssec/disable_dnssec tools. It stops short of naming those siblings explicitly, so an agent must infer the routing rather than being told.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, no prerequisite (e.g. the domain must exist / be registered in the account), and no explicit contrast with enable_dnssec or disable_dnssec. The read intent is only implied by the verb 'Get'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tsig_keyC
Get details for a specific TSIG key by name.
| Name | Required | Description | Default |
|---|---|---|---|
| keyName | Yes | TSIG key name (e.g. key-12345) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get details' implies a read, but it says nothing about required permissions, what fields the details contain, or behavior when the key name does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource and selection criterion front-loaded; no wasted words. It is perhaps overly terse rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description is adequate but thin: it does not say what 'details' comprises or how a missing key is handled, and there are no annotations to fill the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single keyName parameter is already documented with a format example in the schema, so the description adds no meaning beyond it. Baseline 3 per the high-coverage rule.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (TSIG key) scoped to a single key selected by name, which contrasts with the sibling list_tsig_keys. However, it never names that sibling or explicitly says it returns one key rather than many.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no alternatives referenced, despite a crowded sibling set (list_tsig_keys, create_tsig_key, configure_domain_tsig). The agent must infer that this is the single-key lookup path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domainsB
List all DNS domains managed in the OnlyDNS account.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of domains to return (default: 200, max: 1000) | |
| offset | No | Pagination offset (default: 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only scope (account-wide domains) and gives no information about pagination behavior, auth/permission requirements, ordering, or whether results are cached — thin for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope qualifier is placed immediately after the verb+resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with two fully documented optional params and no output schema, the description is minimally sufficient. It omits any read-only/permission context that would matter given the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with limit and offset fully documented inline including defaults and bounds. The description adds nothing beyond that, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (DNS domains) scoped to the OnlyDNS account, which is enough to distinguish it from record- or TSIG-focused siblings. However it does not name or contrast with any alternative (e.g. list_records), so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'List all' implies an unfiltered enumeration, but there is no explicit when-to-use guidance, no mention of when a more targeted tool (list_records) is preferable, and no note about paginating large accounts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recordsA
List all DNS records for a domain, with optional filtering by record type (A, AAAA, CNAME, MX, TXT, etc.) or hostname.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by record name/hostname (e.g. "www", "sub.example.com", or "@" for root) | |
| type | No | Filter by record type (e.g. A, AAAA, CNAME, MX, TXT, SRV, CAA, NS) | |
| domainName | Yes | The domain name to list records for (e.g. example.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. 'List all' conveys that the default returns every record and filters narrow it, which is helpful, but it says nothing about permissions, pagination, or result ordering for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the verb, resource, scope, and optional filters. Every clause earns its place with zero redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read tool this is adequate, but with no annotations and no output schema the description does not disclose the shape of returned records or pagination, leaving an agent to infer return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents domainName, name, and type in detail. The description restates the type and hostname filters but adds no format or syntax beyond what the schema provides, matching the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('DNS records') scoped to a domain, with the filterable fields named. It is clearly distinguishable from mutation siblings like add_record or delete_record, though it offers no explicit contrast against the read-only list_domains sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'with optional filtering' tells the agent the filters are non-mandatory, which is useful context, but there is no statement of when to prefer this over list_domains or get_dnssec, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tsig_keysB
List all TSIG keys configured for the OnlyDNS account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It implies a read-only list operation but does not disclose permissions, pagination, rate limits, or return format, leaving significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded and contains no filler. Every part of the sentence earns its place by naming the action, resource, and account scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter list tool with no output schema, the description sufficiently conveys what the tool returns. It could mention return shape or read-only nature, but the core information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to document. Per the baseline rule for 0 parameters, a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Provides a specific verb (List) and resource (TSIG keys) with account scope (OnlyDNS account). It implies a contrast with get_tsig_key via 'all' and plural 'keys', but does not explicitly name or rule out any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are provided. The description only states what the tool returns, leaving the agent to infer usage from the tool name and resource alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_domain_tsigB
Remove all TSIG keys associated with a domain.
| Name | Required | Description | Default |
|---|---|---|---|
| domainName | Yes | Domain name (e.g. example.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the one behaviorally important fact for a destructive call: this removes ALL keys for the domain, not one. It omits permissions required, irreversibility, and side effects (e.g. broken TSIG-authenticated transfers).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope qualifier 'all' appears immediately after the verb where it matters most.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with no annotations and no output schema, the description names what is destroyed but leaves out prerequisites (does the domain need existing keys?), reversibility, and downstream impact on DNS authentication.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is a single documented parameter (domainName with an example), so the schema already does the work. The description adds no format or constraint detail beyond the schema baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (remove) and resource (all TSIG keys associated with a domain), and the word 'all' scopes the operation usefully. It implicitly separates itself from configure_domain_tsig, but never names or contrasts with that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives such as configure_domain_tsig or a per-key deletion path. Usage can only be inferred from the verb and the word 'all', which is not real guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_recordsA
Completely replace ALL DNS records in a zone with a new list of records. Warning: destructive if omitted records are intended to be preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| records | Yes | Complete list of replacement DNS records | |
| domainName | Yes | Domain name (e.g. example.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the single most important trait: this is a full-replacement, destructive mutation that discards unlisted records. It omits auth/permission requirements, reversibility, and return behavior, but the destructive semantics are stated unambiguously.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the operation and followed by the risk warning. Every clause earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must stand alone; it covers the critical destructive behavior, which is what an agent most needs before calling a full-replacement tool. Minor gaps around permissions and response shape keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (domainName, records) are documented in the schema itself, including nested field descriptions. The description adds only the implication that 'records' is the complete replacement list, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Completely replace ALL DNS records in a zone') and pins down the scope with 'ALL', which cleanly separates it from siblings like add_record, update_record and delete_record. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The warning sentence gives an explicit when-not condition ('destructive if omitted records are intended to be preserved'), which tells the agent when to prefer an additive/partial sibling. It stops short of naming those alternatives (add_record, update_record) explicitly, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_recordB
Update an existing DNS record set for a given name and type, completely replacing its values and/or TTL.
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Optional new TTL in seconds (keeps existing TTL if not specified) | |
| name | Yes | Record name/subdomain to update (e.g. "@", "www") | |
| type | Yes | DNS record type to update (e.g. A, CNAME, TXT) | |
| value | Yes | New value(s) for the record. Overwrites existing values for this name and type. | |
| domainName | Yes | Domain name (e.g. example.com) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the destructive replace-not-append semantics ('completely replacing its values and/or TTL'), but omits permission requirements, failure behavior when the name/type does not exist, and whether the change is atomic or reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that states the action, the target, and the replacement scope with zero filler. Nothing wasted and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the core replace semantics but leaves the sibling-routing question (add_record vs set_records), preconditions, and error/permission context unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains every parameter, including the TTL-preservation and overwrite behavior. The description adds the replace-scope framing but no syntax, format, or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (update) and resource (DNS record set) plus the scoping keys (name and type), and clarifies that values/TTL are replaced wholesale. However, it does not differentiate itself from the sibling tools add_record or set_records, which an agent must disambiguate before choosing this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus add_record, set_records, or delete_record, and no prerequisites (e.g. does the record set have to pre-exist?). The word 'existing' hints at a precondition but never states it explicitly or names an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- Changed
configure_domain_tsig3 fields changed- removed
Input schema / properties / keyRemoved value: -{ - "description": "TSIG key name", - "type": "string" -} - added
Input schema / properties / keyNameAdded value: +{ + "description": "TSIG key name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "domainName", - "key", - "allowAxfr", - "allowDnsUpdate" -]New value: +[ + "domainName", + "keyName", + "allowAxfr", + "allowDnsUpdate" +]
- Removed
delete_tsig_key - Added
get_tsig_key - Changed
list_tsig_keys2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / domainNameRemoved value: -{ - "description": "Optional domain name to list TSIG keys specific to that domain.", - "type": "string" -}
- Changed
remove_domain_tsig1 field changed- removed
Input schema / properties / keyRemoved value: -{ - "description": "Specific TSIG key name to remove from this domain. If omitted, removes all TSIG keys from the domain.", - "type": "string" -}
- Changed
set_records7 fields changed- changed
Input schema / properties / records / descriptionPrevious value: -"Full list of DNS records to set for this domain"New value: +"Complete list of replacement DNS records" - changed
Input schema / properties / records / items / properties / name / descriptionPrevious value: -"Hostname / record name (e.g. \"@\", \"www.example.com\")"New value: +"Record name or subdomain (e.g. \"@\", \"www\")" - changed
Input schema / properties / records / items / properties / records / descriptionPrevious value: -"List of record values"New value: +"List of record values (e.g. [\"1.2.3.4\"])" - added
Input schema / properties / records / items / properties / records / minItemsAdded value: +1 - added
Input schema / properties / records / items / properties / ttl / defaultAdded value: +300 - changed
Input schema / properties / records / items / properties / type / descriptionPrevious value: -"Record type (e.g. A, AAAA, CNAME, MX, TXT)"New value: +"Record type (e.g. \"A\", \"CNAME\", \"TXT\")" - changed
Input schema / properties / records / items / requiredPrevious value: -[ - "name", - "type", - "ttl", - "records" -]New value: +[ + "name", + "type", + "records" +]
15 tool updates
v1.0.0- First observed
add_record - First observed
configure_domain_tsig - First observed
create_domain - First observed
create_tsig_key - First observed
delete_record - First observed
delete_tsig_key - First observed
disable_dnssec - First observed
enable_dnssec - First observed
get_dnssec - First observed
list_domains - First observed
list_records - First observed
list_tsig_keys - First observed
remove_domain_tsig - First observed
set_records - First observed
update_record
TDQS
Scored across 15 tools
Most tools target distinct resources (records, domains, TSIG keys, DNSSEC). The record-mutation tools (set_records, add_record, update_record, delete_record) have overlapping surface area, but the descriptions clearly distinguish full replacement vs. append vs. targeted edit. Only a minor risk of confusion between set_records and update_record.
Consistent snake_case verb_noun structure throughout (list_records, create_domain, delete_record). Minor deviations: creation uses both 'create_' (create_domain, create_tsig_key) and 'add_' (add_record), and 'set_records' vs 'update_record' use different verbs for similar operations. Still largely predictable.
15 tools is well-scoped for a DNS management server covering four coherent subgroups (records, domains, TSIG, DNSSEC). Each tool earns its place with no obvious filler.
Records have full CRUD plus batch replace, DNSSEC has enable/disable/get, and TSIG has create/list/get/configure/remove. However, domain lifecycle is incomplete: you can create and list domains but there is no delete_domain or get_domain, which limits full zone management.
Maintenance
Related MCP Connectors
Register, transfer and manage domain names and DNS from your AI agent.
Connect custom domains via AI agents: DNS pre-flight checks, hand-off connect sessions and checks.
Domain search, registration, DNS, marketplace, and checkout with your AI agent.
Free, no-API-key network lookups for AI agents — IP geolocation, DNS, WHOIS, HTTP and SSL/TLS certificate checks, and full domain health reports.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with the Cloudflare REST API for managing DNS records, zones, and other Cloudflare resources.MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Cloudflare DNS zones and records, including listing, creating, updating, and deleting DNS records through natural language.6MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to manage Cloudflare DNS records, including listing zones and records, and creating, updating, or deleting DNS records.23 npmMIT
- AlicenseAqualityBmaintenanceEnables AI agents to manage Cloudflare DNS records, including listing, creating, updating, and deleting records for your domains.86 npmGPL 3.0