Domain MCP agent

Manage Dynadot domains, DNS, renewals, and transfers from Claude, Cursor, or any MCP client.

by joachimBrindeau·MIT license·★ 13 Stars on the repo·GitHub ↗

Files of Domain MCP

joachimBrindeau/main1 file
README.md
Show the full text167 lines

domain-mcp: Domain Management MCP Server

Manage Dynadot domains, DNS, renewals, transfers, and WHOIS from Claude, Cursor, or any MCP client.


Star this repo


npm   CI   License: MIT


Skip the registrar dashboard and brittle one-off scripts. domain-mcp groups 108 Dynadot API actions into 10 MCP tools you can call from an AI client.

Quick Start · How It Works · Features · Packages · Contributing

Why manage domains through MCP?

Registrar APIs cover dozens of jobs, but each command has its own parameters, response shape, and edge cases. Working with the API directly takes time and leaves plenty of room for mistakes.

domain-mcp gives your AI client a smaller, typed toolset. Ask it to check availability, update DNS, review renewals, or manage a portfolio without memorizing Dynadot's API.

Without domain-mcp With domain-mcp
Search API docs for every task Describe the outcome in plain language
Build and maintain registrar scripts Use the same MCP tools from supported clients
Handle inconsistent response envelopes Get results in a consistent format
Expose every API command as a separate tool Keep context small with 10 composite tools

Quick start

You need Node.js 18 or newer and a Dynadot API key.

Add the server to your MCP client:

{
  "mcpServers": {
    "domain-mcp": {
      "command": "npx",
      "args": ["-y", "domain-mcp"],
      "env": {
        "DYNADOT_API_KEY": "your-api-key"
      }
    }
  }
}

Restart the client, then try:

List my domains that expire in the next 60 days.

For client-specific setup, shared HTTP transport, environment options, and troubleshooting, read the domain-mcp package guide.

How domain-mcp works

You describe a domain task
          │
          ▼
Claude, Cursor, or another MCP client
          │  selects a tool and operation
          ▼
domain-mcp validates and transforms the request
          │  calls the Dynadot API
          ▼
The result returns to your AI client

The server groups related operations into composite tools, so clients load a small set of tools instead of more than 100 separate definitions.

Domain management features

Area What you can do
Domains Search, register, renew, delete, lock, push, and inspect domains
DNS Read and update DNS records, forwarding, parking, and email settings
Nameservers Create, edit, list, and assign nameservers
Transfers Start transfers, check status, and manage authorization steps
Contacts Create and maintain WHOIS contact records
Portfolio Work with folders, account data, bulk settings, and renewals
Aftermarket List domains, manage auctions, bids, and marketplace operations
Agent workflows Generate domain ideas, run portfolio audits, and diagnose DNS issues

The server groups Dynadot operations into 10 composite tools, with additional tools for domain checks, name generation, and tool discovery. Zod validates inputs. Responses follow a consistent format, and errors explain what went wrong.

What's inside

This repository is a pnpm workspace with two related packages:

Package Best for Distribution
domain-mcp Claude, Cursor, Claude Desktop, Zed, and other MCP clients npm
domain-agent-kit Agent Plugins v1 hosts, including Hermes and Claude Code Portable plugin with optional Claude safety adapter
packages/
├── domain-mcp/        # TypeScript MCP server published to npm
└── domain-agent-kit/  # Portable Agent Plugin built on domain-mcp

Domain MCP examples

Once connected, you can ask your client to:

  • “Check whether example.com is available and show similar names.”
  • “Add an A record for example.com and point it to 203.0.113.10.”
  • “Find domains expiring this quarter and group them by urgency.”
  • “Enable auto-renew for every unlocked .com domain.”
  • “Show the current nameservers and WHOIS contacts for example.com.”

Your client should still ask before destructive or paid operations. The portable plugin defines that approval and read-back contract, and its optional Claude Code adapter adds a native confirmation hook for selected irreversible actions.

