プロトタイプ · プレビュー版:公式レジストリのすべてのサーバーを掲載し、30分ごとに同期しています。Google でログインするとレビューを書けます。プロトタイプ · 30分ごとに更新
PopNx MCPAIを使う人のためのMCPサーバー · やさしい言葉で解説

Sportwizzard

作者:adamruehleバージョン 0.1.4i★ 0iパソコンでもクラウドでも
レジストリ名com.sportwizzard/sportwizzard

インストール方法

What it does

Real-time sports betting data: odds, player props, edges and arbitrage from 35+ books and DFS apps.

  • Connects パソコンでもクラウドでも
  • Account or key Cloud: Needs Authorization · Local: Needs SPORTWIZZARD_API_KEY
  • Category ゲーム・スポーツ・料理・学習

インストール

使っているAIアプリを選んで、設定をコピーしてください。

チェック 3/5 合格 · 質問内容は提供元のサーバー(mcp.sportwizzard.com)を通ります · ✓ コマンド確認済み 2026年11月15日

まず:どの AI を使っていますか?

使っているアプリを選ぶと、下に手順が表示されます。

Claude につなげます · 約 5 分

Sportwizzard のキーが必要です(提供元のサイトで作成) · claude.ai かデスクトップアプリで一度設定すれば、チャットで使えます · 無料アカウントは 1 つまで · Team/Enterprise はオーナー(Owner)が追加

  1. Sportwizzard に登録してキーを作る

    提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。

    Sportwizzard のサイトを開く ↗

  2. Claude の Connectors ページを開く

    CustomizeConnectors

    CustomizeConnectors1Add2https://…3Add4
  3. 「Add」→「Custom」→「Web」を押し、この 2 つを入力

    ここからコピーして Claude の同じ名前の欄に貼り付け、Continue を押します

    Name · 名前Sportwizzard
    Remote MCP server URL · アドレスhttps://mcp.sportwizzard.com/mcp

    Request headers に、この名前と値を追加

    ヘッダー名Authorization
    値Bearer <ここにキーを貼り付け>

    キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください

    Claude が検出したサインイン設定の画面で Continue を押す · Authentication は作者の説明どおり(Sign in now・Sign in when needed・No sign in)を選び Add を押します

  4. チャットで有効にする

    +ConnectorsSportwizzard

  5. 試してみる

    Sportwizzard を使って、私に何ができるか教えて、1 つやってみせて

    ✓ Claude が Sportwizzard を使っていると言うか、回答に Sportwizzard のツール名が出れば接続成功です

メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります

ChatGPT はまだ Sportwizzard につなげません

Sportwizzard は接続時に自分のキーが必要ですが、OpenAI のヘルプページは OAuth ログインしか説明しておらず、確認できたキー入力方法がありません

代わりにできること

A · Sportwizzard につなげるアプリを使う

  • Sportwizzard のキーが必要です(提供元のサイトで作成) · claude.ai かデスクトップアプリで一度設定すれば、チャットで使えます · 無料アカウントは 1 つまで · Team/Enterprise はオーナー(Owner)が追加
  • Sportwizzard のキーが必要です(提供元のサイトで作成)
  • Sportwizzard のキーが必要です(提供元のサイトで作成)
  • Sportwizzard のキーが必要です(提供元のサイトで作成)

B · ゲーム・スポーツ・料理・学習 の中で ChatGPT につなげる別のサーバー

同じカテゴリでよく使われているものから、キーなしでアドレスだけでつなげるものを選びました

Claude Code につなげます · 約 5 分

