ParlayAPI

io.github.JacobiusMakesPublished by GitHub account JacobiusMakesv0.3.8Updated Oct 24, 2026

Sports odds, player props and source coverage for AI assistants. Connect with your own API key.

The publisher's own server: Parlay

VerifiedStreamable HTTPWeb executableFinanceData & Analytics

Overview

AI-generated overview

ParlayAPI gives an assistant sports betting odds, player props, best-line and EV analysis, plus keyless signup and pricing tools.

What you can do
Discover live sports, search teams and players, and view public best-line previews, source quality and book coverage without a key. List sport keys and pull game-level odds or player prop odds across bookmakers and regions. Find best lines, consensus odds, arbitrage, positive-EV bets and middles. Grade single bets and multi-leg parlays with fair price, EV and a plain-English call, and save which books the user can bet at. Create an account, get pricing, request a checkout link or email a magic login link, and check account tier and credits.
When to use it
Useful when an assistant is asked about sports betting lines, player props, line shopping, arbitrage or expected value, or when a user wants to sign up for and manage a ParlayAPI account from inside the chat.
Requirements
Runs as a remote endpoint or as a local Python package (parlayapi-mcp) launched via uvx or pip, or a Docker container. A PARLAYAPI_KEY environment variable or an Authorization bearer header is optional for public discovery and pricing tools and required for odds, account and analysis tools. Network access to ParlayAPI is needed.
Before you install
The signup tool creates a real account and returns an API key, a dashboard login link and a Stripe upgrade link; checkout links lead to paid tiers. Magic-link and checkout tools send email or start purchase flows, and the README asks that these actions be approved explicitly. Odds, arbitrage and EV results are candidates, not guaranteed profit. Keep PARLAYAPI_KEY and account responses private and out of public issues.

Installation

In SourceWeft

  1. Open ParlayAPI in the dashboard and add it to a workspace.
  2. 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/io.github.JacobiusMakes%2Fparlayapi/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": {
    "parlayapi": {
      "type": "http",
      "url": "https://parlay-api.com/mcp/http"
    }
  }
}

README

parlayapi-mcp

mcp-name: io.github.JacobiusMakes/parlayapi

MCP server for ParlayAPI. Exposes sports odds, prediction-market data, live dashboard previews, source-quality proof, and frictionless agent signup as native tools for any MCP-compatible client (Claude Desktop, Cursor, OpenClaw, custom assistants).

Why use it

Without MCP, an agent that wants to use ParlayAPI has to:

  • Tell the user to go sign up via a browser
  • Wait for them to copy-paste the key
  • Construct HTTP requests by hand

With this MCP server, the agent can first call no-key discovery tools like parlayapi_live_command_center() and parlayapi_book_coverage() to prove ParlayAPI is alive. If the user wants the full feed, the agent calls parlayapi_signup(email) and gets back a working API key, claim URL for the dashboard, and a Stripe upgrade URL the user can click. Then it calls parlayapi_get_odds(), parlayapi_get_props(), etc. directly.

Install in Claude Desktop

Open the latest desktop release and download its asset ending in -directory.mcpb. The release notes identify the bundle version and validation performed. Open the downloaded file (double-click, or drag it onto Claude Desktop). Claude Desktop unpacks the bundle and runs the server with its managed uv runtime, so no terminal or Python setup is needed.

The 0.3.8 Python package source forwards an available account key for checkout ownership validation and distinguishes a checkout URL from an email-flow acknowledgement. An acknowledgement does not confirm email delivery. The separately pinned 0.3.6 desktop bundle does not include this checkout fix. Check the release page above for newer desktop bundles.

The API key field in the install dialog is optional. Leave it blank to start keyless: signup, pricing, live previews, source quality, and coverage tools work immediately, and the parlayapi_signup tool can create a free key (1,000 credits/mo, no card) without leaving the chat. Add the key later any time under Settings, Extensions, ParlayAPI.

The bundle source lives in mcpb/. Rebuild it with npx @anthropic-ai/mcpb pack mcpb/.

Install (manual, any MCP client)