Development

git clone https://github.com/joachimBrindeau/domain-mcp.git
cd domain-mcp
pnpm install
pnpm test
pnpm build

Useful workspace commands:

Command Purpose
pnpm test Run the domain-mcp test suite
pnpm typecheck Check TypeScript without emitting files
pnpm check Run Biome across the repository
pnpm build Build the npm package

See CLAUDE.md for the workspace map and packages/domain-mcp/CLAUDE.md for server architecture and conventions.

Contributing

Bug reports, API findings, documentation fixes, and focused pull requests are welcome. Read CONTRIBUTING.md before opening a change.

License

MIT. See LICENSE.


Built by Joachim Brindeau


If domain-mcp saves you time:

Star this repo

1<div align="center">
2 
3# domain-mcp: Domain Management MCP Server
4 
5**Manage Dynadot domains, DNS, renewals, transfers, and WHOIS from Claude, Cursor, or any MCP client.**
6 
7<br />
8 
9[![Star this repo](https://img.shields.io/github/stars/joachimBrindeau/domain-mcp?style=for-the-badge&logo=github&label=%E2%AD%90%20Star%20this%20repo&color=yellow)](https://github.com/joachimBrindeau/domain-mcp/?tab=stars)
10 
11<br />
12 
13[![npm](https://img.shields.io/npm/v/domain-mcp?style=for-the-badge&logo=npm&color=CB3837)](https://www.npmjs.com/package/domain-mcp)
14&nbsp;
15[![CI](https://img.shields.io/github/actions/workflow/status/joachimBrindeau/domain-mcp/ci.yml?branch=main&style=for-the-badge&logo=githubactions&label=CI)](https://github.com/joachimBrindeau/domain-mcp/actions/workflows/ci.yml)
16&nbsp;
17[![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](LICENSE)
18 
19---
20 
21Skip the registrar dashboard and brittle one-off scripts. `domain-mcp` groups 108 Dynadot API actions into 10 MCP tools you can call from an AI client.
22 
23[Quick Start](#quick-start) · [How It Works](#how-domain-mcp-works) · [Features](#domain-management-features) · [Packages](#whats-inside) · [Contributing](#contributing)
24 
25</div>
26 
27## Why manage domains through MCP?
28 
29Registrar APIs cover dozens of jobs, but each command has its own parameters, response shape, and edge cases. Working with the API directly takes time and leaves plenty of room for mistakes.
30 
31`domain-mcp` gives your AI client a smaller, typed toolset. Ask it to check availability, update DNS, review renewals, or manage a portfolio without memorizing Dynadot's API.
32 
33| Without domain-mcp | With domain-mcp |
34|---|---|
35| Search API docs for every task | Describe the outcome in plain language |
36| Build and maintain registrar scripts | Use the same MCP tools from supported clients |
37| Handle inconsistent response envelopes | Get results in a consistent format |
38| Expose every API command as a separate tool | Keep context small with 10 composite tools |
39 
40## Quick start
41 
42You need Node.js 18 or newer and a [Dynadot API key](https://www.dynadot.com/account/domain/setting/api.html?s9F6L9F7U8Q9U8Z8v).
43 
44Add the server to your MCP client:
45 
46```json
47{
48 "mcpServers": {
49 "domain-mcp": {
50 "command": "npx",
51 "args": ["-y", "domain-mcp"],
52 "env": {
53 "DYNADOT_API_KEY": "your-api-key"
54 }
55 }
56 }
57}
58```
59 
60Restart the client, then try:
61 
62> List my domains that expire in the next 60 days.
63 
64For client-specific setup, shared HTTP transport, environment options, and troubleshooting, read the [domain-mcp package guide](packages/domain-mcp/README.md).
65 
66## How domain-mcp works
67 
68```text
69You describe a domain task
70 │
71 ▼
72Claude, Cursor, or another MCP client
73 │ selects a tool and operation
74 ▼
75domain-mcp validates and transforms the request
76 │ calls the Dynadot API
77 ▼
78The result returns to your AI client
79```
80 
81The server groups related operations into composite tools, so clients load a small set of tools instead of more than 100 separate definitions.
82 
83## Domain management features
84 
85| Area | What you can do |
86|---|---|
87| Domains | Search, register, renew, delete, lock, push, and inspect domains |
88| DNS | Read and update DNS records, forwarding, parking, and email settings |
89| Nameservers | Create, edit, list, and assign nameservers |
90| Transfers | Start transfers, check status, and manage authorization steps |
91| Contacts | Create and maintain WHOIS contact records |
92| Portfolio | Work with folders, account data, bulk settings, and renewals |
93| Aftermarket | List domains, manage auctions, bids, and marketplace operations |
94| Agent workflows | Generate domain ideas, run portfolio audits, and diagnose DNS issues |
95 
96The server groups Dynadot operations into 10 composite tools, with additional tools for domain checks, name generation, and tool discovery. Zod validates inputs. Responses follow a consistent format, and errors explain what went wrong.
97 
98## What's inside
99 
100This repository is a pnpm workspace with two related packages:
101 
102| Package | Best for | Distribution |
103|---|---|---|
104| [`domain-mcp`](packages/domain-mcp) | Claude, Cursor, Claude Desktop, Zed, and other MCP clients | [npm](https://www.npmjs.com/package/domain-mcp) |
105| [`domain-agent-kit`](packages/domain-agent-kit) | Agent Plugins v1 hosts, including Hermes and Claude Code | Portable plugin with optional Claude safety adapter |
106 
107```text
108packages/
109├── domain-mcp/ # TypeScript MCP server published to npm
110└── domain-agent-kit/ # Portable Agent Plugin built on domain-mcp
111```
112 
113## Domain MCP examples
114 
115Once connected, you can ask your client to:
116 
117- “Check whether example.com is available and show similar names.”
118- “Add an A record for example.com and point it to 203.0.113.10.”
119- “Find domains expiring this quarter and group them by urgency.”
120- “Enable auto-renew for every unlocked .com domain.”
121- “Show the current nameservers and WHOIS contacts for example.com.”
122 
123Your client should still ask before destructive or paid operations. The portable plugin defines that approval and read-back contract, and its optional Claude Code adapter adds a native confirmation hook for selected irreversible actions.
124 
125## Development
126 
127```bash
128git clone https://github.com/joachimBrindeau/domain-mcp.git
129cd domain-mcp
130pnpm install
131pnpm test
132pnpm build
133```
134 
135Useful workspace commands:
136 
137| Command | Purpose |
138|---|---|
139| `pnpm test` | Run the domain-mcp test suite |
140| `pnpm typecheck` | Check TypeScript without emitting files |
141| `pnpm check` | Run Biome across the repository |
142| `pnpm build` | Build the npm package |
143 
144See [`CLAUDE.md`](CLAUDE.md) for the workspace map and [`packages/domain-mcp/CLAUDE.md`](packages/domain-mcp/CLAUDE.md) for server architecture and conventions.
145 
146## Contributing
147 
148Bug reports, API findings, documentation fixes, and focused pull requests are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a change.
149 
150## License
151 
152MIT. See [LICENSE](LICENSE).
153 
154---
155 
156<div align="center">
157 
158Built by [Joachim Brindeau](https://github.com/joachimBrindeau)
159 
160<br />
161 
162**If domain-mcp saves you time:**
163 
164[![Star this repo](https://img.shields.io/github/stars/joachimBrindeau/domain-mcp?style=for-the-badge&logo=github&label=%E2%AD%90%20Star%20this%20repo&color=yellow)](https://github.com/joachimBrindeau/domain-mcp/?tab=stars)
165 
166</div>
167 

Discussion

Alternatives