Sportwizzard のキーが必要です(提供元のサイトで作成)

  1. Sportwizzard に登録してキーを作る

    提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。

    Sportwizzard のサイトを開く ↗

  2. ターミナルを開く

    Mac:Command+スペースで Terminal と入力 · Windows:PowerShell を開く

  3. このコマンドを貼り付けて Enter

    claude mcp add --transport http --scope user sportwizzard https://mcp.sportwizzard.com/mcp --header 'Authorization: Bearer your-value'

    Enter の前に「your-value」を自分のキーに書き換えてください

    キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください

  4. Claude Code で /mcp と入力

    Sportwizzard が一覧にあり、接続済みと表示されれば OK です

  5. 試してみる

    Sportwizzard を使って、私に何ができるか教えて、1 つやってみせて

    ✓ Claude Code が Sportwizzard を使っていると言うか、回答に Sportwizzard のツール名が出れば接続成功です

メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります

Cursor につなげます · 約 5 分

Sportwizzard のキーが必要です(提供元のサイトで作成)

  1. Sportwizzard に登録してキーを作る

    提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。

    Sportwizzard のサイトを開く ↗

  2. このボタンで Cursor を開く

    Cursor で開く

    Cursor がインストールの確認をするので Install を押します

  3. キーを入力

    Sportwizzard の設定で Authorization が空です。自分のキーを入れて保存します

    キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください

  4. Cursor の AI チャットを Agent モードで開く

  5. 試してみる

    Sportwizzard を使って、私に何ができるか教えて、1 つやってみせて

    ✓ Cursor が Sportwizzard を使っていると言うか、回答に Sportwizzard のツール名が出れば接続成功です

メニュー名は 2026年11月11日 に Cursor のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります

VS Code につなげます · 約 5 分

Sportwizzard のキーが必要です(提供元のサイトで作成)

  1. Sportwizzard に登録してキーを作る

    提供元のサイトで登録し、次の手順で使う API キーを作ります。料金や無料プランは提供元のサイトで確認してください。

    Sportwizzard のサイトを開く ↗

  2. このボタンで VS Code を開く

    VS Code で開く

    VS Code がインストールの確認をするので Install を押します

  3. キーを入力

    Sportwizzard の設定で Authorization が空です。自分のキーを入れて保存します

    キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください

  4. VS Code の AI チャットを Agent モードで開く

  5. 試してみる

    Sportwizzard を使って、私に何ができるか教えて、1 つやってみせて

    ✓ VS Code が Sportwizzard を使っていると言うか、回答に Sportwizzard のツール名が出れば接続成功です

メニュー名は 2026年11月11日 に VS Code のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります

Windsurf、Zed、Gemini CLI など MCP を使える他のアプリは追加方法がそれぞれ違います。アプリ一覧で確認してください

MCP を使えるアプリをすべて見る →

Web 経由でつなぐアプリ用のアドレス

アドレスhttps://mcp.sportwizzard.com/mcp

JSON 設定は下の「開発者向け」にあります

つまずいたら?Sportwizzard を使っている人に聞いてみましょう💬 ディスカッション →
開発者向け:ターミナルのコマンドと JSON 設定

Web 経由

Claude Code

claude mcp add --transport http --scope user sportwizzard https://mcp.sportwizzard.com/mcp --header 'Authorization: Bearer your-value'

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "sportwizzard": {
      "url": "https://mcp.sportwizzard.com/mcp",
      "headers": {
        "Authorization": "Bearer your-value"
      }
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "sportwizzard": {
      "type": "http",
      "url": "https://mcp.sportwizzard.com/mcp",
      "headers": {
        "Authorization": "Bearer your-value"
      }
    }
  }
}

パソコンにインストール

Claude Code

claude mcp add --scope user sportwizzard --env SPORTWIZZARD_API_KEY=your-value -- npx -y sportwizzard-mcp

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "sportwizzard": {
      "command": "npx",
      "args": [
        "-y",
        "sportwizzard-mcp"
      ],
      "env": {
        "SPORTWIZZARD_API_KEY": "your-value"
      }
    }
  }
}

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "sportwizzard": {
      "command": "npx",
      "args": [
        "-y",
        "sportwizzard-mcp"
      ],
      "env": {
        "SPORTWIZZARD_API_KEY": "your-value"
      }
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "sportwizzard": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "sportwizzard-mcp"
      ],
      "env": {
        "SPORTWIZZARD_API_KEY": "your-value"
      }
    }
  }
}

