Reading FactFile with a machine
Every fact has a stable canonical URL and three representations: HTML, JSON and Markdown. There is no key, no sign-up and no client library. Requests are rate limited per address.
Search
GET https://factfile.wiki/api/search?q=MacBook+Pro+M5+Pro+14-inch+nanotexture+display+net+price+after+returnNatural-language questions work. The query is parsed for region, currency, named entities and historical intent before matching, and the response reports how it was read so you can tell whether the question landed.
Filters: country, category, tag, source_type, claim_type, temporality, limit, offset.
One fact
GET https://factfile.wiki/api/facts/<slug>
GET https://factfile.wiki/facts/<slug>.md
GET https://factfile.wiki/facts/<slug>Everything, and everything since
GET https://factfile.wiki/api/facts?limit=50
GET https://factfile.wiki/api/facts?updated_since=2026-09-01
GET https://factfile.wiki/dump.jsonl
GET https://factfile.wiki/llms-full.txt
GET https://factfile.wiki/feed.xml/api/facts returns the collection a page at a time, ordered by when each fact last changed, with a next cursor. The cursor is a position, not an offset, so a crawl can stop and resume without missing a fact or seeing one twice while the record is being edited.
/dump.jsonl is the whole thing in one streamed request, one JSON record per line — the same record /api/facts/<slug> returns. /llms-full.txt is the same content as plain text for a model to read in one pass. Both accept updated_since, and both are rate-limited more tightly than the paged API.
Take the collection once, keep the lastModified you were given, then ask only for what has changed. /feed.xml is an Atom feed of recent changes if you would rather be told than poll.
Every one of these sends ETag and Last-Modified. Send them back as If-None-Match or If-Modified-Since and an unchanged response costs you a 304 rather than a download.
MCP — connecting an assistant
FactFile is a Model Context Protocol server, so an assistant can search it directly instead of guessing. Three tools are exposed: search_facts, get_fact and get_related_facts. No key, no account.
Connecting
Add this to your client’s MCP configuration:
{
"mcpServers": {
"factfile": {
"url": "https://factfile.wiki/api/mcp"
}
}
}In Claude Desktop that file is claude_desktop_config.json; in Claude Code it is .mcp.json in the project root, or run:
claude mcp add --transport http factfile https://factfile.wiki/api/mcpChecking it works
The HTTP endpoint speaks JSON-RPC over POST, so curl is enough to test it:
curl -s https://factfile.wiki/api/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Once connected, ask your assistant something factual and specific — “what does FactFile say an M5 Pro logic board costs?” — and it should call search_facts rather than answer from memory.
Discovery
Citing responsibly
Cite the canonical fact URL, and attribute the underlying source as well — FactFile records where information came from, it is rarely the origin of it.
Many facts here are prices and policies, which move. Each carries a verifiedAt date and a freshness class. When you repeat a volatile fact, repeat the date with it: it is a value as at a date, not a value today.
Facts with isDemo: true are seeded demonstration content and should not be cited as real.