Skip to main content
Glama
JacobiusMakes

parlayapi-mcp

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.

Related MCP server: AltSportsData MCP Server

Install in Claude Desktop (one click)

Download parlayapi-mcp-0.3.5-directory.mcpb and open it (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 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)

# Start the stdio server (normally launched by your MCP client):
uvx parlayapi-mcp

# Or install globally with pip:
pip install parlayapi-mcp

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

{
  "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:

{
  "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:

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

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

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:

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:

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 support@parlay-api.com. Do not put API keys or account responses in public issues.

Tools exposed

Tool

Auth

Purpose

parlayapi_signup

none

Create a free-tier account, return API key + claim URL + upgrade URL

parlayapi_checkout_link

none

Stripe upgrade URL for any tier

parlayapi_magic_link

none

Email a passwordless login link

parlayapi_get_pricing

none

Current public pricing and credit tiers

parlayapi_live_sports

none

Active live sports, event counts, and book counts

parlayapi_live_search

none

Search live teams, players, and sport keys

parlayapi_live_command_center

none

Public best-line preview from /live

parlayapi_source_quality

none

Public source freshness and quality metadata

parlayapi_book_coverage

none

Public per-book five-gate coverage proof

parlayapi_list_sports

key

All available sport keys

parlayapi_get_odds

key

Game-level odds (h2h, spreads, totals) for a sport

parlayapi_get_props

key

Player prop odds for a sport

parlayapi_best_line

key

Best price per outcome across bookmakers

parlayapi_verdict

key

One-call "should I bet this?": fair price vs market, best book you can bet at, plain-English BET/PASS call

parlayapi_set_bettable_books

key

Remember the user's region/books so verdicts skip books they can't use

parlayapi_parlay_verdict

key

Grade a multi-leg parlay: combined fair price, best book to place it, EV, weakest leg, correlation warnings, payout

parlayapi_best_bets

key

Ranked +EV plays for a sport, scoped to books you can bet at, plus edge alerts

parlayapi_account_info

key

Tier, credits remaining, billing period

parlayapi_find_arbitrage

key

Cross-book arbitrage candidates, 3-way (home/draw/away) markets included

parlayapi_find_ev

key

Positive-EV bets vs a sharp book's no-vig fair line

parlayapi_consensus

key

Consensus (average) odds across all bookmakers per market

parlayapi_find_middles

key

Cross-book middle opportunities

Resources

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

Local development

git clone https://github.com/JacobiusMakes/parlay-api-mcp
cd parlay-api-mcp
pip 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.

Available Tools

22 tools
parlayapi_account_infoAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It clearly indicates a read-only information operation and lists the exact output fields. While it does not mention error cases or authentication requirements, the phrase 'API key currently in use' conveys the required auth context sufficiently.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, complete sentence with no redundancy. It front-loads the action and immediately lists the relevant returned fields, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool takes no parameters, has an output schema, and the description lists the expected output fields. There is no missing information that would prevent an agent from invoking the tool correctly or interpreting its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and schema coverage at 100%, no parameter explanation is needed. The description reinforces that the only implicit input is the currently authenticated API key, adding context beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Get'), resource ('API key currently in use'), and specific data points (tier, credits remaining, billing period). This distinguishes it clearly from sibling tools that focus on odds, sports, pricing, or signup flows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use this tool when an agent needs account status, credit balance, or billing period for the current API key. It does not explicitly mention exclusions, but among siblings it is the only account-info operation, so the intended usage is well implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_best_betsAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
booksNo
limitNo
regionNo
min_edgeNo
sport_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and it delivers: it describes how the tool scans the whole board, uses the no-vig engine, filters to bets +EV at user-bettable books, ranks by edge, returns edge_alerts, and excludes certain bet types. It also notes the tool is scoped to the user's books. No annotation contradiction exists because there are no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured well: a hook, a tight mechanism sentence, exclusions, and a parseable argument list. It is slightly verbose in its middle explanation but every clause adds useful behavior. It earns its length, but could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a read-only discovery tool with five params, many resulting context signals, and an output schema is present. The description covers scope, exclusions, ranking logic, parameter meanings, and how it differentiates from the closest sibling. An agent has enough to correctly select and invoke the tool without needing to ask about absent details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero inline parameter descriptions, so the description is the only source of parameter semantics. It provides a meaningful one-line gloss for all five parameters, including sport_key example, region options, books meaning, limit default, and min_edge semantics. This fully compensates for the schema's lack of documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear question and answer: it ranks +EV plays for a sport. It explicitly names itself as the discovery counterpart to parlayapi_verdict and distinguishes its scope (player props, whole board) from that sibling (game moneylines). Specific behavior — scanning, grading, filtering, ranking — is front-loaded and leaves no doubt about purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong context: use this for +EV player-prop discovery across the board, and explicitly excludes prediction markets and game moneylines, telling the agent to use parlayapi verdict for a line. It also states the output is scoped to user's books, which helps an agent choose this over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_best_lineAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNoh2h
sport_keyYes
bookmakersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool aggregates across bookmakers, returns the best price per game/market/side, and describes the returned row shape. It does not discuss rate limits or authentication, but the read-only intent is clearly inferred from 'Find' and 'Returns.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, information-dense, and well-structured. It states the purpose, the intended use case, the output shape, and parameter meanings in a few lines, with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema is present, return-value documentation is handled. The description covers the core behavior, output granularity, parameter semantics, and usage scenario. Nothing essential for calling the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description compensates with useful details: a concrete sport_key example ('baseball_mlb'), enumerated market choices (h2h | spreads | totals), and a clear optionality note for bookmakers. It does not specify the exact format for multiple bookmakers, but this is a minor gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Find the best (highest) price for each outcome across bookmakers.' It clearly distinguishes this tool from generic odds tools like get_odds by focusing on best-price aggregation and unique per game/market/side rows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case: 'Useful for line-shopping bots.' It does not explicitly name sibling alternatives or exclusion conditions, but the context is strong enough for an agent to decide when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_book_coverageBInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_warnNo
window_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations for guidance, the behavior burden falls on the description. It does disclose that no API key is required and that the tool exposes a public coverage surface, which helps an agent understand it is an unauthenticated, likely read-only status endpoint. It does not describe what a covered vs. uncovered result looks like, whether there are rate limits, or how freshness/window values affect the outcome.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is three concise sentences with no filler:' graph is also put in production. Every sentence contributes a distinct useful fact: what it returns, that no API key is required, and what the checks are.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's overall objective and removes one major concern by saying no API key is needed. But it still leaves the optional parameters unexplained and gives no guidance on how fresh results are or how the results relate to the surrounding florian capture tool family, which matters because no annotations exist to fill those gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero description coverage for its two parameters, and the tool description does not explain how include_warn or window_minutes influence results. The parameter names offer weak hints, but 'window_minutes' in particular lacks enough meaning without context about freshness windows or the exact computation gate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Return') and a specific resource ('per-book coverage gates'), plus the public scope and the checks involved. It is clearly not a general odds- or pricing-related tool, so an agent can distinguish it from most siblings, though it does not explicitly contrast it with the closely related source_quality tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys when this is the right tool to inspect source health by defining the tool as the proof surface for freshness, normalization, database, REST-shape, and stream-shape checks. However, it does not describe when to prefer it over sibling tools like source_quality or when not to use it, leaving routing mostly implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_consensusAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
marketsNo
sport_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of explaining behavior. It clearly discloses the return structure: average, best, and worst price per event/market/player/line, plus the special split for soccer and other 3-way markets. It does not mention auth or rate limits, but the core behavioral contract is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: the main action appears in the first sentence, return behavior in the second, the 3-way market edge case in the third, and parameters are compact and useful. There is no fluff or repetition of schema mechanics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a simple read-style endpoint: it explains what the tool returns, defines inputs, and gives a recommended use case. Since an output schema exists, extra return-value detail is not required. It could slightly strengthen by explicitly routing the agent away from sibling tools, but it is functionally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates by explaining both parameters. It gives concrete examples for sport_key and clearly documents markets as an optional comma-separated list with example values like 'moneyline,totals'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get consensus (average) odds across all bookmakers per market.' It also clarifies the unique value of the tool by naming the output concepts—average, best, and worst price per (event, market, player, line)—which distinguishes it from siblings like get_odds or best_line.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: it is 'a sharp baseline for line-shopping' and explains optional market filtering. It does not explicitly name alternatives or state when not to use it, but the purpose and filtering behavior are clear enough to guide an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_find_arbitrageAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
marketsNo
sport_keyYes
min_profitNo
exclude_exchangesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the transparency burden. It clarifies that the tool scans every event, returns arbitrage bets whose combined probability is below 100%, and even discloses a real caveat: exchange-anchored asks can have no volume. It does not explicitly state 'read-only/no bets placed', but the verbs 'scans' and 'returns' strongly imply a non-mutating action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well structured: a one-sentence purpose, a concise explanation of the discovery logic and supported market type, then a focused Args block. Every part adds operational information needed to pick and call the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description does not need to explain return format. It adequately covers the tool's purpose, supported markets, key behavioral caveats, and all parameter semantics. It could be improved by mentioning when to choose a sibling tool like find_ev or find_middles instead.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate fully. The Args section does exactly that: it explains each parameter's meaning (e.g., min_profit as a percentage, markets as comma separated market_keys), gives examples, states optionality, and covers behavior like exclude_exchanges dropping no-volume exchange-anchored arbs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Find... arbitrage opportunities across bookmakers', then reinforces it with the technical criterion of combined implied probability under 100%. This clearly distinguishes it from siblings like parlayapi_find_ev and parlayapi_find_middles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when this tool is appropriate, especially for soccer and other 3-way markets, and notes the optional scan scope via markets. It does not explicitly name sibling tools or say 'use for arbitrage, not for EV/middles', but the use case is strongly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_find_evAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
marketsNo
min_edgeNo
sport_keyYes
sharp_bookNopinnacle

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does well: it explains the comparison methodology, the sharp-book default, the no-vig derivation, and the special three-way soccer handling for draws. It doesn't mention rate limits, errors, or authentication, but for a data-querying tool the core analytical behavior is transparently described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: the one-line summary leads, followed by an efficient explanation of the methodology and then a clear Args list. Every sentence contributes useful information without repetitious padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no annotations but with an output schema, the description thoroughly covers what the tool does, how it computes EV, which markets it handles specially, and the meaning of every argument. There is no significant missing context needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: every parameter is explained with practical examples (e.g., sport_key: 'baseball_mlb', min_edge: default 2). It even clarifies optionality of markets and defaults for sharp_book and min_edge.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Find positive-EV bets vs a sharp book's no-vig fair line,' which immediately tells the agent what the tool computes. It also distinguishes itself from arbitrage and middles by focusing on +EV relative to a sharp fair line.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains the intended use: compare soft book prices against a sharp book's no-vig fair line, with defaults and optional filters. It does not explicitly name alternative sibling tools or when-not-to-use, but the algorithm and inputs are concrete enough that an agent can infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_find_middlesAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketsNo
min_gapNo
sport_keyYes
include_propsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are preset, so the description carries the full burden of explaining behavior. It clearly states that the tool scans available markets and returns windows, hitting numbers, and per-$100 economics, which makes the purely informational/report-like behavior transparent. It does not mention auth or rate limits, but nothing about the description implies harmful side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is thorough but every sentence earns its place. The definition, illustrative example, coverage scope, output economis, and parameter documentation are organized and front-loaded, making it easy for an agent to quickly understand and invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description fully covers inputs, optional defaults, scope of search, and the economics of the return. The output schema handles specific return-field expectations, and the description provides the tactical context an agent needs to call this tool correctly and interpret its results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the arguments section is the sole source of parameter meaning. It explains all four parameters: sport_key with examples, min_gap as window width, market s a comma-separated optional filter, and include_props as a boolean toggle. This adds substantial value beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific action ('Find cross-book middle opportunities') and thoroughly defines what a middle is with a concrete example. It calls out the scanned markets (totals, spreads, player props), which clearly distinguishes it from sibling tools like parlayapi_find_arbitrage and parlayapi_find_ev.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear execution context by specifying sport_key requirement, market filtering, and prop inclusion, and it names the kinds of outcomes returned. It does not explicitly contrast itself with find_arbitrage or find_ev, but the intended use is easy to infer from the detailed middle-explanation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_get_oddsAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
marketsNoh2h
regionsNous
sport_keyYes
bookmakersNo
odds_formatNodecimal

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The operation is clearly a read operation ('Get...'), and 'from all configured bookmakers' adds meaningful scope. However, with no annotations, there is no disclosure of rate limits, pagination, data freshness, or other behavioral caveats. The description is not misleading, but it does not go beyond the basic read behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description starts with a one-sentence purpose and then uses a tight Args block with no filler. Every line adds concrete parameter information, and the format is easy for an agent to scan quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficiently complete for a callable tool: all five parameters are explained with examples and value domains, the output schema presumably covers the return shape, and there is no missing critical context for making a correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the parameter documentation in the description is critical. It fully compensates: it gives concrete examples for sport_key, lists valid markets and regions, provides optional bookmaker examples, and explains the odds_format choices. Every parameter in the schema is given meaningful guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the exact operation: 'Get game-level odds for a sport'. It also scopes the tool to all configured bookmakers and identifies the key inputs, making its role easy to distinguish from prop-focused or best-line-focused siblings like parlayapi_get_props or parlayapi_best_line.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description strongly implies when to use this tool — when game-level odds for one or more configured bookmakers are needed — but it does not explicitly name alternatives or give when-not-to-use guidance. An agent must infer that props, best-lines, or live odds belong to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_get_pricingAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It clearly states no API key is required and that the pricing is public/current. This discloses authentication needs and scope, though it could go further on rate limits or output semantics, but the output schema covers these.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three punchy sentences with zero filler, front-loaded with the core action, followed by auth context, and a practical usage scenario. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-auth, public data accessor, the description fully covers what the agent needs to know. The output schema exists for any return-value details, and the usage context clearly tells the agent when to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema is trivially complete. The description adds relevant contextual meaning (no auth, current pricing) beyond the schema, making a baseline 4 appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Return') and resource ('current public pricing table'), clearly distinguishing this from sibling commerce/pricing operations. The phrase 'public' clarifies scope and positions it as a read-only informational tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to use this tool: when explaining which tier unlocks a workflow before sending a checkout link. This gives clear contextual context even without naming a specific alternative, and distinguishes it from checkout_link.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_get_propsAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
playerNo
marketsNo
sport_keyYes
bookmakersNo
include_futuresNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden. The wording Get player prop odds strongly implies a read-only operation, and the description discloses the filtering behavior for player and futures inclusion. It does not mention pagination, response properties, or whether returned odds are live or cached, but these are partially covered by the output schema being available.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loads the purpose in the first sentence, and uses a clear Args block. The example lists are useful and not padded with filler, so the overall structure is easy for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter tool with zero schema description coverage, this description covers all inputs and gives useful examples. It does not describe sibling differentiation or note that some prop markets may only be relevant for certain sports, but the output schema plus the parameter coverage make the tool generally callable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully compensates by explaining every parameter. It gives concrete sport_key examples, market names like player_points and player_strikeouts, bookmakers like prizepicks and draftkings, the player filter behavior, and the include_futures default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: Get player prop odds for a sport. The resource is clearly distinct from more general tool names like get_odds, but it does not explicitly differentiate itself from any sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through its parameter guidance, showing how to provide sport_key, markets, bookmakers, player, and include_futures. However, it does not state when to prefer this tool over get_odds, get_pricing, live_odds, or or any other sibling, nor does it give exclusions for when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_list_sportsAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It makes the read-only 'list' nature and the key-format convention clear, but it does not explain how active_only affects the result, whether inactive sports are included, or whether responses are paginated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded: purpose first, usage context second, and representative examples last. Every sentence earns its place, and nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-optional-parameter list tool with an output schema, this is mostly complete: the agent understands the return resource and how to use its result later. It still lacks guidance on the active_only parameter and on how this tool relates to parlayapi_live_sports, so some agent misunderstanding remains possible.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention the active_only parameter at all. The parameter's name and default in the schema hint at its purpose, but the description does not compensate for the missing schema documentation or explain when to pass false.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List available sport keys' and adds concrete examples of the expected key format. It is clear about what the tool does, though it does not explicitly distinguish itself from sibling list-like tools such as parlayapi_live_sports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line 'Use these in subsequent calls' gives clear context for when the tool should be used: early in a workflow to obtain sport keys for later calls such as odds, props, or pricing. It does not name alternatives or exclusions, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_live_command_centerAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sport_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description takes on full behavioral disclosure. It clearly states that no API key is required, that the tool returns a public payload, and that it is a demo/discovery surface with limited capabilities compared to paid endpoints. This is meaningful, though it does not cover rate limits or detailed response semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-front-loaded, with the core purpose of claims in the first sentence and additional context in the following sentences. Every sentence adds information to the agent from the scope to the no-key requirement to the demo limitation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only payload tool with an output schema, the description is nearly complete: it covers what is returned, the demo nature, the access requirements, and the limitation vs. paid endpoints. The only meaningful gap is the lack of parameter guidance, which is already penalized above.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to explain 'limit' and 'sport_key', but it does not. The parameter names and defaults are minimally suggestive, but the agent is left guessing what limit bounds, whether sport_key is required for filtering, and what an empty value means.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Return the public best-line command center payload.' It then specifies what the result shows (current games, participating books, best available real prices on the /live dashboard preview). It also distinguishes itself as a discovery/demo surface from the paid odds endpoints among its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent this is the free, no-API-key discovery/demo surface and explicitly says it is 'not a substitute for the paid odds endpoints.' It gives clear context for when to use it, though it does not name the exact sibling tools to call instead for full odds.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_live_sportsAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that no API key is required and describes what is returned (sport keys plus live event and book counts). For a simple, parameterless read-style tool, this is adequate transparency, though it does not discuss refresh timing or whether the list is exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences with no filler. The core purpose is front-loaded, and each sentence adds meaningful information: what it lists, that no API key is needed, and what the response contains.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no annotations, the description is complete for safe invocation. It states the endpoint concept, auth requirement (no API key), output contents, and high-level purpose. The output schema can cover the detailed return shape, so no meaningful gap exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%, so the schema fully describes the input contract. The description adds relevant context by stating no API key is required, which is useful operational information. This aligns with the baseline 4 for a no-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and identifies the exact resource: currently active live sports on the retail /live surface. It also clarifies that it returns sport keys plus live event/book counts, which clearly separates it from siblings like parlayapi_list_sports or parlayapi_live_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: to discover what live sports are currently active on the retail /live surface. It does not explicitly name alternative tools or state when-not-to-use, but the purpose is specific enough that an agent can reasonably select it without confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_parlay_verdictAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bookNo
legsYes
booksNo
kellyNo
stakeNo
regionNo
bankrollNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the no-vig nature, book-scoping behavior, correlation warnings, EV reporting, and payout computation. It does not explicitly state that no bet is placed or that the result is advisory-only, though the wording 'grade', 'should you bet it' strongly implies analysis rather than execution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening line is immediately informative, the output list is front-loaded, and every sentence adds value. The inline leg example is long but earns its place given the nested leg shape. No redundant marketing language or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core use case, input format, optional stake/book controls, and book scoping prerequisites. Combined with the existing output schema, an agent can invoke the tool correctly. The only completeness gap is the lack of mention of kelly and bankroll, which have defaults but no description here or schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains legs with a concrete example, defines region values, describes books as CSV override, and clarifies the purpose of stake and book. However, kelly and bankroll appear in the schema but are absent from the Args description, which is a modest gap for optional parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear imperative: 'Grade a multi-leg parlay: should you bet it, and at which book?' It names the specific resource (a multi-leg parlay), the action (grade/evaluate), and the concrete outputs: fair no-vig price, best book, EV, weakest leg, correlation warnings, payout. This strongly distinguishes it from the single-bet sibling parlayapi_verdict.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: 2 to 12 legs, parlay is one slip rather than best-of-each, and book scope is controlled by parlayapi_set_bettable_books or region/books parameters. It doesn't explicitly name alternative tools for single-bet verdicts or pure EV lookups, so 'when not to use' is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_set_bettable_booksAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
booksNo
regionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the core behavior: the tool persists user book preferences and affects future parlayapi_verdict recommendations. It also documents the precedence rule that books overrides region. It does not discuss response behavior, errors, or how repeated calls should be handled, but the main side effects are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, with no filler. The core purpose and trigger come first, and the Args section adds critical parameter details without unnecessary context. Every sentence contributes to correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter configuration tool, the description covers when to call, what to pass, how parameters interact, and why it matters. It is slightly ambiguous about what happens on a second call or if neither parameter is provided, but for a single-call setter this is not a major gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and does: it lists region's allowed values (us | eu | uk | au | ca) and explains books as an exact CSV with an example. It also clarifies the relationship between the two parameters with 'Overrides region.' This adds genuine meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Remember which books the user can bet at' and explains the downstream effect on parlayapi_verdict. This clearly separates it from all sibling tools, which are data/retrieval operations rather than a user-context setter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a concrete trigger: 'Call this once when a user tells you where they bet', with an example. It also says parlayapi_verdict will automatically use this setting so region/books do not need to be passed every call. It does not explicitly mention when not to call or how to handle updates, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_signupAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes
agent_idNomcp-client
intended_useNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full behavioral burden. It discloses the returned values (API key, magic-login URL, Stripe upgrade URL), idempotency, the exists=true case, and the intentional non-exposure of existing API keys for security. This gives the agent strong behavioral expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with key behavior first, then usage guidance, then parameter details. It is slightly dense and the agent_id default is repeated from the schema, but every section earns its place and no irrelevant information is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with one required param, the description fully covers what happens, what is returned, the idempotent edge case, and the follow-up step for the user. The Agent can safely invoke this tool and handle its response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the Args section is essential and fully compensates. It explains email is the user's address, intended_use is optional and used for analytics, and agent_id identifies the calling agent. Compared to the minimal schema, this is a complete semantic mapping.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Create a free-tier ParlayAPI account for the given email.' It clearly distinguishes signup from the other ParlayAPI siblings by focusing on account creation and conveying what the call returns. No ambiguity about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: 'Use this when a user wants to start building with ParlayAPI and does not have a key yet.' It also explains the follow-up action after signup. It does not explicitly name alternative tools or state when not to use it, so it stops slightly short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_source_qualityAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses that the endpoint is 'public' and does not require an API key, which is meaningful behavioral context. However, it does not describe what happens when freshness data is missing, whether there are rate limits, or how quality is computed, leaving some behavior undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences, no fluff. The primary purpose is front-loaded, followed by the useful auth note and a concrete use case. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple public metadata query with an output schema present, the description covers the essential context: purpose, access requirements, and when to use it. The only notable gaps are parameter meaning and explicit sibling alternatives, but they do not stop an agent from successfully invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention the `limit` or `minutes` parameters at all. Although their names and defaults are somewhat self-explanatory, an agent has no guidance on how to choose values for these parameters or what constraints apply. Since the description does not compensate for missing schema docs, this dimension is weak.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Return') and a distinct resource ('public per-source freshness and quality metadata'). This differentiates it from siblings like parlayapi_get_pricing or parlayapi_get_odds because it focuses on metadata quality rather than pricing, odds, or betting execution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a concrete context: 'prove that rows are flowing from each source before choosing books for a customer workflow.' This tells an agent when the tool is useful, though it does not explicitly list exclusions or alternative sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parlayapi_verdictAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
awayNo
bookNo
homeNo
lineNo
sideYes
teamNo
booksNo
kellyNo
priceNo
sportYes
marketNoh2h
playerNo
regionNo
bankrollNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though no annotations are provided, the description goes into substantial behavioral detail: it returns no-vig fair price, best available price and book, EV grading, line-shopping nudge, a verdict label, Kelly stake feedback, region-scoped recommendations, and the edge_alert edge case. It also reveals that bettable-books configuration is remembered per key, so the agent understands persistence and configuration behavior without inspecting state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is unusually well structured: a high-level verdict, a list of outputs, explicit when-to-use guidance, scoping notes, then a complete Args block with minimal redundancy. Every sentence earns its place, and the most important purpose and usage guidance are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, 14-parameter tool, this description is complete: it covers the full input space, expected outputs, exceptions (NO_DATA), configuration dependencies, price-risk edge conditions, and the alternative behavior for +EV stakes. It leaves little room for an agent to call the tool without understanding what it needs or what it will produce.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description's Args section covers every parameter with practical semantics: sport key format, side options, market values, home/away vs team alternative, player requirement, price override semantics, region values, books CSV format, bankroll meaning, and kelly. This is far beyond the bare schema and fully compensates for the absence of schema-level descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a plain-English purpose ('Should I bet this?') and states the tool is a one-call verdict for a specific bet. It clearly identifies the resource (a bet verdict) and the operation (returning fair price, best price, EV grading, and a verdict), which distinguishes it from sibling tools that focus on odds, props, or parlay verdicts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: use it when a user asks whether a specific bet is worth making or whether they are getting a good number. It also tells the agent NOT to stitch /ev + /consensus + /best-line together, which is a concrete alternative that would otherwise be a common mistake.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 22 tool updatesv0.3.4
    • First observedparlayapi_account_info
    • First observedparlayapi_best_bets
    • First observedparlayapi_best_line
    • First observedparlayapi_book_coverage
    • First observedparlayapi_checkout_link
    • First observedparlayapi_consensus
    • First observedparlayapi_find_arbitrage
    • First observedparlayapi_find_ev
    • First observedparlayapi_find_middles
    • First observedparlayapi_get_odds
    • First observedparlayapi_get_pricing
    • First observedparlayapi_get_props
    • First observedparlayapi_list_sports
    • First observedparlayapi_live_command_center
    • First observedparlayapi_live_search
    • First observedparlayapi_live_sports
    • First observedparlayapi_magic_link
    • First observedparlayapi_parlay_verdict
    • First observedparlayapi_set_bettable_books
    • First observedparlayapi_signup
    • First observedparlayapi_source_quality
    • First observedparlayapi_verdict

TDQS

A3.9/5.0
Disambiguation4/5

The tools are broadly separated by workflow: account/billing, discovery/quality, raw odds, and analysis/verdicts. Some analytical tools like parlayapi_find_ev, parlayapi_best_bets, and parlayapi_verdict have overlapping conceptual territory, but the descriptions clearly define their outputs and when to use each one. Only a few pairs could cause real misselection, so this is mostly distinct.

Naming Consistency3/5

All tools share the stable parlayapi_ prefix, and many use clear verb patterns like get_, list_, find_, and set_. However, there is no consistent verb_noun convention: some tools are bare nouns (parlayapi_verdict, parlayapi_consensus), some are descriptive noun phrases (parlayapi_live_command_center, parlayapi_source_quality), and others mix verbs in varied ways. The naming is readable but not uniform.

Tool Count4/5

22 tools is on the heavier side, but the server covers a broad platform: account onboarding, public quality metadata, live discovery, raw odds retrieval, consensus analysis, EV scanning, arbitrage, middles, and bet verdicts. Most tools serve a genuinely different workflow, and only a few quality/discovery tools could arguably be consolidated. It feels slightly over-sized but still coherent and purposeful.

Completeness4/5

The tool surface covers the user journey well: signup, pricing, checkout, magic login, account info, sports discovery, public quality checks, odds/props retrieval, and a full stack of betting-decision tools from best line and EV to arb/paradiddle/verdict. The main missing general utility is a single consolidated schedule/fixture search, while live_search and team-name arguments cover it somewhat. This is a minor gap, not a demotion.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server that exposes the Storm cross-venue prediction-market intelligence API, enabling LLM clients to read canonical events, spreads, venue catalog, and alerts as native tool calls.
    7
    18
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    MCP-compatible server that gives AI agents access to alternative sports data across 30+ leagues — odds, events, probabilities, settlement, and futures for prediction markets, DFS platforms, and sportsbooks.
    29
    15
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    A unified MCP server that aggregates 32 sports API providers into a single service, providing 336 tools for scores, stats, odds, esports, and more across 70+ sports.
    100
    146
    22
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Live sports betting player props MCP server covering NBA, MLB, NFL, NHL, NCAA, and soccer. Unified from real sportsbooks into one REST API and a real MCP server (Streamable HTTP). Free tier, no card required.
    5
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JacobiusMakes/parlay-api-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server