Sportwizzard

com.sportwizzardPublished by sportwizzard.comOfficial publisherv0.1.4Updated Oct 24, 2026

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

VerifiedStreamable HTTPWeb executableFinanceData & Analytics

Overview

AI-generated overview

Read-only sports betting data server: lets an assistant pull live odds, player props, +EV edges and arbitrage from 35+ sportsbooks and DFS apps.

What you can do
  • Look up events and fixtures, with detail such as weather, lineups and probable pitchers, plus box scores and per-player stat lines
  • Fetch current prices by event, player, team, sportsbook, market or league, including season futures and tournament outrights
  • Surface +EV edges against a devigged fair market and two- or three-way arbitrage opportunities with stake fractions
  • Browse reference data: players, teams, sportsbooks, leagues, markets, season and historical stats, and bulk per-game logs
  • Download the full live board as a gzip snapshot, optionally with price history, and check account plan, rate limit and monthly usage
When to use it
Useful when you want an assistant to research betting markets, compare prices across books, screen for edges or arbitrage, or pull sports stats and historical game logs for analysis. It is read-only, so it suits analysis and reporting rather than placing bets.
Requirements
A SportWizzard API key, sent as a bearer token in the Authorization header for the hosted endpoint or as SPORTWIZZARD_API_KEY for the local npm package run with npx (Node.js). Network access to the SportWizzard API. Optional SPORTWIZZARD_BASE_URL override and SPORTWIZZARD_MOCK=1 for offline sample data.
Before you install
The API key is a secret passed in the Authorization header or SPORTWIZZARD_API_KEY; the hosted server forwards it to the SportWizzard API. Snapshot downloads can be tens of MB and cost credits, and history costs more credits than a plain snapshot. Successful live calls send a best-effort usage receipt that the README says contains no tool arguments or result data. Odds data is informational, not betting advice.

Installation

In SourceWeft

  1. Open Sportwizzard in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.sportwizzard%2Fsportwizzard/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "sportwizzard": {
      "type": "http",
      "url": "https://mcp.sportwizzard.com/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

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)

bash
claude mcp add --transport http sportwizzard https://mcp.sportwizzard.com/mcp \  --header "Authorization: Bearer sw_live_your_api_key_here"
bash
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 CDN download URL + a ready-to-run command your agent executes locally; 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)

bash
npx -y sportwizzard-mcp

Claude Code:

bash
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\):

json
{  "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 — filter by league, team, status, time; full detail incl. weather, lineups, probable pitchers.
get_event_statsBox score: every player's stat line + team results for one event.
get_odds / get_event_odds / get_player_odds / get_team_oddsCurrent prices, scoped by event, player, team, sportsbook, market, or league. 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 (league, source, min_edge filters).
get_arbitrageArbitrage opportunities with legs and stake fractions (two/three-way).
list_players / list_teams / get_player_stats / get_team_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 priceHistory (same schema; 5 credits flat vs 1).
list_sportsbooks / list_leagues / list_markets / statusDiscover source IDs, covered leagues 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.

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 — which anchor the market hangs off: SEASON or TOURNAMENT. Omitted entirely on ordinary game rows.
  • period — the window within that anchor: 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 season-anchor eventId, 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, teamSide: "NONE", usually no NO side); eventStartTime on a futures row is the season anchor / settlement date, not a kickoff; every book's futures for a competition share the same season eventId; 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

bash
git clone https://github.com/sportwizzard/sportwizzard-mcp.gitcd sportwizzard-mcp && npm install && npm run buildSPORTWIZZARD_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):

bash
npm ci --ignore-scripts && npm run buildrelease_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"/*.tgznpm run smoke -- "$release_dir/consumer/node_modules/sportwizzard-mcp/dist/index.js" "$release_dir/smoke.json" "$release_dir"/*.tgznpm 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 CDN URL and a command on the hosted server. Never print or commit ~/.npmrc. Open work goes in GitHub issues in this repository.

License

MIT © SportWizzard LLC

Source: README.md at commit 8768261

Tools

0
This server asks for a credential such as an API key, so SourceWeft could not read its tools without one and has not indexed them.

Version history

1
  1. v0.1.4LatestSep 16, 2026

Score

85% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts