Skip to main content
Glama
README.md
**English** | [한국어](README.ko.md)

# dynadot-mcp

[![npm version](https://img.shields.io/npm/v/dynadot-mcp)](https://www.npmjs.com/package/dynadot-mcp)
[![MCP Badge](https://lobehub.com/badge/mcp/mikusnuz-dynadot-mcp)](https://lobehub.com/mcp/mikusnuz-dynadot-mcp)

MCP (Model Context Protocol) server for the [Dynadot](https://www.dynadot.com) domain registrar API. Manage domains, DNS records, contacts, transfers, and more — all from your AI assistant.

## API compatibility

This release uses API3. Dynadot marks [API3 as scheduled for retirement](https://www.dynadot.com/domain/api-commands), without a shutdown date in that notice. Its replacement, [REST v2](https://www.dynadot.com/domain/api-document), is currently Beta; Dynadot warns that compatibility is not guaranteed and recommends avoiding critical production workflows during Beta.

REST v2 is **not implemented** here and there is no automatic fallback. Migration requires separate API-key/secret signing, per-command request/response mappings, handling accepted-but-pending operations, and replacing API3 bulk operations with single-object calls. Those paths need sandbox verification before they can safely replace this client's domain and payment operations. API3 credentials and sandbox mode continue to work only while Dynadot supports that API.

### DNS and nameservers

- `set_dns` uses `set_dns2`: main indexes `0..19`, subdomain indexes `0..99`, and the documented auxiliary `recordx` fields. Unknown fields and incomplete record groups are rejected before a request.
- DNS is replaced by default. Pass `add_dns_to_current_setting: "1"` to append; an empty `records` object clears records. Read existing DNS before preparing a replacement.
- `set_nameserver_ip` accepts `server_id` and `ips` (mapped to `ip0..ip9`). The former `host`/`ip` inputs still work: the exact hostname is resolved to one registered server ID; missing or ambiguous matches fail without an update.
- `delete_nameserver` accepts `server_id` (including comma-separated IDs) or `server_domain` (one exact nameserver hostname). `host` and `domain` remain aliases for that exact hostname, **not** a request to delete all nameservers under a parent domain.
- Free-form options cannot override the configured API key, command, or an explicitly selected domain/contact/folder.

## When to Use

Tell your AI assistant things like:

- **"Search for available domains"** — bulk-check up to 100 domain names at once with pricing
- **"Register a new domain"** — register or bulk-register domains
- **"Update DNS records for my domain"** — set A, AAAA, CNAME, MX, TXT, SRV records
- **"Transfer a domain to Dynadot"** — initiate inbound transfers with auth codes
- **"Set up email forwarding"** — configure email forwarding or MX records
- **"Renew my domain"** — renew before expiration
- **"Lock/unlock domain for transfer"** — manage transfer lock status
- **"Check domain WHOIS info"** — view and manage WHOIS privacy settings

> **AI Agent Integration**: See [`llms.txt`](llms.txt) for a machine-readable summary, or copy [`templates/CLAUDE.md`](templates/CLAUDE.md) / [`templates/AGENTS.md`](templates/AGENTS.md) into your project for automatic MCP discovery.

## Features

- **67 tools** covering Dynadot API3 domain management commands
- Domain search, registration, renewal, deletion
- DNS record management (A, AAAA, CNAME, MX, TXT, SRV)
- Nameserver configuration and DNSSEC
- Contact CRUD operations
- Domain transfers (in/out)
- WHOIS privacy, forwarding, locking
- Folder organization
- Marketplace: auctions, backorders, listings
- Account info and balance resources
- Sandbox mode for testing

## Installation

Requires Node.js 20 or newer, matching the MCP SDK's installed runtime dependencies.

```bash
npm install -g dynadot-mcp
```

Or run directly:

```bash
npx dynadot-mcp
```

## Configuration

Set the following environment variables:

| Variable | Required | Description |
|----------|----------|-------------|
| `DYNADOT_API_KEY` | Yes | Your Dynadot API key ([get one here](https://www.dynadot.com/account/domain/setting/api.html)) |
| `DYNADOT_SANDBOX` | No | Set to `true` to use the sandbox API (default: `false`) |

## Usage with Claude Code

Add to your Claude Code MCP settings (`~/.claude/settings.json` or project `.claude/settings.json`):

```json
{
  "mcpServers": {
    "dynadot": {
      "command": "npx",
      "args": ["-y", "dynadot-mcp"],
      "env": {
        "DYNADOT_API_KEY": "your_api_key_here"
      }
    }
  }
}
```

## Usage with Claude Desktop

Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "dynadot": {
      "command": "npx",
      "args": ["-y", "dynadot-mcp"],
      "env": {
        "DYNADOT_API_KEY": "your_api_key_here"
      }
    }
  }
}
```

## Available Tools

### Domain Management
| Tool | Description |
|------|-------------|
| `search_domain` | Check domain availability (up to 100 at once, with pricing and language options) |
| `register_domain` | Register a new domain |
| `bulk_register_domains` | Register multiple domains at once |
| `get_domain_info` | Get detailed domain information |
| `list_domains` | List all domains in account |
| `renew_domain` | Renew a domain |
| `delete_domain` | Delete a domain (grace period) |
| `restore_domain` | Restore a deleted domain (redemption period) |
| `push_domain` | Push domain to another Dynadot account |

### DNS
| Tool | Description |
|------|-------------|
| `get_dns` | Get DNS records for a domain |
| `set_dns` | Set DNS records (A, AAAA, CNAME, MX, TXT, etc.) |
| `set_nameservers` | Configure nameservers (up to 13) |
| `get_nameservers` | Get current nameservers |
| `register_nameserver` | Register a custom nameserver |
| `get_dnssec` | Get DNSSEC settings |
| `set_dnssec` | Set a DS record or DNSKEY, or clear DNSSEC |
| `add_nameserver` | Add a new nameserver entry |
| `set_nameserver_ip` | Update a nameserver's IP address |
| `delete_nameserver` | Delete nameserver IDs or one exact nameserver hostname |
| `list_registered_nameservers` | List all registered nameservers |

`set_dnssec` accepts either `key_tag`, `digest_type`, `digest`, and `algorithm`
(DS records from a DNS provider), or `flags`, `public_key`, and `algorithm`
(DNSKEY). These are string values. Incomplete or mixed records are rejected
before contacting Dynadot. To disable DNSSEC, pass only `domain` and `clear: true`.
`set_dns` supports up to 20 main records and 100 subdomain records (indexes 0–99).

### Contacts
| Tool | Description |
|------|-------------|
| `create_contact` | Create a new contact |
| `edit_contact` | Edit an existing contact |
| `delete_contact` | Delete a contact |
| `list_contacts` | List all contacts or get details |
| `set_contact_regional_setting` | Set EU/LV/LT regional contact settings |
| `manage_cn_audit` | Create or check .cn domain audit |
| `set_reseller_verification` | Set reseller WHOIS verification status |

### Transfers
| Tool | Description |
|------|-------------|
| `transfer_domain` | Initiate a domain transfer |
| `cancel_transfer` | Cancel a pending transfer |
| `get_transfer_status` | Check transfer status |
| `get_auth_code` | Get transfer auth/EPP code (with optional unlock and code regeneration) |
| `authorize_transfer_away` | Approve outgoing transfer |
| `set_auth_code` | Set transfer authorization code |
| `manage_domain_push` | View/accept/reject domain push requests |

### Settings
| Tool | Description |
|------|-------------|
| `set_privacy` | Set WHOIS privacy (full/partial/off) |
| `set_whois_contacts` | Set WHOIS contacts |
| `set_forwarding` | Set URL/stealth forwarding |
| `set_renew_option` | Set auto-renewal option |
| `lock_domain` | Lock or unlock domain for transfer protection |
| `set_domain_note` | Set domain note and folder |
| `set_parking` | Enable domain parking |
| `set_hosting` | Set Dynadot hosting (basic/advanced) |
| `set_email_forward` | Set email forwarding or MX records |
| `clear_domain_setting` | Clear a specific domain service setting |

### Folders
| Tool | Description |
|------|-------------|
| `create_folder` | Create a new folder |
| `delete_folder` | Delete a folder |
| `list_folders` | List all folders |
| `set_folder_settings` | Apply default settings to folder (WHOIS, NS, DNS, forwarding, etc.) |
| `rename_folder` | Rename a folder |

### Account
| Tool | Description |
|------|-------------|
| `get_account_info` | Get account information |
| `get_account_balance` | Check account balance |
| `set_account_defaults` | Set default account settings |
| `list_orders` | List order history |
| `get_order_status` | Check order status by ID |
| `check_processing` | Check for pending operations |
| `list_coupons` | List available coupons |
| `get_tld_price` | Get TLD pricing info |

### Marketplace
| Tool | Description |
|------|-------------|
| `get_auctions` | List open/closed auctions |
| `place_bid` | Place a bid on an auction |
| `manage_backorders` | Add/delete/list backorder requests |
| `set_for_sale` | List a domain for sale |
| `get_marketplace_listings` | View marketplace listings |
| `get_auction_details` | Get auction details and bid history |
| `manage_backorder_auctions` | View/bid on backorder auctions |
| `buy_expired_domain` | Browse/buy expired closeout domains |
| `buy_it_now` | Purchase a marketplace listing |
| `confirm_marketplace_action` | Confirm Afternic/Sedo actions |

## Resources

| URI | Description |
|-----|-------------|
| `dynadot://account` | Account information snapshot |
| `dynadot://balance` | Current account balance |
| `dynadot://domains` | Full domain list |

## Development

```bash
git clone https://github.com/mikusnuz/dynadot-mcp.git
cd dynadot-mcp
npm install
npm run dev
```

## License

MIT

TDQS

B3.3/5.0

Scored across 67 tools

Disambiguation3/5

Several tools have overlapping purposes: add_nameserver and register_nameserver appear to do the same thing; set_dns, set_dnssec, set_nameservers, and set_nameserver_ip all touch DNS/nameserver configuration; and place_bid vs manage_backorder_auctions (which also places bids) can confuse. Descriptions help, but the set has enough overlap to cause misselection.

Naming Consistency5/5

Nearly all 67 tools follow a snake_case verb_noun pattern (list_domains, set_dns, get_auth_code, manage_backorders), with only minor idiomatic deviations like buy_it_now and set_for_sale. The convention is highly consistent.

Tool Count1/5

67 tools is far beyond the typical 3-15 range and exceeds the 50+ threshold for an extreme mismatch. Even for a broad registrar API, this volume burdens tool selection and could be split into multiple focused servers.

Completeness5/5

The surface covers domain lifecycle, DNS/DNSSEC, nameservers, contacts, transfers, folders, account settings, orders, coupons, pricing, auctions, marketplace, backorders, and expired domains. No major gaps for the stated Dynadot management purpose.

Maintenance

ActivityNo data
ResponsivenessSyncing