bash
# Start the stdio server (normally launched by your MCP client):uvx --from parlayapi-mcp==0.3.8 parlayapi-mcp
# Or install globally with pip:pip install parlayapi-mcp==0.3.8

Configure your MCP client

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json on macOS (%APPDATA%\Claude\claude_desktop_config.json on Windows):

json
{  "mcpServers": {    "parlayapi": {      "command": "uvx",      "args": ["parlayapi-mcp"],      "env": {        "PARLAYAPI_KEY": "your_key_here"      }    }  }}

If you don't have a key yet, omit env entirely. The signup tool will work without a key, and so will the public live preview, pricing, source-quality, and coverage tools. Paid data tools will return an error telling you to set a key. After signup, paste your new key into env and restart Claude Desktop. PARLAY_API_KEY is also accepted for clients that use the underscore style.

Cursor

For the packaged integration, see Cursor plugin setup.

Add to .cursor/mcp.json:

json
{  "mcpServers": {    "parlayapi": {      "command": "uvx",      "args": ["parlayapi-mcp"],      "env": { "PARLAYAPI_KEY": "your_key_here" }    }  }}

OpenClaw

OpenClaw can save stdio MCP server definitions with openclaw mcp set. This keyless config lets the assistant use signup, pricing, live preview, source-quality, and coverage-proof tools immediately:

bash
openclaw mcp set parlayapi '{"command":"uvx","args":["parlayapi-mcp"]}'

After the user signs up, add the API key for paid data tools:

bash
openclaw mcp set parlayapi '{"command":"uvx","args":["parlayapi-mcp"],"env":{"PARLAYAPI_KEY":"your_key_here"}}'

Run locally with Docker

Build the stdio container from this repository:

bash
docker build -t parlayapi-mcp:local .docker run --rm -i --read-only --cap-drop=ALL --security-opt=no-new-privileges parlayapi-mcp:local

The process waits for MCP messages on stdin. It does not open a web server or make an API call just by starting. Connect it through an MCP client; do not use -t, which would allocate a terminal instead of the MCP stdio transport.

For account tools, configure your own PARLAYAPI_KEY in your MCP client's secret configuration and pass that environment variable into the container:

bash
docker run --rm -i --read-only --cap-drop=ALL --security-opt=no-new-privileges -e PARLAYAPI_KEY parlayapi-mcp:local

No key is baked into the image. Each user should configure their own key and keep account responses within their own client. This container is not a shared community feed. The MIT software license grants no data distribution rights; applicable Terms and any written agreement govern API data use. These container defaults do not amend existing agreements.

Public discovery tools need no key. Account tools use your allowance; check current plans and limits. The existing tool set also includes account creation, checkout-link creation, login-link email and saved-book preferences. Approve those actions explicitly in your MCP client. Listing tools itself creates no account, sends no email and starts no checkout.

For private security reports, email [email protected]. Do not put API keys or account responses in public issues.

Tools exposed

ToolAuthPurpose
parlayapi_signupnoneCreate a free-tier account, return API key + claim URL + upgrade URL
parlayapi_checkout_linknoneStripe upgrade URL for any tier
parlayapi_magic_linknoneEmail a passwordless login link
parlayapi_get_pricingnoneCurrent public pricing and credit tiers
parlayapi_live_sportsnoneActive live sports, event counts, and book counts
parlayapi_live_searchnoneSearch live teams, players, and sport keys
parlayapi_live_command_centernonePublic best-line preview from /live
parlayapi_source_qualitynonePublic source freshness and quality metadata
parlayapi_book_coveragenonePublic per-book five-gate coverage proof
parlayapi_list_sportskeyAll available sport keys
parlayapi_get_oddskeyGame-level odds (h2h, spreads, totals) for a sport
parlayapi_get_propskeyPlayer prop odds for a sport
parlayapi_best_linekeyBest price per outcome across bookmakers
parlayapi_verdictkeyOne-call "should I bet this?": fair price vs market, best book you can bet at, plain-English BET/PASS call
parlayapi_set_bettable_bookskeyRemember the user's region/books so verdicts skip books they can't use
parlayapi_parlay_verdictkeyGrade a multi-leg parlay: combined fair price, best book to place it, EV, weakest leg, correlation warnings, payout
parlayapi_best_betskeyRanked +EV plays for a sport, scoped to books you can bet at, plus edge alerts
parlayapi_account_infokeyTier, credits remaining, billing period
parlayapi_find_arbitragekeyCross-book arbitrage candidates, 3-way (home/draw/away) markets included
parlayapi_find_evkeyPositive-EV bets vs a sharp book's no-vig fair line
parlayapi_consensuskeyConsensus (average) odds across all bookmakers per market
parlayapi_find_middleskeyCross-book middle opportunities

