npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

fifa-public-api-mcp

v0.2.0

Published

MCP server exposing the public FIFA data API (api.fifa.com/api/v3) as read-only tools

Readme

fifa-public-api-mcp

Live FIFA World Cup & football data for your AI assistant: an MCP server for competitions, fixtures, live scores, lineups, squads, and stadiums.

npm version CI license: MIT Node 22+ MCP

Give Claude, or any Model Context Protocol client, instant read-only access to the public FIFA data API for football (soccer): every FIFA competition (the men's and women's World Cups, club competitions, and more), their fixtures and results, live match detail, and reference data. No API key, no auth, no rediscovering FIFA's undocumented endpoints. Just install and ask.

⚡ What you can ask

Once it's connected, ask your assistant things like:

  • "Who's hosting the 2026 FIFA World Cup, and which stadiums are being used?"
  • "List the knockout-stage fixtures for the FIFA Women's World Cup."
  • "What was the final score, lineup, and attendance for that match?"
  • "Which six confederations does FIFA recognise, and how many member associations are there?"

Your assistant picks the right tools and chains the FIFA IDs for you behind the scenes.

✨ Features

  • 12 read-only tools spanning competitions, seasons, stages, fixtures, results, live matches, teams, stadiums, and reference data.
  • 🔑 No API key or sign-up: wraps the public FIFA API directly.
  • 🌍 Localised output via a language arg, plus a raw escape hatch that returns the untouched FIFA payload.
  • 📦 One-line install with npx: nothing to clone or build.
  • 🛡️ Typed and tested: unit-tested response normalizers and provenance-signed npm releases.

🚀 Install

The server is published to npm and runs via npx, so there is nothing to clone or compile.

Claude Code:

claude mcp add fifa -- npx -y fifa-public-api-mcp

Claude Desktop: add this to mcpServers in your config:

{
  "mcpServers": {
    "fifa": {
      "command": "npx",
      "args": ["-y", "fifa-public-api-mcp"]
    }
  }
}

npx downloads and caches the package on first use; later runs are offline-fast. Requires Node 22+ on the PATH.

🧰 Tools

Every tool also accepts two optional args: raw (default false; return FIFA's untouched payload) and language (default en).

| Tool | Inputs | Returns | |---|---|---| | search_competitions | name | [{idCompetition, name}] | | get_competition | idCompetition | {idCompetition, name, owner, type} | | list_seasons | idCompetition, count? | [{idSeason, name, startDate, endDate}] | | get_season | idSeason | {idSeason, name, dates, memberAssociations[], hostTeams[], pictureUrls} | | list_stages | idCompetition, idSeason | [{idStage, name}] | | list_countries | none | [{idCountry, name}] | | list_confederations | none | [{idConfederation, name}] | | get_matches | idCompetition, idSeason, idStage?, idGroup?, count? | {matches:[…]} (see pagination note) | | get_match_timeline | idCompetition, idSeason, idStage, idMatch | {idMatch, events:[…]} | | get_live_match | idCompetition, idSeason, idStage, idMatch | {idMatch, status, score, home, away, officials, attendance, weather} | | get_team | idTeam | {idTeam, name, abbreviation, country, city, stadium, idStadium, pictureUrl} | | get_stadium | idStadium | {idStadium, name, city, capacity} |

IDs are stable string handles chained between endpoints. A typical flow: search_competitionslist_seasonslist_stagesget_matchesget_match_timeline / get_live_match.

Example IDs (FIFA World Cup 2026): idCompetition=17, idSeason=285023. These are examples for trying the tools, not defaults baked into the server.

⚠️ Known limitations

  • No standings. FIFA's /calendar/standing endpoint returns 200 null for every competition and season tested, so no standings tool ships.
  • No real pagination on get_matches. The API's continuation cursor is non-functional, so count is only a single-request hard limit. Set a large count (e.g. 500) for a full fixture list, and narrow with idStage / idGroup; there is no way to page past count.
  • get_live_match returns data for any match state, not just live matches. A not-started match has an empty lineup and a null score.

🛠️ Develop from source

git clone https://github.com/chrispickford/fifa-public-api-mcp.git
cd fifa-public-api-mcp
npm install
npm run build      # compiles TS to build/index.js (with shebang + executable bit)
npm test           # vitest unit tests over the normalizers (no network, CI-safe)
npm run smoke      # manual live end-to-end hit of every tool against the real API (needs network)

Point a client at the local build with an absolute path, e.g. claude mcp add fifa-dev -- node /absolute/path/to/build/index.js.

The code is four small, single-purpose layers: src/client.ts (the only module that touches the network; encodes the FIFA base-API conventions and throws a structured FifaApiError), src/shape.ts (pure, unit-tested response normalizers), src/tools.ts (tool definitions and handlers wiring client → shape), and src/index.ts (bootstrap: register tools, connect StdioServerTransport).

License

MIT © Chris Pickford