Public MCP server
Three read-only tools, no account and no key, ten requests a minute per IP.
Plain markdown: /docs/mcp-public.md
A second MCP server with no account, no key and no sign-up.
- Endpoint
POST https://domduck.com/api/mcp/public - Authentication none
- Rate limit 10 requests a minute, per IP
- Server name
domduck-public, so a client with both connected can tell them apart
claude mcp add --transport http domduck-public https://domduck.com/api/mcp/public
{
"mcpServers": {
"domduck-public": {
"type": "http",
"url": "https://domduck.com/api/mcp/public"
}
}
}
What it reads, and what it will not do
This server answers from what Domduck has already collected. It never fetches a domain on demand. A domain nobody has ever looked up returns hasReading: false, and that is a real answer rather than an error: it says nobody has looked, not that the domain does not exist.
That single rule is why the tier can exist. It also means:
- One domain per call. There is no bulk argument and no bulk tool.
- No history. The dated series is the product and it cannot be backfilled by anyone who did not collect it.
- No list tool, no search tool, no ranking. You have to know the name already.
A free Domduck account adds the history, unlimited tracked domains with a daily re-read of every source, tags, alerts, the write tools, and 240 requests a minute instead of 10.
Tools
| Tool | Writes | What it does |
|---|---|---|
[lookup_domain](#lookup-domain) | no | Public reputation snapshot for one domain from Domduck's store: Domain Rating, Tranco rank, OpenPageRank, registration date, TLS certificate state and AI crawler policy. |
[get_ai_crawler_policy](#get-ai-crawler-policy) | no | Which of the eight tracked AI crawlers a domain's robots.txt admits, and whether it publishes an llms.txt. |
[list_sources](#list-sources) | no | What Domduck reads and what each source means, including the eight AI crawlers whose robots.txt policy is tracked. |
A worked call
curl -s https://domduck.com/api/mcp/public \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_ai_crawler_policy","arguments":{"domain":"stripe.com"}}}'
lookup_domain
Public reputation snapshot for one domain from Domduck's store: Domain Rating, Tranco rank, OpenPageRank, registration date, TLS certificate state and AI crawler policy. Returns hasReading false for a domain nobody has looked up yet, which is a real answer and not an error. One domain per call, and no history: the dated series is what a Domduck account is for.
| Argument | Type | Required | Notes |
|---|---|---|---|
domain | string | yes | A domain name. Scheme, www and trailing dots are stripped. |
get_ai_crawler_policy
Which of the eight tracked AI crawlers a domain's robots.txt admits, and whether it publishes an llms.txt. Three states per agent: allowed, disallowed, unspecified. Unspecified is NOT allowed, because a catch-all Disallow blocks an agent the file never names, so read effective for what is in force. Reads the last stored reading; it does not fetch the file.
| Argument | Type | Required | Notes |
|---|---|---|---|
domain | string | yes | A domain name. Scheme, www and trailing dots are stripped. |
list_sources
What Domduck reads and what each source means, including the eight AI crawlers whose robots.txt policy is tracked. A constant. Read it first: it is what lets a model interpret lookup_domain without guessing at field names or at which direction is better. Takes no arguments.