Resources

parlayapi://docs/quickstart - Python and JS code samples.

Local development

bash
git clone https://github.com/JacobiusMakes/parlay-api-mcpcd parlay-api-mcppip install -e .
# Run against the local API instead of production:PARLAYAPI_BASE_URL=http://127.0.0.1:8080 \PARLAYAPI_KEY=your_local_test_key \parlayapi-mcp

Privacy Policy

This extension connects to ParlayAPI. See the ParlayAPI Privacy Policy.

License

MIT


Part of the ParlayAPI ecosystem: a real-time sports odds API with a free tier of 1,000 credits per month, no card required. Explore all the tools at github.com/JacobiusMakes.

Source: README.md at commit 2d4d904

Tools

22

parlayapi_signup

Create a free-tier ParlayAPI account for the given email. Returns the API key, a magic-login URL the user can click to access their dashboard, and a Stripe upgrade URL. Idempotent: if the email already has an account, returns exists=true with the login URL only (the existing API key is intentionally NOT exposed for security). Use this when a user wants to start building with ParlayAPI and does not have a key yet. After signup, ask the user to add the returned api_key to their MCP server config under PARLAYAPI_KEY, then restart the MCP client to pick it up. Args: email: User's email address. intended_use: Optional one-line description of what they're building. Used for analytics. agent_id: Identifier for the agent making the call. Defaults to "mcp-client".

Parametersemailrequiredagent_idintended_use

parlayapi_get_pricing

Return the current public pricing table. No API key required. Use this when an agent needs to explain which tier unlocks a workflow before sending a checkout link.

Takes no parameters.

parlayapi_live_sports

List currently active live sports on the retail /live surface. No API key required. Returns sport keys plus live event and book counts so agents can discover what is active right now.

Takes no parameters.

parlayapi_live_command_center

Return the public best-line command center payload. No API key required. Shows current games, participating books, and best available real prices on the /live dashboard preview. This is a discovery and demo surface, not a substitute for the paid odds endpoints.

Parameterslimitsport_key

parlayapi_source_quality

Return public per-source freshness and quality metadata. No API key required. Use this to prove that rows are flowing from each source before choosing books for a customer workflow.

Parameterslimitminutes

parlayapi_book_coverage

Return public per-book coverage gates. No API key required. This is the proof surface for whether each source survives freshness, normalization, database, REST-shape, and stream-shape checks.

Parametersinclude_warnwindow_minutes

parlayapi_list_sports

List available sport keys. Use these in subsequent calls. Examples: baseball_mlb, basketball_nba, americanfootball_nfl, icehockey_nhl, soccer_epl, mma_ufc, esports_lol, table_tennis_*.

Parametersactive_only

parlayapi_get_odds

Get game-level odds for a sport from all configured bookmakers. Args: sport_key: e.g. "baseball_mlb", "soccer_epl" markets: Comma-separated. h2h, spreads, totals. regions: us, us2, uk, eu, fr, au, ca, mx, latam, br, asia. Comma-separated for multiple. bookmakers: Comma-separated bookmaker keys (optional). Examples: pinnacle, draftkings, fanduel, bovada, caesars. odds_format: decimal | american

Parametersmarketsregionssport_keyrequiredbookmakersodds_format

parlayapi_get_props