自分で入力する値

  • SPORTWIZZARD_API_KEY 秘密 必須 env
    Free self-serve API key from https://sportwizzard.com/account (API Keys tab)
  • Authorization 秘密 必須 HTTP header
    Bearer — free self-serve keys at https://sportwizzard.com/account (API Keys tab), no card required

説明は英語の原文のままです。

この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。

ひと目でわかる

週あたりのダウンロードi
84/週
確認済みドメイン
✓ sportwizzard.com
接続方法
パソコンでもクラウドでも
最新バージョンi
0.1.4
レジストリ公開日i
2026年7月24日
コードの最終更新i
2026年11月14日
作者
adamruehle
パッケージ
npm: sportwizzard-mcp
ウェブサイト
sportwizzard.com
レジストリでの状態
有効

使えるアプリ

このサーバーのつなぎ方と、各アプリの公式ドキュメントに基づきます。2026年11月10日に確認。

インターネット経由でつなげるアプリ

ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast

パソコン上で動かせるアプリ

ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast

すべてのアプリと長所・短所 →

できること

このサーバーは、ツール一覧を表示する前にサインインを求めます。

基本チェックi

誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月15日にチェック

  • ✓ 合格

    作者とリポジトリが一致

    レジストリ名はドメイン sportwizzard.com で確認済みです(レジストリがドメインの所有を確認しています)

  • ✓ 合格

    今もメンテナンスされている

    コードの最終更新:昨日

  • ✓ 合格

    ライセンスがある

    MITを使用

  • ! 注意

    エンドポイントが応答する

    アクセスを拒否(HTTP 401)し、OAuth ログインもありません。キーが必要か、ボット対策の可能性があり、未確認です。

  • ! 注意

    OAuthでサインイン

    キーやトークンを自分でコピーして貼り付ける必要があります

  • … 未チェック

    ツールの説明に隠れた指示がない

    まだチェックしていません。エンドポイントをチェックするときにツール一覧を読み取ります

公開済みの脆弱性(OSV.dev)

OSV.dev に sportwizzard-mcp@0.1.4 の登録はありません

このバージョンのパッケージ本体のみ確認。すべての依存関係ではありません · 確認日 2026年11月15日

確認していること → · JSON

作者の方へ:再確認の依頼・情報の誤りの報告

話し合い

質問、コツの共有、使えないことの報告ができます。「役に立った」の多い順です。

まだ投稿はありません。最初の質問や共有をどうぞ。

ここの投稿は利用者によるもので、PopNx チームのものではありません。

ログインして投稿

ユーザーレビュー

まだレビューはありません

ログインしてレビューを書く

ゲーム・スポーツ・料理・学習のほかのサーバーとの比較i

  • このカテゴリのほかの1504件のうち0%よりスターが多い
  • このカテゴリのほかの1504件のうち15%より最近レジストリに公開
  • 基本チェックの結果が、このカテゴリのほかの1504件のうち9%と同じかそれ以上

レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。

よくある質問

Sportwizzardは安全ですか?

当てはまる基本チェック5項目のうち3項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。

どんなキーやコードが必要ですか?

入力が必要なもの:Authorization, SPORTWIZZARD_API_KEY

パソコンで動きますか、それともクラウドですか?

どちらでも使えます。パソコンにインストールしても、クラウド版につないでもかまいません。

今もメンテナンスされていますか?

GitHubリポジトリの最終更新は昨日、最新バージョン(0.1.4)がレジストリに届いたのは4 か月前です。

どのアプリで使えますか?

Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。URL で接続するので、リモート MCP を受け付けるアプリでも使えます。例:Web 版 ChatGPT(Business 以上はフル MCP、Pro は読み取りのみ)。

代わりに使えるものは?

