Soccer competitions, matches, standings, and team data from Football-Data.org API
Football-Data MCP has well-structured tool definitions with clear naming (verb_noun pattern) and reasonable descriptions (avg 150 chars). All 5 tools have input schemas with type definitions. However, parameter descriptions are sparse or missing context (e.g., 'Match status filter' lacks enum values; 'YYYY-MM-DD' format stated but not in schema constraints). No output schemas documented. Error handling exists but lacks recovery guidance. Missing tool annotations (readOnlyHint, idempotentHint). API key injection via _apiKey parameter violates secret-injection pattern.
List matches in a competition. Filter by status (SCHEDULED, LIVE, IN_PLAY, PAUSED, FINISHED, POSTPONED, SUSPENDED, CANCELLED), date range, matchday, stage, or season year.
League table for a competition season. Returns total / home / away tables.
Team detail by ID — current squad, coach, competitions, venue.
A team's matches across competitions. Filter by status, date range, competitions, season, or venue.
List competitions accessible on your plan. Free tier: 12 majors. Use the returned `code` (e.g., "PL", "PD", "CL") for downstream calls.
API key exposed as tool parameter (_apiKey). Credentials must use server-side secret injection via environment variables or vault. Agent traces log all parameters, secrets leak into logs and prompt history.
Enum constraints missing from parameters. 'status' accepts 8 values (SCHEDULED, LIVE, etc.) but is declared as free-form string. 'venue' accepts HOME|AWAY but lacks enum. LLMs hallucinate invalid values without formal constraints.
Output schemas not documented. Callers cannot plan downstream tool calls or extract required fields (e.g., team_id from competition response). fdFetch returns raw API response without shaping.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Parameter descriptions lack actionable detail. 'Match status filter' does not list valid values; 'YYYY-MM-DD' format stated in description but not enforced in schema. LLMs cannot validate inputs without explicit constraints.
No tool annotations (readOnlyHint, idempotentHint). All tools are read-only and idempotent, but LLMs cannot infer this. Annotations enable safer agent planning and retry logic.