Server definition
- Hash
- sha256:b316c0ef8d4e25adf2caf93de791b29e71d660fdba1a512151cbd7eb25b93472
- What it is
- What a remote MCP server returned when asked what it offers: 22 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Get info about the API key currently in use: tier, credits\n remaining, billing period.\n ",
"inputSchema": {
"properties": {},
"title": "parlayapi_account_infoArguments",
"type": "object"
},
"name": "parlayapi_account_info",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_account_infoDictOutput",
"type": "object"
}
},
{
"description": "What should I bet right now? Ranked +EV plays for a sport.\n\n The discovery counterpart to parlayapi_verdict: scans the whole board,\n grades every candidate with the same no-vig engine, keeps only bets that\n are +EV at a book the user can bet at, and ranks them by edge. Also returns\n edge_alerts (books showing a price far off the market). Player props only,\n priced by several books, prediction markets and game moneylines excluded\n (for a game line, use parlayapi_verdict). Scoped to the user's books.\n\n Args:\n sport_key: e.g. \"baseball_mlb\".\n region: us (default) | eu | uk | au | ca.\n books: exact CSV of books you can bet at (overrides region).\n limit: max plays to return (default 20).\n min_edge: minimum edge %% vs the no-vig fair line (default 2.0).\n ",
"inputSchema": {
"properties": {
"books": {
"default": "",
"title": "Books",
"type": "string"
},
"limit": {
"default": 20,
"title": "Limit",
"type": "integer"
},
"min_edge": {
"default": 2,
"title": "Min Edge",
"type": "number"
},
"region": {
"default": "",
"title": "Region",
"type": "string"
},
"sport_key": {
"title": "Sport Key",
"type": "string"
}
},
"required": [
"sport_key"
],
"title": "parlayapi_best_betsArguments",
"type": "object"
},
"name": "parlayapi_best_bets",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_best_betsDictOutput",
"type": "object"
}
},
{
"description": "Find the best (highest) price for each outcome across bookmakers.\n\n Useful for line-shopping bots. Returns one row per game / market /\n side with the bookmaker offering the best price.\n\n Args:\n sport_key: e.g. \"baseball_mlb\"\n market: h2h | spreads | totals\n bookmakers: Restrict the search to these books (optional).\n ",
"inputSchema": {
"properties": {
"bookmakers": {
"default": "",
"title": "Bookmakers",
"type": "string"
},
"market": {
"default": "h2h",
"title": "Market",
"type": "string"
},
"sport_key": {
"title": "Sport Key",
"type": "string"
}
},
"required": [
"sport_key"
],
"title": "parlayapi_best_lineArguments",
"type": "object"
},
"name": "parlayapi_best_line",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_best_lineDictOutput",
"type": "object"
}
},
{
"description": "Return public per-book coverage gates.\n\n No API key required. This is the proof surface for whether each\n source survives freshness, normalization, database, REST-shape, and\n stream-shape checks.\n ",
"inputSchema": {
"properties": {
"include_warn": {
"default": true,
"title": "Include Warn",
"type": "boolean"
},
"window_minutes": {
"default": 15,
"title": "Window Minutes",
"type": "integer"
}
},
"title": "parlayapi_book_coverageArguments",
"type": "object"
},
"name": "parlayapi_book_coverage",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_book_coverageDictOutput",
"type": "object"
}
},
{
"description": "Request an owner-authenticated checkout URL or an email-link flow.\n\n A configured key is forwarded for the backend to verify account ownership.\n With no matching key, the backend returns an email-flow acknowledgement\n rather than a checkout URL. That response does not confirm email delivery.\n Tiers: starter, pro, business, enterprise, scale. For current prices, call\n parlayapi_get_pricing.\n ",
"inputSchema": {
"properties": {
"email": {
"title": "Email",
"type": "string"
},
"tier": {
"default": "pro",
"title": "Tier",
"type": "string"
}
},
"required": [
"email"
],
"title": "parlayapi_checkout_linkArguments",
"type": "object"
},
"name": "parlayapi_checkout_link",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_checkout_linkDictOutput",
"type": "object"
}
},
{
"description": "Get consensus (average) odds across all bookmakers per market.\n\n Returns average, best, and worst price per (event, market, player,\n line), a sharp baseline for line-shopping. Soccer and other 3-way\n markets return separate home, draw, and away consensus rows.\n\n Args:\n sport_key: e.g. \"baseball_mlb\", \"soccer_epl\".\n markets: Comma-separated market_keys (optional), e.g. \"moneyline,totals\".\n ",
"inputSchema": {
"properties": {
"markets": {
"default": "",
"title": "Markets",
"type": "string"
},
"sport_key": {
"title": "Sport Key",
"type": "string"
}
},
"required": [
"sport_key"
],
"title": "parlayapi_consensusArguments",
"type": "object"
},
"name": "parlayapi_consensus",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_consensusDictOutput",
"type": "object"
}
},
{
"description": "Find cross-book arbitrage candidates from current quoted prices.\n\n Scans every event for quoted prices whose combined implied probability\n is under 100%. Results are candidates, not guaranteed executable profit:\n prices can move or be unavailable, and limits, latency, commissions,\n voids, settlement rules, or stake constraints can change the outcome.\n Soccer and other 3-way (home/draw/away) markets are supported, including\n candidates anchored on the draw.\n\n Args:\n sport_key: e.g. \"baseball_mlb\", \"soccer_epl\".\n min_profit: Minimum profit % to include (e.g. 1.5 for 1.5%). Default 0.\n exclude_exchanges: Drop arbs anchored on an exchange (novig/prophetx),\n whose asks can be no-volume. Default False.\n markets: Comma-separated market_keys to limit the scan (optional),\n e.g. \"h2h,spreads,totals\".\n ",
"inputSchema": {
"properties": {
"exclude_exchanges": {
"default": false,
"title": "Exclude Exchanges",
"type": "boolean"
},
"markets": {
"default": "",
"title": "Markets",
"type": "string"
},
"min_profit": {
"default": 0,
"title": "Min Profit",
"type": "number"
},
"sport_key": {
"title": "Sport Key",
"type": "string"
}
},
"required": [
"sport_key"
],
"title": "parlayapi_find_arbitrageArguments",
"type": "object"
},
"name": "parlayapi_find_arbitrage",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_find_arbitrageDictOutput",
"type": "object"
}
},
{
"description": "Find positive-EV bets vs a sharp book's no-vig fair line.\n\n Compares every soft book's price against the no-vig fair probability\n derived from a sharp book (default Pinnacle); rows where a soft book\n offers better odds than the sharp fair price are +EV. Three-way soccer\n markets use a dedicated no-vig pass over home/draw/away, so +EV on the\n draw surfaces too.\n\n Args:\n sport_key: e.g. \"baseball_mlb\", \"soccer_epl\".\n sharp_book: Sharp baseline book. Default \"pinnacle\".\n min_edge: Minimum edge % to include (e.g. 3 for 3%). Default 2.\n markets: Comma-separated market_keys (optional).\n ",
"inputSchema": {
"properties": {
"markets": {
"default": "",
"title": "Markets",
"type": "string"
},
"min_edge": {
"default": 2,
"title": "Min Edge",
"type": "number"
},
"sharp_book": {
"default": "pinnacle",
"title": "Sharp Book",
"type": "string"
},
"sport_key": {
"title": "Sport Key",
"type": "string"
}
},
"required": [
"sport_key"
],
"title": "parlayapi_find_evArguments",
"type": "object"
},
"name": "parlayapi_find_ev",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_find_evDictOutput",
"type": "object"
}
},
{
"description": "Find cross-book middle opportunities.\n\n A middle takes the Over at a low line on one book and the Under at a\n higher line on another, so a window of whole numbers cashes BOTH bets\n (e.g. Over 7.5 at one book, Under 9.5 at another means 8 or 9 wins both).\n Scans game totals, spreads, AND player-total props (points, rebounds,\n strikeouts, ...). Each result carries the window, the numbers that hit,\n and per-$100 economics: profit_if_hit and net_if_above/below_window.\n\n Args:\n sport_key: e.g. \"baseball_mlb\", \"basketball_nba\".\n min_gap: Minimum window width in points/runs/goals. Default 1.0.\n markets: Comma-separated market_keys to limit the scan (optional),\n e.g. \"totals\" or \"player_points\".\n include_props: Include player-total props alongside game lines. Default True.\n ",
"inputSchema": {
"properties": {
"include_props": {
"default": true,
"title": "Include Props",
"type": "boolean"
},
"markets": {
"default": "",
"title": "Markets",
"type": "string"
},
"min_gap": {
"default": 1,
"title": "Min Gap",
"type": "number"
},
"sport_key": {
"title": "Sport Key",
"type": "string"
}
},
"required": [
"sport_key"
],
"title": "parlayapi_find_middlesArguments",
"type": "object"
},
"name": "parlayapi_find_middles",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_find_middlesDictOutput",
"type": "object"
}
},
{
"description": "Get game-level odds for a sport from all configured bookmakers.\n\n Args:\n sport_key: e.g. \"baseball_mlb\", \"soccer_epl\"\n markets: Comma-separated. h2h, spreads, totals.\n regions: us, us2, uk, eu, fr, au, ca, mx, latam, br, asia. Comma-separated for multiple.\n bookmakers: Comma-separated bookmaker keys (optional).\n Examples: pinnacle, draftkings, fanduel, bovada, caesars.\n odds_format: decimal | american\n ",
"inputSchema": {
"properties": {
"bookmakers": {
"default": "",
"title": "Bookmakers",
"type": "string"
},
"markets": {
"default": "h2h",
"title": "Markets",
"type": "string"
},
"odds_format": {
"default": "decimal",
"title": "Odds Format",
"type": "string"
},
"regions": {
"default": "us",
"title": "Regions",
"type": "string"
},
"sport_key": {
"title": "Sport Key",
"type": "string"
}
},
"required": [
"sport_key"
],
"title": "parlayapi_get_oddsArguments",
"type": "object"
},
"name": "parlayapi_get_odds",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_get_oddsDictOutput",
"type": "object"
}
},
{
"description": "Return the current public pricing table.\n\n No API key required. Use this when an agent needs to explain which\n tier unlocks a workflow before sending a checkout link.\n ",
"inputSchema": {
"properties": {},
"title": "parlayapi_get_pricingArguments",
"type": "object"
},
"name": "parlayapi_get_pricing",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_get_pricingDictOutput",
"type": "object"
}
},
{
"description": "Get player prop odds for a sport.\n\n Args:\n sport_key: e.g. \"baseball_mlb\", \"basketball_nba\"\n markets: Comma-separated prop market keys (optional).\n Examples: player_points, player_rebounds, player_strikeouts,\n player_passing_yards, player_total_bases.\n bookmakers: Comma-separated. Examples: prizepicks, underdog,\n sleeper, draftkings, fanduel.\n player: Filter to props mentioning this player name.\n include_futures: Include season-long futures (default False).\n ",
"inputSchema": {
"properties": {
"bookmakers": {
"default": "",
"title": "Bookmakers",
"type": "string"
},
"include_futures": {
"default": false,
"title": "Include Futures",
"type": "boolean"
},
"markets": {
"default": "",
"title": "Markets",
"type": "string"
},
"player": {
"default": "",
"title": "Player",
"type": "string"
},
"sport_key": {
"title": "Sport Key",
"type": "string"
}
},
"required": [
"sport_key"
],
"title": "parlayapi_get_propsArguments",
"type": "object"
},
"name": "parlayapi_get_props",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_get_propsDictOutput",
"type": "object"
}
},
{
"description": "List available sport keys. Use these in subsequent calls.\n\n Examples: baseball_mlb, basketball_nba, americanfootball_nfl,\n icehockey_nhl, soccer_epl, mma_ufc, esports_lol, table_tennis_*.\n ",
"inputSchema": {
"properties": {
"active_only": {
"default": true,
"title": "Active Only",
"type": "boolean"
}
},
"title": "parlayapi_list_sportsArguments",
"type": "object"
},
"name": "parlayapi_list_sports",
"outputSchema": {
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "parlayapi_list_sportsOutput",
"type": "object"
}
},
{
"description": "Return the public best-line command center payload.\n\n No API key required. Shows current games, participating books, and\n best available real prices on the /live dashboard preview. This is\n a discovery and demo surface, not a substitute for the paid odds\n endpoints.\n ",
"inputSchema": {
"properties": {
"limit": {
"default": 12,
"title": "Limit",
"type": "integer"
},
"sport_key": {
"default": "",
"title": "Sport Key",
"type": "string"
}
},
"title": "parlayapi_live_command_centerArguments",
"type": "object"
},
"name": "parlayapi_live_command_center",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_live_command_centerDictOutput",
"type": "object"
}
},
{
"description": "Search live teams, players, and sport keys.\n\n No API key required. Useful when the user asks for a team, player,\n or league by natural-language name and the agent needs the exact\n sport_key to call next.\n ",
"inputSchema": {
"properties": {
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
},
"q": {
"title": "Q",
"type": "string"
}
},
"required": [
"q"
],
"title": "parlayapi_live_searchArguments",
"type": "object"
},
"name": "parlayapi_live_search",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_live_searchDictOutput",
"type": "object"
}
},
{
"description": "List currently active live sports on the retail /live surface.\n\n No API key required. Returns sport keys plus live event and book\n counts so agents can discover what is active right now.\n ",
"inputSchema": {
"properties": {},
"title": "parlayapi_live_sportsArguments",
"type": "object"
},
"name": "parlayapi_live_sports",
"outputSchema": {
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "parlayapi_live_sportsOutput",
"type": "object"
}
},
{
"description": "Email a magic-login link for an existing ParlayAPI account.\n\n Always returns ok=true regardless of whether the email exists, to\n prevent account enumeration. The user receives the link by email.\n ",
"inputSchema": {
"properties": {
"email": {
"title": "Email",
"type": "string"
}
},
"required": [
"email"
],
"title": "parlayapi_magic_linkArguments",
"type": "object"
},
"name": "parlayapi_magic_link",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_magic_linkDictOutput",
"type": "object"
}
},
{
"description": "Grade a multi-leg parlay: should you bet it, and at which book?\n\n Give 2 to 12 legs (each shaped like a parlayapi_verdict bet) and get the\n combined no-vig fair price, the single best BOOK to place the whole slip at\n (a real parlay is one slip, not best-of-each), the parlay's EV, the weakest\n leg, same-game correlation warnings, and (with stake) the payout. Best-price\n is scoped to books the user can bet at (set once via\n parlayapi_set_bettable_books, or pass region/books here).\n\n Args:\n legs: list of leg objects, e.g.\n [{\"sport\": \"baseball_mlb\", \"home\": \"Detroit Tigers\",\n \"away\": \"Kansas City Royals\", \"market\": \"h2h\", \"side\": \"Detroit Tigers\"},\n {\"sport\": \"baseball_mlb\", \"team\": \"Detroit Tigers\",\n \"market\": \"totals\", \"side\": \"over\", \"line\": 8.5}]\n Each leg: sport, market (h2h/spreads/totals or a player-prop key),\n side (team, or over/under), home+away or team, player (for props), line.\n region: us (default) | eu | uk | au | ca.\n books: exact CSV of books you can bet at (overrides region).\n stake: optional stake amount, to compute the payout if it hits.\n book: optional, also report the parlay price at this specific book.\n ",
"inputSchema": {
"properties": {
"bankroll": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Bankroll"
},
"book": {
"default": "",
"title": "Book",
"type": "string"
},
"books": {
"default": "",
"title": "Books",
"type": "string"
},
"kelly": {
"default": 0.5,
"title": "Kelly",
"type": "number"
},
"legs": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Legs",
"type": "array"
},
"region": {
"default": "",
"title": "Region",
"type": "string"
},
"stake": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Stake"
}
},
"required": [
"legs"
],
"title": "parlayapi_parlay_verdictArguments",
"type": "object"
},
"name": "parlayapi_parlay_verdict",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_parlay_verdictDictOutput",
"type": "object"
}
},
{
"description": "Remember which books the user can bet at, so parlayapi_verdict scopes its\n best-price and shop recommendations to them automatically (no need to pass\n region/books every call).\n\n Call this once when a user tells you where they bet (\"I'm in the US on\n DraftKings and FanDuel\"). Pass region OR an exact books list.\n\n Args:\n region: us | eu | uk | au | ca.\n books: exact CSV of book keys, e.g. \"draftkings,fanduel,novig\". Overrides region.\n ",
"inputSchema": {
"properties": {
"books": {
"default": "",
"title": "Books",
"type": "string"
},
"region": {
"default": "",
"title": "Region",
"type": "string"
}
},
"title": "parlayapi_set_bettable_booksArguments",
"type": "object"
},
"name": "parlayapi_set_bettable_books",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_set_bettable_booksDictOutput",
"type": "object"
}
},
{
"description": "Create a free-tier ParlayAPI account for the given email.\n\n Returns the API key, a magic-login URL the user can click to access\n their dashboard, and a Stripe upgrade URL. Idempotent: if the email\n already has an account, returns exists=true with the login URL only\n (the existing API key is intentionally NOT exposed for security).\n\n Use this when a user wants to start building with ParlayAPI and\n does not have a key yet. After signup, ask the user to add the\n returned api_key to their MCP server config under PARLAYAPI_KEY,\n then restart the MCP client to pick it up.\n\n Args:\n email: User's email address.\n intended_use: Optional one-line description of what they're\n building. Used for analytics.\n agent_id: Identifier for the agent making the call. Defaults\n to \"mcp-client\".\n ",
"inputSchema": {
"properties": {
"agent_id": {
"default": "mcp-client",
"title": "Agent Id",
"type": "string"
},
"email": {
"title": "Email",
"type": "string"
},
"intended_use": {
"default": "",
"title": "Intended Use",
"type": "string"
}
},
"required": [
"email"
],
"title": "parlayapi_signupArguments",
"type": "object"
},
"name": "parlayapi_signup",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_signupDictOutput",
"type": "object"
}
},
{
"description": "Return public per-source freshness and quality metadata.\n\n No API key required. Use this to prove that rows are flowing from\n each source before choosing books for a customer workflow.\n ",
"inputSchema": {
"properties": {
"limit": {
"default": 40,
"title": "Limit",
"type": "integer"
},
"minutes": {
"default": 10,
"title": "Minutes",
"type": "integer"
}
},
"title": "parlayapi_source_qualityArguments",
"type": "object"
},
"name": "parlayapi_source_quality",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_source_qualityDictOutput",
"type": "object"
}
},
{
"description": "Should I bet this? One-call verdict for a specific bet.\n\n Returns the no-vig fair price for the exact bet, the best available price\n and which book has it, how the user's price (if given) grades as EV, a\n line-shopping nudge, and a plain-English call: BET / LEAN / FAIR / PASS\n (or NO_DATA). Use this when a user asks whether a specific bet is worth\n making, or whether they're getting a good number, instead of stitching\n /ev + /consensus + /best-line yourself.\n\n The best-price / shop recommendation is scoped to books the user can bet\n at (default US, so a US bettor is never told to use a euro book). Set it\n once with parlayapi_set_bettable_books and it is remembered per key, or\n pass region / books here per call.\n\n Args:\n sport: sport_key, e.g. \"baseball_mlb\".\n side: the team you'd bet (h2h / spreads), or \"over\" / \"under\" (totals / props).\n market: h2h | spreads | totals | a player-prop key (player_hits, player_points, ...).\n home, away: the two teams, to identify the game. Or pass `team` with one name.\n team: one team name to find the game (alternative to home + away).\n player: player name (required for player-prop markets).\n line: the number for spreads, totals, or props.\n book: the book you'd bet at (grades that book's current price).\n price: the price you're offered (American like -110, or decimal like 1.91).\n Overrides `book`, use it to grade a specific number in hand.\n region: where you can bet: us (default) | eu | uk | au | ca.\n books: exact CSV of books you can bet at (overrides region; use for\n state-level geo-blocks, e.g. \"draftkings,fanduel,novig\").\n bankroll: the user's bankroll; when the bet is +EV, returns a suggested\n Kelly stake amount (\"bet it, ~$X\").\n kelly: Kelly fraction (default 0.5 = half-Kelly, the bankroll-safe standard).\n\n The response also carries an `edge_alert` when a book shows a price far\n better than the market (a possible soft error worth grabbing, or a stale\n line to verify) that the normal best-price guard would otherwise hide.\n ",
"inputSchema": {
"properties": {
"away": {
"default": "",
"title": "Away",
"type": "string"
},
"bankroll": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Bankroll"
},
"book": {
"default": "",
"title": "Book",
"type": "string"
},
"books": {
"default": "",
"title": "Books",
"type": "string"
},
"home": {
"default": "",
"title": "Home",
"type": "string"
},
"kelly": {
"default": 0.5,
"title": "Kelly",
"type": "number"
},
"line": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Line"
},
"market": {
"default": "h2h",
"title": "Market",
"type": "string"
},
"player": {
"default": "",
"title": "Player",
"type": "string"
},
"price": {
"default": "",
"title": "Price",
"type": "string"
},
"region": {
"default": "",
"title": "Region",
"type": "string"
},
"side": {
"title": "Side",
"type": "string"
},
"sport": {
"title": "Sport",
"type": "string"
},
"team": {
"default": "",
"title": "Team",
"type": "string"
}
},
"required": [
"sport",
"side"
],
"title": "parlayapi_verdictArguments",
"type": "object"
},
"name": "parlayapi_verdict",
"outputSchema": {
"additionalProperties": true,
"title": "parlayapi_verdictDictOutput",
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b316c0ef8d4e25adf2caf93de791b29e71d660fdba1a512151cbd7eb25b93472 | sha256sum