{
  "markdown": "# Football Atlas — MCP server\n\n> The Laws of the Game and world football's major competitions, every claim cited to primary sources\n\n[![smithery badge](https://smithery.ai/badge/futbolatlas/futbolatlas)](https://smithery.ai/servers/futbolatlas/futbolatlas)\n\nA **remote MCP server** over a curated knowledge graph. Every claim it\nreturns is bound to a registered source: the tools hand back claims *with*\ntheir citations and a confidence value, so an agent can show its work\ninstead of asserting.\n\nNothing to install. It is a hosted streamable-HTTP endpoint:\n\n```\nhttps://futbolatlas.app/mcp\n```\n\nAlso listed on [Smithery](https://smithery.ai/servers/futbolatlas/futbolatlas).\n\n## Add it to a client\n\n**Claude Code**\n\n```bash\nclaude mcp add --transport http futbol-atlas https://futbolatlas.app/mcp\n```\n\n**Claude Desktop / any client reading `mcpServers`**\n\n```json\n{\n  \"mcpServers\": {\n    \"futbol-atlas\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://futbolatlas.app/mcp\"\n    }\n  }\n}\n```\n\nNo API key, no account, no auth. Read-only.\n\n**Check it answers, without any client at all:**\n\n```bash\ncurl -s https://futbolatlas.app/mcp \\\n  -H 'Content-Type: application/json' \\\n  -H 'Accept: application/json, text/event-stream' \\\n  -H 'mcp-protocol-version: 2025-06-18' \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}'\n```\n\n## Tools\n\nEight, each with an `outputSchema`, each returning `structuredContent`.\n\n| tool | arguments | what it does |\n|---|---|---|\n| `get_overview` | — | Corpus overview: what this instance knows, counts by type, published tags, freshness. **Start here** when you land and do not yet know whether this corpus can answer your question. |\n| `search` | `query`, `limit?` | Full-text search over the knowledge graph. Accent- and apostrophe-insensitive, so query in the user's own words; every hit carries its relevance score and the fields it matched. |\n| `answer` | `question` | Answer a question from the corpus. Returns the matched object's claims with sources and confidence — **never an unsourced answer**. |\n| `get_entity` | `id` | Fetch one knowledge object by id, with its claims and the sources each claim cites. |\n| `get_topic` | `tag` | List the knowledge objects carrying a tag (topics are content-backed tags). |\n| `get_related` | `id` | Graph neighbours of an object: outgoing and incoming relations, each with its relation type. |\n| `get_sources` | `object_id?` | The whole source registry, or just the sources cited by one object. Use it to judge the corpus before trusting it. |\n| `get_latest` | `limit?` | Most recently verified knowledge objects — a freshness signal. |\n\nThe intended path is `get_overview` → `search` or `answer` → `get_entity`\n→ `get_related`. `get_overview` exists because an agent that has just\narrived needs to know whether this corpus can help *before* it spends a\ncall guessing.\n\n## What is in the corpus\n\n| | |\n|---|---|\n| knowledge objects | **141** |\n| registered sources | **132** |\n| published topics | **96** |\n\n| type | objects |\n|---|---|\n| entity | 114 |\n| glossary | 12 |\n| faq | 7 |\n| guide | 5 |\n| comparison | 3 |\n\nSubject matter: the seventeen Laws of the Game as the IFAB writes them, VAR protocol and its review categories, competition formats and qualification paths, offside, handball and the wording that decides them.\n\n### Questions it is built to answer\n\n- *What exactly does Law 11 say about a player's position at the moment the ball is played?*\n- *When may VAR intervene, and when is it forbidden to?*\n- *How does a team qualify for the Champions League league phase?*\n\n## What an answer actually looks like\n\nA real call against the live endpoint — `answer` with\n*\"when can VAR intervene\"* — returns this `structuredContent`, trimmed:\n\n```json\n{\n  \"answered\": true,\n  \"entity\": {\n    \"id\": \"var\",\n    \"name\": \"VAR (Video Assistant Referee)\",\n    \"evidence_tier\": \"primary\",\n    \"confidence\": 0.94,\n    \"last_verified\": \"2026-08-08\",\n    \"canonical_url\": \"https://futbolatlas.app/k/var\"\n  },\n  \"claims\": [\n    {\n      \"text\": \"The VAR may assist the referee only for a clear and obvious error or a serious missed incident in these match-changing categories: goal/no goal, penalty/no penalty, direct red card, and mistaken identity when the referee cautions or sends off the wrong player of the offending team.\",\n      \"sources\": [{ \"title\": \"Video Assistant Referee (VAR) protocol (Laws of the Game 2026/27)\" }]\n    }\n  ]\n}\n```\n\nNote what travels with the answer: the **evidence tier**, a **confidence**,\nthe date it was **last verified**, and the **source behind the claim** — not\nas prose an agent has to parse, but as fields it can act on. An agent can\ndecline to use a weak claim, or cite the primary source directly.\n\nWhen the corpus cannot answer, `answered` is `false`. It does not\nimprovise, and the miss is recorded so the gap can be filled.\n\n## Machine-readable surfaces\n\nThe MCP endpoint is one of several. The same corpus is served as plain\nfiles an agent can read directly:\n\n| surface | what it is |\n|---|---|\n| [`/llms.txt`](https://futbolatlas.app/llms.txt) | the index, as `text/plain` |\n| [`/llms-full.txt`](https://futbolatlas.app/llms-full.txt) | the whole corpus in one file |\n| [`/ai-index.json`](https://futbolatlas.app/ai-index.json) | every surface this instance publishes, with its content type |\n| [`/api/index.json`](https://futbolatlas.app/api/index.json) | one JSON document per knowledge object |\n| [`/api/sources.json`](https://futbolatlas.app/api/sources.json) | the source registry, in full |\n| [`/.well-known/mcp/server.json`](https://futbolatlas.app/.well-known/mcp/server.json) | this server's manifest |\n\nEach knowledge object has a human page and a machine twin at the same id,\nwith a canonical URL that agrees across all of them.\n\n### The `version` in this repository's `server.json`\n\nIt is the **corpus** version, not the framework's (ADR-017): a corpus that\ngrew by forty objects has to be republishable without waiting for someone\nto cut a software release, and a framework patch must not announce \"new\nversion\" for corpora that did not change. The authoritative value is the\none the site generates and serves — the `version` field of\n[`/.well-known/mcp/server.json`](https://futbolatlas.app/.well-known/mcp/server.json),\nalongside `_citarium.corpus_version`.\n\nThe copy in this repository is **maintained by hand**, and it drifted: it\nsat at `0.6.5` while the site served `2026.809.141`. Before publishing to\nthe MCP Registry, copy the served value. The two files are otherwise NOT\nidentical on purpose — this one carries `?via=registry` on its remote and\nthe served one carries `?via=manifest`, so the traffic each channel sends\ncan be told apart.\n\n## Behaviour worth knowing before you integrate\n\n- **`POST` only.** Every other method answers `405` with an `Allow: POST, OPTIONS` header.\n- **Rate limit:** 120 requests per minute per client, counted in a shared\n  store, published on every response as `RateLimit-Limit`,\n  `RateLimit-Remaining` and `RateLimit-Reset` (all three exposed via CORS).\n  It fails **open**: if the store is unreachable the request is served.\n- **Malformed input** gets a spec-correct JSON-RPC error — `-32700` for\n  unparseable bodies, `-32602` for an unknown tool — never an HTML error page.\n- **Request bodies are capped** and validated before transport.\n\n## Privacy\n\nNo accounts, no cookies, no ads. Usage is measured in aggregate with\ndaily-rotating hashed identifiers and a 200-day retention; raw IPs are\nnever stored. Full policy: [PRIVACY.md](./PRIVACY.md).\n\n## Provenance and licence\n\nKnowledge content is **CC-BY-4.0**: use it, cite it. The source registry is\npublic precisely so a claim can be checked rather than trusted —\n`get_sources` returns what any given claim rests on.\n\nClaims carry an evidence tier and a `last_verified` date. Where the\nevidence is weaker, the object says so rather than rounding up.\n\n## How it is built\n\nCompiled and served by Citarium, a source-available framework for turning a\nknowledge graph into a website, an API, an MCP server and agent-readable\nfiles from a single source, under external evaluation.\n\nThe framework's code is licensed under the Business Source License 1.1 and\nits repository is not public. What is public — and what actually matters for\ntrusting an answer — is this server, the corpus it serves, and the registered\nsource behind every claim: `get_sources` returns what any given claim rests\non, so it can be checked rather than trusted.\n\nThis repository is the server's public face: its manifest and its\ndocumentation. The corpus itself lives at [futbolatlas.app](https://futbolatlas.app).\n",
  "bytes": 8620,
  "sha": "6b5e86a72f4bc1268b037b0fe453089948d63acc4a62736935f9f256c11d7879",
  "repo_slug": "citarium/futbolatlas-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_app_futbolatlas_futbol_atlas_e30ec26e/readme"
}