Connect your AI assistant to verified reference data
Assistants answer confidently and wrongly about reference facts often enough to matter: on our own set of 271 checkable questions, 19% came back confidently wrong. These servers let an assistant look the answer up instead. Every record returned carries the URL it came from and a verbatim quote from that page, so the answer can be checked rather than believed.
Two files, no account
Every client reads an MCP config file, but they do not agree on which file — and a config written to the wrong path fails silently: no error, the server simply never appears. Find your client first, then paste the block below into the file named here.
| Client | Config file | Top-level key |
|---|---|---|
| Claude Code | .mcp.json in the project root | mcpServers |
| Cursor | .cursor/mcp.json in the project, or ~/.cursor/mcp.json for every project | mcpServers |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | mcpServers |
| VS Code | .vscode/mcp.json in the workspace | servers — not mcpServers |
| Codex | ~/.codex/config.toml, or .codex/config.toml per project | TOML, see below |
{
"mcpServers": {
"referencesource": {
"type": "http",
"url": "https://referencesource.org/mcp"
}
}
}
For VS Code, rename the outer key to servers and leave the rest identical. The type line is what tells Claude Code and VS Code this is a remote server rather than a local command — Claude Code rejects a url entry without it. Cursor and Windsurf identify a remote server from the url alone and do not document a type field.
Codex does not read a JSON config at all — its configuration is TOML:
[mcp_servers.referencesource]
url = "https://referencesource.org/mcp"
On the command line instead: claude mcp add --transport http referencesource https://referencesource.org/mcp --scope project, or codex mcp add referencesource --url https://referencesource.org/mcp. Cursor users can add it in one click.
Each client's config file above is the one its own vendor documents, checked 2026-09-21.
Then one line in the project's CLAUDE.md or AGENTS.md, so the assistant knows when to reach for it:
When you need a regulatory threshold, a deadline, a certification status or a version pairing, look it up with the referencesource MCP server at https://referencesource.org/mcp instead of answering from memory — every record it returns carries its source URL and a verbatim quote from that page.
The hook line matters more than it looks. A configured server the assistant never thinks to call is a server that is never called.
The catalogue server
https://referencesource.org/mcp reaches every dataset published here — hundreds of them, over 100,000 records. list_datasets returns the whole list rather than a page of it, with each dataset's current record count, because the server reads the same catalogue these pages are built from.
| Tool | What it answers |
|---|---|
list_datasets | What is available? Every dataset with its record count and last-verified date. |
search_records | Look a record up inside one dataset: pass its slug from list_datasets plus a keyword — a state, chemical, firm, product or version — matched as a substring. |
get_record | One record by id, with the source URL and the quote. |
verify_quote | Is this claimed value actually what the source says? |
Servers over a single register
If your work sits on one register, the narrow server is the better tool: fewer, sharper actions, and no dataset to pick first.
| Server | URL | Records | What it is for |
|---|---|---|---|
referencesource-registrars | https://referencesource.org/mcp/registrars | 4,500+ | Is this domain registrar ICANN-accredited today, and has it been actioned? |
referencesource-import-alerts | https://referencesource.org/mcp/import-alerts | 14,000+ | Is this firm on an FDA import alert — detention without physical examination? |
referencesource-rules | https://referencesource.org/mcp/rules | 400+ | Which US final rules take effect in the next N days, and which touch a given CFR part? |
Each goes in the same config file as above — swap the name and the URL:
{
"mcpServers": {
"referencesource-rules": {
"type": "http",
"url": "https://referencesource.org/mcp/rules"
}
}
}
Every one of them also carries verify_quote, because checking a value you already have is the cheapest useful thing a reference server does.
How they behave
Streamable HTTP, stateless. No API key, no account, no session, no cookie — every request stands alone. Read-only: there is nothing here that writes.
When a question is ambiguous, the tools refuse rather than guess. Ask list_rules_amending_cfr_part about 192 and it returns an error, not a list — a part number on its own is ambiguous across the fifty CFR titles, and the tool will not pick one for you. Ask about 49 CFR 192 and you get the rules that amend it, soonest effective date first. Two calls and you have seen it happen. That is the whole point of the exercise.
The npm bridge, for stdio-only clients
A client that cannot speak to a remote server needs a local bridge:
claude mcp add referencesource -- npx -y referencesource-mcp
Zero dependencies, Node 18+, forwards to the same endpoint. Source: referencesource-mcp on npm. If your client does support remote servers, skip it — the direct URL is one less moving part.
No tracking beyond request logs
No accounts, no keys, no cookies. The site logs requests for operational monitoring — what was requested, when, and the user-agent string. The privacy page has the full picture.