Koskamo

ParlayAPI MCP

An MCP server providing 22 tools for sports betting data, including live odds, player props, arbitrage detection, +EV betting suggestions, and parlay grading. It supports agent-driven user signup and integrates with major AI clients like Claude Desktop and Cursor.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

ParlayAPI MCP logo, by ParlayAPICommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by ParlayAPI
You need:PARLAYAPI_KEY in the MCP client's env config for the parlayapi server
MCP endpoint (Streamable HTTP)
https://parlay-api.com/mcp/http
Vendor documentation

What its tools do

22 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

22 of 22 have a description · 0 of 22 declare behavior hints · 0 of 19 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Warning Does not report a server version
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Fetch live sports odds and player props across multiple bookmakers
  • Identify arbitrage opportunities and +EV bets
  • Grade parlay slips and provide betting verdicts
  • Automate user account signup and API key management

Source and maintenance

Community listingRegistry 0.3.8
Maintenance checked

Protocol and capabilities

Server
parlayapi unreported
MCP protocol negotiated in check
2025-11-25
Tools
22 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  },
  "experimental": {}
}

Tools

22 advertised

parlayapi_signup
Advertised by the server during the last successful anonymous check.

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

parlayapi_signup input schema
{
  "type": "object",
  "title": "parlayapi_signupArguments",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "title": "Email"
    },
    "agent_id": {
      "type": "string",
      "title": "Agent Id",
      "default": "mcp-client"
    },
    "intended_use": {
      "type": "string",
      "title": "Intended Use",
      "default": ""
    }
  }
}
parlayapi_signup output schema
{
  "type": "object",
  "title": "parlayapi_signupDictOutput",
  "additionalProperties": true
}
parlayapi_checkout_link
Advertised by the server during the last successful anonymous check.

Request an owner-authenticated checkout URL or an email-link flow. A configured key is forwarded for the backend to verify account ownership. With no matching key, the backend returns an email-flow acknowledgement rather than a checkout URL. That response does not confirm email delivery. Tiers: starter, pro, business, enterprise, scale. For current prices, call parlayapi_get_pricing.

parlayapi_checkout_link input schema
{
  "type": "object",
  "title": "parlayapi_checkout_linkArguments",
  "required": [
    "email"
  ],
  "properties": {
    "tier": {
      "type": "string",
      "title": "Tier",
      "default": "pro"
    },
    "email": {
      "type": "string",
      "title": "Email"
    }
  }
}
parlayapi_checkout_link output schema
{
  "type": "object",
  "title": "parlayapi_checkout_linkDictOutput",
  "additionalProperties": true
}
parlayapi_magic_link
Advertised by the server during the last successful anonymous check.

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.

parlayapi_magic_link input schema
{
  "type": "object",
  "title": "parlayapi_magic_linkArguments",
  "required": [
    "email"
  ],
  "properties": {
    "email": {
      "type": "string",
      "title": "Email"
    }
  }
}
parlayapi_magic_link output schema
{
  "type": "object",
  "title": "parlayapi_magic_linkDictOutput",
  "additionalProperties": true
}
parlayapi_get_pricing
Advertised by the server during the last successful anonymous check.

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.

parlayapi_get_pricing input schema
{
  "type": "object",
  "title": "parlayapi_get_pricingArguments",
  "properties": {}
}
parlayapi_get_pricing output schema
{
  "type": "object",
  "title": "parlayapi_get_pricingDictOutput",
  "additionalProperties": true
}
parlayapi_live_sports
Advertised by the server during the last successful anonymous check.

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.

parlayapi_live_sports input schema
{
  "type": "object",
  "title": "parlayapi_live_sportsArguments",
  "properties": {}
}
parlayapi_live_sports output schema
{
  "type": "object",
  "title": "parlayapi_live_sportsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Result"
    }
  }
}
parlayapi_live_search
Advertised by the server during the last successful anonymous check.

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.

parlayapi_live_search input schema
{
  "type": "object",
  "title": "parlayapi_live_searchArguments",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "title": "Q"
    },
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 25
    }
  }
}
parlayapi_live_search output schema
{
  "type": "object",
  "title": "parlayapi_live_searchDictOutput",
  "additionalProperties": true
}
parlayapi_live_command_center
Advertised by the server during the last successful anonymous check.

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.