同じカテゴリには:Anime Garden, WilmAI, Lumify Sports Intelligence, Savecraft, GoodWatch

似た働きのほかの候補

同じカテゴリでほかの作者のもの。コマンドは確認済み。公式を先に、次にスター順。

カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i

Anime Garden

Anime Garden MCP for anime torrent discovery.

作者:yjl9903成長中★ 140011 日前更新

クラウドで動く✓ animes.garden

WilmAI

Finland's Wilma school system for parents and students: schedule, homework, exams and messages.

作者:aikarjal成長中↓ 1399/週★ 86 リポジトリ全体のスター6 日前更新

パソコンで動く✓ 提供元 · wilm.ai

Lumify Sports Intelligence

Schedules, scores, odds, splits & explainable AI bet confidence — 8+ sports, free instant key.

作者:lumifyai初期★ 144 か月前更新

クラウドで動く✓ 提供元 · lumify.ai

Savecraft

Savecraft serves real save game data and expert game knowledge to AI assistants.

作者:joshsymonds初期★ 137 か月前更新

クラウドで動くリポジトリはアーカイブ済み✓ 提供元 · savecraft.gg

GoodWatch

Find movies and TV shows, track watches, and get suggestions based on your taste.

作者:alp82初期★ 50 リポジトリ全体のスター26 日前更新

クラウドで動く✓ 提供元 · goodwatch.app
  • Anime Garden — クラウドで動き、インストール不要 · キー不要
  • WilmAI — パソコンにインストールが必要 · キー不要
  • Lumify Sports Intelligence — クラウドで動き、インストール不要 · キーが必要
  • Savecraft — クラウドで動き、インストール不要 · キー不要
  • GoodWatch — クラウドで動き、インストール不要 · キー不要

作者のREADME

READMEを開く

作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。

SportWizzard MCP Server

Query live sports-betting data — odds, player props, +EV edges, arbitrage, stats and reference data from 35+ sportsbooks and DFS apps — from any MCP-capable AI agent (Claude Code, Claude Desktop, Codex, Cursor, …).

20 read-only tools over the SportWizzard REST v1 API, available two ways: a hosted remote server (zero install) and a stdio server via npx. Get a free API key at https://sportwizzard.com/account (API Keys tab — no card required).

Hosted (recommended — zero install)

claude mcp add --transport http sportwizzard https://mcp.sportwizzard.com/mcp \

--header "Authorization: Bearer sw_live_your_api_key_here"

codex mcp add sportwizzard --transport http --url https://mcp.sportwizzard.com/mcp \

--header "Authorization: Bearer sw_live_your_api_key_here"

The hosted server is a thin proxy: your key is forwarded to the SportWizzard API, which enforces auth and rate limits. All 20 tools work on both transports. (download_snapshot on the hosted server returns a ready-to-run save_command your agent executes locally, plus the CDN download_url when the download is public; with an API key and include_history=true the command uses the keyed history route instead. On stdio it writes the file directly.)

Successful authenticated live tool calls send a best-effort account-usage receipt. The measurement request contains no tool arguments or result data. For hosted download_snapshot, a successful CDN HEAD check counts because the tool has verified that the returned download URL is reachable; a failed HEAD check does not count.

Stdio (local)

npx -y sportwizzard-mcp

Claude Code:

claude mcp add sportwizzard -e SPORTWIZZARD_API_KEY=sw_live_your_api_key_here -- npx -y sportwizzard-mcp

Claude Desktop (claude_desktop_config.json — macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

{

"mcpServers": { "sportwizzard": { "command": "npx", "args": ["-y", "sportwizzard-mcp"], "env": { "SPORTWIZZARD_API_KEY": "sw_live_your_api_key_here" } } } }

Mock mode (no key, no network)

Set SPORTWIZZARD_MOCK=1 to get canned sample responses — useful for wiring up an integration before you have a key.

Configuration

Env varDefaultPurpose
SPORTWIZZARD_API_KEY_(none)_Your API key, sent as X-Api-Key.
SPORTWIZZARD_BASE_URLhttps://api.sportwizzard.comOverride the API base URL.
SPORTWIZZARD_MOCK_(off)_1 = canned sample data, no network.

Tools

ToolWhat it does
list_events / get_eventEvents/fixtures with their participants — filter by competition, competitor, player, status, time; full detail incl. each side's score, the latest live state, weather, lineups, probable pitchers.
get_event_statsBox score: every player's stat line + competitor results for one event.
get_odds / get_event_odds / get_player_odds / get_competitor_oddsCurrent prices, scoped by event, player, competitor, sportsbook, market, or competition. get_odds also takes scope: event (game markets), season (season-long futures), tournament (golf/tennis outrights); omit for all.
get_edges+EV edges vs. devigged fair market (competition, source, min_edge filters).
get_arbitrageArbitrage opportunities with legs and stake fractions (two/three-way).
list_players / list_competitors / get_player_stats / get_competitor_statsReference data and season/historical stats.
get_player_game_logsBulk per-game stat rows — the model-training feed.
download_snapshotSave the full live board to disk (tens of MB gzip). include_history: true also populates every selection's selectionPrice rows (same schema; 5 credits flat vs 1).
list_sportsbooks / list_competitions / list_markets / statusDiscover source IDs, covered competitions and supported market types; check customer API availability.
get_account_usageYour plan tier, rate limit, and monthly usage.

Every response uses the envelope { success, data, nextCursor, meta }; when nextCursor is present the tool appends a _paging hint so agents know to continue.

Participants and sides

Events, edges and arbitrage rows list who takes part as participants, ordered by side:

Eventparticipants
NBA: Hawks at Wizards{side: 1, sideLabel: "home", position: 1, name: "Washington Wizards"}, {side: 2, sideLabel: "away", position: 1, name: "Atlanta Hawks"}
Tennis singles{side: 1, position: 1, name: "Brandon Nakashima"}, {side: 2, position: 1, name: "Matteo Berrettini"} (no label: order is arbitrary, as in MMA and esports)
Tennis doublestwo players per side, position 1 and 2
Golfthe whole field, {name} only, no sides

get_event adds each side's final score and, when a source reported one, the latest live state ({status, period, clock, side1Score, side2Score, source, observedAt}).

Each odds row is one outcome of a selection:

  • side: 1 or 2, the event side the outcome is about; absent for totals, draws, "neither" and futures.
  • outcomeCode: SportWizzard's fixed list: OVER, UNDER, YES, NO, WIN (a moneyline leg is WIN with its side), DRAW, NEITHER, WIN_OR_DRAW, EITHER, ODD, EVEN, SCORE (read side1Score/side2Score), RANGE, OTHER, LABEL (a categorical answer only the selection label explains).
  • statType: the fixed stat list (points, rush_yards, …).
  • outcomeParticipants: [{kind: "competitor" | "player", name}], names exactly as the sportsbook sent them. An outcome about a side with no name has none; read the event participant on that side.

Markets carry phase (PRE or LIVE). With include_history, each selection's selectionPrice is a list of rows, oldest first, one per run of an unchanged price:

{"observedAt": "2026-11-03T12:31:02Z", "lastObservedAt": "2026-11-03T12:40:15Z", "priceAmerican": -110, "priceDecimal": 1.9091}

A row may also carry dfsMultiplier, suspended: true and, on exchanges, liquidityTier.

IDs depend on your key: with an API key on a paid plan, each participant and outcome participant also has competitorId (a team) or playerId (a person), and odds, edge and arbitrage rows carry playerId and source references. Without a key, or on the Free plan, you get names and sides. competitor_id and player_id filters match events where that competitor or player is a participant.

Futures (season-scope markets)

get_odds with scope=season returns season-long futures — division/conference/championship winners, award odds, team win totals, season leaders and full-season player props. Three orthogonal axes describe them:

  • `marketScope` — what the market is about: SEASON or TOURNAMENT. Omitted entirely on ordinary game rows.
  • `period` — the window within that season: REG_SEASON (settles at the end of the regular season) or FULL (runs through the playoffs).
  • `segment` — which slice of the competition: AFC_EAST, NL, SEC, … Present only when the market is segment-scoped, and load-bearing: all 32 NFL DIVISION_WINNER selections share one seasonId (their eventId is null), so without segment they read as a single 32-team race instead of 8 divisions.

Notes: winner/award markets are categorical (one YES selection per competitor, no side, usually no NO side); eventStartTime on a futures row is the season's end date, not a kickoff; every book's futures for a competition share the same seasonId, and eventId is null; and futures are deliberately excluded from get_edges / get_arbitrage (they never enter de-vig or edge math). Scope matching is exact — season does not include TOURNAMENT — and an invalid value returns HTTP 400 naming the valid ones.

From source

git clone https://github.com/sportwizzard/sportwizzard-mcp.git

cd sportwizzard-mcp && npm install && npm run build SPORTWIZZARD_MOCK=1 node dist/index.js # or set SPORTWIZZARD_API_KEY

Maintainers

This README ships inside the npm package, so keep it free of internal hostnames, keys and private notes (the repository is public).

Layout. src/index.ts is the stdio entry (dist/index.js, the npm bin); src/httpServer.ts is the hosted Streamable HTTP entry (stateless, one request per POST; Host allow list and bearer-key handling); src/auth.ts validates the caller's key against the API, caches it and applies the per-key rate limit; src/tools.ts and src/server.ts define and register tools; src/client.ts is the REST client and src/mock.ts the SPORTWIZZARD_MOCK=1 data. tests/stdio-smoke.mjs and tests/http-smoke.mjs are end-to-end smokes against a loopback mock API (no credentials, no production calls).

Build and verify (the PR check, .github/workflows/ci.yml, runs the same pack-and-smoke plus a no-push container build):

npm ci --ignore-scripts && npm run build

release_dir="$(mktemp -d)" npm pack --ignore-scripts --pack-destination "$release_dir" npm install --prefix "$release_dir/consumer" --omit=dev --ignore-scripts --no-audit --no-fund "$release_dir"/*.tgz npm run smoke -- "$release_dir/consumer/node_modules/sportwizzard-mcp/dist/index.js" "$release_dir/smoke.json" "$release_dir"/*.tgz npm run smoke:http -- "$release_dir/consumer/node_modules/sportwizzard-mcp/dist/httpServer.js" "$release_dir/http-smoke.json" rm -rf "$release_dir"

The stdio smoke checks tools/list, get_odds scope=season forwarding and a snapshot download with history; the HTTP smoke checks /healthz, key rejection, the Host allow list, tools/list, key forwarding and a clean SIGTERM exit. Both prove transport and packaging, not live data quality.

Releasing.

  • Hosted server: publish-container.yml publishes a SHA-tagged GHCR image on every push to main. It deploys only when that digest is promoted in the Ops deployment/releases/api.yaml row, which owns placement, limits and credential references.
  • npm package: bump version in package.json, run npm install --package-lock-only, sync server.json, merge to main, then run the manual Publish npm package workflow (publish-npm.yml). It builds once, smokes the packed tarball and publishes those exact bytes through npm trusted publishing (OIDC; no npm token). Publishing npm does not update the hosted container.

Gotchas. Hosted runtime settings are MCP_HTTP_PORT (default 8091), MCP_ALLOWED_HOSTS, AUTH_CACHE_TTL_MS, RATE_LIMIT_PER_MIN, SPORTWIZZARD_SNAPSHOT_URL and SPORTWIZZARD_SNAPSHOT_HISTORY_URL, plus the customer settings above. download_snapshot writes a file on stdio but returns a save_command (and a CDN URL when public) on the hosted server. Never print or commit ~/.npmrc. Open work goes in GitHub issues in this repository.

License

MIT © SportWizzard LLC