Reported issues for sports-mcp-server
Pod holds 12 of 12 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to sports-mcp-server.
Most discussed
bug(sports_find_team): espnId and mlbId always null — TSDB records win deduplication over ESPN/MLB records
sports_find_team promises to return ESPN/MLB/TheSportsDB IDs in its output schema (espnId, mlbId, tsdbId) and description ("Returns...ESPN/MLB/TheSportsDB IDs"), but espnId and mlbId are always null in practice. The handler appends TheSportsDB results first, then fetches ESPN/MLB matches — but the final deduplication step (by displayName, case-insensitive) always keeps the TSDB record and drops the ESPN/MLB record when both reference the same team.
Steps to reproduce
- Call
Read the thread · 2026-06-07 · closed · 2 comments
feat(config): declare stateless session mode in createApp
Use case
The server should declare its stateless session posture in source so launches with no MCP_SESSION_MODE override behave consistently across npm, bunx, source, and Docker.
Proposed behavior
After cyanheads/mcp-ts-core#376 adds a server-level createApp session-mode option, set the default to stateless in src/index.ts. An explicit MCP_SESSION_MODE environment value must retain precedence.
Alternatives considered
Changing the framework-wide auto default would alt
Read the thread · 2026-08-22 · open · 1 comment
bug(docker): run ESPN-backed serving on Node
Server version
0.2.0
mcp-ts-core version
0.12.3
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
HTTP (Streamable HTTP)
Description
The Docker production command runs the server under Bun, and Bun's HTTP clients receive HTTP 403 from ESPN's public Site API while Node and curl receive HTTP 200 for the same endpoint. The failure is runtime-specific; the evidence does not establish a TLS-fingerprint cause.
Steps to reproduce
- Fetch `https://site.api.espn.co
Read the thread · 2026-08-21 · closed · 1 comment
enhancement(tool-defs): tighten MCP-facing descriptions
Use case
Tool schemas should describe a tool's capability and each field's value without repeating cross-tool sequencing instructions or exposing routing details. Server-level instructions already carry the supported workflows.
Proposed behavior
Tighten the identified tool and field descriptions. Remove cross-tool imperatives from tool catalog text, keep workflow examples in createApp({ instructions }), retain the fact that sport is advisory in its own input description, and descr
Read the thread · 2026-06-28 · closed · 1 comment
docs(sports_find_player): README still says sport narrows results
Use case
Users reading the README need to know that sports_find_player.sport does not narrow results. The shipped tool accepts it only as an advisory disambiguation hint.
Proposed behavior
Replace the stale sports_find_player README bullet with language that calls sport an advisory hint and states that matching players are returned regardless of its value.
Alternatives considered
Implementing server-side sport filtering is separate product work: TheSportsDB search does not
Read the thread · 2026-06-28 · closed · 1 comment
bug(sports_get_player): formatted bio truncates structured description
Server version
0.1.4
mcp-ts-core version
0.12.3
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
stdio and HTTP (the formatted response is shared)
Description
sports_get_player returns a complete biography in structuredContent.player.description but truncates the same field to 1,000 characters plus an ellipsis in content[]. Clients that consume formatted content therefore receive a different terminal value.
Steps to reproduce
- Call `sportsGetPlayer
Read the thread · 2026-06-28 · closed · 1 comment
bug(input): reject blank required text fields
Server version
0.1.4
mcp-ts-core version
0.12.3
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
stdio and HTTP (input schemas are shared)
Description
Four required text inputs accept empty and whitespace-only strings. sports_find_team and sports_get_team can then match every candidate through includes('') or select the first team from an upstream list; the player tools make an unnecessary upstream request and return a lookup-style error instead of input v
Read the thread · 2026-06-28 · closed · 1 comment
bug(sports_find_team): retain TSDB metadata with league filters
Server version
0.2.0
mcp-ts-core version
0.12.3
Runtime
Bun
Runtime version
Bun 1.4.0
Transport
stdio and HTTP (shared handler)
Description
sports_find_team rejects valid TheSportsDB team records when a league filter is present and the provider's human-readable league name does not contain either the server enum or ESPN slug. The subsequent ESPN match cannot restore TheSportsDB-only metadata such as tsdbId and venue when the record was discarded before cros
Read the thread · 2026-06-28 · closed · 1 comment
Most recent
bug(sports_get_schedule): honor league-wide date ranges
Server version
0.2.0
mcp-ts-core version
0.12.3
Runtime
Node.js and Bun
Runtime version
Node 26.5.0 / Bun 1.4.0
Transport
stdio and HTTP (shared handler)
Description
League-wide sports_get_schedule requests discard supplied date ranges before making their upstream request. With no team_name, the MLB path always calls getSchedule(null) and the ESPN path always calls getScoreboard(..., null); the later local filter cannot recover games that were never fet
Read the thread · 2026-06-28 · closed · 1 comment
ux(all tools): error content[] missing recovery hints — ctx.fail() called without recovery hint at throw sites
All tool errors[] contracts declare recovery strings, but none of the ctx.fail() call sites pass { recovery: { hint: '...' } } as a third argument. As a result, content[0].text only contains the bare error message with no actionable next step. Per the framework docs, the recovery hint from the contract definition does not auto-populate the wire — it must be passed explicitly at the throw site.
Steps to reproduce
- Call
sports_get_standingswith `{ league: "nfl", season: "180
Read the thread · 2026-06-07 · closed · 1 comment
ux(sports_find_player): sport filter is silently ignored but described as narrowing results
The sport parameter on sports_find_player claims to "narrow results" but has no effect on the results returned. TheSportsDB search does not support server-side sport filtering, and the handler logs a debug message acknowledging this but still tells callers the filter will work.
Steps to reproduce
- Call
sports_find_playerwith{ query: \"Messi\", sport: \"Curling\" } - Observe
totalFound: 1— same result as without thesportparameter
Actual behavior
Sport parameter is
Read the thread · 2026-06-07 · closed · 1 comment
bug(sports_get_standings): soccer leagues return season_not_found during off-season instead of empty standings
sports_get_standings throws season_not_found for soccer leagues (epl, mls, laliga, bundesliga, seriea, ligue1, ucl) whenever the current season returns an empty ESPN response. The error is identical to the response for a genuinely bad season year, so callers can't distinguish "off-season, try again in August" from "your season parameter is wrong".
Steps to reproduce
- Call
sports_get_standingswith{ league: \"epl\" }(no season) - Observe
isError: true, `reason: "season_no
Read the thread · 2026-06-07 · closed · 1 comment
The remaining reports are on the project's issue tracker.