# com.sportwizzard/sportwizzard (npm · sportwizzard-mcp)

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

- Trust score: 70/100 (medium)
- Change this week: +24
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.sportwizzard.com`: 28/100, [markdown](https://verifymcp.io/servers/com-sportwizzard-sportwizzard/mcp.md), [page](https://verifymcp.io/servers/com-sportwizzard-sportwizzard/mcp)
- npm · `sportwizzard-mcp`: 70/100 (this document), [markdown](https://verifymcp.io/servers/com-sportwizzard-sportwizzard/sportwizzard-mcp.md), [page](https://verifymcp.io/servers/com-sportwizzard-sportwizzard/sportwizzard-mcp)

## Channel facts

- Registry: `npm`
- Package: `sportwizzard-mcp`
- Version: `0.1.4`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 95), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 95), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 10 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 78/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2132 tokens (~106/item across 20 items; 20 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add com-sportwizzard-sportwizzard -- npx -y sportwizzard-mcp
```

### Codex

```bash
codex mcp add com-sportwizzard-sportwizzard -- npx -y sportwizzard-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-sportwizzard-sportwizzard": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "sportwizzard-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-sportwizzard-sportwizzard --command npx --arg -y --arg sportwizzard-mcp
```

### Hermes

```yaml
mcp_servers:
  com-sportwizzard-sportwizzard:
    command: "npx"
    args: ["-y", "sportwizzard-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "com-sportwizzard-sportwizzard": {
      "command": "npx",
      "args": [
        "-y",
        "sportwizzard-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 70, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 66, +53)

- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: pass → unverified
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] License: pass → unverified
- [functional regression] Maintenance: pass → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: MIT

### 2026-08-01 (score 13, −31)

- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-31 (score 44, −19)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 63, −5)

- [security regression] Malware scan: pass → unverified
- [functional improvement] Schema quality: unverified → excellent

### 2026-07-29 (score 68, +22)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional] Licence: MIT

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (20)

### `list_events` (~237 tokens)

List sporting events / fixtures (the spine of the API). Each event carries home/away team, start time, status and whether live odds exist (hasOdds). Filter by league, team, status or start-time window, then use the returned event id with get_event_odds. Paginate with cursor.

Input parameters:

- `cursor` (string): Opaque pagination cursor. Pass the `nextCursor` from a previous response to fetch the next page.
- `league` (string): League slug (e.g. mlb, wnba, mls, pga-tour, fifa-world-cup). See list_leagues.
- `limit` (integer): Max rows to return (page size). Default 50, server caps apply.
- `starts_after` (string): ISO-8601 timestamp; only events starting at/after this time.
- `starts_before` (string): ISO-8601 timestamp; only events starting at/before this time.
- `status` (string): Event status filter (e.g. scheduled, live, final).
- `team_id` (string): Filter to events involving this team UUID (from list_teams).

### `get_event` (~90 tokens)

Full detail for a single event: teams, start time, status, league, venue, season year, final scores (when final), and rich game context — weather, confirmed/projected lineups, probable pitchers, and officials where the league provides them. The model-builder's pre-game context endpoint. Use an event id from list_events.

Input parameters:

- `event_id` (string, required): Event UUID (from list_events).

### `get_event_stats` (~80 tokens)

The box score for a single event: every player's stat line (e.g. batting_stats/pitching_stats JSON per player) plus the team-level result row (scores, team stats). Use an event id from list_events; works for final and in-progress events that have stats.

Input parameters:

- `event_id` (string, required): Event UUID (from list_events).

### `get_event_odds` (~77 tokens)

Get every sportsbook price for a single event: one flat row per book x market x selection, with american+decimal price, line, side, player/team, and SportWizzard's devigged fair odds where available. Use an event id from list_events.

Input parameters:

- `event_id` (string, required): Event UUID (from list_events).

### `get_odds` (~232 tokens)

Core odds query. Returns a flat array of book prices scoped by any combination of event_id, player_id, team_id, sportsbook, market and league. Called unscoped it paginates hard — prefer scoping to at least one entity. Paginate with cursor.

Input parameters:

- `cursor` (string): Opaque pagination cursor. Pass the `nextCursor` from a previous response to fetch the next page.
- `event_id` (string): Scope to one event (UUID from list_events).
- `league` (string): League slug filter.
- `limit` (integer): Max rows to return (page size). Default 50, server caps apply.
- `market` (string): Market type filter (e.g. MONEYLINE, SPREAD, PLAYER_TOTAL). See list_markets.
- `player_id` (string): Scope to one player (UUID from list_players).
- `sportsbook` (string): Sportsbook / DFS source id (e.g. draftkings, prizepicks). See list_sportsbooks.
- `team_id` (string): Scope to one team (UUID from list_teams).

### `get_player_odds` (~102 tokens)

All current book prices for a single player across events and markets (player props). Use a player id from list_players. Paginate with cursor.

Input parameters:

- `cursor` (string): Opaque pagination cursor. Pass the `nextCursor` from a previous response to fetch the next page.
- `limit` (integer): Max rows to return (page size). Default 50, server caps apply.
- `player_id` (string, required): Player UUID (from list_players).

### `get_team_odds` (~102 tokens)

All current book prices for a single team across its events and markets. Use a team id from list_teams. Paginate with cursor.

Input parameters:

- `cursor` (string): Opaque pagination cursor. Pass the `nextCursor` from a previous response to fetch the next page.
- `limit` (integer): Max rows to return (page size). Default 50, server caps apply.
- `team_id` (string, required): Team UUID (from list_teams).

### `get_edges` (~188 tokens)

SportWizzard's edge finder: DFS/book offers that are +EV versus the devigged fair market, with the edge %, the book(s) setting fair value, and per-book odds. Filter by league, source (DFS/book), minimum edge, or a single event. Paginate with cursor.

Input parameters:

- `cursor` (string): Opaque pagination cursor. Pass the `nextCursor` from a previous response to fetch the next page.
- `event_id` (string): Scope to a single event UUID.
- `league` (string): League slug filter.
- `limit` (integer): Max rows to return (page size). Default 50, server caps apply.
- `min_edge` (number): Minimum edge threshold (e.g. 5 for 5%).
- `source` (string): DFS/book source id to find edges for (e.g. prizepicks, underdog).

### `get_arbitrage` (~138 tokens)

Arbitrage scanner: cross-book opportunities with a guaranteed profit, including each leg (source, selection, odds) and the optimal stake fractions. Filter by type (two_way | three_way) and minimum profit %. Paginate with cursor.

Input parameters:

- `cursor` (string): Opaque pagination cursor. Pass the `nextCursor` from a previous response to fetch the next page.
- `limit` (integer): Max rows to return (page size). Default 50, server caps apply.
- `min_profit` (number): Minimum guaranteed profit % (e.g. 1 for 1%).
- `type` (string): Arbitrage type.

### `list_players` (~111 tokens)

List players (reference resource). Filter by league and/or team. Returns player UUIDs to use with get_player_odds and get_player_stats. Paginate with cursor.

Input parameters:

- `cursor` (string): Opaque pagination cursor. Pass the `nextCursor` from a previous response to fetch the next page.
- `league` (string): League slug filter.
- `limit` (integer): Max rows to return (page size). Default 50, server caps apply.
- `team` (string): Team UUID filter.

### `list_teams` (~104 tokens)

List teams (reference resource). Filter by league. Returns team UUIDs to use with list_events(team_id), get_team_odds and get_team_stats. Paginate with cursor.

Input parameters:

- `cursor` (string): Opaque pagination cursor. Pass the `nextCursor` from a previous response to fetch the next page.
- `league` (string): League slug filter.
- `limit` (integer): Max rows to return (page size). Default 50, server caps apply.

### `get_player_stats` (~68 tokens)

Historical / season statistics for a single player. Use a player id from list_players; optionally scope to one season.

Input parameters:

- `player_id` (string, required): Player UUID (from list_players).
- `season` (integer): Season year (e.g. 2026). Omit for all available.

### `get_team_stats` (~82 tokens)

Per-game team stats and results for a single team (scores, result, team stat JSON per event). Use a team id from list_teams; optionally scope to one season.

Input parameters:

- `season` (integer): Season year (e.g. 2026). Omit for all available.
- `team_id` (string, required): Team UUID (from list_teams).

### `get_player_game_logs` (~159 tokens)

Bulk per-game player stat rows (game logs) filtered by player, team, or event — the model-training data feed. At least one of player_id / team_id / event_id is required. Each row is one player-game with the raw stat JSON. Paginate with cursor.

Input parameters:

- `cursor` (string): Opaque pagination cursor. Pass the `nextCursor` from a previous response to fetch the next page.
- `event_id` (string): Event UUID (from list_events).
- `limit` (integer): Max rows to return (page size). Default 50, server caps apply.
- `player_id` (string): Player UUID (from list_players).
- `team_id` (string): Team UUID (from list_teams).

### `download_snapshot` (~174 tokens)

Download the FULL live board — every market from every sportsbook (tens of MB gzip, 80k+ markets) — and save it to a file on disk instead of returning it (it would not fit in a context window). Provide an absolute save_path: a path ending in .gz keeps the gzip; any other path writes decompressed JSON. Returns the saved path, byte count and ETag. Re-poll cheaply by passing the returned etag: unchanged data returns not_modified without downloading.

Input parameters:

- `etag` (string): Optional: the etag from a previous download. If the board hasn't changed the server returns 304 and nothing is downloaded.
- `save_path` (string, required): Absolute file path to write the snapshot to. `.gz` suffix keeps it gzip-compressed; otherwise decompressed JSON is written.

### `get_account_usage` (~42 tokens)

Your API plan and usage: plan tier, per-minute rate limit, monthly usage/cap where metered. Works without a key (shows the effective anonymous plan).

### `list_sportsbooks` (~44 tokens)

List the sportsbooks and DFS platforms SportWizzard tracks, with a live market count each. Reference/discovery — call this to learn valid `sportsbook` filter values.

### `list_leagues` (~34 tokens)

List the leagues currently covered (with live markets). Reference/discovery — call this to learn valid `league` filter values.

### `list_markets` (~40 tokens)

List the market types SportWizzard supports, each with a live market count. Reference/discovery — call this to learn valid `market` filter values.

### `status` (~28 tokens)

Platform status: total live markets and number of sportsbooks currently ingesting. A cheap health/coverage check.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-sportwizzard-sportwizzard/sportwizzard-mcp#diagnostics

## Score history

- 2026-08-03: 70
- 2026-08-02: 66
- 2026-08-01: 13
- 2026-07-31: 44
- 2026-07-30: 63
- 2026-07-29: 68
- 2026-07-28: 46
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/sportwizzard-mcp
- Socket report: https://socket.dev/npm/package/sportwizzard-mcp
- Repository: https://github.com/adamruehle/sportwizzard-mcp
- Website: https://sportwizzard.com/developers
- Changelog RSS feed: https://verifymcp.io/servers/com-sportwizzard-sportwizzard/sportwizzard-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-sportwizzard-sportwizzard/sportwizzard-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-sportwizzard-sportwizzard/sportwizzard-mcp