parlayapi_live_command_center input schema
{
  "type": "object",
  "title": "parlayapi_live_command_centerArguments",
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 12
    },
    "sport_key": {
      "type": "string",
      "title": "Sport Key",
      "default": ""
    }
  }
}
parlayapi_live_command_center output schema
{
  "type": "object",
  "title": "parlayapi_live_command_centerDictOutput",
  "additionalProperties": true
}
parlayapi_source_quality
Advertised by the server during the last successful anonymous check.

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.

parlayapi_source_quality input schema
{
  "type": "object",
  "title": "parlayapi_source_qualityArguments",
  "properties": {
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 40
    },
    "minutes": {
      "type": "integer",
      "title": "Minutes",
      "default": 10
    }
  }
}
parlayapi_source_quality output schema
{
  "type": "object",
  "title": "parlayapi_source_qualityDictOutput",
  "additionalProperties": true
}
parlayapi_book_coverage
Advertised by the server during the last successful anonymous check.

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.

parlayapi_book_coverage input schema
{
  "type": "object",
  "title": "parlayapi_book_coverageArguments",
  "properties": {
    "include_warn": {
      "type": "boolean",
      "title": "Include Warn",
      "default": true
    },
    "window_minutes": {
      "type": "integer",
      "title": "Window Minutes",
      "default": 15
    }
  }
}
parlayapi_book_coverage output schema
{
  "type": "object",
  "title": "parlayapi_book_coverageDictOutput",
  "additionalProperties": true
}
parlayapi_list_sports
Advertised by the server during the last successful anonymous check.

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

parlayapi_list_sports input schema
{
  "type": "object",
  "title": "parlayapi_list_sportsArguments",
  "properties": {
    "active_only": {
      "type": "boolean",
      "title": "Active Only",
      "default": true
    }
  }
}
parlayapi_list_sports output schema
{
  "type": "object",
  "title": "parlayapi_list_sportsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Result"
    }
  }
}
parlayapi_get_odds
Advertised by the server during the last successful anonymous check.

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

parlayapi_get_odds input schema
{
  "type": "object",
  "title": "parlayapi_get_oddsArguments",
  "required": [
    "sport_key"
  ],
  "properties": {
    "markets": {
      "type": "string",
      "title": "Markets",
      "default": "h2h"
    },
    "regions": {
      "type": "string",
      "title": "Regions",
      "default": "us"
    },
    "sport_key": {
      "type": "string",
      "title": "Sport Key"
    },
    "bookmakers": {
      "type": "string",
      "title": "Bookmakers",
      "default": ""
    },
    "odds_format": {
      "type": "string",
      "title": "Odds Format",
      "default": "decimal"
    }
  }
}
parlayapi_get_odds output schema
{
  "type": "object",
  "title": "parlayapi_get_oddsDictOutput",
  "additionalProperties": true
}
parlayapi_get_props
Advertised by the server during the last successful anonymous check.

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

parlayapi_get_props input schema
{
  "type": "object",
  "title": "parlayapi_get_propsArguments",
  "required": [
    "sport_key"
  ],
  "properties": {
    "player": {
      "type": "string",
      "title": "Player",
      "default": ""
    },
    "markets": {
      "type": "string",
      "title": "Markets",
      "default": ""
    },
    "sport_key": {
      "type": "string",
      "title": "Sport Key"
    },
    "bookmakers": {
      "type": "string",
      "title": "Bookmakers",
      "default": ""
    },
    "include_futures": {
      "type": "boolean",
      "title": "Include Futures",
      "default": false
    }
  }
}
parlayapi_get_props output schema
{
  "type": "object",
  "title": "parlayapi_get_propsDictOutput",
  "additionalProperties": true
}
parlayapi_best_line
Advertised by the server during the last successful anonymous check.

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

