MCP server for interacting with the Scryfall MTG API
Sports Betting Stats is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Sports betting stats: sportsbook odds, player props, scores, xG, closing lines, horse racing.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user sports-betting-stats-mcp '--' uvx sports-betting-stats-mcp
# 2 — ask your agent for something these tools do
# publicrecords--sports-odds-api, scrapemint--sports-odds-scraper, zen-studio--prizepicks-player-props and 5 more
Sports Betting Stats costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one can run either way — at an address its publisher runs, or as a process under your own user, with your files and your network — and this marketplace is in the path of neither.
This is a public server: you run it yourself and this marketplace is not in the path. You need uv (docs.astral.sh/uv): uvx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user sports-betting-stats-mcp '--' uvx sports-betting-stats-mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
Its publisher also runs it at https://mcp.apify.com/?tools=publicrecords/sports-odds-api,scrapemint/sports-odds-scraper,zen-studio/prizepicks-player-props,sports-odds-lab/football-odds-results,hgservices/apify-actor-espn,constructive_calm/understat-football-analytics,jungle_synthesizer/equibase-us-horse-racing-scraper,congism/polymarket-kalshi-arb-finder: nothing to start on your machine, and this marketplace is not in the path.
claude mcp add --scope user --transport http sports-betting-stats-mcp 'https://mcp.apify.com/?tools=publicrecords/sports-odds-api,scrapemint/sports-odds-scraper,zen-studio/prizepicks-player-props,sports-odds-lab/football-odds-results,hgservices/apify-actor-espn,constructive_calm/understat-football-analytics,jungle_synthesizer/equibase-us-horse-racing-scraper,congism/polymarket-kalshi-arb-finder'It reaches a system of yours, so it needs your own credential rather than the publisher’s: Authorization header — The API key mcp.apify.com issues — sent as Authorization: Bearer <key>. You set it in your own client’s config, on your machine — this marketplace never holds it.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
8 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
Sports Odds API: BetRivers, Unibet, Paf, Svenska Spel, ATG. Live odds from 24 Kambi-powered sportsbooks in one call: BetRivers (12 US states + Ontario), Unibet (7 countries), Paf, Svenska Spel and ATG. One row per game with every book's price and the best price per outcome. When to use: Use when…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| leagues | array | no | Kambi paths, sport or league level: "basketball/nba", "american_football/nfl", "ice_hockey/nhl", "baseball/mlb", "football/england/premier_league", or a whole sport such as "tennis". Unknown paths are |
| operators | array | no | Kambi-powered books to price. Each book is a separate brand/jurisdiction feed; prices can differ between them. The list contains only books verified open on the date in the README. |
| markets | string | no | "main" returns the headline markets per game. "all" returns each game's full board (often 300–500 markets) and is priced higher. Options: main = Main lines (moneyline, spread, total); all = Every mark |
| includeLive | boolean | no | Include games already started (live prices at the moment of the run). |
| startsWithinHours | integer | no | 0 = no limit. Live games are kept when "Include in-play games" is on. |
| maxEvents | integer | no | Soonest games first. |
| proxyConfiguration | object | no | On by default. Kambi limits how often one IP may ask; your run moves to a fresh Apify Proxy IP whenever it is slowed down. Turn off only to test without a proxy. |
Sports Odds Scraper: DraftKings, Pinnacle & Bovada. Sports betting odds from DraftKings, Pinnacle and Bovada on one line per game, with the best price per outcome and arbitrage. Moneyline, spread and totals for NFL, NBA, WNBA, MLB, NHL, UFC, college and soccer. American or decimal. Keyless, no…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sports | array | no | Sports/leagues to sweep: nfl, ncaaf, nba, wnba, ncaab, mlb, nhl, ufc, soccer_epl, soccer_laliga, soccer_bundesliga, soccer_seriea, soccer_ligue1, soccer_mls, soccer_uefa_cl, soccer_uefa_el (or short f |
| eventUrls | array | no | No longer supported (the sportsbook pages these pointed at block automated access). Use sports[] instead; URL entries return a free explanatory row. |
| books | array | no | No longer used, kept so older saved inputs keep working. Every run reads both available feeds: one bookmaker via ESPN's public scoreboard, typically DraftKings, plus Bovada's own prices. Setting this |
| markets | array | no | Which betting markets to pull per event. |
| oddsFormat | string | no | How to express prices in the row. Options: american = American (-110 / +200); decimal = Decimal (1.91 / 3.00); fractional = Fractional (10/11 / 2/1); implied_probability = Implied probability (0.524 / |
| computeBestPrice | boolean | no | Attach a bestPrice field per outcome with the highest odds and which book offers it, compared across the books that priced that outcome. Events carried by only one book are left alone. |
| computeArbitrage | boolean | no | Flag two way and three way markets where the best prices across books guarantee a profit. Adds an arbitrage object per market when found. |
| minArbPct | number | no | Drop arbitrage opportunities below this edge. 0.5 means at least 0.5% guaranteed return. |
| minBestEdgePct | number | no | Filter best price flags to only those that beat the average price across books by this percent. |
| totalMaxEvents | integer | no | Hard cap on event rows pushed per run. 0 means unlimited. |
| maxEventsPerSport | integer | no | Per league cap. Useful when scraping multiple leagues in one run. |
| includeStartedEvents | boolean | no | Include events already in progress. Off keeps the feed to upcoming events only. |
| lookAheadHours | integer | no | Only return events starting within this many hours from now. 0 means no time limit. |
| dedupe | boolean | no | Skip event IDs already pushed in previous runs (keyed by sport + home + away + commenceTime). Turn off to refresh stale rows. |
| concurrency | integer | no | No longer used (one request per sport now). Kept for compatibility. |
| proxyConfiguration | object | no | Not used: the odds source works from datacenter IPs without any proxy. Kept for compatibility with older saved inputs. |
PrizePicks Player Props Scraper - Real-Time Lines. Extract real-time player prop lines from PrizePicks across 29 leagues. Get over/under lines, odds tiers, player stats, team matchups, and game schedules. NBA, MLB, NHL, Soccer, Tennis, and esports. Filter by league or player name. 51 fields per…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| leagues | array | no | Select one or more leagues to fetch player props for. Choose All to get every available projection across all leagues. Don't see a league (e.g. a seasonal event)? Add it under Other leagues below, or |
| extraLeagues | string | no | Type any league name exactly as it appears on PrizePicks (e.g. World Cup ), comma-separated. Use this for seasonal events not in the list above. Combined with your selection above. |
| listLeagues | boolean | no | Turn this on to output the leagues currently offering props and how many, then stop. Use it to see exactly what you can request. Ignores all other inputs. |
| playerNames | string | no | Comma-separated player names, case-insensitive. Matches partial names and handles accents (Jokic matches Jokić). Example: Jokic, Haaland, Ohtani . Leave empty to get all players. |
| statTypes | string | no | Comma-separated stat types, case-insensitive. Accepts full names or abbreviations. Example: Points, PRA, Rebounds, Goals, SOT . Stat types are league-specific — see README for the full list grouped by |
| oddsTiers | array | no | Filter by line difficulty. Standard is the normal line, Demon is harder with higher payout, Goblin is easier with lower payout. Select one or more. Leave empty to get all tiers. |
| teams | string | no | Comma-separated team names or abbreviations, case-insensitive. Matches player's team or either side of the matchup. Example: Lakers, LAL, Celtics, BOS . Leave empty to get all teams. |
| feedback | string | no | For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worke |
Soccer & Football Betting Odds: Historical & Closing Lines. Soccer odds, football betting odds and football data API: Premier League, LaLiga, Serie A, Bundesliga, Champions League + 1,000 leagues. Up to 120 bookmakers: 1X2, over/under, BTTS, Asian handicap, opening & closing. Results, xG, shots,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mode | string | no | Recent matches: every competition from up to 7 days back to 7 days ahead (upcoming matches with current odds). Full seasons: complete seasons of the leagues you list below, history back to 2005 — add |
| statuses | array | no | Finished includes matches decided after extra time or penalties and awarded results. In 'Full seasons' mode only finished (and postponed/cancelled) matches exist. |
| daysBack | integer | no | How many past days to include (0 = today only). Up to 7. Values above 7 are clamped to 7. |
| daysAhead | integer | no | How many upcoming days to include. Up to 7. Upcoming matches carry the current prices instead of closing lines. Values above 7 are clamped to 7. |
| countries | array | no | Optional. Country or region names as shown on Flashscore, e.g. England, Spain, Brazil, Europe (UEFA club and national-team competitions), World (friendlies, FIFA). Leave empty for every country. |
| competitions | array | no | Optional. 'Country: Competition' as shown on Flashscore, e.g. 'England: Premier League', 'Spain: LaLiga', 'Europe: Champions League'. Stages are included automatically ('Argentina: Liga Profesional' a |
| includeWomen | boolean | no | Women's leagues, cups and national-team matches. |
| includeYouth | boolean | no | U17–U23, reserve, B-team and academy competitions. |
| incremental | boolean | no | For runs every few minutes: skip finished, live and cancelled matches whose score and status have not changed since an earlier run with the same settings, and upcoming matches whose prices, lines and |
| incrementalName | string | no | Optional name for the incremental memory, to keep several schedules apart or start fresh (a new name = a new memory). Empty = one memory per combination of settings. |
| leagues | array | no | 'Country: League' as shown on Flashscore — e.g. 'England: Premier League', 'Spain: LaLiga', 'Germany: Bundesliga', 'Brazil: Serie A', 'Europe: Champions League' — or the league's Flashscore URL. Every |
| seasons | array | no | Optional. Seasons as the league names them: 2024-2025 for autumn–spring leagues, 2024 for calendar-year leagues (MLS, Brazil, Scandinavia). Leave empty to use 'Last seasons'. Example: ["2024-2025"] |
| lastSeasons | integer | no | Used when Seasons is empty: the current season (matches played so far) plus this many minus one previous seasons. 5 = the current season and the four before it; 22 = the whole history since 2005/06 in |
| markets | array | no | Full-time markets to collect. 1X2 is always included — it shows which bookmakers priced the match. |
| overUnderLines | array | no | Goal lines to return, e.g. 1.5, 2.5, 3.5. Enter 'all' for every line each bookmaker offers (0.5 to 6.5, quarter lines included). |
| asianHandicapLines | string | no | The main line is the one whose consensus is closest to 50/50 (reported as ahLine; the opening main line as ahLineOpening). Options: main = Main line only; all = All lines. |
| bookmakers | array | no | Optional. Names or parts of names, e.g. bet365, Betano, SNAI, Winamax. Leave empty for every bookmaker in scope (about 30 listings, or up to about 120 with 'All bookmakers'). |
| allBookmakers | boolean | no | Read the odds menus of ~55 countries instead of 10: up to about 120 bookmaker listings for a top-league match (default about 30) — Italian (SNAI, Sisal, Eurobet), French (Winamax, PMU, Unibet), Romani |
| includeOdds | boolean | no | Opening and latest (closing) odds per bookmaker plus the no-vig consensus. |
| onlyWithOdds | boolean | no | Do not save (and do not pay for) matches that no bookmaker priced. About 1 in 5 matches, mostly amateur and youth football. |
ESPN Sports Scores & Schedules - NBA, NFL, MLB, NHL, MLS, EPL... Get live scores, schedules, and game results from ESPN — covering NBA, NFL, MLB, NHL, MLS, EPL, NCAA, and more. Find the next game of any team. No API key needed. Filter by team, date, or status. Empty results explain why. When to…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| leagues | array | yes | League codes: nba, wnba, ncaam (NCAA men's basketball), ncaaw (NCAA women's basketball), nfl, ncaaf (NCAA football), mlb, nhl, mls, epl (English Premier League), laliga, ucl (UEFA Champions League). A |
| dateMode | string | yes | nextGames: the next games that are not over, from today - per league the next game day, or with 'teams' the next game of each team. Use it for 'when do they play next'. Many leagues skip days (NFL: mo |
| date | string | no | Date for 'single' date mode, as YYYYMMDD (or YYYY-MM-DD). |
| startDate | string | no | First day for 'range' date mode, as YYYYMMDD (or YYYY-MM-DD). |
| endDate | string | no | Last day for 'range' date mode, as YYYYMMDD (or YYYY-MM-DD). A range can be up to 366 days. A longer range is cut to 366 days, and the run reports this in a notice item. |
| teams | array | no | Only return games of these teams. Use an ESPN code (LAL, GS, NY, WSH), a common code (GSW, NYK, WAS, LAK) or a team name (Lakers, Golden State Warriors). An entry applies to every selected league. To |
| homeAwayFilter | string | no | Only with teams: all games of those teams, only their home games, or only their away games. With dateMode nextGames, it finds the next home (or away) game. Options: all = All Games; home = Home Games |
| gameStatus | array | no | pre = scheduled (not started), in = in progress, post = final (also postponed or canceled). Keep all three unless you need only one kind, for example ["post"] for results only. |
| liveOnly | boolean | no | Only games in progress at the moment of the run. Often empty: most games are in the evening (US time). For a schedule or scores, leave it false and read status.state of each game. |
| startingWithinHours | integer | no | Only scheduled games that start in the next N hours (1-72). Games in progress and final games are kept. |
| nationalTvOnly | boolean | no | Only games on a US national TV or streaming network (ESPN, ABC, TNT, FOX, NBC, CBS, Prime Video and others). |
| networkFilter | array | no | Only games on these networks, as ESPN names them (for example ESPN, TNT, ABC, Prime Video). Not case-sensitive. |
| timezone | string | no | IANA timezone (for example America/New_York, America/Los_Angeles, Europe/London). It sets what today, tomorrow and the other relative modes mean, and the time in dateLocal. Use the user's timezone. |
| includeNotices | boolean | no | When a run returns no games, or the Actor ignored or changed part of the input, write one item with type 'notice' at the start of the dataset. It says why (for example: no NFL games today, the next on |
Understat xG & Shot Data - Football Analytics. Scrapes Understat: player/team season aggregates, per-match xG/PPDA/win-probabilities, shot-level data with x/y coords + xG, situation/formation/game-state breakdowns, player career histories, and fixtures across the Big 5 + RFPL (2014–2025).…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mode | string | yes | What to scrape. 'league_players' returns per-player season aggregates (xG, xA, xGChain, xGBuildup, etc). 'league_teams' returns team season aggregates (W/D/L, xG, xGA, PPDA, points, xPoints). 'league_ |
| leagues | array | no | One or more of the six leagues Understat covers. Required for league_*, match_shots (when matchIds is empty), team_situations (when teams is empty), and fixtures. |
| seasons | array | no | List of season start years as integers — 2025 = the 2025/26 season. Understat history goes back to 2014. The current season becomes valid automatically once it kicks off in August. Invalid entries are |
| teams | array | no | Filter output to specific teams. Applies to league_players, league_teams, league_matches, fixtures, match_shots (league discovery) and team_situations. Names must match Understat's display names — e.g |
| matchIds | array | no | Specific match IDs to scrape directly (used by match_shots). When set, leagues/seasons are ignored. Find IDs in Understat URLs: /match/{ID}. |
| playerIds | array | no | Player IDs for player_career mode. Find IDs in Understat URLs: /player/{ID}. Examples: 553 (Messi), 619 (Agüero), 1250 (Salah), 8260 (Haaland). |
| positions | array | no | Filter players by position. Only applies to league_players mode (uses Understat's filtered POST endpoint). |
| nLastMatches | integer | no | Filter player stats to the last N matches. 0 = full season. Only applies to league_players mode. |
| dateStart | string | no | Restrict league_players stats to matches on or after this date. Leave empty for none. |
| dateEnd | string | no | Restrict league_players stats to matches on or before this date. Leave empty for none. |
| minAppearances | integer | no | Drop player rows where games played is below this threshold (client-side filter). 0 = no filter. |
| maxResults | integer | no | Stop emitting after this many dataset rows. 0 = unlimited (subject to maxCostUsd). |
| maxCostUsd | integer | no | Hard cap on the run's total billed amount. The actor estimates cost up-front and stops gracefully if the cap is hit mid-run. |
| includeRawJson | boolean | no | When true, attach the original Understat record under _raw on every output row. Useful for power users / debugging. Default off — keeps the dataset light. |
| proxyConfiguration | object | no | Apify proxy. Understat does not block scrapers, but residential proxies help users behind corporate networks. Default = Apify residential. |
Equibase Horse Racing Scraper - US Race Entries & Results. Scrape US Thoroughbred horse racing data from Equibase.com — the official source for North American racing. Extract race entries (horses, jockeys, trainers, odds) and results (finish order, times, payouts) for any date and track. Ideal for…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sp_intended_usage | string | no | What will this data feed? E.g. lead lists, KYB checks, price tracking. |
| sp_improvement_suggestions | string | no | Provide any feedback or suggestions for improvements. |
| sp_contact | string | no | We'll personally help with your use case. No spam. Example: "Share your email here..." |
| raceDate | string | no | Date to scrape in MM/DD/YYYY format. Defaults to today. Use a recent past date to get completed results. Example: "" |
| trackCodes | array | no | Optional list of track codes to filter (e.g. AQU, CD, SA, GP). Leave empty to scrape all tracks running on the selected date. Example: [] |
| dataMode | string | no | entries = race cards (horses, jockeys, trainers, odds); results = finish order + payouts; both = entries and results together (results only available for past races); late_changes = today's race-day c |
| maxItems | integer | no | Maximum number of records to return (each race = one record; in late_changes mode each change = one record). Default 50 samples several meetings; raise it (e.g. 500+) to collect EVERY track racing on |
| raceTypes | array | no | Optional race-type filter, matched as case-insensitive text against each race's type. Example: claiming keeps Claiming, Maiden Claiming, Optional Claiming and Starter Optional Claiming races; maiden k |
| filliesMaresOnly | boolean | no | Keep only races where every runner is a filly or mare. Off by default. Not used in late_changes mode. |
| includeHorseHistory | boolean | no | Adds one extra record per distinct horse in the saved races: every career start (track, date, race, finish, speed figure, race_id that joins to this actor's own race records) and the last 60 days of w |
| maxHorseProfiles | integer | no | Upper bound on horse-history records per run (only used when Include horse history is on). Horses are taken in card order. |
Polymarket + Kalshi Arbitrage Finder. Scans both Polymarket and Kalshi for matching binary prediction markets and identifies price discrepancies where buying YES on one platform and NO on the other guarantees a risk-free profit. Returns ranked opportunities with trade details and return %. Now…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| minSpread | number | no | Minimum YES price difference between platforms to flag as an arb opportunity (0–1 scale). Example: 0.05 means at least 5 cents difference. Default: 0.02. |
| minReturnPct | number | no | Minimum estimated profit % per dollar risked. Example: 1.0 = only show opportunities worth at least 1% return. Default: 0.5. |
| minSimilarity | number | no | Keyword similarity threshold (0–1) for matching markets across platforms. Higher = stricter matching, fewer but more accurate pairs. Default: 0.25. |
| minLiquidity | number | no | Only include markets with at least this much liquidity. Filters out thin markets where you can't fill a meaningful position. Default: 0. |
| minVolume24h | number | no | Only include markets with at least this much 24-hour trading volume. Default: 0. |
| maxResults | integer | no | Maximum number of arb opportunities to return, sorted by return % descending. Default: 500. |
| kalshiEmail | string | no | Your Kalshi account email. Required to fetch Kalshi market prices. Without this, only Polymarket data is scanned. |
| kalshiPassword | string | no | Your Kalshi account password. Stored securely and only used to authenticate with the Kalshi API. |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Sports Betting Stats or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | minimal | capability blast radius (minimal) — client exposure if the model is manipulated | −0 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. minimal is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 1.0.0. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Sports Betting Stats can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.