Skip to main content
Glama
Onlydns

OnlyDNS MCP Server

Official
by Onlydns

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/mcp

Global Installation

npm install -g @onlydns/mcp

Configuration

The server requires an OnlyDNS API Bearer Token.

Environment Variables

Variable

Description

Default

ONLYDNS_API_TOKEN

Your OnlyDNS API Bearer Token (Required)

-

ONLYDNS_API_BASE_URL

OnlyDNS REST API base URL

https://api.onlydns.com/v1


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 dev

License

MIT © 2026 OnlyDNS

Available Tools

15 tools
add_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTime to live in seconds (default: 300)
nameYesRecord name/subdomain (e.g. "@", "www", "mail", or "app.example.com")
typeYesDNS record type (e.g. A, AAAA, CNAME, MX, TXT, SRV, CAA, NS, URL, PROXY)
valueYesRecord 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.
domainNameYesDomain name (e.g. example.com)

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNameYesTSIG key name
allowAxfrYesWhether to allow AXFR zone transfers for this domain using this key
domainNameYesDomain name (e.g. example.com)
allowDnsUpdateYesWhether to allow RFC 2136 DNS updates for this domain using this key

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNameYesDomain name to create (e.g. example.com)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
algorithmNoTSIG algorithm (default: hmac-sha256)hmac-sha256

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRecord name/subdomain to delete (e.g. "@", "www")
typeYesRecord type to delete (e.g. A, CNAME, TXT)
valueNoSpecific record value to delete. If omitted, all values for this name and type are deleted.
domainNameYesDomain name (e.g. example.com)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNameYesDomain name (e.g. example.com)

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNameYesDomain name (e.g. example.com)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNameYesDomain name (e.g. example.com)

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNameYesTSIG key name (e.g. key-12345)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of domains to return (default: 200, max: 1000)
offsetNoPagination offset (default: 0)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by record name/hostname (e.g. "www", "sub.example.com", or "@" for root)
typeNoFilter by record type (e.g. A, AAAA, CNAME, MX, TXT, SRV, CAA, NS)
domainNameYesThe domain name to list records for (e.g. example.com)

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNameYesDomain name (e.g. example.com)

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordsYesComplete list of replacement DNS records
domainNameYesDomain name (e.g. example.com)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoOptional new TTL in seconds (keeps existing TTL if not specified)
nameYesRecord name/subdomain to update (e.g. "@", "www")
typeYesDNS record type to update (e.g. A, CNAME, TXT)
valueYesNew value(s) for the record. Overwrites existing values for this name and type.
domainNameYesDomain name (e.g. example.com)

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 6 tool updates
    • Changedconfigure_domain_tsig3 fields changed
      • removedInput schema / properties / key
        Removed value: -{
        -  "description": "TSIG key name",
        -  "type": "string"
        -}
      • addedInput schema / properties / keyName
        Added value: +{
        +  "description": "TSIG key name",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "domainName",
        -  "key",
        -  "allowAxfr",
        -  "allowDnsUpdate"
        -]New value: +[
        +  "domainName",
        +  "keyName",
        +  "allowAxfr",
        +  "allowDnsUpdate"
        +]
    • Removeddelete_tsig_key
    • Addedget_tsig_key
    • Changedlist_tsig_keys2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / domainName
        Removed value: -{
        -  "description": "Optional domain name to list TSIG keys specific to that domain.",
        -  "type": "string"
        -}
    • Changedremove_domain_tsig1 field changed
      • removedInput schema / properties / key
        Removed value: -{
        -  "description": "Specific TSIG key name to remove from this domain. If omitted, removes all TSIG keys from the domain.",
        -  "type": "string"
        -}
    • Changedset_records7 fields changed
      • changedInput schema / properties / records / description
        Previous value: -"Full list of DNS records to set for this domain"New value: +"Complete list of replacement DNS records"
      • changedInput schema / properties / records / items / properties / name / description
        Previous value: -"Hostname / record name (e.g. \"@\", \"www.example.com\")"New value: +"Record name or subdomain (e.g. \"@\", \"www\")"
      • changedInput schema / properties / records / items / properties / records / description
        Previous value: -"List of record values"New value: +"List of record values (e.g. [\"1.2.3.4\"])"
      • addedInput schema / properties / records / items / properties / records / minItems
        Added value: +1
      • addedInput schema / properties / records / items / properties / ttl / default
        Added value: +300
      • changedInput schema / properties / records / items / properties / type / description
        Previous value: -"Record type (e.g. A, AAAA, CNAME, MX, TXT)"New value: +"Record type (e.g. \"A\", \"CNAME\", \"TXT\")"
      • changedInput schema / properties / records / items / required
        Previous value: -[
        -  "name",
        -  "type",
        -  "ttl",
        -  "records"
        -]New value: +[
        +  "name",
        +  "type",
        +  "records"
        +]
  2. 15 tool updatesv1.0.0
    • First observedadd_record
    • First observedconfigure_domain_tsig
    • First observedcreate_domain
    • First observedcreate_tsig_key
    • First observeddelete_record
    • First observeddelete_tsig_key
    • First observeddisable_dnssec
    • First observedenable_dnssec
    • First observedget_dnssec
    • First observedlist_domains
    • First observedlist_records
    • First observedlist_tsig_keys
    • First observedremove_domain_tsig
    • First observedset_records
    • First observedupdate_record

TDQS

A3.5/5.0

Scored across 15 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers