Posted 15 May 2026 · Updated 6 Aug 2026 · by Mark Hahnel · 6 min read

Using the foot.io MCP with Claude.

This walkthrough explains the foot.io HTTP MCP endpoint and how to use it with an MCP-capable client. The surface evolves: call tools/list for the currently deployed tools and schemas rather than relying on an old count or package manifest — 31 tools are deployed as of 6 August 2026. Tool execution is invite-only during closed beta.

Why MCP, not REST

You can hit the closed-beta REST API directly using the base URL and both headers documented at foot.io/docs, but MCP can be a better fit for agent workflows:

Both surfaces read the same rows. Every tool answers from the licence-gated defensible set — the rows we hold an explicit right to redistribute — and there is no gating between tiers: the cheapest paid key reads exactly the same rows as the most expensive one.

Connect

The deployed transport is stateless HTTP JSON-RPC:

https://amidfjrgsztslrpeaiec.supabase.co/functions/v1/mcp

Add that remote MCP URL in a client that supports HTTP MCP and send the issued x-api-key header for tool execution. Client setup changes over time, so follow the current instructions for your Claude surface and the exact foot.io handshake in our docs. There is no supported public @footio/mcp npm installation contract at present.

One exception to the key requirement: resolve_entity — cross-provider id translation (Transfermarkt, FBref, Wikidata QIDs, and more, into foot.io ids and back) — returns identifiers only, is never billed, and can be called without an API key.

Illustrative session

Once connected, an agent can choose from the tools returned by tools/list. The values below illustrate the flow; they are not a live or verified answer.

You: "How is Bukayo Saka playing recently?"

Claude: Calls search_players(query="Bukayo Saka") → player_id 4427

Calls player_form(player_id=4427, last_n=5) → returns 5 matches with goals/assists/minutes

Saka has played all 5 of Arsenal's most recent fixtures, contributing 2 goals and 3 assists across 412 minutes. He scored against Spurs (1-1) and Liverpool (2-2), and assisted both goals in Arsenal's 3-1 win over Forest. He's picked up 1 yellow card in this run. Form trajectory is positive — directly involved in 5 of Arsenal's last 8 goals.

This is the difference between an LLM that can answer football questions and one that can't.

Three more example queries

"Who's suspended for the West Ham vs Arsenal match this weekend?"

→ Claude calls injuries_and_bans(team_id=...) and reads back the list, distinguishing players serving a one-match ban (red card last match) from players on the yellow-card watchlist (1 more booking = ban). Despite the tool's name, it covers suspensions computed from our own match events only — it does not return medical injuries, and the injury dataset itself was withdrawn from foot.io on 28 July 2026.

"What did newspapers say about the 1966 World Cup final?"

→ Claude calls search_archive, which searches match reports from BBC Sport (2024+), The Guardian (2024+), and the British Newspaper Archive (1860s–1990s), and returns excerpts with publication, date and source URL. Inspect the response and licence rather than assuming full text: every key gets the same rows, with title and excerpt — full report bodies are the one field-level exception to the tier parity above, available from Pro tier up.

"How do Tottenham and Leeds stack up before Saturday's match?"

→ Claude calls head_to_head(team_id_1=..., team_id_2=...) for the all-time W/D/L record and recent meetings, then team_form(team_id=..., last_n=5) for each side's current run, and composes both into a pre-match briefing.

What's behind every answer

Provenance is the commitment behind foot.io: facts are stored with the source they were ingested from (FBref, ESPN, BNA newspaper archive, etc.), and many tools return that per-row source alongside the data. search_archive results carry the publication, date, and source URL of every report — so when Claude cites an archive fact, you can ask "where did that come from?" and get the answer. For deeper checks, get_fact_evidence returns field-level candidates and publisher-independent verification status for a single entity, and get_data_quality_summary returns the live trust dashboard. See our public erratum log for the corrections trail.

Access

Paid plans and self-service trials are not live. Join the closed-beta waitlist; quotas are assigned per invitation. Proposed pricing on the API page is roadmap material and may change.

What's missing (roadmap)

See also