football-api-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@football-api-mcpWhat Premier League matches are on today with current scores?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
football-api-mcp
MCP (Model Context Protocol) server for the 5DollarFootballAPI — gives Claude, ChatGPT, Cursor and any MCP-capable AI assistant live football (soccer) data: fixtures, live scores, standings, statistics, betting odds and the full odds movement history, including corner and card lines.
Ask your assistant things like:
"What Premier League matches are on today, and what are the current scores?"
"Show the corner standings for league 39 this season."
"How did the 1x2 odds move for fixture 1234567 before kickoff?"
Setup
You need an API key from 5dollarfootballapi.com — the free tier (no card) covers fixtures, live scores and standings; odds tools need a paid plan (from $5/mo).
Claude Code
claude mcp add football-api -e FIVEDOLLARFOOTBALL_API_KEY=fb_live_your_key -- npx -y football-api-mcpClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"football-api": {
"command": "npx",
"args": ["-y", "football-api-mcp"],
"env": { "FIVEDOLLARFOOTBALL_API_KEY": "fb_live_your_key" }
}
}
}Cursor
Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"football-api": {
"command": "npx",
"args": ["-y", "football-api-mcp"],
"env": { "FIVEDOLLARFOOTBALL_API_KEY": "fb_live_your_key" }
}
}
}ChatGPT (Developer mode)
ChatGPT only connects to remote MCP servers (Streamable HTTP over HTTPS), not local stdio commands, and needs a Plus/Pro/Business plan with Developer mode enabled. Run the server in HTTP mode and expose it with a tunnel:
FIVEDOLLARFOOTBALL_API_KEY=fb_live_your_key npx -y football-api-mcp --http --token pick-a-secret
# in another terminal — any tunnel works, e.g. cloudflared or ngrok
cloudflared tunnel --url http://localhost:3333Then in ChatGPT (verified 2026-08): Settings → Security and login → Developer mode (toggle
on), open Plugins in the sidebar, click the + (Create app), and in the New Plugin
form set Connection to Server URL, paste https://<your-tunnel-host>/mcp/pick-a-secret,
set Authentication to No Auth, tick the acknowledgement and Create, then Connect. --token matters here: ChatGPT cannot send custom headers, so the secret in the
path is what keeps a leaked tunnel URL from spending your API key.
Options: --host (default 127.0.0.1), --port (default 3333), or the equivalent
MCP_HTTP_HOST / MCP_HTTP_PORT / MCP_HTTP_TOKEN environment variables. The same HTTP
mode works for any other remote-only MCP client.
Related MCP server: mcp-sofascore
Tools
Tool | What it does |
| Fixtures for a calendar day (default today, UTC) with live scores, corners, cards |
| One fixture, optionally with the event timeline and match statistics |
| Current odds: 1x2, Asian handicap, goal line, corner line, card lines, BTTS |
| Every recorded price tick for a fixture and market — pre-match and in-play |
| Bookmaker slugs usable in the odds tools |
| League table — points, corner or card standings |
| Discover league and country ids by name |
| A league season's fixtures and results |
| A team's matches, most recent first |
| Your plan, usage and rate-limit state |
Prompts
One-shot analysis templates you can invoke from any prompt-aware client:
Prompt | What it produces |
| A grouped briefing of the day's fixtures, live scores and standout numbers |
| Opening vs closing analysis of one fixture's market with in-play reaction |
| A league's corner tendencies from its corner standings and recent results |
Resources
Attachable context data: football://leagues/popular (popular league ids) and football://bookmakers (bookmaker slugs for the odds tools).
All tools are read-only. Errors come back as tool errors with the API's error code and request id, so the assistant can explain what went wrong.
Development
npm install
npm test # in-memory MCP client/server tests, no network
FIVEDOLLARFOOTBALL_API_KEY=... npm start # run over stdio
FIVEDOLLARFOOTBALL_API_KEY=... npm start -- --http # run over Streamable HTTPThe underlying HTTP client is the official fivedollarfootball package. Endpoint reference: 5dollarfootballapi.com/docs.
License
Available Tools
11 toolsget_account_statusARead-onlyIdempotent
Your API plan, usage and rate-limit state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a small amount of value by naming the returned aspects (plan, usage, rate-limit state), but it does not disclose response format, pagination, or any operational caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact phrase with no filler, redundancies, or unnecessary words. It front-loads the key returned concepts immediately and earns every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only, parameterless status endpoint, the high-level return description is largely sufficient. It could have added a use case such as 'check before making API calls' or an exact field list, but the low complexity keeps the missing details minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the input schema is trivially complete and the description cannot add parameter-level detail. The rubric baseline for a 0-parameter tool is 4, and this description appropriately makes no parameter claims beyond what the schema covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource clearly — API plan, usage, and rate-limit state — which is a specific scope distinct from the data-fetching sibling tools. It lacks an explicit verb, reading as a noun phrase rather than 'returns' or 'retrieves', but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool, no prerequisites, and no comparison to alternative tools. It merely states what the endpoint reports; any usage context must be inferred from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookmakersARead-onlyIdempotent
List the bookmaker slugs usable in the odds tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the useful context that this feeds the odds tools, but it does not disclose return format or any edge cases. This is acceptable given the annotations carry most of the behavioral burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that states the action, the resource, and the intended use. Every word earns its place, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only enumeration tool with strong annotations and a clear purpose, the description is complete. No output schema exists, but the description's statement of what the tool lists and why is adequate for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema confirms this (100% coverage), so there is no parameter semantics burden on the description. A baseline of 4 is appropriate for a parameterless tool where the schema fully documents the absence of inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('bookmaker slugs'), and states their purpose ('usable in the odds tools'). This makes the tool's function immediately clear and distinct from the sibling tools, which focus on fixtures, odds, standings, and search operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates this tool is useful as a prerequisite for the odds tools, providing clear context for when to call it. It does not explicitly exclude alternatives, but no sibling tool serves the same purpose of listing bookmaker slugs, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fixtureARead-onlyIdempotent
Get one fixture by id, optionally with the event timeline (goals, cards, corners) and match statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language code for team/league names, e.g. en, es, de, ja, zh-cn | |
| fixture_id | Yes | Fixture id | |
| include_stats | No | Include match statistics | |
| include_events | No | Include the event timeline |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, and non-destructive behavior, so the description's burden is lower. It adds useful context by clarifying that the event timeline includes goals, cards, and corners, but it does not describe response shape, defaults, or behavior when the optional flags are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no redundant words. It conveys the core action and the optional extended data efficiently without repeating schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-fixture getter with strong annotations and fully documented parameters, the description plus schema are largely sufficient. No output schema exists, so a bit more detail about the response shape would strengthen it, but the return value is reasonably implied by the tool name and optional-inclusion statement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds minor semantic value by explicitly enumerating what the event timeline contains, but it does not add syntax, defaults, or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('one fixture by id'), and the optional content (event timeline and match statistics). It is clear and distinguishes itself from plural fixture-listing tools, though it does not explicitly name any sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Get one fixture by id' implies the tool should be used when a single fixture id is known, and the optional flags signal when to include additional data. However, it does not explicitly contrast with sibling tools like get_fixtures, get_league_fixtures, or get_team_fixtures, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fixture_oddsARead-onlyIdempotent
Current betting odds for a fixture: 1x2, Asian handicap, goal line, corner line, card lines, BTTS — per bookmaker.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | One market only, e.g. 1x2, asian, goalline, corner, cards, btts (default: all) | |
| bookmakers | No | Bookmaker slugs, e.g. ["bet365","pinnacle"] (default bet365; GET bookmakers via get_bookmakers) | |
| fixture_id | Yes | Fixture id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate read-only, idempotent, non-destructive behavior. The description adds useful scope details (markets, per bookmaker) but does not disclose additional behavioral traits such as data freshness, odds volatility, or what happens when a fixture has no odds available. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence that immediately states what the tool returns, which markets it covers, and that results are per bookmaker. There is no filler or redundant information; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description reasonably conveys the returned domain: current odds across multiple market types per bookmaker. It could go further by hinting at the output structure for each market, but it is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100% and the parameter descriptions already explain market, bookmakers, and fixture_id. The description's market list roughly repeats the schema's market examples, adding no extra semantic meaning beyond what the schema provides. The baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource relationship: 'Current betting odds for a fixture', and enumerates the market types and per-bookmaker scope. The word 'Current' distinguishes it from sibling get_odds_history, so an agent can tell this tool from related ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when current odds are needed, rather than historical odds or raw fixture data. However, it does not explicitly name alternatives like get_odds_history or state when not to use the tool, leaving the routing logic to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fixturesARead-onlyIdempotent
List football fixtures for a calendar day (UTC). Defaults to today. Includes live scores, corners and cards for each match.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Day to list, YYYY-MM-DD (UTC). Default: today | |
| lang | No | Language code for team/league names, e.g. en, es, de, ja, zh-cn | |
| page | No | Page number (default 1) | |
| status | No | Filter by match status (default all) | |
| league_id | No | Only this league |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds a default-to-today behavior and notes that live scores, corners, and cards are included, but does not go deeper into pagination or response behavior. This is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The primary purpose and key default are front-loaded, and the output-information detail is relevant and compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With all parameters covered by the schema, annotations covering read-only/idempotent behavior, and a description that names the output highlights, the tool is largely complete for invocation. The only notable gap is the lack of explicit routing against league/team-specific sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all five parameters. The description only re-emphasizes the date scope and default, which does not meaningfully add beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('football fixtures'), and a precise scope ('for a calendar day (UTC)'). It also distinguishes itself from sibling tools like get_league_fixtures and get_team_fixtures by emphasizing the date-based listing scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for date-based fixture lookups and mentions the UTC/day default, but it does not explicitly say when to prefer this over get_league_fixtures, get_team_fixtures, or get_fixture. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_league_fixturesBRead-onlyIdempotent
A league season's fixtures and results.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language code for team/league names, e.g. en, es, de, ja, zh-cn | |
| page | No | Page number (default 1) | |
| season | No | Season, e.g. "2026" or "26/27" (default: newest with fixtures) | |
| status | No | Filter by match status (default all) | |
| league_id | Yes | League id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the useful detail that results are included alongside fixtures, but it does not disclose pagination behavior, default season handling, or status-filter semantics beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, extremely concise sentence with no filler or redundant content. It front-loads the core resource scope, though it is so brief that it sacrifices useful operational context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no output schema, and several closely related sibling tools, a one-line noun phrase is not enough. The description omits default season behavior, pagination, status filtering, and any distinction from get_fixtures or get_team_fixtures, leaving the agent under-informed for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has a meaningful description in the schema. The tool description adds no additional parameter semantics, which matches the baseline of 3 for fully documented schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource clearly: a league season's fixtures and results. The verb 'get' is present in the tool name, and the 'league season' scope distinguishes it from team-level or general fixture tools. However, it does not explicitly state the action or name a sibling it is not, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus get_fixtures, get_team_fixtures, or get_standings. The description does not mention defaults like season selection, status filtering, or pagination, leaving the agent to infer usage from the schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_odds_historyARead-onlyIdempotent
Full price-movement history (every recorded tick) for one fixture and market. Each tick has the price, match minute, running score and UTC timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| market | Yes | Market: 1x2, asian, goalline, corner, corner_asian, cards, cards_asian, btts, or a *_half variant | |
| bookmaker | No | Bookmaker slug (default bet365) | |
| fixture_id | Yes | Fixture id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe, read-only, idempotent operation. The description adds meaningful behavioral context by specifying that the response contains every recorded tick and describing the tick fields (price, match minute, running score, UTC timestamp), which is helpful beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The primary purpose is front-loaded, and the detail about tick contents is delivered in a tightly scoped second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately explains what the response contains. It covers the key return fields and scope. Minor omissions such as ordering or pagination behavior are partly covered by the page parameter in the schema, so the description remains sufficiently complete for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description reinforces that fixture_id and market are the core selectors but does not add new parameter-level semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('full price-movement history') with scope constraints ('one fixture and market') and clarifies it returns every recorded tick. This clearly differentiates it from siblings like get_fixture_odds, which presumably returns current or near-term odds, by the historical and tick-level nature of the data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you need the complete tick-level price history for a fixture and market. However, it does not explicitly contrast it with get_fixture_odds or state when not to use it, leaving the agent to infer the appropriate alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_standingsARead-onlyIdempotent
League table for a league and season. type "corner" and "card" return corner/card standings instead of points.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language code for team/league names, e.g. en, es, de, ja, zh-cn | |
| type | No | Table type (default total) | |
| season | No | Season, e.g. "2026" or "26/27" (default: current) | |
| league_id | Yes | League id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds the behavioral nuance that type='corner' or 'card' changes the result from points-based standings to corner/card standings, going beyond the schema's bare enum labels.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the core purpose is front-loaded and the type behavior is the only additional detail. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup tool, the description covers purpose and the main optional variation, while the schema fully documents all four parameters and annotations cover safety. It does not describe output format, but with no output schema this is a minor gap rather than a blocker.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the semantic effect of the 'type' parameter—corner and card return alternative standings—rather than just listing table types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description names the specific resource ('League table') and the verb ('return'), and scopes it to a league and season. It also distinguishes corner/card table variants, so an agent can tell this apart from fixture/odds/bookmaker siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames when the tool applies: for standings of a given league and season, with optional type variants for corner/card tables. It does not explicitly name alternatives or say when not to use it, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_team_fixturesBRead-onlyIdempotent
A team's matches home or away, most recent first.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language code for team/league names, e.g. en, es, de, ja, zh-cn | |
| page | No | Page number (default 1) | |
| status | No | Filter by match status (default all) | |
| team_id | Yes | Team id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive safety profile, so the description only needs to add extra behavioral context. It adds the most-recent-first ordering and the home/away scope, but it does not explain status filtering or pagination behavior. This is not a contradiction and the added context is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler, and the core subject is presented immediately. The phrase 'home or away' is a little awkward, but the overall structure is compact and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list endpoint, the description conveys the essential subject and ordering. However, with four parameters and no output schema, it does not mention status/page defaults or the shape of the returned fixtures, so an agent would need to infer or discover some behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so team_id, lang, page, and status are already documented structurally. The description adds no parameter-level details beyond implying team_id is the central selector, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as a team's matches, includes the home/away scope, and states the sort order as most recent first. It is distinct enough from get_league_fixtures and get_fixtures because it focuses on a specific team, though it lacks an explicit verb and 'home or away' is slightly ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus siblings such as get_fixtures or get_league_fixtures, and it does not mention any exclusions or alternatives. The team-specific scope is implied, but the routing decision is left entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_countriesARead-onlyIdempotent
List countries (optionally filtered by name substring), for use with search_leagues.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language code for team/league names, e.g. en, es, de, ja, zh-cn | |
| page | No | Page number (default 1) | |
| search | No | Country name substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to restate safety behavior. It adds a small behavioral touch by noting the filter is optional and substring-based, but it does not reveal details like pagination behavior or result shape, which would add further transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the core action ('List countries'), then states the optional filter and the intended usage context. There is no wasted wording and every clause adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with rich annotations and fully documented parameters, the description adequately explains the tool's purpose, filter behavior, and relationship to search_leagues. An output schema is absent, but for a straightforward country-listing tool the key calling context is covered; slight gaps around return format and pagination keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have descriptions in the schema, so schema coverage is 100% and the schema carries the load. The description's mention of filtering by name substring adds no meaning beyond the existing 'search' parameter description, so it earns the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says 'List countries', which is a clear verb+resource pairing, and notes the optional 'name substring' filter. It also identifies its intended role as a helper for search_leagues, which differentiates it from the other listed tools that are all about fixtures, odds, or standings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for use with search_leagues' gives clear context on when this tool is relevant: as a lookup/filtering aid before searching leagues. No alternative country-listing sibling exists among the provided tools, so explicit exclusion is unnecessary; the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_leaguesARead-onlyIdempotent
Find leagues by name, country or popularity. Use this to discover league ids.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language code for team/league names, e.g. en, es, de, ja, zh-cn | |
| page | No | Page number (default 1) | |
| search | No | League name substring | |
| popular | No | Only popular leagues | |
| country_id | No | Only this country (see search_countries) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds search semantics and the output intent of discovering league IDs, but it does not disclose pagination behavior, ordering, or result limits. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words. The core function is front-loaded, and the usage guidance is included in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All 5 parameters are optional and fully documented in the schema, and the annotations cover the behavioral safety profile. The description explains the main purpose and return intent, discovering league IDs, which is sufficient for a simple search tool even without an output schema. Slightly more detail about pagination or response shape would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% parameter description coverage, so the baseline is 3. The description summarizes the filters as 'name, country or popularity', which roughly maps to search, country_id, and popular, but it adds no detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Find leagues' by name, country, or popularity. The added phrase 'Use this to discover league ids' gives an actionable purpose and distinguishes it from sibling tools that consume league IDs, though it does not explicitly contrast with search_countries or other alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear invocation context: use it when you need to discover league IDs. This implies it is the right choice before calling tools like get_league_fixtures or get_standings, but it does not explicitly state when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.3.0- First observed
get_account_status - First observed
get_bookmakers - First observed
get_fixture - First observed
get_fixture_odds - First observed
get_fixtures - First observed
get_league_fixtures - First observed
get_odds_history - First observed
get_standings - First observed
get_team_fixtures - First observed
search_countries - First observed
search_leagues
TDQS
Scored across 11 tools
Each tool targets a distinct resource/scope: fixtures are separated by day, id, league, and team; odds, standings, searches, and account status are clearly distinct. The descriptions make the boundaries between the fixture-listing tools explicit enough that an agent should not misselect.
All tools follow a consistent snake_case action_noun pattern, with get_ used for retrieval and search_ used specifically for discovery. This is a predictable and readable convention across the entire toolset.
11 tools is a well-scoped count for a football data and odds API. Each tool covers a meaningful area such as fixtures, standings, odds, discovery, or account status without feeling bloated or sparse.
Core workflows around fixtures, standings, odds history, and league/country discovery are covered well. The main gap is the lack of a team search or direct team lookup, which makes get_team_fixtures harder to use unless team IDs are first extracted from fixture data.
Maintenance
Related MCP Connectors
Football fixtures, standings, and odds intelligence for AI agents.
Historical football results, teams, competitions and draw/streak statistics via 10 read-only tools.
Sports odds, player props and source coverage for AI assistants. Connect with your own API key.
Live sports stats and pre-computed analysis for AI assistants across NBA, MLB, NFL, and NHL.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides tools to query football match data, odds, standings, and team statistics via natural language, integrating with the football-scraper-api.-
- FlicenseNot gradedqualityDmaintenanceProvides live football match data from Sofascore, including formations, injuries, betting odds, and league positions, enabling natural language queries about matches.1-
- FlicenseBqualityBmaintenanceEnables access to live FotMob football data for fixture lookup, team and player research, match details, lineups, league discovery, and search-based entity lookup.78-
- FlicenseNot gradedqualityDmaintenanceEnables natural language querying of football/soccer data via the API-Football service, providing access to leagues, teams, players, fixtures, standings, and statistics.3-