AgentDomains MCP server
MCP server for AgentDomains — free domains for the websites and
APIs AI agents build. It gives any MCP-speaking agent a real hostname under makes.fyi or
agentdomains.co, with DNS records, HTTPS, URL forwarding, and reverse proxying.
Two ways to run it: locally over stdio via npx, or against the hosted remote endpoint at
https://mcp.agentdomains.co.
[Add to Cursor]
[Install in VS Code]
The buttons add the hosted server with no key. Ask your agent to call signup, then it passes
the returned key as the api_key argument on later calls (or add an Authorization: Bearer
header to the config).
Install (stdio)
No install step — npx fetches it on demand:
Claude Code
Claude Desktop and other config-file clients
Add to claude_desktop_config.json (or your client's equivalent):
Remote endpoint
Streamable HTTP; send JSON-RPC over POST with your key in the Authorization header:
In Claude Code: claude mcp add --transport http agentdomains https://mcp.agentdomains.co --header "Authorization: Bearer adom_…"
No key yet? Connect without the header, call signup, and pass the returned key as the
api_key argument on every other tool call. The header wins when both are present.
Configuration
If you already use the Go CLI, its
~/.agentdomains/config.json is picked up automatically and no env var is needed.
No key yet? Call the signup tool — it needs no credentials and returns one. The key is
shown once and is never retrievable, so store it immediately. Accounts are provisional:
attach an email with attach_email and confirm it within 30 days or the account and its
domains are deleted.
The API key is never logged, printed, or included in any tool output.
Tools
Every label-scoped tool takes an optional domain (makes.fyi, the default, or
agentdomains.co).
Setting a forward or a proxy takes the hostname over. The A/AAAA/CNAME records
on the label itself are deleted in the same call and handed back as replaced_records,
so tell the user what moved. Sub-label records (www.myapp.makes.fyi) and TXT records
are left alone, and if the forward fails to come up the replaced records are restored
with new ids.
A claim and its first record stand or fall together. If claim_domain is given a
record it cannot create, nothing is claimed — fix the record and call again. Re-claiming
a name the account already holds answers 409 with owned:true, which means carry on.
On HTTPS
"Get me SSL" is not one operation here. Two honest paths:
set_proxy — the edge terminates TLS with its own certificate and proxies to your
backend. Nothing to install on the origin.
add_acme_challenge — publishes the DNS-01 TXT record so your own ACME client can
issue a Let's Encrypt certificate (needed for wildcards or hosts with no public port 80).
A plain public web server can just use HTTP-01 and needs no DNS record at all.
Compatibility
Any MCP client works. Verified shapes for the common ones:
- Claude Code —
claude mcp add (stdio or --transport http), as above.
- Claude Desktop —
mcpServers block in claude_desktop_config.json.
- OpenAI Agents SDK —
MCPServerStdio(params={"command": "npx", "args": ["-y", "agentdomains-mcp"]}), or MCPServerStreamableHttp against the remote URL.
- LangChain / LangGraph —
langchain-mcp-adapters: MultiServerMCPClient({"agentdomains": {"command": "npx", "args": ["-y", "agentdomains-mcp"], "transport": "stdio"}}).
- CrewAI —
MCPServerAdapter with the same stdio parameters.
- Anything else — point your client at
npx -y agentdomains-mcp over stdio, or at
https://mcp.agentdomains.co over Streamable HTTP.
Development
Requires Node 18+. The only runtime dependency is @modelcontextprotocol/sdk.
Related
License
FSL-1.1-Apache-2.0 — see LICENSE. Same terms as the CLI.
MCP Registry listing
This server is listed in the official MCP Registry
as io.github.tashfeenahmed/agentdomains-mcp — the index PulseMCP, Glama and other
agent-tool directories read from. The metadata is server.json in this repo.
Publishing is manual (GitHub Actions is not running on this account). On each npm
release, bump version in server.json and its packages[0].version to match
package.json, publish to npm first, then:
The registry checks that the npm package's mcpName matches name in server.json,
so the npm version named in server.json must already be published.
docs/publish-mcp-registry.yml is an optional GitHub Actions workflow that does the same
on a v* tag via GitHub OIDC. It only runs if moved to .github/workflows/ and Actions
is available on the account.