Skip to main content
Glama
mattcollins

Spaceship MCP Server

by mattcollins

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 build

Configure 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 start

Configuration

Environment Variables

Variable

Description

Required

SPACESHIP_API_KEY

Your Spaceship API key

Yes

SPACESHIP_API_SECRET

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 records

  • dnsrecords: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 name

  • records (array, required): Array of DNS records to create

    • name (string, required): The record name (subdomain)

    • type (string, required): The record type (A, AAAA, CNAME, MX, TXT, etc.)

    • value (string, required): The record value

    • ttl (number, optional): Time to live in seconds (default: 3600)

update_dns_records

Updates DNS records for a domain.

Parameters:

  • domain (string, required): The domain name

  • records (array, required): Array of DNS records to update

    • name (string, required): The record name (subdomain)

    • type (string, required): The record type (A, AAAA, CNAME, MX, TXT, etc.)

    • value (string, required): The record value

    • ttl (number, optional): Time to live in seconds (default: 3600)

delete_dns_records

Deletes DNS records from a domain.

Parameters:

  • domain (string, required): The domain name

  • records (array, required): Array of DNS records to delete

    • name (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 name

  • name (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 name

  • name (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 name

  • name (string, required): The record name (subdomain)

  • cname (string, required): The canonical name to point to

  • ttl (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 name

  • name (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 hostname

  • ttl (number, optional): Time to live in seconds (default: 3600)

create_srv_record

Creates an SRV record (service locator).

Parameters:

  • domain (string, required): The domain name

  • name (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 balancing

  • port (number, required): The port number

  • target (string, required): The target hostname

  • ttl (number, optional): Time to live in seconds (default: 3600)

create_txt_record

Creates a TXT record (text data).

Parameters:

  • domain (string, required): The domain name

  • name (string, required): The record name (subdomain, use "@" for root)

  • value (string, required): The text value

  • ttl (number, optional): Time to live in seconds (default: 3600)

Example Usage

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 command path is correct and points to the built dist/index.js file

  • Use 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:read and dnsrecords:write)

  • Ensure environment variables are properly set in your client configuration

Node version issues

  • Check your Node version with node --version

  • Ensure 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 start

Check your MCP client logs for additional error information.

Development

  • npm run dev - Watch mode for development

  • npm run build - Build the TypeScript code

  • npm start - Run the built server

Available Tools

10 tools
create_aaaa_recordA

Create an AAAA record (IPv6 address) for a domain

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTime to live in seconds (optional)
nameYesThe record name (subdomain, use "@" for root domain)
domainYesThe domain name
addressYesThe IPv6 address (e.g., "2001:db8::1")

TDQS

A3.5/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. 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTime to live in seconds (optional)
nameYesThe record name (subdomain, use "@" for root domain)
domainYesThe domain name
addressYesThe IPv4 address (e.g., "192.0.2.1")

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTime to live in seconds (optional)
nameYesThe record name (subdomain)
cnameYesThe canonical name to point to without trailing dot (e.g., "example.com")
domainYesThe domain name

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesThe domain name
recordsYesArray of DNS records to create

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 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTime to live in seconds (optional)
nameYesThe record name (subdomain, use "@" for root domain)
domainYesThe domain name
exchangeYesThe mail server hostname (e.g., "mail.example.com")
priorityYesThe priority/preference value (lower is higher priority, e.g., 10)

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 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTime to live in seconds (optional)
nameYesThe service name (e.g., "_autodiscover._tcp")
portYesThe port number
domainYesThe domain name
targetYesThe target hostname (e.g., "autodiscover.example.com")
weightYesThe weight for load balancing
priorityYesThe priority value (lower is higher priority)

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTime to live in seconds (optional)
nameYesThe record name (subdomain, use "@" for root domain)
valueYesThe text value (e.g., "v=spf1 include:example.com -all")
domainYesThe domain name

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesThe domain name
recordsYesArray of DNS records to delete (must include full record data)

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesThe domain name to list DNS records for

TDQS

A3.5/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 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.

Conciseness5/5

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.

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 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesThe domain name
recordsYesArray of DNS records to update

TDQS

C2.9/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness2/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 10 tool updatesv0.1.0
    • First observedcreate_a_record
    • First observedcreate_aaaa_record
    • First observedcreate_cname_record
    • First observedcreate_dns_record
    • First observedcreate_mx_record
    • First observedcreate_srv_record
    • First observedcreate_txt_record
    • First observeddelete_dns_records
    • First observedlist_dns_records
    • First observedupdate_dns_records

TDQS

B3.1/5.0

Scored across 10 tools

Disambiguation2/5

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 Consistency2/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers