ParlayAPI

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

我该使用它吗

质量与安全性

A
描述质量
99%
模式完整度
71%
命名质量
80%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

发现(1)

  • LOWTool 'parlayapi_source_quality' description lacks action verb在 parlayapi_source_quality 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~5,415token 数(工具定义)
~1.1 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 4.23%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "parlayapi": {
      "command": "uvx",
      "args": [
        "parlayapi-mcp"
      ]
    }
  }
}

可运行的软件包

pypiparlayapi-mcp0.3.7stdio

远程端点

https://parlay-api.com/mcp/httpstreamable-http

它能做什么

工具清单

工具(22)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟡parlayapi_signup(email, intended_use, agent_id)

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".

输入模式

{
  "type": "object",
  "properties": {
    "email": {
      "title": "Email",
      "type": "string"
    },
    "intended_use": {
      "default": "",
      "title": "Intended Use",
      "type": "string"
    },
    "agent_id": {
      "default": "mcp-client",
      "title": "Agent Id",
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "title": "parlayapi_signupArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_signupDictOutput"
}
⚪parlayapi_checkout_link(email, tier)

Generate a Stripe Checkout URL the user can click to upgrade. Tiers: starter ($5), pro ($20), business ($40), enterprise ($100), scale ($200). All are monthly subscriptions.

输入模式

{
  "type": "object",
  "properties": {
    "email": {
      "title": "Email",
      "type": "string"
    },
    "tier": {
      "default": "pro",
      "title": "Tier",
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "title": "parlayapi_checkout_linkArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_checkout_linkDictOutput"
}
⚪parlayapi_magic_link(email)

Email a magic-login link for an existing ParlayAPI account. Always returns ok=true regardless of whether the email exists, to prevent account enumeration. The user receives the link by email.

输入模式

{
  "type": "object",
  "properties": {
    "email": {
      "title": "Email",
      "type": "string"
    }
  },
  "required": [
    "email"
  ],
  "title": "parlayapi_magic_linkArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_magic_linkDictOutput"
}
🟢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.

输入模式

{
  "type": "object",
  "properties": {},
  "title": "parlayapi_get_pricingArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_get_pricingDictOutput"
}
🟢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.

输入模式

{
  "type": "object",
  "properties": {},
  "title": "parlayapi_live_sportsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "result": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Result",
      "type": "array"
    }
  },
  "required": [
    "result"
  ],
  "title": "parlayapi_live_sportsOutput"
}
🟢parlayapi_live_search(q, limit)

Search live teams, players, and sport keys. No API key required. Useful when the user asks for a team, player, or league by natural-language name and the agent needs the exact sport_key to call next.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "title": "Q",
      "type": "string"
    },
    "limit": {
      "default": 25,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "q"
  ],
  "title": "parlayapi_live_searchArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_live_searchDictOutput"
}
⚪parlayapi_live_command_center(sport_key, limit)

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.

输入模式

{
  "type": "object",
  "properties": {
    "sport_key": {
      "default": "",
      "title": "Sport Key",
      "type": "string"
    },
    "limit": {
      "default": 12,
      "title": "Limit",
      "type": "integer"
    }
  },
  "title": "parlayapi_live_command_centerArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_live_command_centerDictOutput"
}
⚪parlayapi_source_quality(minutes, limit)

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.

输入模式

{
  "type": "object",
  "properties": {
    "minutes": {
      "default": 10,
      "title": "Minutes",
      "type": "integer"
    },
    "limit": {
      "default": 40,
      "title": "Limit",
      "type": "integer"
    }
  },
  "title": "parlayapi_source_qualityArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_source_qualityDictOutput"
}
⚪parlayapi_book_coverage(window_minutes, include_warn)

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.

输入模式

{
  "type": "object",
  "properties": {
    "window_minutes": {
      "default": 15,
      "title": "Window Minutes",
      "type": "integer"
    },
    "include_warn": {
      "default": true,
      "title": "Include Warn",
      "type": "boolean"
    }
  },
  "title": "parlayapi_book_coverageArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_book_coverageDictOutput"
}
🟢parlayapi_list_sports(active_only)

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_*.

输入模式

