espn について
AI エージェントに ESPN のライブおよび過去のスポーツデータを提供する MCP サーバーです。スコア、オッズ、選手統計、予測を扱い、games、teams、news の各領域をプロファイルで選択できます。
主な機能
- 01ライブおよび過去のスコアと日程
- 02オッズ、勝率、試合予測
- 03チーム、ロスター、選手の統計
- 04順位表、ランキング、移籍情報
- 05games、teams、news のプロファイル選択
活用シーン
- 01試合中の状況と勝率の追跡
- 02オッズと対戦予測の比較
- 03選手のプロフィール、統計、試合記録の確認
- 04日程、順位表、リーグリーダーの検索
MCP 対応
ESPN の公開スポーツデータを MCP ツールとリソースとして公開します。stdio と Streamable HTTP に対応し、領域別のサーバープロファイルを選べます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx mcp-server-espnESPN_BASE_URLOptional REST base URL overrideESPN_TIMEOUT_SECONDSHTTP request timeout in secondsESPN_MAX_RETRIESMaximum retry attempts on HTTP 429 / 5xxESPN_MCP_READONLYRestrict server execution strictly to read-only inspection toolsESPN_MCP_PROFILEServer domain profile (full, games, teams, news, readonly)ESPN_MCP_ENABLE_TOOL_SEARCHReplace flat tool catalog with dynamic search transformESPN_MCP_TOOL_SEARCH_BACKENDTool Search backend: bm25 (default) or regexローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
🏈 mcp-server-espn
ESPNを通じて、ライブおよび過去のスポーツ分析、コンセンサスベッティングオッズ、予測を提供するエンタープライズグレードのModel Context Protocol(MCP)サーバーです。
AIエージェントに、リアルタイムのスポーツ情報、ライブ勝率、詳細なボックススコア統計、ロースターの階層構造、対戦分析を提供します。
⚠️ 免責事項と公正利用に関するお知らせ
重要
コミュニティプロジェクトに関する免責事項
mcp-server-espnは、独立したオープンソースのコミュニティプロジェクトです。ESPN Inc.またはThe Walt Disney Companyとは提携、後援、承認、支援のいずれも受けていません。「ESPN」はESPN Inc.の商標です。ESPNの公開RESTエンドポイントを通じて提供されるすべてのデータは、教育、研究、個人による非商用利用を目的としています。
💡 開発の背景
自律的なスポーツ分析には、高頻度で構造化された堅牢なデータフィードが必要です。
- 試合のライブ状況と勝率: ターンオーバー、得点プレー、投手交代などのリアルタイムの試合イベントによって、試合の流れや予想結果は刻々と変化します。
- 主力選手の負傷とデプスチャートの変更: 試合中の負傷や交代は、チームの効率や戦術上の対戦状況を根本的に変えます。
- コンセンサスオッズと予測モデル: コンセンサスとなるスポーツブックのオッズ(DraftKings、Caesars、ESPN BET)を予測指標(FPI、BPI)と組み合わせることで、詳細な統計的試合評価が可能になります。
mcp-server-espnは、ESPNの公開スポーツデータエンドポイントに直接接続する、統一された堅牢なModel Context Protocolインターフェースを提供します。
🏟️ システムアーキテクチャ
graph TD
Client["AI Agent / MCP Client<br>(Antigravity, Claude, Codex, Cortex)"]
Gateway["Root FastMCP Gateway (espn-mcp)<br>(stdio / Streamable HTTP)"]
ParentMW["Parent Middleware Pipeline<br>(ParentAuditMiddleware & ReadOnlyGateMiddleware)"]
GamesSub["Sub-Server: espn-games<br>(games_* | GamesDomainGuard)"]
TeamsSub["Sub-Server: espn-teams<br>(teams_* | TeamsDomainGuard)"]
NewsSub["Sub-Server: espn-news<br>(news_* | Resources)"]
ClientHandler["Hardened ESPN AsyncClient<br>(Connection Pool & 429 Jitter Backoff)"]
ESPN["ESPN Public REST CDN<br>(https://site.web.api.espn.com)"]
Client <-->|"JSON-RPC (tools/list, tools/call)"| Gateway
Gateway --> ParentMW
ParentMW --> GamesSub
ParentMW --> TeamsSub
ParentMW --> NewsSub
GamesSub & TeamsSub & NewsSub <-->|"API Methods"| ClientHandler
ClientHandler <-->|"HTTPS REST Mirror"| ESPN
🚀 FastMCP 4 サーバー構成
mcp-server-espn は、root.mount(..., namespace="...") を使った標準的な FastMCP 4 サーバー構成を実装しています。
- ドメイン別サブサーバー:
espn-games(games_*)、espn-teams(teams_*)、espn-news(news_*)に分割されています。 - 階層型ミドルウェア:
- 親:
ParentAuditMiddleware(タイミングログ、監査証跡、シークレットの除去)とReadOnlyGateMiddleware(フェイルクローズ方式の読み取り専用の強制)。 - 子:
GamesDomainGuardMiddleware(クエリ上限の検証、<= 100)とTeamsDomainGuardMiddleware(チームおよび選手の識別子の検証)。
- 親:
- 用途別プロファイル:
--profile full|games|teams|news|readonly(ESPN_MCP_PROFILE)を使って、軽量な機能セットを実行します。full(デフォルト):すべてのドメインツールとリソース、計 33 個をマウントします。games:スコア、サマリー、スケジュール、順位表、ランキング、トランザクション、リーグリーダー、ドラフト、ライブのプレー・バイ・プレー、状況、オッズ、確率、予測、カレンダー、先物、パワーインデックス(20 個のツール)。teams:ロースター、デプスチャート、選手の統計、選手プロフィール、略歴、統計、試合ログ、スプリット、検索、チーム一覧、チーム詳細、チーム統計(12 個のツール)。news:リーグニュースと参照リソース(1 個のツール)。readonly:すべてのルートで読み取り専用を強制します。
- オプトインのツール検索:デフォルトでは標準のフラットな
tools/listを維持し、クライアントとのシームレスな互換性を保ちます。一方、--enable-tool-search(ESPN_MCP_ENABLE_TOOL_SEARCH)を使うと、検索変換を有効にできます。デフォルトでは自然言語クエリに対して BM25 ランキングを使用します(search_toolsはqueryを受け取ります)。または、--tool-search-backend regex(ESPN_MCP_TOOL_SEARCH_BACKEND=regex)を指定すると、正規表現パターンを使用します(search_toolsはpatternを受け取ります)。
📈 スポーツインテリジェンスのワークフロー
ワークフロー 1:試合中の勝利確率と状況の追跡
- 進行中の試合を確認:エージェントが
games_get_scoreboard(sport="football", league="nfl")を呼び出し、後半の接戦を特定します。 - 試合中の状況と勝利確率を取得:
games_get_game_situation(sport="football", league="nfl", event_id="401872947")とgames_get_win_probabilities(sport="football", league="nfl", event_id="401872947")を呼び出し、ダウンと距離、レッドゾーンの状況、リアルタイムの勝利期待度曲線を調べます。 - プレー・バイ・プレーを確認:
games_get_play_by_play(sport="football", league="nfl", event_id="401872947")を呼び出し、ドライブごとの流れと得点イベントのログを確認します。
ワークフロー 2:選手の詳細分析とファンタジー評価
- 略歴とキャリアの背景:
teams_get_athlete_bio(sport="football", league="nfl", athlete_id="12483")を呼び出し、ドラフトでの指名実績、大学での経歴、身体的指標を取得します。 - 最近の試合ログとスプリット:
teams_get_athlete_gamelogとteams_get_athlete_splitsを取得し、特定の守備体系や会場条件に対するパフォーマンスの傾向を分析します。 - リーグ全体のリーダーボードでの順位:
games_get_leaders_by_athlete(sport="football", league="nfl", category="passing", sort="yards")を呼び出し、パーセンタイル順位を評価します。
🏟️ 対応スポーツ・リーグの参照一覧
サーバーは正規のスポーツ/リーグのスラッグペアに対応しており、よく使われるショートカットは自動的に正規化されます。
| スポーツのスラッグ | リーグのスラッグ | 認識されるショートカット/別名 | 一般的な表示名 |
|---|---|---|---|
football | nfl | nfl | ナショナル・フットボール・リーグ |
football | college-football | cfb, ncaa-football, fbs | NCAAカレッジフットボール |
basketball | nba | nba | ナショナル・バスケットボール・アソシエーション |
basketball | mens-college-basketball | cbb, ncaa-basketball | NCAA男子カレッジバスケットボール |
basketball | womens-college-basketball | wbb, ncaa-womens-basketball | NCAA女子バスケットボール |
basketball | wnba | wnba | 女子ナショナル・バスケットボール・アソシエーション |
baseball | mlb | mlb | メジャーリーグベースボール |
hockey | nhl | nhl | ナショナル・ホッケー・リーグ |
soccer | eng.1 | epl, premier-league | イングランド・プレミアリーグ |
soccer | usa.1 | mls | メジャーリーグサッカー |
soccer | uefa.champions | ucl, champions-league | UEFAチャンピオンズリーグ |
soccer | esp.1 | la-liga | スペイン・ラ・リーガ |
soccer | ita.1 | serie-a | イタリア・セリエA |
soccer | ger.1 | bundesliga | ドイツ・ブンデスリーガ |
soccer | fra.1 | ligue-1 | フランス・リーグ・アン |
📊 ツールスイート(33のドメインツール)
すべてのツールは、明示的なMCP 2.0アノテーション(readOnlyHint=True、idempotentHint=True)を実装しています。
| ドメイン | ツール | パラメーター | 説明 |
|---|---|---|---|
| Games | games_get_scoreboard | sport, league, date, week, season_type, group, limit | 任意の日付(date=YYYYMMDD)または両端を含む日付範囲(date=YYYYMMDD-YYYYMMDD)の最終スコアと結果(日付範囲は最大31日分まで1日ずつ取得します。ESPNがチームスポーツのスコアボードでは範囲形式を拒否するためです。そのため、limitは各日に適用され、最大で31 × limit件のイベントが返されます。また、1日でも取得に失敗すると呼び出し全体が失敗します。ゴルフの日付範囲はそのままESPNに送信されます)。さらに、ライブスコア、試合状態(pre/post)、ピリオド/時計、テレビ放送、先発予想投手も返します。ほかのゲームツールで使用するイベントIDも返します。 |
| Games | games_get_game_summary | sport, league, event_id | コンセンサスベッティングライン、対戦予測の勝率、ATS、得点プレー、ドライブ、リーダー、勢い。 |
| Games | games_get_team_schedule | sport, league, team_id, season, season_type | 過去の試合結果とスコアを含むシーズンスケジュールです。デフォルトではレギュラーシーズンが対象で、season_type=3を指定するとポストシーズンの試合も含まれます。 |
| Games | games_get_standings | sport, league, season | ディビジョン、カンファレンス、リーグ全体の順位、勝敗記録、首位とのゲーム差、勝率。seasonはシーズンが終了する年(2016は2015-16 NBAシーズン)を指定します。サッカーの場合は開始年を指定します(2026は2026-27 Premier Leagueシーズン)。レスポンスにはrequested_season、season、season_displayが含まれます。 |
| Games | games_get_rankings | sport, league | 全米トップ25の世論調査とランキング(AP Top 25、Coaches Poll、College Football Playoff)。 |
| Games | games_get_transactions | sport, league, limit | リーグ全体の移籍、ロースターのトレード、ウェーバー、契約、放出。 |
| Games | games_get_leaders_by_athlete | sport, league, limit, category, sort | リーグ内の選手を対象とした統計リーダーボード。 |
| Games | games_get_leaders_by_team | sport, league, limit, category, sort | チームの統計ランキングとリーダーボード。 |
| Games | games_get_league_groups | sport, league | リーグのカンファレンス、ディビジョン、構造上のグループ階層。 |
| Games | games_get_league_events | sport, league, dates | リーグで現在予定されているイベント。ESPNのイベントルートは日付を無視するため、日付による絞り込みはサポートされていません。datesを指定するとリクエストは行われず、games_get_scoreboardに同じ値をdateとして指定するよう案内するisError: trueが返されます。 |
| Games | games_get_league_draft | sport, league, season | リーグのドラフトラウンド、チームの指名、指名結果。 |
| Games | games_get_scoreboard_header | sport, league | スポーツとリーグの試合を対象とした、ライブティッカー用スコアボードのヘッダーデータ。 |
| Games | games_get_event_odds | sport, league, event_id, competition_id | スポーツブックのコンセンサスオッズとプロバイダーオッズ(スプレッド、合計得点、マネーライン)。 |
| Games | games_get_play_by_play | sport, league, event_id, limit, page | プレーごとの流れ、時計、得点、ドライブイベント。 |
| Games | games_get_game_situation | sport, league, event_id | 試合中のリアルタイム状況(ダウン、距離、ヤードライン、ボールの保持、レッドゾーン)。 |
| Games | games_get_win_probabilities | sport, league, event_id | 試合の進行に伴う、ライブおよび過去の勝率推移。 |
| Games | games_get_game_predictor | sport, league, event_id | 試合前および試合中の対戦予測と予測指標。 |
| Games | games_get_calendar | sport, league, dates | シーズンを通じたリーグのスケジュールカレンダーと開催中イベントの日付。 |
| Games | games_get_futures | sport, league, season | シーズンの先物ベッティング市場(優勝オッズ、勝利数の合計)。 |
| Games | games_get_power_index | sport, league, season | チームのパワーインデックス(FPI/BPI)評価と効率指標。 |
| Teams | teams_search | query, type, limit | 名前またはキーワードで選手とチームを横断検索します(type="player"または"team")。 |
| Teams | teams_list_teams | sport, league | 指定したリーグに所属する全フランチャイズ/チームの一覧。ID、名前、ロゴが含まれます。 |
| Teams | teams_get_team | sport, league, team_id | チームの詳細概要、会場、成績、順位の概要、今後予定されているイベント。 |
| Teams | teams_get_team_statistics | sport, league, team_id | チームと対戦相手の統計カテゴリ別内訳(パス、ランなど)。 |
| Teams | teams_get_team_roster | sport, league, team_id | ポジション別の現役選手一覧、コーチ情報、背番号、負傷状況。 |
| Teams | teams_get_team_depth_chart | sport, league, team_id | ポジションごとの先発/控えの序列(QB1、QB2など)。負傷による交代の影響をモデル化できます。 |
| Teams | teams_get_player_stats | sport, league, event_id | 試合カテゴリ別の個々の選手のボックススコア統計。 |
| Teams | teams_get_athlete_overview | sport, league, athlete_id | 選手の略歴、シーズン/通算成績、試合ログ、次の試合、Rotowireの注記。 |
| Teams | teams_get_athlete_bio | sport, league, athlete_id | 選手の詳細な経歴、ドラフト履歴、出生情報、大学での経歴。 |
| Teams | teams_get_athlete_stats | sport, league, athlete_id, season | 選手のシーズンおよび通算の全カテゴリ別統計。 |
| Teams | teams_get_athlete_gamelog | sport, league, athlete_id, season | シーズンを通じた選手の試合ごとの成績ログ。 |
| Teams | teams_get_athlete_splits | sport, league, athlete_id, season | 状況別の統計内訳(ホーム/アウェイ、人工芝/天然芝、月別、対戦相手別)。 |
| News | news_get_news | sport, league, limit | 最近のニュース見出し、負傷状況、ロースターに関する速報分析。 |
🏃 クイックスタートとインストール
1. uvx から直接実行する(インストール不要)
[project.scripts] のコンソールスクリプトはどちらも espn_mcp.server:main を呼び出します。espn-mcp(以下で使用)と mcp-server-espn があります。インストール例ではバージョンを固定していません。リリースを固定するには、Releases のバージョンを指定してください。
uvx --from mcp-server-espn espn-mcp
アップグレード後は、稼働中のプロセスの起動時刻が新しいバイナリの mtime より後になるよう、MCP ホストを再読み込みしてください(古いプロセスは新しいパッケージではありません)。
2. pip または uv でインストールする
# Using pip
pip install mcp-server-espn
# Using uv
uv add mcp-server-espn
3. Docker から実行する
docker run --rm -i ghcr.io/christianclaudio/mcp-server-espn:latest
🎛️ エンジンの設定
| 変数 | CLI フラグ | デフォルト | 説明 |
|---|---|---|---|
ESPN_BASE_URL | — | https://site.web.api.espn.com | 対象となる ESPN REST CDN のベース URL(Akamai の TLS フィルターを回避します) |
ESPN_TIMEOUT_SECONDS | — | 30.0 | HTTP リクエストのタイムアウト(秒) |
ESPN_MCP_AUTH_TOKEN | — | unset | HTTP トランスポートで必要な共有ベアラートークン(stdio では無視されます) |
ESPN_MCP_ALLOW_UNAUTHENTICATED_BIND | — | unset | 1 を指定すると、トークンなしで localhost 以外のホストに HTTP バインドできます |
ESPN_MAX_RETRIES | — | 3 | 429/5xx 発生時の最大再試行回数。ジッター付き指数バックオフを使用し、Retry-After の指定に応じて待機時間を延長します(ESPN_TIMEOUT_SECONDS が上限です) |
ESPN_MCP_READONLY | — | 0 | サーバーを読み取り専用の検査ツールに限定します |
ESPN_MCP_PROFILE | --profile | full | ドメイン別サーバープロファイル:full、games、teams、news、readonly |
ESPN_MCP_ENABLE_TOOL_SEARCH | --enable-tool-search | 0 | ツールのフラットなカタログを動的検索トランスフォーム(search_tools + call_tool)に置き換えます |
ESPN_MCP_TOOL_SEARCH_BACKEND | --tool-search-backend | bm25 | ツール検索バックエンド:bm25(BM25SearchTransform、自然言語によるランキング。search_tools は query を受け取ります)または regex(RegexSearchTransform、正規表現パターン。search_tools は pattern を受け取ります) |
🎮 クライアント統合ガイド
🧡 Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または %APPDATA%\Claude\claude_desktop_config.json(Windows)に追加します。
{
"mcpServers": {
"espn": {
"command": "uvx",
"args": ["--from", "mcp-server-espn", "espn-mcp"],
"env": {
"ESPN_TIMEOUT_SECONDS": "20.0"
}
}
}
}
Claude Code CLI の場合:
claude mcp add espn -- uvx --from mcp-server-espn espn-mcp
♊ Google Antigravity & Gemini CLI
.agents/mcp_config.json または ~/.gemini/config/mcp_config.json に追加します。
{
"mcpServers": {
"espn": {
"command": "uvx",
"args": ["--from", "mcp-server-espn", "espn-mcp"],
"env": {
"ESPN_TIMEOUT_SECONDS": "20.0"
},
"lazy": true
}
}
}
❄️ Snowflake Cortex
~/.snowflake/cortex/mcp.json に追加します。
{
"mcpServers": {
"espn": {
"command": "uvx",
"args": ["--from", "mcp-server-espn", "espn-mcp"],
"env": {
"ESPN_TIMEOUT_SECONDS": "20.0"
},
"lazy": true
}
}
}
⚡ Cursor IDE
.cursor/mcp.json に追加します。
{
"mcpServers": {
"espn": {
"command": "uvx",
"args": ["--from", "mcp-server-espn", "espn-mcp"]
}
}
}
💻 VS Code(Cline / Roo Code / Copilot Agent Mode)
cline_mcp_settings.json または .vscode/settings.json に追加します。
{
"mcpServers": {
"espn": {
"command": "uvx",
"args": ["--from", "mcp-server-espn", "espn-mcp"]
}
}
}
🌐 ローカル HTTP / ネットワークトランスポートモード
最新の Streamable HTTP で FastMCP サーバーを起動します。
uvx --from mcp-server-espn espn-mcp --transport streamable-http --host 127.0.0.1 --port 8000
Streamable HTTP クライアントを http://127.0.0.1:8000/mcp(FastMCP のデフォルトの Streamable HTTP パス)に接続します。
デフォルトの(ステートフルな)HTTP モードでは、30 分間アイドル状態のセッションは期限切れになります。次のリクエストは HTTP 404 を返し、クライアントは新しいセッションを開始する必要があります。FastMCP の session_idle_timeout(http_app() 内)または FASTMCP_HTTP_SESSION_IDLE_TIMEOUT(秒単位。期限切れにしない場合は none)で変更できます。FastMCP 4.1.0 リリースおよび #5229を参照してください。
HTTP 認証。 すべての HTTP リクエストで Authorization: Bearer <token> を必須にするには、ESPN_MCP_AUTH_TOKEN を設定します。トークンがない、または誤っている場合は 401 が返されます。トークンの前後の空白は削除され、空白のみの値は未設定として扱われます。サーバーの構築時に設定されるため、espn-mcp、fastmcp run、および mcp.http_app() をマウントする ASGI ホストでは、いずれも認証が適用されます。stdio では使用されません。
トークンが設定されていない場合、espn-mcp は 127.0.0.1、::1、localhost 以外のホストへの HTTP バインドを拒否し、コード 2 で終了します。トークンを設定するか、localhost にバインドするか、ESPN_MCP_ALLOW_UNAUTHENTICATED_BIND=1 を設定して、認証なしでのパブリックバインドを許可してください。他のエントリーポイントではトークンは使用されますが、localhost のチェックは行われません。fastmcp run と http_app() は espn-mcp の main() を経由しないため、トークンなしで 0.0.0.0 にバインドしても拒否されず、認証なしでサービスを提供します。バインドアドレスはホストまたはそのプロセスマネージャーが管理するため、そこで ESPN_MCP_AUTH_TOKEN を設定してください。
HTTP 経由で画像を提供するには、シェルまたは環境変数ファイルからトークンを渡し(固定値は使用しないでください)、クライアントが使用する公開ホスト名を指定します。
PUBLIC_HOST=mcp.example.com # the host name clients use
export ESPN_MCP_AUTH_TOKEN="$(openssl rand -hex 32)" # or keep it in an env file
docker run --rm -p 8000:8000 -e ESPN_MCP_AUTH_TOKEN \
ghcr.io/christianclaudio/mcp-server-espn:latest \
--transport streamable-http --host 0.0.0.0 --allowed-host "$PUBLIC_HOST"
# with an env file instead: docker run --rm -p 8000:8000 --env-file espn.env ...
📚 正式ドキュメントとライブドキュメント MCP
MCP サーバーの開発、堅牢化、拡張を行う際は、フレームワークとプロトコルの公式リファレンスを参照してください。
- FastMCP 4 フレームワークリファレンス:
https://gofastmcp.com/llms.txt— サーバーの構成(mount)、階層型ミドルウェア、変換(ToolTransform、ToolSearch)、ライフスパン、インメモリテストクライアント。 - Model Context Protocol 仕様:
https://modelcontextprotocol.io/llms.txt— 公式仕様(2026-07-28)、ワイヤーレベルの JSON-RPC スキーマ、アノテーション、トランスポートのフレーミング。
ライブドキュメント MCP エンドポイント(SSE / Streamable HTTP)
AI コーディングエージェントをライブドキュメントサーバーに直接接続できます。
- FastMCP ドキュメントサーバー:
https://gofastmcp.com/mcp(ツール:search_fast_mcp、query_docs_filesystem_fast_mcp、submit_feedback) - Anthropic MCP ドキュメントサーバー:
https://modelcontextprotocol.io/mcp(ツール:search_model_context_protocol、query_docs_filesystem_model_context_protocol、submit_feedback)
{
"mcpServers": {
"fastmcp-docs": { "type": "sse", "url": "https://gofastmcp.com/mcp" },
"mcp-official-docs": { "type": "sse", "url": "https://modelcontextprotocol.io/mcp" }
}
}
🏆 検証と品質ゲート
# Run unit test suite (100% statement coverage enforced)
pytest
# Static type safety & formatting
mypy --strict src/
ruff check --fix .
ruff format .
# Tool contract, drift & protocol conformance audits
python scripts/check_tool_contract.py
python scripts/check_openapi_drift.py
./scripts/check_conformance.sh
📜 ライセンス
Apache-2.0 License の下で配布されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。