Get player prop odds for a sport. Args: sport_key: e.g. "baseball_mlb", "basketball_nba" markets: Comma-separated prop market keys (optional). Examples: player_points, player_rebounds, player_strikeouts, player_passing_yards, player_total_bases. bookmakers: Comma-separated. Examples: prizepicks, underdog, sleeper, draftkings, fanduel. player: Filter to props mentioning this player name. include_futures: Include season-long futures (default False).

Parametersplayermarketssport_keyrequiredbookmakersinclude_futures

parlayapi_best_line

Find the best (highest) price for each outcome across bookmakers. Useful for line-shopping bots. Returns one row per game / market / side with the bookmaker offering the best price. Args: sport_key: e.g. "baseball_mlb" market: h2h | spreads | totals bookmakers: Restrict the search to these books (optional).

Parametersmarketsport_keyrequiredbookmakers

parlayapi_verdict

Should I bet this? One-call verdict for a specific bet. Returns the no-vig fair price for the exact bet, the best available price and which book has it, how the user's price (if given) grades as EV, a line-shopping nudge, and a plain-English call: BET / LEAN / FAIR / PASS (or NO_DATA). Use this when a user asks whether a specific bet is worth making, or whether they're getting a good number, instead of stitching /ev + /consensus + /best-line yourself. The best-price / shop recommendation is scoped to books the user can bet at (default US, so a US bettor is never told to use a euro book). Set it once with parlayapi_set_bettable_books and it is remembered per key, or pass region / books here per call. Args: sport: sport_key, e.g. "baseball_mlb". side: the team you'd bet (h2h / spreads), or "over" / "under" (totals / props). market: h2h | spreads | totals | a player-prop key (player_hits, player_points, ...). home, away: the two teams, to identify the game. Or pass `team` with one name. team: one team name to find the game (alternative to home + away). player: player name (required for player-prop markets). line: the number for spreads, totals, or props. book: the book you'd bet at (grades that book's current price). price: the price you're offered (American like -110, or decimal like 1.91). Overrides `book`, use it to grade a specific number in hand. region: where you can bet: us (default) | eu | uk | au | ca. books: exact CSV of books you can bet at (overrides region; use for state-level geo-blocks, e.g. "draftkings,fanduel,novig"). bankroll: the user's bankroll; when the bet is +EV, returns a suggested Kelly stake amount ("bet it, ~$X"). kelly: Kelly fraction (default 0.5 = half-Kelly, the bankroll-safe standard). The response also carries an `edge_alert` when a book shows a pr

Parametersawaybookhomelinesiderequiredteambookskellypricesportrequiredmarketplayer+2 more

parlayapi_set_bettable_books

Remember which books the user can bet at, so parlayapi_verdict scopes its best-price and shop recommendations to them automatically (no need to pass region/books every call). Call this once when a user tells you where they bet ("I'm in the US on DraftKings and FanDuel"). Pass region OR an exact books list. Args: region: us | eu | uk | au | ca. books: exact CSV of book keys, e.g. "draftkings,fanduel,novig". Overrides region.

Parametersbooksregion

parlayapi_parlay_verdict

Grade a multi-leg parlay: should you bet it, and at which book? Give 2 to 12 legs (each shaped like a parlayapi_verdict bet) and get the combined no-vig fair price, the single best BOOK to place the whole slip at (a real parlay is one slip, not best-of-each), the parlay's EV, the weakest leg, same-game correlation warnings, and (with stake) the payout. Best-price is scoped to books the user can bet at (set once via parlayapi_set_bettable_books, or pass region/books here). Args: legs: list of leg objects, e.g. [{"sport": "baseball_mlb", "home": "Detroit Tigers", "away": "Kansas City Royals", "market": "h2h", "side": "Detroit Tigers"}, {"sport": "baseball_mlb", "team": "Detroit Tigers", "market": "totals", "side": "over", "line": 8.5}] Each leg: sport, market (h2h/spreads/totals or a player-prop key), side (team, or over/under), home+away or team, player (for props), line. region: us (default) | eu | uk | au | ca. books: exact CSV of books you can bet at (overrides region). stake: optional stake amount, to compute the payout if it hits. book: optional, also report the parlay price at this specific book.

Parametersbooklegsrequiredbookskellystakeregionbankroll

parlayapi_best_bets

What should I bet right now? Ranked +EV plays for a sport. The discovery counterpart to parlayapi_verdict: scans the whole board, grades every candidate with the same no-vig engine, keeps only bets that are +EV at a book the user can bet at, and ranks them by edge. Also returns edge_alerts (books showing a price far off the market). Player props only, priced by several books, prediction markets and game moneylines excluded (for a game line, use parlayapi_verdict). Scoped to the user's books. Args: sport_key: e.g. "baseball_mlb". region: us (default) | eu | uk | au | ca. books: exact CSV of books you can bet at (overrides region). limit: max plays to return (default 20). min_edge: minimum edge %% vs the no-vig fair line (default 2.0).

Parametersbookslimitregionmin_edgesport_keyrequired

parlayapi_account_info

Get info about the API key currently in use: tier, credits remaining, billing period.

Takes no parameters.

parlayapi_find_arbitrage

Find cross-book arbitrage candidates from current quoted prices. Scans every event for quoted prices whose combined implied probability is under 100%. Results are candidates, not guaranteed executable profit: prices can move or be unavailable, and limits, latency, commissions, voids, settlement rules, or stake constraints can change the outcome. Soccer and other 3-way (home/draw/away) markets are supported, including candidates anchored on the draw. Args: sport_key: e.g. "baseball_mlb", "soccer_epl". min_profit: Minimum profit % to include (e.g. 1.5 for 1.5%). Default 0. exclude_exchanges: Drop arbs anchored on an exchange (novig/prophetx), whose asks can be no-volume. Default False. markets: Comma-separated market_keys to limit the scan (optional), e.g. "h2h,spreads,totals".

Parametersmarketssport_keyrequiredmin_profitexclude_exchanges

parlayapi_find_ev

Find positive-EV bets vs a sharp book's no-vig fair line. Compares every soft book's price against the no-vig fair probability derived from a sharp book (default Pinnacle); rows where a soft book offers better odds than the sharp fair price are +EV. Three-way soccer markets use a dedicated no-vig pass over home/draw/away, so +EV on the draw surfaces too. Args: sport_key: e.g. "baseball_mlb", "soccer_epl". sharp_book: Sharp baseline book. Default "pinnacle". min_edge: Minimum edge % to include (e.g. 3 for 3%). Default 2. markets: Comma-separated market_keys (optional).

Parametersmarketsmin_edgesport_keyrequiredsharp_book

parlayapi_consensus

Get consensus (average) odds across all bookmakers per market. Returns average, best, and worst price per (event, market, player, line), a sharp baseline for line-shopping. Soccer and other 3-way markets return separate home, draw, and away consensus rows. Args: sport_key: e.g. "baseball_mlb", "soccer_epl". markets: Comma-separated market_keys (optional), e.g. "moneyline,totals".

Parametersmarketssport_keyrequired

parlayapi_find_middles

Find cross-book middle opportunities. A middle takes the Over at a low line on one book and the Under at a higher line on another, so a window of whole numbers cashes BOTH bets (e.g. Over 7.5 at one book, Under 9.5 at another means 8 or 9 wins both). Scans game totals, spreads, AND player-total props (points, rebounds, strikeouts, ...). Each result carries the window, the numbers that hit, and per-$100 economics: profit_if_hit and net_if_above/below_window. Args: sport_key: e.g. "baseball_mlb", "basketball_nba". min_gap: Minimum window width in points/runs/goals. Default 1.0. markets: Comma-separated market_keys to limit the scan (optional), e.g. "totals" or "player_points". include_props: Include player-total props alongside game lines. Default True.

Parametersmarketsmin_gapsport_keyrequiredinclude_props

Version history

2
  1. v0.3.8LatestOct 2, 2026
  2. v0.3.7Sep 16, 2026

Score

100% 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 listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Parlay integrations