parlayapi_best_line input schema
{
  "type": "object",
  "title": "parlayapi_best_lineArguments",
  "required": [
    "sport_key"
  ],
  "properties": {
    "market": {
      "type": "string",
      "title": "Market",
      "default": "h2h"
    },
    "sport_key": {
      "type": "string",
      "title": "Sport Key"
    },
    "bookmakers": {
      "type": "string",
      "title": "Bookmakers",
      "default": ""
    }
  }
}
parlayapi_best_line output schema
{
  "type": "object",
  "title": "parlayapi_best_lineDictOutput",
  "additionalProperties": true
}
parlayapi_verdict
Advertised by the server during the last successful anonymous check.

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.

parlayapi_verdict input schema
{
  "type": "object",
  "title": "parlayapi_verdictArguments",
  "required": [
    "sport",
    "side"
  ],
  "properties": {
    "away": {
      "type": "string",
      "title": "Away",
      "default": ""
    },
    "book": {
      "type": "string",
      "title": "Book",
      "default": ""
    },
    "home": {
      "type": "string",
      "title": "Home",
      "default": ""
    },
    "line": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Line",
      "default": null
    },
    "side": {
      "type": "string",
      "title": "Side"
    },
    "team": {
      "type": "string",
      "title": "Team",
      "default": ""
    },
    "books": {
      "type": "string",
      "title": "Books",
      "default": ""
    },
    "kelly": {
      "type": "number",
      "title": "Kelly",
      "default": 0.5
    },
    "price": {
      "type": "string",
      "title": "Price",
      "default": ""
    },
    "sport": {
      "type": "string",
      "title": "Sport"
    },
    "market": {
      "type": "string",
      "title": "Market",
      "default": "h2h"
    },
    "player": {
      "type": "string",
      "title": "Player",
      "default": ""
    },
    "region": {
      "type": "string",
      "title": "Region",
      "default": ""
    },
    "bankroll": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Bankroll",
      "default": null
    }
  }
}
parlayapi_verdict output schema
{
  "type": "object",
  "title": "parlayapi_verdictDictOutput",
  "additionalProperties": true
}
parlayapi_set_bettable_books
Advertised by the server during the last successful anonymous check.

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.

parlayapi_set_bettable_books input schema
{
  "type": "object",
  "title": "parlayapi_set_bettable_booksArguments",
  "properties": {
    "books": {
      "type": "string",
      "title": "Books",
      "default": ""
    },
    "region": {
      "type": "string",
      "title": "Region",
      "default": ""
    }
  }
}
parlayapi_set_bettable_books output schema
{
  "type": "object",
  "title": "parlayapi_set_bettable_booksDictOutput",
  "additionalProperties": true
}
parlayapi_parlay_verdict
Advertised by the server during the last successful anonymous check.

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.

parlayapi_parlay_verdict input schema
{
  "type": "object",
  "title": "parlayapi_parlay_verdictArguments",
  "required": [
    "legs"
  ],
  "properties": {
    "book": {
      "type": "string",
      "title": "Book",
      "default": ""
    },
    "legs": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "title": "Legs"
    },
    "books": {
      "type": "string",
      "title": "Books",
      "default": ""
    },
    "kelly": {
      "type": "number",
      "title": "Kelly",
      "default": 0.5
    },
    "stake": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Stake",
      "default": null
    },
    "region": {
      "type": "string",
      "title": "Region",
      "default": ""
    },
    "bankroll": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "title": "Bankroll",
      "default": null
    }
  }
}
parlayapi_parlay_verdict output schema
{
  "type": "object",
  "title": "parlayapi_parlay_verdictDictOutput",
  "additionalProperties": true
}
parlayapi_best_bets
Advertised by the server during the last successful anonymous check.

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

parlayapi_best_bets input schema
{
  "type": "object",
  "title": "parlayapi_best_betsArguments",
  "required": [
    "sport_key"
  ],
  "properties": {
    "books": {
      "type": "string",
      "title": "Books",
      "default": ""
    },
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 20
    },
    "region": {
      "type": "string",
      "title": "Region",
      "default": ""
    },
    "min_edge": {
      "type": "number",
      "title": "Min Edge",
      "default": 2
    },
    "sport_key": {
      "type": "string",
      "title": "Sport Key"
    }
  }
}
parlayapi_best_bets output schema
{
  "type": "object",
  "title": "parlayapi_best_betsDictOutput",
  "additionalProperties": true
}
parlayapi_account_info
Advertised by the server during the last successful anonymous check.

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