{
  "type": "object",
  "properties": {
    "active_only": {
      "default": true,
      "title": "Active Only",
      "type": "boolean"
    }
  },
  "title": "parlayapi_list_sportsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "result": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Result",
      "type": "array"
    }
  },
  "required": [
    "result"
  ],
  "title": "parlayapi_list_sportsOutput"
}
🟢parlayapi_get_odds(sport_key, markets, regions, bookmakers, odds_format)

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

输入模式

{
  "type": "object",
  "properties": {
    "sport_key": {
      "title": "Sport Key",
      "type": "string"
    },
    "markets": {
      "default": "h2h",
      "title": "Markets",
      "type": "string"
    },
    "regions": {
      "default": "us",
      "title": "Regions",
      "type": "string"
    },
    "bookmakers": {
      "default": "",
      "title": "Bookmakers",
      "type": "string"
    },
    "odds_format": {
      "default": "decimal",
      "title": "Odds Format",
      "type": "string"
    }
  },
  "required": [
    "sport_key"
  ],
  "title": "parlayapi_get_oddsArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_get_oddsDictOutput"
}
🟢parlayapi_get_props(sport_key, markets, bookmakers, player, include_futures)

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).

输入模式

{
  "type": "object",
  "properties": {
    "sport_key": {
      "title": "Sport Key",
      "type": "string"
    },
    "markets": {
      "default": "",
      "title": "Markets",
      "type": "string"
    },
    "bookmakers": {
      "default": "",
      "title": "Bookmakers",
      "type": "string"
    },
    "player": {
      "default": "",
      "title": "Player",
      "type": "string"
    },
    "include_futures": {
      "default": false,
      "title": "Include Futures",
      "type": "boolean"
    }
  },
  "required": [
    "sport_key"
  ],
  "title": "parlayapi_get_propsArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_get_propsDictOutput"
}
🟢parlayapi_best_line(sport_key, market, bookmakers)

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).

输入模式

{
  "type": "object",
  "properties": {
    "sport_key": {
      "title": "Sport Key",
      "type": "string"
    },
    "market": {
      "default": "h2h",
      "title": "Market",
      "type": "string"
    },
    "bookmakers": {
      "default": "",
      "title": "Bookmakers",
      "type": "string"
    }
  },
  "required": [
    "sport_key"
  ],
  "title": "parlayapi_best_lineArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_best_lineDictOutput"
}
🟡parlayapi_verdict(sport, side, market, home, away, ...)

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 price far better than the market (a possible soft error worth grabbing, or a stale line to verify) that the normal best-price guard would otherwise hide.

输入模式

{
  "type": "object",
  "properties": {
    "sport": {
      "title": "Sport",
      "type": "string"
    },
    "side": {
      "title": "Side",
      "type": "string"
    },
    "market": {
      "default": "h2h",
      "title": "Market",
      "type": "string"
    },
    "home": {
      "default": "",
      "title": "Home",
      "type": "string"
    },
    "away": {
      "default": "",
      "title": "Away",
      "type": "string"
    },
    "team": {
      "default": "",
      "title": "Team",
      "type": "string"
    },
    "player": {
      "default": "",
      "title": "Player",
      "type": "string"
    },
    "line": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Line"
    },
    "book": {
      "default": "",
      "title": "Book",
      "type": "string"
    },
    "price": {
      "default": "",
      "title": "Price",
      "type": "string"
    },
    "region": {
      "default": "",
      "title": "Region",
      "type": "string"
    },
    "books": {
      "default": "",
      "title": "Books",
      "type": "string"
    },
    "bankroll": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Bankroll"
    },
    "kelly": {
      "default": 0.5,
      "title": "Kelly",
      "type": "number"
    }
  },
  "required": [
    "sport",
    "side"
  ],
  "title": "parlayapi_verdictArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_verdictDictOutput"
}
🟡parlayapi_set_bettable_books(region, 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.

输入模式

{
  "type": "object",
  "properties": {
    "region": {
      "default": "",
      "title": "Region",
      "type": "string"
    },
    "books": {
      "default": "",
      "title": "Books",
      "type": "string"
    }
  },
  "title": "parlayapi_set_bettable_booksArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_set_bettable_booksDictOutput"
}
🟡parlayapi_parlay_verdict(legs, region, books, stake, book, ...)

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.

输入模式

{
  "type": "object",
  "properties": {
    "legs": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Legs",
      "type": "array"
    },
    "region": {
      "default": "",
      "title": "Region",
      "type": "string"
    },
    "books": {
      "default": "",
      "title": "Books",
      "type": "string"
    },
    "stake": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Stake"
    },
    "book": {
      "default": "",
      "title": "Book",
      "type": "string"
    },
    "bankroll": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Bankroll"
    },
    "kelly": {
      "default": 0.5,
      "title": "Kelly",
      "type": "number"
    }
  },
  "required": [
    "legs"
  ],
  "title": "parlayapi_parlay_verdictArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_parlay_verdictDictOutput"
}
⚪parlayapi_best_bets(sport_key, region, books, limit, min_edge)

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).

