Connect Claude, ChatGPT, Cursor and other AI assistants to ESPN sports data through MCP. Get live scores, standings, box scores, play-by-play, rosters, schedules, odds, athlete stats, rankings and news across NFL, NBA, MLB, NHL, soccer, F1 and UFC, with no ESPN API key. By MrBridge (mr-bridge.com)
The published connection instructions did not work. Claude Code users were told to open a Settings screen that client does not have, and the Claude Desktop setup depended on an npm package, @anthropic/mcp-proxy, that does not exist and answers 404. Both are replaced, and the last note in this entry says how each new procedure was checked.
Claude Desktop is documented through its native remote connector, Settings then Connectors then Add custom connector, followed by the Connect button, the Apify sign-in and the Tools permissions menu. Claude Desktop authenticates by signing in to Apify, so the URL it is given carries no token and no credential is stored in the connector. The claude_desktop_config.json procedure is gone, along with its Windows and macOS file paths, the proxy command and the restart step, because a remote MCP server needs none of them.
Claude Code has its own section, built on claude mcp add --transport http --scope user espn with an Authorization: Bearer header naming an environment variable. The token is no longer published inside the URL, and its value is not written to .claude.json. Where the variable itself comes from is your call, and the section says so rather than promising anything about your shell history. The scope is stated because Claude Code otherwise stores the server in the current project alone, where it stops existing as soon as you work elsewhere.
The Claude Code permission pattern is corrected to mcp__espn__*. The previous mcp__ESPN__* matched no tool, so the shortcut it promised never worked.
ChatGPT and Codex have their own sections. ChatGPT is reached through Integrations, Plugins, Add MCP Server, where the type must be set to Streamable HTTP and the token goes in the Bearer Token env var field. Codex connects over Streamable HTTP with a Bearer token read from an environment variable.
The README now states the rule it follows: one Streamable HTTP endpoint, with authentication adapted to each client. Claude Desktop signs in to Apify, ChatGPT takes the token in its Bearer Token env var field, Claude Code and Codex read it from APIFY_TOKEN, and URL-only interfaces fall back to ?token=.
Cursor, Windsurf and VS Code instructions are unchanged and were not retested for this release.
How each procedure was checked, since the old one was written from memory and that is how it went wrong.
Run by hand on a real account: ChatGPT, from the connection panel through to an ESPN answer, and Claude Desktop, from Add custom connector through the Apify sign-in and the tools permission menu to an ESPN answer. That Claude Desktop needs no token in the URL comes from the same connector flow on another Actor of this fleet, not from a second ESPN run.
Executed against this server by the maintainer: the Claude Code and Codex commands, each checked for connection and for tool discovery, without calling a billable tool.
Not retested: Cursor, Windsurf and VS Code, whose instructions this release does not touch.
Changed
What you are charged for is narrower. A call rejected during input validation, a call rejected by ESPN, and a technical failure are no longer charged. Naming a team, game or player identifier that does not exist now costs nothing, and neither does an ESPN outage or a timeout.
A valid query that correctly returns no results is still charged. The question was answered, and "no games scheduled today" is the answer. This is the one case where you pay for an empty response.
The run has one shared dollar spending cap. Whether a later call fits is calculated from that event's price, so a cheaper event can remain available after a more expensive one is refused.
The billed response after which another event of the same type no longer fits carries a warning at the end of its text, so the shared cap is visible in the answer itself rather than only in the run log.
An empty Dataset view now lets saved Tasks be published as Examples pages without implying that MCP responses are stored. Tool results are still returned over MCP HTTP, and no Dataset item is written.
The Examples view now exposes the actual MCP result fields, content and isError, so published Task pages can render an Output fields section. Results remain delivered over MCP HTTP. No Dataset item is written.
[0.2.0] - 2026-08-05
Fixed
BREAKING CHANGE: game dates and times are now rendered in US Eastern time instead of UTC.
Every date and time was previously formatted in the container's timezone, which is UTC. Games starting in the evening US time therefore appeared on the following calendar day. An event tipping off at 7:30 PM ET on 22 November was reported as 23 November. Because NBA, NFL and NHL games typically start between 19:00 and 22:30 ET, most rendered dates were wrong by one day.
If you parse or store dates returned by these tools, expect them to shift by one day for evening games.
Outputs containing a clock time now include the timezone, such as 7:30 PM EST. Date-only outputs are resolved in the target timezone but carry no suffix, since a date is not a clock time.
An unparseable timestamp now renders date unavailable rather than the string Invalid Date.
The server status message reported 12 tools while 13 were registered.
Added
Optional timezone parameter on the five tools above. Accepts any IANA name, for example Europe/Paris. Defaults to America/New_York, the ESPN home market. An invalid value is rejected before any request is sent to ESPN, so it is never charged.
Changed
The README no longer states that there are no idle costs. In Standby mode with pay-per-event pricing, users cover platform usage in addition to event charges, and the container stays warm for 300 seconds after the last request. Prices now live only on the Pricing tab, which is always current.
Hardcoded tool counts are gone from the public surfaces that carried a stale one. espn_play_by_play had been missing from the README tool table since it shipped, and .actor/output_schema.json still advertised twelve tools. Only .actor/actor.json states this Actor's current tool count now, and a test holds every occurrence of it to the number of registered tools while forbidding one anywhere else.
The README version badge and its one-line changelog are removed. Release notes live in CHANGELOG.md, so there is a single place to keep current rather than three.