Model Context Protocol (MCP) server for live & historical sports stats, odds, and schedules via ESPN
ESPN MCP server has 33 well-named tools with consistent verb_noun patterns (games_get_*, teams_get_*, news_get_*). All tools include descriptions (avg ~60 chars, baseline 194 chars) and input schemas with typed parameters. However, descriptions are significantly shorter than production baselines and lack actionable context (WHEN to use, dependencies, error recovery). Parameter descriptions are minimal (avg ~30 chars vs baseline 72 chars). Output schemas are not documented in visible code. No evidence of pagination support despite tools returning lists (scoreboard, standings, news). Error handling and recovery guidance absent. Tool composition is sound (single responsibility, proper naming), but descriptions need expansion to meet LLM-optimization standards.
Get calendar of games and events
Get betting odds for an event
Get futures and season-long betting odds
Get game prediction data
Get current game situation and context
Get detailed game summary including odds, boxscore, and play-by-play
Get statistical leaders by athlete
Get statistical leaders by team
Tool descriptions are 40-60 characters, well below production baseline of 194 chars. Descriptions lack WHEN to use, dependencies, and error recovery guidance. Example: 'Get live scoreboard with games, scores, and schedules' does not explain when to call this vs games_get_league_events, or what fields are returned.
Parameter descriptions are minimal (avg 30 chars vs baseline 72 chars). Many lack format/constraint guidance. Example: 'sport' param has description 'Sport type (e.g., football, basketball, baseball)' but does not state valid enum values, whether it accepts 'nfl' or 'football', or if it is case-sensitive.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Get league draft information
Get league events and games
Get league groups and divisions
Get play-by-play details for a game
Get power index rankings
Get Top 25 rankings and polls
Get live scoreboard with games, scores, and schedules
Get scoreboard header information
Get league standings and rankings
Get team schedule and past scores
Get league transactions (trades, signings, etc.)
Get win probability data for a game
Get latest sports news articles
Get athlete biography
Get athlete gamelog
Get athlete overview and game logs
Get athlete splits and breakdowns
Get athlete statistics
Get player statistics
Get detailed team information
Get team depth chart
Get team active roster
Get team statistics
List all teams in a league
Search for athletes and teams
Output schemas not documented in visible code. Tools returning lists (scoreboard, standings, news, roster) do not show pagination support (limit, offset, total_count, next_cursor). LLMs cannot plan multi-page retrieval or know result cardinality.
No error handling or recovery guidance visible. Tools do not document what happens on invalid sport/league, missing event_id, or API failures. LLMs cannot self-correct or know whether to retry.
Tool annotations (readOnlyHint, destructiveHint) are present in check_tool_contract.py but not visible in tool definitions. Verify annotations are properly registered in fastmcp tool decorators.