Anchored Registry · docs
Reach the directory from code
Every capability here is reachable four ways from one implementation — a page a person reads, a CLI, an HTTP JSON API, and an MCP server an AI agent calls. There is never a second code path per door, so the API can never disagree with the page it mirrors. This documents the two doors a machine uses.
HTTP JSON API
Public, no key, no login. Resolve any internet number resource to its registry, holder, and — where the registry publishes it — its sponsoring LIR. A resource outside RIPE resolves to its own registry rather than dead-ending, so an agent never states a wrong "unknown".
GET /api/resource/{key}
One resource by exact key — an AS number or an address/prefix. Returns registry, holder, and sponsor.
$ curl https://anchoredregistry.com/api/resource/AS15904
{
"found": true,
"registry": "ripe",
"resource": { "kind": "asn", "key": "AS15904",
"status": "ASSIGNED", "country": "DE" },
"holder": { "name": "Hallertau.Net e.V.", "resources": 2 },
"sponsor": { "name": "Bisping & Bisping GmbH & Co KG" }
}GET /api/search?q={query}
One box: an AS number, an address, a prefix, an organisation, or a handle. Interprets the query and returns the matches.
$ curl 'https://anchoredregistry.com/api/search?q=AS15904'
{
"interpretation": "AS15904, in the RIPE registry",
"registryPublishesSponsorship": true,
"resources": [ { "key": "AS15904",
"holder": "Hallertau.Net e.V.",
"sponsor": "Bisping & Bisping GmbH & Co KG" } ]
}GET /api/sponsor/{handle}
Everything under one sponsoring LIR: how much it holds, and how that has moved over time.
$ curl https://anchoredregistry.com/api/sponsor/ORG-BBCo1-RIPE
{
"found": true,
"sponsor": { "name": "Bisping & Bisping GmbH & Co KG" },
"holds": { "total": 15, "asns": 5, "addresses": 10,
"distinctHolders": 5 }
}Every value is rebuilt daily from RIPE's published database. What is withheld is bulk: the daily movement history is reachable one resource at a time and never as a file, because it is the one thing no other source can reconstruct. See /coverage for what each registry does and does not publish.
For an AI agent
An assistant that arrives without a person should read /llms.txt — it names the site, states that sponsorship data is RIPE-only, and points at the API above. AI crawlers are allowed by name in robots.txt, on purpose: a model that cites this directory is reach we have no other lawful way to get.
MCP server
The directory ships an MCP server so an agent can call it as a tool instead of scraping HTML. It exposes resource lookup, sponsor lookup, search, and one tool that reports what the dataset cannot answer — so an assistant states the absence of history before the first snapshot as exactly that, not as an absence of movement.
Today the server runs from source and reads the daily dataset from local files — so it is a clone-and-run, not a hosted endpoint yet. For most integrations the HTTP API above is the simpler door; use MCP when you want the agent to hold the tools directly.
# Claude Code — add the server (run from a checkout of the repo)
claude mcp add anchoredregistry -- \
python3 -m anchoredregistry mcp \
--data /path/to/anchoredregistry/site/data/directory.jsonl \
--history /path/to/anchoredregistry/site/data/history.jsonl# or, any MCP client — the equivalent config
{
"mcpServers": {
"anchoredregistry": {
"command": "python3",
"args": ["-m", "anchoredregistry", "mcp",
"--data", "…/site/data/directory.jsonl",
"--history", "…/site/data/history.jsonl"]
}
}
}The server speaks JSON-RPC over stdio, standard library only — nothing to install beyond Python 3 and the checkout.
Need a change made to the registry, not just read from it? That is the sponsoring-LIR service. Start on the home page.