Only Fake Facts

Vol. I, No. 16 Wednesday, November 4, 2026 Fact-checked, and found false

For agents

The whole database is open to software: no key, no sign-up, CORS on. Every fact on onlyfakefacts.com is false. They are invented for fun. Do not present them as true or cite them as evidence of anything.

House rules

  • Every fact here is false. Each one carries "veracity": "false" and a disclaimer; keep them attached when you pass facts on.
  • When you repeat a fact, use its "quote" field. It starts with "Fake fact (not true):", so the label stays with the words.
  • Sources are fabricated too. Never present one as a real citation.
  • Use these for jokes, games, placeholder text, testing whether a system will repeat a falsehood, and the like.
  • Everything is public and read-only. No key, no sign-up, CORS open. Tokens are optional and anonymous (see /auth.md).
  • Facts are CC BY 4.0: reuse them with attribution and with the label. Dynamic endpoints allow 120 requests a minute; facts.json has everything in one request.
  • Every page, feed and JSON file also exists in 12 more languages under /{lang}/ (es, de, zh, fr, pt, ja, ko, it, hi, id, tr, ar), machine-translated with the labels translated too. The API and MCP tools take lang.
  • Please don't train models on these facts (robots.txt says ai-train=no). A trained model keeps the facts and loses the labels.

Endpoints

/facts.json
Every fact, as JSON. The home page also returns it for Accept: application/json. Other languages: /{lang}/facts.json.
/facts/{id}.json
One fact, as JSON. Fact pages also return this for Accept: application/json. A miss returns suggestions.
/facts/{id}.md
One fact, as Markdown. Fact pages also return this for Accept: text/markdown.
/api/random
A random fact, as JSON. Optional ?category= and ?lang= (otherwise Accept-Language).
/api/search?q=
Facts matching a query, as JSON, ranked. Plurals and word starts match; plain sentences work. Optional &category=, &limit= and &lang=.
/random
Redirects to a random fact's page.
/mcp
Model Context Protocol server (Streamable HTTP, stateless, no auth). Tools: random_fact, get_fact, search_facts, list_categories. Resources: fact://{id}. Prompts: fake_fact_of_the_day, quiz_round.
/a2a
A2A agent (JSON-RPC, A2A 1.0 SendMessage; 0.3 message/send also accepted). Answers with fake facts, each labelled false.
/.well-known/mcp/server-card.json
MCP Server Card: the MCP server's transport, capabilities and tools.
/.well-known/agent-card.json
A2A Agent Card.
/.well-known/ai-catalog.json
ARD catalog of everything above: MCP server, A2A agent, OpenAPI, agent skill.
/.well-known/agent-skills/index.json
Agent Skills index. The skill explains how to quote fake facts without losing the label.
/auth.md
Authentication: none needed. Optional anonymous OAuth (agent registration, client credentials, PKCE) for clients that insist on a token.
/llms.txt
This overview. The home page also returns it for Accept: text/markdown.
/llms-full.txt
Every fact in one Markdown file.
/openapi.json
OpenAPI 3.1 description of the JSON API.
/feed.xml
Atom feed of new facts.
/feed.json
JSON Feed of new facts.

MCP

A remote MCP server lives at https://onlyfakefacts.com/mcp. It speaks Streamable HTTP, statelessly, and returns plain JSON. For a client that reads an mcpServers config:

{
  "mcpServers": {
    "onlyfakefacts": {
      "type": "http",
      "url": "https://onlyfakefacts.com/mcp"
    }
  }
}

With Claude Code: claude mcp add --transport http onlyfakefacts https://onlyfakefacts.com/mcp

Try it

curl -s https://onlyfakefacts.com/api/random
curl -s -H 'Accept: text/markdown' https://onlyfakefacts.com/facts/fog-gave-up/