Spaceship MCP Server
Integrates with the Spaceship API to manage DNS records for domains, supporting listing, creating, updating, and deleting records, with specialized tools for A, AAAA, CNAME, MX, SRV, and TXT record types.
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., "@Spaceship MCP Serverlist all DNS records for example.com"
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.
Spaceship MCP Server
An MCP (Model Context Protocol) server for the Spaceship API, providing easy-to-use tools for managing DNS records. Features specialized tools for common record types (A, AAAA, CNAME, MX, SRV, TXT) with explicit parameters, plus generic tools for advanced use cases.
⚠️ Warning: use with care
This MCP server gives AI agents direct control over your DNS records. This can be helpful but also dangerous because:
Domain takeover risk: Incorrect DNS changes could redirect your domain to malicious sites
Service disruption: Wrong DNS records can make your websites and services inaccessible
Permanent consequences: Some DNS changes can have lasting effects on your domain's reputation
Unintended modifications: AI agents may make DNS changes you didn't expect or want
Recommendations:
Review AI-suggested DNS changes before confirming them
Keep backups of your current DNS configuration
Monitor your domains closely when using this server
Avoid using it with an AI agent that may also be accessing untrusted content
Related MCP server: Google Cloud DNS MCP Server
Status
I use this myself for my own projects.
Limited testing: As far as I know it is not in widespread use
No automated tests: There are currently no unit tests or integration tests
Use at your own risk: Suitable for experimentation but not recommended for critical systems
Contributions, bug reports, and feedback are welcome to help improve the project's stability and reliability.
Features
Core Operations
List DNS Records: Retrieve all DNS records for a domain
Delete DNS Records: Remove DNS records from a domain
Specialized Record Creation Tools
Type-specific tools with explicit parameters for easy, error-free DNS management:
A Records: Create IPv4 address records
AAAA Records: Create IPv6 address records
CNAME Records: Create canonical name aliases
MX Records: Create mail exchange records with priority and exchange parameters
SRV Records: Create service locator records with priority, weight, port, and target
TXT Records: Create text records for SPF, DKIM, DMARC, verification, etc.
Generic Tools
Create/Update DNS Records: Generic tools supporting all DNS record types for advanced use cases
Installation
Prerequisites
Node.js ≥ 18
An MCP-compatible client (e.g. Claude Desktop, Cursor, Continue)
Spaceship API credentials (see Configuration section below)
Install the server
Clone the repository and build:
git clone https://github.com/mattcollins/spaceship-mcp.git
cd spaceship-mcp
npm install
npm run buildConfigure your MCP client
Add the server to your MCP client configuration.
Example (Claude Desktop)
Edit claude_desktop_config.json:
{
"mcpServers": {
"spaceship": {
"command": "node",
"args": ["/absolute/path/to/spaceship-mcp/dist/index.js"],
"env": {
"SPACESHIP_API_KEY": "your_api_key",
"SPACESHIP_API_SECRET": "your_api_secret"
}
}
}
}Replace /absolute/path/to/spaceship-mcp with the actual path where you cloned the repository.
Restart the client after saving the file.
Verify the installation
After restarting your client, confirm the server is running:
The server appears in the client's MCP/server list
No errors appear in the client logs
Tools exposed by the server (like
list_dns_records) are available to the model
To check for startup errors, you can run the server manually:
npm startConfiguration
Environment Variables
Variable | Description | Required |
| Your Spaceship API key | Yes |
| Your Spaceship API secret | Yes |
Get your API credentials from the Spaceship API Manager.
Required API Permissions
Your API key will need the following permissions:
dnsrecords:read- For listing DNS recordsdnsrecords:write- For creating, updating, and deleting DNS records
Usage
Available Tools
list_dns_records
Lists all DNS records for a domain.
Parameters:
domain(string, required): The domain name to list DNS records for
create_dns_record
Creates new DNS records for a domain.
Parameters:
domain(string, required): The domain namerecords(array, required): Array of DNS records to createname(string, required): The record name (subdomain)type(string, required): The record type (A, AAAA, CNAME, MX, TXT, etc.)value(string, required): The record valuettl(number, optional): Time to live in seconds (default: 3600)
update_dns_records
Updates DNS records for a domain.
Parameters:
domain(string, required): The domain namerecords(array, required): Array of DNS records to updatename(string, required): The record name (subdomain)type(string, required): The record type (A, AAAA, CNAME, MX, TXT, etc.)value(string, required): The record valuettl(number, optional): Time to live in seconds (default: 3600)
delete_dns_records
Deletes DNS records from a domain.
Parameters:
domain(string, required): The domain namerecords(array, required): Array of DNS records to deletename(string, required): The record name (subdomain)type(string, required): The record type (A, AAAA, CNAME, MX, TXT, etc.)
Specialized Record Type Tools
For convenience, specialized tools are available for common DNS record types. These tools provide explicit parameters instead of requiring format strings.
create_a_record
Creates an A record (IPv4 address).
Parameters:
domain(string, required): The domain namename(string, required): The record name (subdomain, use "@" for root)address(string, required): The IPv4 address (e.g., "192.0.2.1")ttl(number, optional): Time to live in seconds (default: 3600)
create_aaaa_record
Creates an AAAA record (IPv6 address).
Parameters:
domain(string, required): The domain namename(string, required): The record name (subdomain, use "@" for root)address(string, required): The IPv6 address (e.g., "2001:db8::1")ttl(number, optional): Time to live in seconds (default: 3600)
create_cname_record
Creates a CNAME record (canonical name/alias).
Parameters:
domain(string, required): The domain namename(string, required): The record name (subdomain)cname(string, required): The canonical name to point tottl(number, optional): Time to live in seconds (default: 3600)
Note: CNAME values typically should not include a trailing dot for Spaceship DNS.
create_mx_record
Creates an MX record (mail exchange).
Parameters:
domain(string, required): The domain namename(string, required): The record name (subdomain, use "@" for root)priority(number, required): The priority value (lower is higher priority, e.g., 10)exchange(string, required): The mail server hostnamettl(number, optional): Time to live in seconds (default: 3600)
create_srv_record
Creates an SRV record (service locator).
Parameters:
domain(string, required): The domain namename(string, required): The service name (e.g., "_autodiscover._tcp")priority(number, required): The priority value (lower is higher priority)weight(number, required): The weight for load balancingport(number, required): The port numbertarget(string, required): The target hostnamettl(number, optional): Time to live in seconds (default: 3600)
create_txt_record
Creates a TXT record (text data).
Parameters:
domain(string, required): The domain namename(string, required): The record name (subdomain, use "@" for root)value(string, required): The text valuettl(number, optional): Time to live in seconds (default: 3600)
Example Usage
Using Specialized Tools (Recommended)
The specialized tools provide a cleaner interface with explicit parameters:
Create an A Record
{
"tool": "create_a_record",
"arguments": {
"domain": "example.com",
"name": "www",
"address": "192.0.2.1"
}
}Create an MX Record
{
"tool": "create_mx_record",
"arguments": {
"domain": "example.com",
"name": "@",
"priority": 10,
"exchange": "mail.example.com"
}
}Create an SRV Record
{
"tool": "create_srv_record",
"arguments": {
"domain": "example.com",
"name": "_autodiscover._tcp",
"priority": 0,
"weight": 1,
"port": 443,
"target": "autodiscover.example.com"
}
}Create a TXT Record
{
"tool": "create_txt_record",
"arguments": {
"domain": "example.com",
"name": "@",
"value": "v=spf1 include:spf.example.com -all"
}
}Create a CNAME Record
{
"tool": "create_cname_record",
"arguments": {
"domain": "example.com",
"name": "www",
"cname": "example.com"
}
}Using Generic Tools
The generic tools are still available and support all record types:
List DNS Records
{
"tool": "list_dns_records",
"arguments": {
"domain": "example.com"
}
}Create DNS Record (Generic)
{
"tool": "create_dns_record",
"arguments": {
"domain": "example.com",
"records": [
{
"name": "www",
"type": "A",
"value": "192.0.2.1",
"ttl": 3600
}
]
}
}Note: For MX records, use format "priority exchange" (e.g., "10 mail.example.com"). For SRV records, use format "priority weight port target" (e.g., "0 1 443 autodiscover.example.com").
Delete DNS Records
{
"tool": "delete_dns_records",
"arguments": {
"domain": "example.com",
"records": [
{
"name": "www",
"type": "A"
}
]
}
}Error Handling
The server will return appropriate error messages for:
Invalid API credentials
Missing required parameters
API rate limits
Network errors
Invalid domain names
Troubleshooting
Server not appearing in client
Ensure the
commandpath is correct and points to the builtdist/index.jsfileUse an absolute path in the configuration, not a relative path
Check that the project has been built with
npm run build
Authentication errors
Verify your API credentials are correct in the configuration
Check that your API key has the required permissions (
dnsrecords:readanddnsrecords:write)Ensure environment variables are properly set in your client configuration
Node version issues
Check your Node version with
node --versionEnsure you're running Node.js 18 or higher
If you have multiple Node versions, ensure your MCP client is using the correct one
Debugging startup errors
Run the server manually to see detailed error messages:
cd /path/to/spaceship-mcp
npm startCheck your MCP client logs for additional error information.
Development
npm run dev- Watch mode for developmentnpm run build- Build the TypeScript codenpm start- Run the built server
Available Tools
10 toolscreate_aaaa_recordA
Create an AAAA record (IPv6 address) for a domain
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Time to live in seconds (optional) | |
| name | Yes | The record name (subdomain, use "@" for root domain) | |
| domain | Yes | The domain name | |
| address | Yes | The IPv6 address (e.g., "2001:db8::1") |
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. It only mentions 'Create' without disclosing side effects (e.g., whether it overwrites an existing record, duplicate handling, validation, or permissions). This is insufficient for a mutation 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?
The description is a single concise sentence that front-loads the action and clarifies the resource type. Every word earns its place, and there is 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?
Given the simple tool with 4 well-documented parameters and no output schema, the description is minimally viable. However, it lacks behavioral context (return values, errors, idempotency) and explicit usage guidance, leaving gaps for an agent.
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 parameters are already well-documented. The description adds no extra parameter semantics beyond the schema, but the baseline is 3 given the high 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?
The description clearly states 'Create an AAAA record (IPv6 address) for a domain', using a specific verb and resource. It distinguishes from siblings like create_a_record by explicitly mentioning IPv6, making the tool's purpose 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?
Usage is implied by the description: use when creating an IPv6 DNS record. However, there is no explicit guidance on when to use this tool versus alternatives (e.g., create_a_record for IPv4) or any context on prerequisites or conflicts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_a_recordA
Create an A record (IPv4 address) for a domain
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Time to live in seconds (optional) | |
| name | Yes | The record name (subdomain, use "@" for root domain) | |
| domain | Yes | The domain name | |
| address | Yes | The IPv4 address (e.g., "192.0.2.1") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states the action without mentioning permissions, idempotency, or what happens if the record already exists. For a mutation tool, 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?
The description is a single, well-structured sentence that immediately conveys the tool's purpose. It is concise with no filler or redundant 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?
The tool is simple and the schema covers all parameters, but there is no output schema or behavioral context. The description is adequate for a basic create operation, yet lacks guidance on errors, permissions, or response details.
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 each parameter is documented. The description adds no parameter-level detail beyond the schema, earning the baseline score 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?
The description 'Create an A record (IPv4 address) for a domain' is specific with a clear verb and resource. It distinguishes from sibling tools like create_aaaa_record (IPv6) and create_cname_record by explicitly stating IPv4.
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 clearly implies usage for creating IPv4 DNS records, setting it apart from other record types. However, it does not explicitly name alternative tools or state when not to use it, so it lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cname_recordB
Create a CNAME record (canonical name/alias) for a domain
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Time to live in seconds (optional) | |
| name | Yes | The record name (subdomain) | |
| cname | Yes | The canonical name to point to without trailing dot (e.g., "example.com") | |
| domain | Yes | The domain name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure, but it only states the creation action. It does not mention side effects (e.g., overwriting existing records), permission requirements, or error behavior, similar to a typical minimal mutation tool description.
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 sentence that conveys the entire purpose with no unnecessary words. It is front-loaded with the verb and resource, making it easy to scan.
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?
Given the absence of annotations and output schema, the description is too sparse to be fully operationally complete. It lacks information about what happens on success, whether existing records are replaced, or how TTL is handled (though schema covers TTL). The tool is simple, but additional context about side effects would improve 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?
All four parameters are documented in the schema (100% coverage), so the description adds little beyond restating the domain context. The phrase 'for a domain' redundantly echoes the 'domain' parameter, and 'alias' partially reflects the 'cname' parameter, but the schema already explains these.
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 uses a specific verb 'Create' and identifies the resource as a CNAME record, with the clarifier '(canonical name/alias)' making the DNS purpose clear. It distinguishes from sibling tools like create_a_record or create_mx_record by specifying the record type.
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 guidance on when to use this tool versus alternatives, such as create_a_record or the generic create_dns_record. It does not mention exclusions or prerequisites, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dns_recordC
Create a new DNS record for a domain
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The domain name | |
| records | Yes | Array of DNS records to create |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure but only states the obvious 'create' action. It fails to mention idempotency, overwrite behavior, permission requirements, or partial failure handling for multiple records.
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. While it lacks depth, it avoids verbosity and is easy to parse quickly.
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 tool accepting an array of records, the description lacks context about use cases, limitations, or interaction with sibling tools. No output schema or annotations compensate for the missing behavioral and selection guidance.
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 schema describes all parameters with detailed explanations and examples for MX/SRV values, achieving 100% coverage. The description adds no extra parameter meaning, so the baseline score 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 clearly states the action (create) and target (DNS record), but it does not distinguish from the type-specific sibling tools like create_a_record or create_cname_record. The singular phrasing 'a new DNS record' also slightly conflicts with the array input schema, which supports multiple records.
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 is provided on when to use this generic tool versus the more specific create_*_record tools. There is no mention of bulk creation, type flexibility, or any exclusions, leaving the agent without direction for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_mx_recordB
Create an MX record (mail exchange) for a domain
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Time to live in seconds (optional) | |
| name | Yes | The record name (subdomain, use "@" for root domain) | |
| domain | Yes | The domain name | |
| exchange | Yes | The mail server hostname (e.g., "mail.example.com") | |
| priority | Yes | The priority/preference value (lower is higher priority, e.g., 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only says 'Create' without mentioning prerequisites, idempotency, conflict handling, or what happens to existing records. This lacks transparency for a mutating 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?
The description is a single clear sentence that directly states the tool's purpose. No unnecessary words or redundancy, which is ideal for a simple create operation.
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?
While the tool is relatively simple and parameters are fully documented, the lack of annotations and output schema means the description should provide more context about the operation's effects or return value. It is adequate but not 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 coverage is 100%, so the schema already documents all parameters. The description adds no extra meaning beyond the schema, so the baseline 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 specifies the exact action ('Create an MX record') and clarifies that MX means 'mail exchange', distinguishing it from other DNS record creation tools. The verb+resource pattern is clear and 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?
No guidance is given on when to use this tool versus alternatives like create_dns_record or other create_* methods. The description only states what it does, not when it should be chosen over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_srv_recordA
Create an SRV record (service locator) for a domain
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Time to live in seconds (optional) | |
| name | Yes | The service name (e.g., "_autodiscover._tcp") | |
| port | Yes | The port number | |
| domain | Yes | The domain name | |
| target | Yes | The target hostname (e.g., "autodiscover.example.com") | |
| weight | Yes | The weight for load balancing | |
| priority | Yes | The priority value (lower is higher priority) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of behavioral disclosure. It only states the action 'create' without mentioning side effects, prerequisites, idempotency, or what happens on success. The agent can infer it's a write operation, but the description adds no extra behavioral context.
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 a specific verb and object. No extraneous information or filler 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?
This is a 7-parameter tool with no annotations and no output schema. The description covers the core purpose but omits behavioral details like error handling, return values, or potential overwrite behavior. It is minimally adequate for a create operation but leaves gaps.
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 baseline is 3. The description adds context that this is an SRV service locator, but it does not add any parameter-specific meaning beyond what the schema already provides.
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 clearly states the action (create) and resource (SRV record, noted as 'service locator') for a domain. It distinguishes itself from sibling tools like create_a_record or create_mx_record by specifying the record type.
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 implies the tool should be used when creating an SRV record, but it does not explicitly state when to prefer this over the generic create_dns_record or other specific record-create tools. There is no mention of alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_txt_recordB
Create a TXT record (text data) for a domain
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Time to live in seconds (optional) | |
| name | Yes | The record name (subdomain, use "@" for root domain) | |
| value | Yes | The text value (e.g., "v=spf1 include:example.com -all") | |
| domain | Yes | The domain name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It merely states 'Create a TXT record' without disclosing any side effects, idempotency, permissions, or irreversibility.
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 sentence of 10 words, immediately stating the action and object. No filler.
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?
Despite full schema coverage, the description lacks behavioral context and usage guidance. For a mutation tool with no annotations or output schema, this is insufficient to fully guide an agent.
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 provides complete descriptions for all four parameters (100% coverage), so the description adds no additional parameter semantics. Baseline 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 uses the specific verb 'Create' with the resource 'TXT record' and clarifies 'text data', clearly distinguishing it from sibling tools like create_a_record or create_cname_record.
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 implies usage for TXT records but does not explicitly state when to choose this over create_dns_record or other create_* tools. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dns_recordsA
Delete DNS records for a domain. Requires full record data matching the existing record.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The domain name | |
| records | Yes | Array of DNS records to delete (must include full record data) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry safety/behavioral disclosure. It states deletion and requires exact record data, but doesn't disclose irreversibility, failure semantics, or effect on existing records. This is a notable gap for a destructive 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?
Two sentences, front-loaded with the primary action. The prerequisite sentence is essential and not redundant. No filler.
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 structurally simple with two parameters fully documented, but no output schema or annotations. The description covers purpose and a key prerequisite, yet omits operational context like irreversibility or how to obtain exact record data (e.g., via list_dns_records). Overall adequate but with room for more guidance.
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 schema documents all parameters with 100% coverage, so baseline is 3. The description adds 'matching the existing record,' reinforcing the exact-match requirement already noted in the records schema description, but provides little additional syntax or format guidance.
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 opens with 'Delete DNS records for a domain,' a specific verb+resource statement. It clearly distinguishes this tool from list/create/update siblings since it is the only deletion tool. The addition about full record data further clarifies the 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 implies when to use: to remove DNS records for a domain. It gives a prerequisite ('Requires full record data matching the existing record') but doesn't explicitly reference sibling list_dns_records or state when not to use. Because it is the sole delete tool, the intended use is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dns_recordsA
List all DNS records for a domain
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The domain name to list DNS records for |
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 only states 'List all DNS records' without mentioning output format, pagination, permissions, or whether the operation is read-only. The phrase 'all' hints at scope but lacks substantive behavioral context.
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 concise sentence that is front-loaded and free of extraneous words. It efficiently communicates the core function without waste.
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 parameter and no output schema, so the description need not be elaborate. However, given the absence of annotations and output schema, the description misses an opportunity to clarify expected return values or any limits (e.g., pagination). It is adequate but not fully complete for an agent operating without additional 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 description coverage is 100%: the single 'domain' parameter is fully described in the schema. The description adds no additional meaning beyond what the schema already provides, so the baseline 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 uses the specific verb 'List' and clearly identifies the resource as 'all DNS records for a domain.' This distinguishes it from sibling tools that create, update, or delete DNS records, making its purpose immediately clear.
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 implies usage for reading DNS records, and sibling names make it the obvious choice for listing, but it does not explicitly state when to use this tool versus alternatives or mention any exclusions. No usage context such as 'use this to view records' is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dns_recordsC
Update DNS records for a domain
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The domain name | |
| records | Yes | Array of DNS records to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. It does not mention side effects (e.g., whether this replaces existing records, validates domains, or requires special permissions). The one-line description is essentially a restatement of the tool name and provides zero behavioral information.
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, concise sentence with no wasted words. It is front-loaded and efficient, though it is under-specified for the tool's complexity. Still, it earns a high score for conciseness.
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 a mutation with no annotations or output schema. The description fails to explain the tool's behavior, side effects, or return value. The schema covers parameters, but the overall context (e.g., what happens on update, whether it's idempotent) is missing, making the description inadequate for confident invocation.
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 parameters (domain and records) and even includes detailed value formats for MX/SRV records. The description adds no parameter-level meaning beyond the schema, so the baseline 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 clearly states the action ('Update') and the resource ('DNS records for a domain'). It distinguishes itself from sibling tools like create_dns_record and delete_dns_records by using the verb 'update'. The scope is clear and specific.
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 is provided on when to use this tool versus alternatives (e.g., create_dns_record or the specific create_* tools). The description gives no context about prerequisites, scenarios, or exclusions.
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.
10 tool updates
v0.1.0- First observed
create_a_record - First observed
create_aaaa_record - First observed
create_cname_record - First observed
create_dns_record - First observed
create_mx_record - First observed
create_srv_record - First observed
create_txt_record - First observed
delete_dns_records - First observed
list_dns_records - First observed
update_dns_records
TDQS
Scored across 10 tools
create_dns_record is ambiguous with the specific create_*_record tools; agents may not know which to use for a given record type. update_dns_records and delete_dns_records are clearly distinct, but the overlap between generic and specific creation tools creates confusion.
Naming is inconsistent: some tools use singular 'dns_record' (create_dns_record) while others use plural 'dns_records' (list, update, delete). Also, generic and specific creation tools mix verb styles (create_dns_record vs create_a_record) without a clear pattern.
10 tools is within a reasonable range for a DNS management server. However, the generic create_dns_record duplicates the specific create_*_record tools, making the count feel slightly padded. Still, the overall scope is well-covered.
The toolset covers the core DNS lifecycle: list, create, update, delete, plus specific types for common records (A, AAAA, CNAME, MX, SRV, TXT). Minor gaps exist, such as no get-single-record and missing less common record types, but these are workable.
Maintenance
Related MCP Connectors
- DoDomainOAuthio.dodomain
Connect custom domains via AI agents: DNS pre-flight checks, hand-off connect sessions and checks.
Live DNS lookups for agents: A/MX/TXT/SPF/CNAME/PTR with TTLs and DNSSEC, via Google Public DNS.
29 pay-per-call DNS, SEO, SSL, security, and dev tools for AI agents. x402, no API key.
Scan, fix, verify and monitor DNS: SPF, DMARC, DKIM, propagation, health, expiry. Validated fixes.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Gandi domains and LiveDNS records directly via the Gandi API v5. It supports comprehensive domain management operations and full CRUD functionality for various DNS record types.3MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Google Cloud DNS zones and records, supporting full CRUD operations for various record types and DNSSEC management. It provides secure service account authentication to interact directly with Google Cloud's global DNS infrastructure.MIT
- 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