MCP server for Premier League football data - provides live scores and league standings
Two tools with basic definitions but significant gaps in parameter documentation, output schemas, and error handling. Tool names follow verb_noun convention (good), but descriptions lack the depth needed for reliable LLM selection. No input validation, no pagination support, no structured output documentation, and no error recovery guidance. Schema definitions are minimal, parameters are typed but lack descriptions. The server returns plain strings rather than structured objects, forcing the LLM to parse unstructured text.
Get all live football matches happening right now
Get the standings/table for a football league. Args: league_id: The league ID (ex: 39 = Premier League, 140 = La Liga, 61 = Ligue 1) season: The season year (ex: 2024)
No output schema documented. Both tools return plain strings instead of structured JSON objects. LLMs must parse unstructured text, wasting tokens and increasing hallucination risk.
live_scores has no parameters but description mentions 'all live matches happening right now' without explaining what fields will be returned, when to use this vs standings, or how results are formatted.
No error handling or recovery guidance. If API fails (rate limit, network error, invalid league_id), tools return raw exceptions without actionable guidance for the LLM.
standings hardcodes top 10 results with no pagination support. If results exceed 10, they are silently dropped. No limit parameter, no offset/page parameter, no total count returned.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 31 | - | v1 |
API key (RAPIDAPI_KEY) is correctly injected via environment variable (good), but no validation that it is present at startup. Silent failure if key is missing.
league_id parameter in standings lacks description of valid range or how to discover valid IDs. Examples in description (39, 140, 61) suggest a closed set, but no enum constraint or discovery tool provided.
No indication whether tools are idempotent or how they behave on repeated calls. If an LLM retries due to transient network error, will duplicate data be returned?