parlayapi_account_info input schema
{
  "type": "object",
  "title": "parlayapi_account_infoArguments",
  "properties": {}
}
parlayapi_account_info output schema
{
  "type": "object",
  "title": "parlayapi_account_infoDictOutput",
  "additionalProperties": true
}
parlayapi_find_arbitrage
Advertised by the server during the last successful anonymous check.

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

parlayapi_find_arbitrage input schema
{
  "type": "object",
  "title": "parlayapi_find_arbitrageArguments",
  "required": [
    "sport_key"
  ],
  "properties": {
    "markets": {
      "type": "string",
      "title": "Markets",
      "default": ""
    },
    "sport_key": {
      "type": "string",
      "title": "Sport Key"
    },
    "min_profit": {
      "type": "number",
      "title": "Min Profit",
      "default": 0
    },
    "exclude_exchanges": {
      "type": "boolean",
      "title": "Exclude Exchanges",
      "default": false
    }
  }
}
parlayapi_find_arbitrage output schema
{
  "type": "object",
  "title": "parlayapi_find_arbitrageDictOutput",
  "additionalProperties": true
}
parlayapi_find_ev
Advertised by the server during the last successful anonymous check.

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

parlayapi_find_ev input schema
{
  "type": "object",
  "title": "parlayapi_find_evArguments",
  "required": [
    "sport_key"
  ],
  "properties": {
    "markets": {
      "type": "string",
      "title": "Markets",
      "default": ""
    },
    "min_edge": {
      "type": "number",
      "title": "Min Edge",
      "default": 2
    },
    "sport_key": {
      "type": "string",
      "title": "Sport Key"
    },
    "sharp_book": {
      "type": "string",
      "title": "Sharp Book",
      "default": "pinnacle"
    }
  }
}
parlayapi_find_ev output schema
{
  "type": "object",
  "title": "parlayapi_find_evDictOutput",
  "additionalProperties": true
}
parlayapi_consensus
Advertised by the server during the last successful anonymous check.

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

parlayapi_consensus input schema
{
  "type": "object",
  "title": "parlayapi_consensusArguments",
  "required": [
    "sport_key"
  ],
  "properties": {
    "markets": {
      "type": "string",
      "title": "Markets",
      "default": ""
    },
    "sport_key": {
      "type": "string",
      "title": "Sport Key"
    }
  }
}
parlayapi_consensus output schema
{
  "type": "object",
  "title": "parlayapi_consensusDictOutput",
  "additionalProperties": true
}
parlayapi_find_middles
Advertised by the server during the last successful anonymous check.

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.

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

Prompts

0 advertised

No prompt definitions available.

Resources

1 advertised

docs_quickstart

Advertised by the server during the last successful anonymous check.

Quickstart code samples for ParlayAPI in Python and JS.

docs_quickstart URI
parlayapi://docs/quickstart

MIME type: text/plain

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2166 ms
95th percentile latency
2166 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2166 ms · metadata changed · 22 tool(s), 1 resource(s), 0 resource template(s), 0 prompt(s); warnings: Does not report a server version

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http parlayapi-mcp-parlay-api https://parlay-api.com/mcp/http

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add parlayapi-mcp-parlay-api --url https://parlay-api.com/mcp/http

Cursor

Merge this server into .cursor/mcp.json in your project, then enable parlayapi-mcp-parlay-api in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "parlayapi-mcp-parlay-api": {
      "url": "https://parlay-api.com/mcp/http"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "parlayapi-mcp-parlay-api": {
      "type": "streamableHttp",
      "url": "https://parlay-api.com/mcp/http",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start parlayapi-mcp-parlay-api and inspect its tools.
VS Code configuration
{
  "servers": {
    "parlayapi-mcp-parlay-api": {
      "type": "http",
      "url": "https://parlay-api.com/mcp/http"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http parlayapi-mcp-parlay-api https://parlay-api.com/mcp/http

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://parlay-api.com/mcp/http

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "parlayapi-mcp-parlay-api": {
      "serverUrl": "https://parlay-api.com/mcp/http"
    }
  }
}

Let your agent find its tools

Find servers like ParlayAPI MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.