输入模式

{
  "type": "object",
  "properties": {
    "sport_key": {
      "title": "Sport Key",
      "type": "string"
    },
    "region": {
      "default": "",
      "title": "Region",
      "type": "string"
    },
    "books": {
      "default": "",
      "title": "Books",
      "type": "string"
    },
    "limit": {
      "default": 20,
      "title": "Limit",
      "type": "integer"
    },
    "min_edge": {
      "default": 2,
      "title": "Min Edge",
      "type": "number"
    }
  },
  "required": [
    "sport_key"
  ],
  "title": "parlayapi_best_betsArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_best_betsDictOutput"
}
🟢parlayapi_account_info

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

输入模式

{
  "type": "object",
  "properties": {},
  "title": "parlayapi_account_infoArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_account_infoDictOutput"
}
🔴parlayapi_find_arbitrage(sport_key, min_profit, exclude_exchanges, markets)

Find guaranteed-profit arbitrage opportunities across bookmakers. Scans every event and returns bets where the combined implied probability across the books is under 100%, so betting each side locks in profit regardless of outcome. Soccer and other 3-way (home/draw/away) markets are fully supported, including arbs 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".

输入模式

{
  "type": "object",
  "properties": {
    "sport_key": {
      "title": "Sport Key",
      "type": "string"
    },
    "min_profit": {
      "default": 0,
      "title": "Min Profit",
      "type": "number"
    },
    "exclude_exchanges": {
      "default": false,
      "title": "Exclude Exchanges",
      "type": "boolean"
    },
    "markets": {
      "default": "",
      "title": "Markets",
      "type": "string"
    }
  },
  "required": [
    "sport_key"
  ],
  "title": "parlayapi_find_arbitrageArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_find_arbitrageDictOutput"
}
🟢parlayapi_find_ev(sport_key, sharp_book, min_edge, markets)

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).

输入模式

{
  "type": "object",
  "properties": {
    "sport_key": {
      "title": "Sport Key",
      "type": "string"
    },
    "sharp_book": {
      "default": "pinnacle",
      "title": "Sharp Book",
      "type": "string"
    },
    "min_edge": {
      "default": 2,
      "title": "Min Edge",
      "type": "number"
    },
    "markets": {
      "default": "",
      "title": "Markets",
      "type": "string"
    }
  },
  "required": [
    "sport_key"
  ],
  "title": "parlayapi_find_evArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_find_evDictOutput"
}
🟢parlayapi_consensus(sport_key, markets)

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".

输入模式

{
  "type": "object",
  "properties": {
    "sport_key": {
      "title": "Sport Key",
      "type": "string"
    },
    "markets": {
      "default": "",
      "title": "Markets",
      "type": "string"
    }
  },
  "required": [
    "sport_key"
  ],
  "title": "parlayapi_consensusArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_consensusDictOutput"
}
🟢parlayapi_find_middles(sport_key, min_gap, markets, include_props)

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.

输入模式

{
  "type": "object",
  "properties": {
    "sport_key": {
      "title": "Sport Key",
      "type": "string"
    },
    "min_gap": {
      "default": 1,
      "title": "Min Gap",
      "type": "number"
    },
    "markets": {
      "default": "",
      "title": "Markets",
      "type": "string"
    },
    "include_props": {
      "default": true,
      "title": "Include Props",
      "type": "boolean"
    }
  },
  "required": [
    "sport_key"
  ],
  "title": "parlayapi_find_middlesArguments"
}

输出模式

{
  "type": "object",
  "additionalProperties": true,
  "title": "parlayapi_find_middlesDictOutput"
}

社区

评价此服务器

证据

最近观测

已验证未记录版本22 个工具
已验证未记录版本22 个工具
已验证未记录版本22 个工具