Form Guide
Server Details
Football form, fixtures, results and tables for six top European leagues.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- GoodTurnStudio/goodturn-mcp
- GitHub Stars
- 0
- Server Listing
- goodturn-mcp
TDQS
Scored across 5 tools
get_team overlaps with get_fixtures (next games), get_results (recent form/results), and get_table (league position), so an agent could plausibly misselect for queries like 'when do Birmingham play next?'. The descriptions do distinguish a consolidated team summary from focused views, but the overlap is still substantial.
All tools use snake_case with a verb_noun pattern: compare_teams, get_fixtures, get_results, get_table, get_team. The only variation is 'compare_' instead of 'get_', but it is still a clear verb_noun convention and fully consistent.
5 tools is well within the 3–15 range and each tool maps to a distinct core task: comparison, fixtures, results, table, and team summary. No obvious bloat or thinness for a football form guide.
Core read-only coverage (fixtures, results, table, team summary, comparison) is solid for a form guide. Missing secondary data such as top scorers, player stats, or multi-season head-to-head history are minor gaps agents can work around.
Available Tools
5 toolscompare_teamsTwo clubs side by side before they meetARead-onlyIdempotentInspect
Two clubs side by side before they meet. Use for "Arsenal v Leeds, how do they compare?". Gives positions, form, goals, this season's meeting and the next date they play. Stats only, not betting advice
| Name | Required | Description | Default |
|---|---|---|---|
| away | Yes | A different club from home. | |
| home | Yes | The home club, for example Arsenal. | |
| team1 | No | Older name for home, kept for existing callers. Use home. | |
| team2 | No | Older name for away, kept for existing callers. Use away. | |
| country | No | Pass US or CA to add US Eastern kick-off times to the say line (and to each fixture's us_eastern, which is always there when a time is known). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and openWorld=false. The description adds useful context about output scope by specifying the returned categories and the 'stats only, not betting advice' boundary.
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?
Three short sentences front-load the purpose, then give an example and scope. Every sentence earns its place with no filler.
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 sufficiently enumerates what the tool returns and limits it to stats-only guidance. Parameters and safety attributes are fully covered by the rich schema and annotations, leaving no critical gap for 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%, with documented home, away, legacy aliases team1/team2, and optional country. The description does not add parameter-level semantics beyond what the schema already provides, so the baseline 3 applies.
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 two-club comparison and enumerates the returned stats: positions, form, goals, this season's meeting, and next fixture date. It is distinguishable from single-team and fixture-list siblings by its side-by-side pre-match focus, though it does not explicitly name 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?
It gives a direct example question ('Arsenal v Leeds, how do they compare?') that clarifies the intended use case. It does not explicitly state when not to use it or name sibling alternatives such as get_team or get_fixtures.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fixturesUpcoming fixtures for a club or a leagueARead-onlyIdempotentInspect
Upcoming fixtures for a club or a league. Use for "who do Liverpool play next?" or "what's on in La Liga this weekend?". Without team or league, gives the Premier League
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How far ahead, a whole number from 1 to 60. Default 21. If nothing falls in the window (an international break), the next fixtures are returned anyway. | |
| team | No | A club name, for example Liverpool or Real Madrid. | |
| league | No | One of: premier league, championship, la liga, bundesliga, serie a, ligue 1 (common variants like EPL or German Bundesliga work too). Any other league returns 404. | |
| country | No | Pass US or CA to add US Eastern kick-off times to the say line (and to each fixture's us_eastern, which is always there when a time is known). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds one genuinely behavioral fact — the Premier League default when neither team nor league is supplied. The international-break fallback lives in the schema, not the description, so added value 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?
Three short sentences, front-loaded with the purpose, then usage examples, then the default. Zero filler; each sentence carries information an agent needs.
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 read-only, low-complexity list tool with full schema coverage, the description covers purpose, usage, and defaults adequately. It does not describe the returned fixture shape (the 'say line' and us_eastern fields are only hinted at inside the country parameter), which matters slightly since there is no output schema.
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 (days, team, league, country) is already documented with bounds, defaults, and fallbacks. The description only implies that team/league are optional via the default sentence and adds no format or syntax detail beyond the schema. Baseline 3 applies.
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?
States a specific resource and scope ('upcoming fixtures for a club or a league'), which cleanly separates it from siblings like get_results and get_table. The example queries reinforce the intent, though it never explicitly names which sibling to use instead.
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?
Gives concrete when-to-use triggers ('who do Liverpool play next?', 'what's on in La Liga this weekend?') and states the no-argument default (Premier League). No explicit when-not or rival-tool routing is given, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resultsLatest results for a club, or the last round of a leagueARead-onlyIdempotentInspect
Latest results for a club, or the last round of a league. Use for "how did Chelsea get on?" or "what were the Serie A results?". Without team or league, gives the Premier League
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | How many of the club's results, a whole number from 1 to 20. Default 5. | |
| team | No | A club name, for example Liverpool or Real Madrid. | |
| league | No | One of: premier league, championship, la liga, bundesliga, serie a, ligue 1 (common variants like EPL or German Bundesliga work too). Any other league returns 404. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and non-open-world behavior. The description adds the default-to-Premier-League behavior, but does not describe return format, pagination, or error handling 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 short and front-loaded, with the core purpose first and usage examples next. The opening sentence repeats the title closely, which is the only minor redundancy.
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 lookup tool with rich annotations and full schema coverage, the description covers purpose, usage, and default behavior adequately. It could say more about the returned result shape, but no output schema exists and the omission is 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?
Schema coverage is 100%, so the schema documents all three parameters. The description still adds useful parameter behavior by stating that omitting both team and league defaults to the Premier League, which is not in 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 names a specific resource (results) and scope (latest for a club or last round of a league). It is clear enough to distinguish from get_fixtures and get_table, but it does not explicitly name or contrast those 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?
It gives concrete use cases ("how did Chelsea get on?", "what were the Serie A results?") and a default behavior when no team/league is supplied. It lacks explicit when-not-to-use guidance or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tableLeague tableARead-onlyIdempotentInspect
League table. Use for "show me the Championship table" or "who is top of La Liga?". Points include official deductions; a deducted club's row has points_deducted
| Name | Required | Description | Default |
|---|---|---|---|
| league | No | One of: premier league, championship, la liga, bundesliga, serie a, ligue 1 (common variants like EPL or German Bundesliga work too). Any other league returns 404. Default premier league. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description goes beyond that by disclosing a non-obvious data behavior: points include official deductions and deducted clubs carry a points_deducted field. It says nothing about pagination or error handling beyond the schema's 404 note.
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?
Very short and front-loaded: resource first, then usage examples, then the points-deduction caveat. The opening 'League table.' slightly duplicates the title, but nothing is bloated.
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 carries the burden of describing the return, and it only partly does so — it mentions points and points_deducted but not positions, team names, or other row fields. Combined with no error/edge-case guidance beyond the schema's 404 note, it is adequate but leaves gaps for a standings 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% and the single league parameter documents accepted values, variants, default, and 404 behavior. The description adds no parameter-level information, so baseline 3 applies.
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?
States the resource ('League table') and two concrete example queries ('show me the Championship table', 'who is top of La Liga?') that make the retrieval semantics unambiguous. It does not explicitly name any sibling or contrast with get_team/get_results, but the sibling names are distinct enough resources that confusion is unlikely.
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 example phrasings implicitly tell the agent when this tool applies ('show me the table', 'who is top'), which is decent contextual guidance. However, there is no explicit statement of when NOT to use it (e.g. historical season tables or cup competitions) and no mention of alternatives like get_results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_teamA club's league position, recent form and next gamesBRead-onlyIdempotentInspect
A club's league position, recent form and next games. Use for "how are Arsenal doing?", "what's Spurs' form?", "when do Birmingham play next?"
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Older name for team, kept for existing callers. Use team. | |
| team | Yes | Club name as the user said it, up to 80 characters. Nicknames and small typos are fine. | |
| league | No | One of: premier league, championship, la liga, bundesliga, serie a, ligue 1 (common variants like EPL or German Bundesliga work too). Any other league returns 404. Only needed if two clubs share a name. | |
| country | No | Two-letter country code for the shirt link (US, GB and IE get local Amazon links). Default from the request. When passed as US or CA, the say line also gives the next kick-off in US Eastern time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds no behavioral context beyond that — no note on the 404 for unsupported leagues, no indication of freshness or data source, and no hint about the composite nature of the response.
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 compact sentences with the substantive scope statement front-loaded, which is the right structure. The three example utterances are slightly repetitive of each other and consume space that could have carried sibling-routing information, keeping it just short of 5.
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 does carry the burden of describing what comes back, and it does so at a high level (position, form, next games). For a read-only lookup tool with full schema coverage and complete annotations, that is close to sufficient; only the sibling overlap and handling of unknown leagues are left unaddressed.
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 all four parameters (q, team, league, country) are already documented in the schema, including the deprecation note for q and the league whitelist. The description contributes nothing about parameter semantics, so the baseline of 3 applies.
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 a specific resource (a club) and enumerates the three things returned: league position, recent form, next games. That's clearly more than a restatement of the name. However, it never distinguishes itself from siblings get_table and get_fixtures, which plausibly cover overlapping content, so an agent can't tell why to pick this composite over those.
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 three sample utterances ("how are Arsenal doing?", "what's Spurs' form?", "when do Birmingham play next?") imply the intended usage context, which is better than nothing. But there is no explicit when-to-use versus compare_teams, get_table or get_fixtures, and no stated exclusions or prerequisites.
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.
5 tool updates
- First observed
compare_teams - First observed
get_fixtures - First observed
get_results - First observed
get_table - First observed
get_team
Related MCP Connectors
Tables, results, fixtures, goal timing, season projections: 93 football leagues incl. lower tiers
Live scores, fixtures, standings, team profiles and news for 2000+ football and basketball leagues.
61Football fixtures, standings, and odds intelligence for AI agents.
Historical football results, draws and no-draw streaks. 11 read-only tools, 6 need no API key.
Related MCP Servers
- AlicenseAqualityCmaintenanceLive football/soccer data from top European leagues, enabling queries for standings, fixtures, scorers, and team comparisons via natural language.610 npmMIT
- AlicenseAqualityDmaintenanceProvides soccer match predictions and league statistics using xG data and Poisson distribution models. It enables users to forecast outcomes, analyze team performance, and view league tables across major European football leagues.3GPL 2.0
- AlicenseNot gradedqualityDmaintenanceProvides football analytics tools including player scouting, comparisons, market-value filters, expected-goals tables, match-by-match form, team attacking profiles, match search, shot maps, and more for 10 leagues.6GPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to query real-time standings, fixtures, Chinese/English club aliases, and tactical data for Europe's top five leagues and global football.8 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.