namesilo-mcp
v0.1.0
Published
MCP server for the NameSilo API — manage domains, DNS, contacts, nameservers, privacy/lock, and portfolio from any MCP-capable agent.
Maintainers
Readme
NameSilo MCP
Manage your NameSilo domains from any MCP-capable agent — Claude Desktop, Cursor, VS Code (Copilot), Windsurf, and more.
One npx command. No app to install. Your API key stays local on your machine.
Published to npm —
npx -y namesilo-mcppulls the pre-built package from npmjs.com/package/namesilo-mcp on demand. Nogit clone, nonpm run build— just paste a config and restart your agent.
- List domains → inspect → manage DNS, nameservers, contacts
- Check availability & prices, register / renew / transfer domains
- DNS records (A, AAAA, CNAME, MX, TXT, SRV), DNSSec, registered name servers
- Privacy, registrar lock, auto-renew, portfolios, email forwarding, marketplace
Built for agents that chain tools. Every
list_*returns IDs you need for the next call. All NameSilo API XML responses are parsed to JSON.
1. Get your API key
- Log in at namesilo.com → Account → API Manager at namesilo.com/account_api.php.
- Generate a key. By default it is restricted to your current IP — either add your outbound IP to the allowlist or generate an unrestricted key.
- Use the
checkIptool once to discover the IP NameSilo sees if calls fail with code 200.
Keep it secret — you'll paste it into your MCP config, never into chat.
2. Add to your agent (copy-paste)
You need Node.js >= 18. Check with node -v.
All configs below use the env var NAMESILO_API_KEY (or --api-key flag). Optional NAMESILO_BASE_URL to override the API base (e.g., local mock).
Claude Desktop
Edit claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"namesilo": {
"command": "npx",
"args": ["-y", "namesilo-mcp@latest"],
"env": {
"NAMESILO_API_KEY": "your-namesilo-key"
}
}
}
}Tip:
@latestauto-updates on next agent restart. Pin to a version for reproducibility:["-y", "[email protected]"]. Barenamesilo-mcpalso resolves to@latest.
Restart Claude Desktop.
Cursor
Global (~/.cursor/mcp.json — all projects) or project-scoped (.cursor/mcp.json — commit without secrets):
{
"mcpServers": {
"namesilo": {
"command": "npx",
"args": ["-y", "namesilo-mcp@latest"],
"env": {
"NAMESILO_API_KEY": "your-namesilo-key"
}
}
}
}Settings → Tools & MCP will hot-reload — no restart needed.
VS Code (Copilot / MCP extension)
Create .vscode/mcp.json in your workspace (note servers + type: "stdio" — VS Code's variant):
{
"servers": {
"namesilo": {
"type": "stdio",
"command": "npx",
"args": ["-y", "namesilo-mcp@latest"],
"env": {
"NAMESILO_API_KEY": "your-namesilo-key"
}
}
}
}Claude Code (CLI)
claude mcp add namesilo -- npx -y namesilo-mcp@latest
# then in your config add env:
# NAMESILO_API_KEY=your-namesilo-key
# or: claude mcp add --env NAMESILO_API_KEY=your-namesilo-key namesilo -- npx -y namesilo-mcp@latestScope it: --scope project for the repo, --scope user for global.
Alternative: --api-key flag
If you cannot set env (e.g., testing locally):
{
"mcpServers": {
"namesilo": {
"command": "npx",
"args": ["-y", "namesilo-mcp@latest", "--api-key", "your-namesilo-key"]
}
}
}Windsurf / Cline / Continue / any mcp.json client
{
"mcpServers": {
"namesilo": {
"command": "npx",
"args": ["-y", "namesilo-mcp@latest"],
"env": {
"NAMESILO_API_KEY": "your-namesilo-key"
}
}
}
}All examples now use
@latestsonpxfetches the newest published version from npm on next restart. Replace with@0.1.0to lock.
Remote/HTTP clients: this package is stdio via npx today (no hosted URL). Wrap with mcp-remote if you need HTTP.
3. Verify it works
Ask your agent:
"Verify my NameSilo connection with checkIp and listDomains, then show my domain prices."
What you should see:
checkIp→{ ip: "…", apiCallOk: true }listDomains→{ code: 300, domains: [...] }with expiration infogetPrices→ per-TLD registration/renewal/transfer pricing
If checkIp says code 200 IP not on allowlist, add that IP to your allowlist at account_api.php or regenerate an unrestricted key. 110 means invalid key.
4. What you can do — example prompts
Copy these verbatim to your agent.
Inventory
"List all my NameSilo domains with listDomains, then getDomainInfo for the first one."
Check before buying
"Check if example.com and example.net are available with checkDomain, then show me prices for .com and .io with getPrices."
DNS management
"List DNS records for example.com, then add an A record for blog.example.com pointing to 1.2.3.4, then update its TTL."
Nameservers
"Change nameservers for example.com to ns1.cloudflare.com and ns2.cloudflare.com."
Lock & privacy
"Check registrar lock status for example.com, enable lock and privacy, and enable auto-renew."
Email forwarding
"List email forwards for example.com, then create [email protected] forwarding to [email protected]."
Portfolio
"Create a portfolio called clients, then move example.com into it, then list portfolios."
Renewal
"Check my account balance, then renew example.com for 2 years (ask me to confirm cost first)."
5. All tools (52)
Domains (15)
listDomains, getDomainInfo, checkDomain, getPrices, registerDomain, renewDomain, transferDomain, getAccountBalance, checkIp, listRegisteredNameServers, addRegisteredNameServer, updateRegisteredNameServer, deleteRegisteredNameServer, getDomainForwarding, forwardDomain
DNS (9)
listDnsRecords, addDnsRecord, updateDnsRecord, deleteDnsRecord, changeNameServers, dnsSecListRecords, addDnsSecRecord, deleteDnsSecRecord, getDomainDnsSecStatus
Registrar Lock / Privacy / Auto-Renew (9)
getRegistrarLockStatus, enableRegistrarLock, disableRegistrarLock, getPrivacyStatus, enablePrivacy, disablePrivacy, getAutoRenewStatus, enableAutoRenew, disableAutoRenew
Contacts & Portfolios (11)
listContacts, addContact, deleteContact, updateContact, changeDomainContacts, listPortfolios, getPortfolio, createPortfolio, deletePortfolio, addToPortfolio, removeFromPortfolio
Email Forwarding & Marketplace (8)
listEmailForwards, configureEmailForward, deleteEmailForward, getEmailForwardingAvailability, listMarketplaceSales, addMarketplaceSale, removeMarketplaceSale, searchMarketplace
6. How chaining works
The MCP is built so an agent never has to guess IDs.
- Discover →
listDomains,listContacts,listPortfolios,getPrices - Inspect →
getDomainInfo,listDnsRecords(getrrid),getRegistrarLockStatus - Mutate →
addDnsRecord→ returns detail;updateDnsRecord/deleteDnsRecordneedrrid - Protect →
enableRegistrarLock,enablePrivacy,enableAutoRenew - Transact →
checkDomain→getPrices→registerDomain/renewDomain(confirm cost first) - Organize →
createPortfolio→addToPortfolio
Tip: Always checkDomain before registerDomain. Check getAccountBalance before spending. DNS rrhost="" is root.
7. Env options
| Env var | Purpose | Default |
|---|---|---|
| NAMESILO_API_KEY | NameSilo API key (required) | — |
| NAMESILO_BASE_URL | Override API base (e.g., local mock) | https://www.namesilo.com/api |
- You can also pass
--api-key YOUR_KEYas a CLI arg instead of env. - If both are set,
--api-keywins. NAMESILO_BASE_URLis useful for testing with a mock server.
8. Troubleshooting
- Code 110 invalid key → key missing/invalid. Regenerate at Account → API Manager.
- Code 200 IP not on allowlist → your outbound IP isn't whitelisted. Run
checkIpto see the IP NameSilo sees, then add it at account_api.php or generate an unrestricted key. - Code 261/262 domain unavailable / not in account → domain not owned by this key or already taken.
- Money tools fail with insufficient balance → top up at NameSilo → Account → Add Funds, check
getAccountBalance. - Tool "Missing NameSilo API key" → you set the key in the wrong config file or forgot to restart. Copy the exact
envblock from §2; keep JSON valid. - Still stuck? Open an issue:
https://github.com/niyogi/namesilo-mcp/issueswith the tool name + error text (never paste your full key).
9. Security & privacy
- Your API key never leaves your machine — the MCP
fetchcallswww.namesilo.comdirectly from your localnpxprocess. No proxy, no telemetry. - Never log/commit your key. If you use project-scoped
.cursor/mcp.json, use${NAMESILO_API_KEY}placeholder in git and keep the real key in your global~/.cursor/mcp.json. - No
execorshell— all API calls areGETwith query params; XML is parsed withfast-xml-parser(pure JS, no native bindings). - Rate-limit aware — fetch has 20s timeout via
AbortController. - PII-safe: all upstream data is returned as JSON text content, never as injected instructions.
Report a security issue: please open a private issue or contact the maintainer — don't publish keys in bug reports.
10. Developing / contributing
This section is for contributors only — you don't need it to use the MCP.
git clone https://github.com/niyogi/namesilo-mcp
cd namesilo-mcp
npm install
npm run build # tsc -> dist/
npm run inspect # MCP Inspector (requires NAMESILO_API_KEY — still lists tools without it)
# or with mock:
NAMESILO_API_KEY=dummy NAMESILO_BASE_URL=http://localhost:17892 npx -y @modelcontextprotocol/inspector node dist/index.jsXML parsing choice: fast-xml-parser was chosen over xml2js because it is lightweight, pure JS, sync, actively maintained, and has no native dependencies — xml2js pulls in sax and is callback-based/heavier. The NameSilo API returns XML (?type=xml) which we parse to JSON for tool outputs.
Publish (maintainers):
npm run build
npm pack --dry-run # check files
npm publish --access public
# bump version first: npm version patch && npm publish --access public && git push --follow-tagsAPI docs: https://www.namesilo.com/api_reference.php.
License: MIT.
