PrizePicks API
Server Details
PrizePicks props, tiers, recorded line history, graded results and sportsbook comparisons.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 30 tools
Most tools target a clearly distinct resource or action, and the descriptions do a lot of work distinguishing near-neighbors (get_projections vs get_board_at vs get_line_history vs get_changes; get_team_stats vs get_opponent_stats vs get_game_logs). The main soft spots are the three book-comparison tools (compare_lines, get_odds, get_stale_lines) and trending-vs-popularity pick counts, which an agent could plausibly mix up. Boundaries are still stated well enough to recover from a misselection.
Overwhelmingly consistent verb_noun snake_case (get_projections, get_line_history, find_players, start_signup, send_feedback), with a tidy get_* family for data endpoints. Only minor deviations: the bare verbs 'fetch' and 'search' break the pattern, and get_* is sometimes a read but sometimes a stateful feed read.
30 tools is heavy for a single server and sits at the upper bound of what an agent can scan before selection degrades. Each tool does map to a real endpoint, but the surface has accumulation smells: a two-step search/fetch onboarding pair, three overlapping book-price tools, and multiple point-in-time variants of the same board read. Scope is genuinely broad, so it is defensible, but consolidation would help.
The domain (live prop lines, odds, graded results, stats, injuries, line history/change feed, training data, signup, feedback) is covered end to end, including both live and historical reads. The notable gap is account/operational introspection — there is no tool to check remaining quota, key status, or plan limits, which the descriptions repeatedly reference (free plan caps, developer-required endpoints).
Available Tools
30 toolscompare_linesLines against book pricesARead-onlyIdempotentInspect
PrizePicks lines beside offered sportsbook prices for a league. Use it to see where a line differs from the market. Free plan: prices run 5 minutes behind, and as_of is off.
| Name | Required | Description | Default |
|---|---|---|---|
| book | No | betrivers, kalshi or both comma-separated. Default both. | |
| stat | No | Exact PrizePicks stat name, case-insensitive, for example Points. | |
| view | No | compact: one flat row with each price as book, side, line and number, and limit up to 1000. full: every field, limit up to 50. | full |
| as_of | No | The board and the prices as they stood at this instant (ISO 8601 with a time zone). Not combinable with priced_only. On a delayed plan it must be older than the delay; the earliest value is in the error when it is too old. | |
| limit | No | Projections per page. Up to 50, or up to 1000 with view=compact. | |
| cursor | No | meta.next_cursor from the preceding page. | |
| league | No | NBA, NFL or NHL, or several comma-separated, for example NBA,NFL,NHL, to read them in one call. | |
| player | No | Case-insensitive substring of the PrizePicks player name. | |
| alt_lines | No | false: only prices at the PrizePicks line plus each book main over/under line. | |
| priced_only | No | true: only projections with at least one linked book price. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered and the description's remaining burden is behavioral context. It does add real value by disclosing that free-plan prices lag 5 minutes and that as_of is unavailable on that plan, but it says nothing about the response shape or how pagination interacts with the view/limit caps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core operation, and no filler. The plan caveat is compressed into a dense clause that is slightly telegraphic but still parses cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter read tool with full schema coverage and no output schema, the definition covers purpose, scoping and the main operational caveat (plan delay). It is slightly thin on what the returned rows look like, but the schema carries the parameter burden well enough that an agent can call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, and the baseline of 3 applies. The description adds only light framing — that league scoping applies and that as_of behavior depends on plan — without explaining the interaction between view, limit and alt_lines beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb-and-resource pair: it places PrizePicks lines beside offered sportsbook prices for a league, and adds the purpose of spotting where the line differs from the market. This distinguishes it from siblings like get_odds or get_projections, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use it to see where a line differs from the market" gives one intended use case, and the free-plan note warns about delayed prices. However, it gives no when-not guidance and never points at the closest alternatives (get_odds, get_line_history, get_imported_lines) for agents who only want raw prices or historical movement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_setupTell the team what this is forAInspect
Required once per account before the data tools work. Say what data your user is looking for and what they want to do with it, in your own words. Ask your user if you do not already know; do not guess or make it up. Costs no quota. Leave out personal data.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | Your agent or client name. | |
| details | No | Any other fields worth telling us, with any names you like, for example language, schedule or team_size. Up to 20. | |
| found_us | Yes | How your user found this API, or how you did if you found it yourself, for example a web search or a recommendation. Ask if you do not know, and do not guess. Up to 300 characters. | |
| use_case | Yes | What they want to do with it. 3 to 1000 characters. | |
| data_wanted | Yes | What data they are looking for: leagues, stats, tiers, history, refresh speed. 3 to 1000 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, non-idempotent, non-destructive call but say nothing specific, so the description carries real weight: it discloses the once-per-account gating condition, the zero-quota cost, and a PII exclusion ('Leave out personal data'). It does not say what happens on a repeat call (relevant given idempotentHint=false) or what the call returns, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, no filler, and the most consequential fact — that nothing else works until this is called — is front-loaded. Every sentence carries a distinct instruction (gate, content, ask-don't-guess, cost, PII), so nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter onboarding tool with full schema coverage and no output schema, the description covers the prerequisites, the content expected, the anti-hallucination instruction, and the cost. The only gap is sequencing against start_signup/finish_signup, which is modest given how explicit the rest is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above baseline by adding a constraint the schema omits (exclude personal data) and by directing the agent to paraphrase in its own words rather than copy boilerplate. It also glosses the two core required inputs as 'what data' and 'what they want to do with it', which helps map intent to fields, though found_us, agent and details are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete purpose: a one-time per-account onboarding step that records what data the user wants and why. 'Required once per account before the data tools work' makes the gating role explicit. It loses a point because it never distinguishes itself from the sibling signup tools start_signup and finish_signup, nor does it explain how the fields it collects relate to those flows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong when-to-use guidance: it must be called once per account before other data tools, it costs no quota, and the agent is told to ask the user rather than fabricate answers. What is missing is any exclusivity or ordering guidance relative to start_signup and finish_signup, which an agent could easily confuse with this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchRead one public PrizePicks pageARead-onlyIdempotentInspect
The full text of one search result: a player's current lines and recent graded results, a league summary, a guide or an answer. Needs no key. Quote the read time when you state a line.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | An id from search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| text | Yes | |
| title | Yes | |
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld=false, so the safety profile is fully covered. The description adds a genuinely useful auth fact ('Needs no key') and a return-content sketch, but the closing sentence 'Quote the read time when you state a line' is cryptic and does not clearly disclose a behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource and content types. The final sentence is compact but ambiguous in meaning, so it earns less than full marks despite the brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations cover the safety profile. The description still supplies the auth note and the content-type envelope, which is nearly everything an agent needs to call it; only the unstated failure behavior for a bad id is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'id' parameter, and the schema already documents that it comes from search. The description adds only that this id addresses 'one search result', which is marginal value over the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely: the full text of one search result, enumerating the shapes it can take (player lines/graded results, league summary, guide, answer). That is enough to separate it from the sibling 'search' tool, which produces the list this one expands, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the schema says the id comes 'from search', so an agent can infer the search-then-fetch flow. There is no explicit when-not guidance or statement of what happens with an invalid or stale id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_playersPlayer searchCRead-onlyIdempotentInspect
Stable player ids by name, league or team.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Team code as PrizePicks prints it, or a team id. | |
| limit | No | Maximum rows per page. Up to 1000 on /projections with view=compact. | |
| cursor | No | Opaque cursor from the preceding page. Changes and history use numeric sequence cursors. | |
| league | No | League code. | |
| search | No | Case-insensitive name substring, at least 2 characters. | |
| person_key | No | Every player id of one person across split leagues. Use person_key from a player or from source_fields. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered elsewhere. The only extra behavior the description adds is the word 'stable' - implying ids persist across calls - which is genuinely useful for caching/chaining but is never explained; nothing is said about result shape, paging via cursor/limit, or empty-result behavior on a tool with explicit pagination parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded fragment with zero wasted words, which is good structure. However, brevity here crosses into under-specification: the tool takes 7 parameters including a required user_request and a cursor-based pager, and none of that complexity is acknowledged in even one additional clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter search tool with no output schema, this description is far too thin. The agent cannot learn from it how results are ordered, whether person_key collapses split-league rows, or how cursor paging interacts with the 'stable ids' promise, and there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the 7 parameters is already documented in the schema; baseline is 3. The description does map its three named axes onto search/league/team, giving mild orientation, but it says nothing about the interaction between them, about limit/cursor paging, or about person_key for cross-league identity - all of which live only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The fragment 'Stable player ids by name, league or team' names the resource (player ids) and the lookup axes, so an agent can infer it resolves players to canonical ids. But there is no verb and no differentiation from siblings like 'search', which would plausibly handle the same name lookups; the agent must guess which is authoritative for player identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no mention of when to prefer this over 'search' or the projection/game-log tools that also take players. The agent gets an implied 'use this to find players' and nothing more, so routing between this and 'search' is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_signupCollect the approved keyAInspect
Call with device_code from start_signup, every few seconds, until your user has approved. Returns the key once. Store it as an environment variable, never in a repo.
| Name | Required | Description | Default |
|---|---|---|---|
| device_code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses polling behavior, one-time key return, and secure storage requirements. It does not describe rate-limit behavior or failure modes, but adds meaningful operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero waste, front-loading the prerequisite and polling cadence before the return value and storage instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter polling tool with no output schema, the description covers prerequisite, cadence, termination, return behavior, and secure storage. Only edge-case behavior such as expiration or failure handling is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single device_code parameter. The description helpfully says where device_code comes from (start_signup), but does not explain its format, lifetime, or handling expectations beyond that origin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this is the completion step for signup: call with device_code from start_signup until the user approves, then receive the key. It is specific about the resource and outcome, though the verb 'Call' is less precise than 'poll' or 'finish'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use device_code from start_signup and to call every few seconds until approval, giving clear timing and termination guidance. It does not state what to do on expiration or errors, but the main usage context is well covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_board_atBoard at a past timeARead-onlyIdempotentInspect
The board as it stood at a past instant (as_of, ISO 8601 with a time zone). For backtests and point-in-time questions. Developer required. Free evaluation uses the fixed training-set sample.
| Name | Required | Description | Default |
|---|---|---|---|
| stat | No | Exact stat name, case-insensitive. | |
| tier | No | Match either selection tier. | |
| as_of | Yes | ISO 8601 timestamp with a time zone, for example 2026-10-28T01:00:00Z. Must be at or after collection start (meta.collection_started_at) and not in the future; otherwise 400 invalid_query. | |
| limit | No | Maximum rows per page. Up to 1000 on /projections with view=compact. | |
| cursor | No | Opaque cursor from the preceding page. Changes and history use numeric sequence cursors. | |
| league | No | League code, for example NBA. | |
| search | No | Case-insensitive player name search. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent read, so the description only needs to add gating context — and it does, disclosing that a developer key is required and that free evaluation silently resolves to a fixed training-set sample rather than true point-in-time data. That sample-substitution caveat is behavior an agent could not infer from the schema and materially affects result interpretation. It does not describe response shape, but no output schema exists to cover that gap either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core identity of the tool, then use case, then entitlement constraints. No sentence is redundant and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter read tool with full schema coverage and rich annotations, the description covers purpose, use case, and access gating. The remaining gap is that a caller does not know what a 'board' row contains or how the snapshot relates to the live board, which matters for a point-in-time tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents as_of format, limit bounds, cursor opacity, league codes, and tier values. The description only restates the as_of format (ISO 8601 with time zone) and adds no meaning to the filtering parameters like stat, search, or tier. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: retrieve the board as it stood at a past instant, parameterized by as_of. The temporal qualifier distinguishes it from the current-state siblings like get_projections and get_demo_projections, though the term 'board' itself is never defined and no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear use cases ('For backtests and point-in-time questions') and a routing rule for the free tier ('Free evaluation uses the fixed training-set sample'), which points the agent to get_training_set instead. It does not spell out the inverse case (use get_projections for the live board), so the alternative is implied rather than named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_changesLine movesARead-onlyIdempotentInspect
Change feed across the board: new, changed, pulled and restored lines. Save next_cursor and pass it back to read only what moved since. This is the cheap way to stay current. Developer required. Free evaluation uses the fixed training-set sample.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows per page. Up to 1000 on /projections with view=compact. | |
| cursor | No | Opaque cursor from the preceding page. Changes and history use numeric sequence cursors. | |
| league | No | Optional league filter. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real context beyond that — cursor-based incrementality, a developer-tier requirement, and a fixed training-set sample for free evaluation — but it names the returned token 'next_cursor' while the schema parameter is 'cursor', leaving the loop ambiguous, and says nothing about the shape of returned change records.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with what the feed contains before the polling mechanics. Dense and mostly waste-free, with a small cost from the next_cursor/cursor naming mismatch and the environment-specific 'Developer required' clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value burden; it partially discharges this by naming the four change kinds and the cursor to persist, but omits anything about the change record shape, ordering, or the league filter's effect on the feed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description reinforces the cursor round-trip but adds no meaning for limit or league, and it does not reference the required user_request parameter at all, which is the one argument an agent could most easily mishandle.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and scope: a change feed covering new, changed, pulled and restored lines. The enumeration of event types distinguishes it from siblings such as get_line_history (full history) or get_stale_lines (stale-only), though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operational guidance: save next_cursor and pass it back to read only what moved since, framed as 'the cheap way to stay current'. This implies the incremental-polling use case versus a full refetch, but no explicit when-not or named alternative is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_coverageBoard coverageARead-onlyIdempotentInspect
Start here. Every league on the board now, with offer counts and available stats, plus which have history and graded results.
| Name | Required | Description | Default |
|---|---|---|---|
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world behavior, so safety is covered. The description adds substantive return content (per-league offer counts, available stat sets, which leagues have history and graded results), which matters because there is no output schema. It says nothing about result size, freshness window, or whether the listing is paginated, which are the remaining behavioral unknowns for a coverage call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler, and the actionable instruction ('Start here') is front-loaded before the content description. Every clause conveys distinct information about what the response contains.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter discovery tool with annotations and no output schema, the description covers the essentials: entry-point role plus the categories of data returned. The remaining gap is precision on what 'available stats' and 'offer counts' actually look like in a response, but that is a minor gap for an index-style tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single user_request parameter is documented at length in the schema itself, so the description carries no burden here. The description adds no meaning about the parameter beyond what the schema states, which matches the baseline 3 for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource clearly: every league on the board, with offer counts, available stats, history flags and graded results. That is a specific enumeration rather than a restatement of 'get_coverage'. It stops short of naming a sibling it differs from (e.g. get_board_at or get_live_sports), so sibling differentiation is only implied by 'Start here'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Start here' is an explicit ordering instruction that tells the agent to call this before the other board/data tools, which is real when-to-use guidance. There are no exclusions or named alternatives, so it does not reach the 5 bar of stating when NOT to use it or which sibling to pick for a narrower question.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_demo_projectionsSample lines (no key)ARead-onlyIdempotentInspect
Fictional sample rows in the live response shape, for trying the API without a key. Never present these as real lines.
| Name | Required | Description | Default |
|---|---|---|---|
| stat | No | Exact market label. For league=NHL, aliases faceoff_wins, shots_on_goal and goalie_saves map to Faceoffs Won, Shots On Goal and Goalie Saves. | |
| tier | No | Match either selection tier. | |
| limit | No | Maximum rows per page. Up to 1000 on /projections with view=compact. | |
| cursor | No | Opaque cursor from the preceding page. Changes and history use numeric sequence cursors. | |
| league | No | One league code or up to 10 comma-separated codes, for example NBA,NFL,NHL. Exact leagues only; NBA does not include NBA1Q. | |
| search | No | Case-insensitive player name search. | |
| status | No | Live active results must appear in the latest successful scope response and be confirmed within 30 minutes. all includes retained, potentially stale observations. | active |
| start_after | No | Scheduled event.starts_at at or after this ISO instant, with explicit timezone. Unknown starts excluded. Available on projections only. | |
| start_before | No | Scheduled event.starts_at before this ISO instant, with explicit timezone. Use the user timezone to convert local noon, respecting daylight saving time. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the one trait annotations cannot express: the returned data is fabricated and must never be surfaced as real lines, which is the critical behavioral caveat for this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the identity of the data front-loaded before the misuse warning. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter read-only tool with full schema coverage and no output schema, the description supplies the essentials: what the payload is, that it mirrors the live shape, and that it must not be reported as real. It could note that filters still apply to a fixed fictional dataset, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with enums and defaults documented for status, tier and limit, so the schema carries parameter meaning on its own. The description adds nothing about how stat/league/tier/cursor behave on sample data, nor whether filters meaningfully reduce the fixed sample set — that ambiguity is left unresolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-like behavior and resource: it returns fictional sample rows shaped like the live response, explicitly for keyless trials. That distinguishes it cleanly from get_projections and the other data siblings, and the 'Never present these as real lines' clause adds a scope boundary an agent can act on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'For trying the API without a key' gives a clear selecting condition, and the warning implies these rows are not for real analysis. It stops short of naming the alternative (get_projections) or explicitly saying 'do not use once authenticated / when the user needs actual lines', so the exclusion is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fixtureOne gameBRead-onlyIdempotentInspect
One fixture by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| include | No | game_state_history adds every recorded in-play state of the game. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations establish that the call is read-only, idempotent, non-destructive, and closed-world. The description adds no behavioral context beyond those structured fields, such as lookup-failure behavior, data freshness, or response-expansion implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The four-word description is direct, front-loaded, and free of filler. Its brevity conveys the essential lookup operation efficiently, with broader omissions assessed separately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read, the description is minimally sufficient when combined with the schema and annotations. With no output schema and no sibling-routing guidance, it would be more complete if it indicated what a fixture contains or when to choose get_fixtures or search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description confirms that id is the lookup key but adds no further parameter detail. The schema already documents include and user_request and supplies a pattern for id, so structured fields provide most of the parameter semantics at 67% description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
“One fixture by id” clearly communicates retrieval of a single fixture using its identifier, consistent with the title “One game.” It does not explicitly differentiate the tool from siblings such as get_fixtures or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The wording implies that the tool is appropriate when the caller already knows a fixture ID and wants that specific game. It gives no explicit guidance about when to use get_fixtures, search, or another sibling instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fixturesGamesBRead-onlyIdempotentInspect
Games with lines on the board, by league, date or status.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | US Eastern calendar date of the start, YYYY-MM-DD. | |
| limit | No | Maximum rows per page. Up to 1000 on /projections with view=compact. | |
| cursor | No | Opaque cursor from the preceding page. Changes and history use numeric sequence cursors. | |
| league | No | League code. Sibling leagues fold onto their game: NBA1Q lines belong to the NBA fixture. | |
| status | No | Fixture status. | |
| resolved | No | true: only fixtures resolved to a scoreboard event. false: only unresolved. | |
| start_after | No | Only fixtures starting at or after this instant. | |
| start_before | No | Only fixtures starting before this instant. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a useful scoping detail that results are games 'with lines on the board', but it does not explain pagination behavior, response shape, or other operational traits beyond what the schema and annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no wasted wording, and the core resource phrase 'Games with lines on the board' is front-loaded. It is appropriately brief, though for a nine-parameter tool it is arguably too terse rather than richly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter list tool with no output schema, the description gives only a minimal indication of what is returned: games with lines. The schema covers filters well, and annotations cover safety, but the description does not clarify output shape, pagination behavior, or how this differs from close sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are already documented in the input schema. The description mentions only league, date, and status, which does not add meaning beyond the schema's own parameter descriptions. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'Games with lines on the board' and lists filtering dimensions (league, date, status). It is clear enough to distinguish this from unrelated siblings, though it does not explicitly contrast itself with close siblings like get_fixture or get_board_at.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the filtering dimensions 'by league, date or status', so an agent can infer it is for listing games with lines under those filters. However, there is no explicit when-to-use guidance, no exclusions, and no routing toward alternatives such as get_fixture, get_board_at, or get_odds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_game_logsPlayer game logsARead-onlyIdempotentInspect
A player's box score line for each past game, newest first: minutes, opponent, home or away, and every stat. Use for recent form and for prop model features. Pass player_id (from get_projections or find_players), or player and league, with last for the most recent N games. For a whole season pass league and season, and follow next_cursor (paid plans). Free plan: the last 10 games per player, and no season-wide reads. Stats are loaded for only some leagues: meta.stats_leagues lists them, and any other league returns an empty page with a warning. SOCCER and TENNIS read every competition listed under them.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | One game date, league local. | |
| last | No | The player's most recent N rows matching the filters. Needs one player. limit and cursor are ignored. | |
| team | No | Only this team's players: a code (BOS) or team id (tm_...). Needs a season or date range unless a player or opponent is also sent. | |
| view | No | compact is a flat row for bulk reads and allows limit up to 1000. full adds ids, scores and game context, with limit up to 200. | compact |
| limit | No | Rows per page: up to 200 with view=full, up to 1000 with view=compact. | |
| cursor | No | meta.next_cursor from the preceding page. Send the same filters. | |
| league | No | League code, for example NBA. meta.stats_leagues lists the leagues with stats loaded; any other league returns an empty page with a warning. A segment league from a projection row (NBA1Q) reads as its full league. SOCCER and TENNIS read every competition listed under them, and each row's league names the competition. | |
| player | No | Exact player name, case-insensitive. Needs league. A name shared by two players returns 400 listing their ids. | |
| season | No | Season label, as listed in meta.coverage.seasons: 2025-26, or 2026 in single-year leagues. | |
| end_date | No | Games on or before this league-local date. For a feature as it stood before a game, set this to the day before. | |
| opponent | No | Only games against this team: a code or team id. | |
| position | No | Position as the box score lists it, for example G, F or C. | |
| player_id | No | A player_id (pl_...) from /players or /projections, or a stats_player_id (sp_...) from /results. A pl_ id needs no league. An sp_ id needs league. | |
| start_date | No | Games on or after this league-local date. | |
| include_dnp | No | true: also return games the player was listed for and did not play. | |
| season_type | No | regular, postseason, play_in or preseason, where the league has them. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds real behavioral context the schema does not: newest-first ordering, free-plan row caps, empty-page-with-warning behavior for unloaded leagues, and paid-plan cursor pagination. It does not say what meta looks like beyond next_cursor and stats_leagues, which is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what a row is, then id options, then access limits and league coverage; every sentence carries a constraint. Slightly dense and the SOCCER/TENNIS sentence reads as an appended caveat rather than part of the flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter, output-schema-less list tool this covers the correctness essentials: id resolution, pagination, plan gating, and which leagues have stats. Return-shape detail (what compact vs full rows look like) is left to the schema, which is acceptable, and meta fields beyond next_cursor/stats_leagues go unmentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema only states locally: last is tied to a single player, and the season-wide read needs league+season plus cursor following. It reinforces the meta.stats_leagues and SOCCER/TENNIS league expansion rules that govern whether a query returns rows at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (a player's box score line per past game) with field detail (minutes, opponent, home/away, every stat) and distinguishes itself from get_projections, find_players and get_results by pointing at them for ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names uses (recent form, prop model features), the two id paths (player_id from get_projections or find_players, or player+league), and the season-wide path with next_cursor. It also states what does not work: free plan limits to last 10 games and no season-wide reads, and leagues without stats return an empty page.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hit_ratesPlayer hit ratesBRead-onlyIdempotentInspect
How often one player has gone over, per stat, across their last graded games. Free plan: the last 10 games, with per-game rows from the last 7 days.
| Name | Required | Description | Default |
|---|---|---|---|
| last | No | Number of most recent graded games per stat. | |
| stat | No | Exact stat name, case-insensitive. Omit to return every graded stat for the player. | |
| tier | No | Which More-side tier to count. | standard |
| league | No | League code. | NBA |
| player | No | Exact player name, case-insensitive. Required unless player_id is sent. | |
| player_id | No | PrizePicks player ID. Required unless player is sent. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context — plan-tier caps on game count and the 7-day window on per-game rows — but leaves unclear what "graded" means (settled vs. pending), what the tier field actually counts, and, with no output schema, what the returned hit-rate rows look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core definition, with the plan restriction appended as a secondary qualifier. Nothing is padded, though the extreme brevity leaves real gaps that a slightly longer description could close.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, single-required stats tool with no output schema, the description covers what is computed and the free-plan limitation, which is the most important operational fact. It does not explain the more/demon/goblin tier semantics, how league affects results, or what the response contains, leaving meaningful work to the agent's inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents last, stat, tier, league, player/player_id and user_request; the baseline is 3. The description does add one constraint not visible in the schema — that the free plan effectively caps results at the last 10 games — which clarifies the practical ceiling of the `last` parameter (schema allows up to 100).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"How often one player has gone over, per stat, across their last graded games" gives a specific verb-like computation (over-rate frequency), a scope (single player, per stat, last graded games), so an agent knows this is a hit-rate aggregation rather than a raw log. It does not, however, distinguish itself from plausible siblings such as get_game_logs or get_projections, which could return overlapping underlying data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance and names no alternative tool, so an agent must infer that this is the right call for over-rate questions versus get_game_logs for raw results. The only usage-adjacent content is the plan constraint (free plan = last 10 games, per-game rows from last 7 days), which is a limitation rather than a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_imported_linesImported past linesARead-onlyIdempotentInspect
Past lines supplied by third parties, not recorded by this API. Every row carries provenance. Empty until meta.available_datasets is above 0. Never present these as lines this API observed. Free plan: games from the last 7 days.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Latest game date, US Eastern, YYYY-MM-DD. | |
| from | No | Earliest game date, US Eastern, YYYY-MM-DD. | |
| stat | No | Exact stat name, case-insensitive. | |
| tier | No | Line tier. | |
| limit | No | Maximum rows per page. | |
| cursor | No | meta.next_cursor from the preceding page. | |
| league | No | League code, for example NFL. | |
| player | No | Partial player name. | |
| line_kind | No | What the line is. | |
| provenance | No | Kind of supplier. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, closed-world read, so the bar is lower, yet the description still adds substantive context: every row carries provenance, the collection is empty below a dataset threshold, and the data has third-party rather than first-party status. The plan-tier limitation (7 days on free) is disclosure an agent cannot get from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The identity of the data is front-loaded in the first sentence, followed by provenance, availability, presentation, and plan constraints. The telegraphic phrasing is dense but every clause carries a distinct operational fact; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter filtered read with full schema coverage and no output schema, the description covers the things an agent could get wrong: source attribution, empty-state precondition, and plan limits. Return shape and pagination are handled by the schema's meta references, so the remaining gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with 11 well-documented parameters including three enums, so the schema already carries parameter meaning. The description adds nothing about individual parameters, which is acceptable at this coverage level but keeps it at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Past lines supplied by third parties, not recorded by this API" states the resource and its scope precisely, and the negation clause separates it conceptually from tools returning this API's own observations (get_odds, get_line_history). It stops short of naming a specific sibling to prefer, so differentiation is conceptual rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies two real usage conditions: the dataset is empty until meta.available_datasets exceeds 0, and results must never be presented as lines this API observed. It also notes a free-plan restriction to the last 7 days. What is missing is routing guidance against alternatives such as get_line_history or compare_lines, so the agent must infer when this source is the right one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_injuriesInjury reportsBRead-onlyIdempotentInspect
Current third-party injury reports for NBA, NFL, NHL and WNBA.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Team code (KC), stats team id, or part of the team name. | |
| limit | No | Maximum rows. | |
| league | No | NBA, NFL, NHL or WNBA. Omit for all. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and closed-world behavior, so the safety profile is fully covered. The description contributes two useful facts beyond that: the data is third-party sourced and reflects 'current' status, implying freshness but not how fresh or how often refreshed. Return fields, injury status categories and pagination behavior are undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the key qualifiers front-loaded. It is slightly telegraphic (no verb phrase), which reads more like a label than a description, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple four-parameter read tool with full schema coverage and no output schema, the description is barely adequate. It says nothing about what an injury record contains (player, status, body part, report date) or whether limits truncate silently, leaving the agent to infer result shape before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so team, league, limit and user_request are all already documented in structured form, and the description adds no syntax or edge-case meaning. The league enumeration in prose merely restates the enum. Baseline 3 applies when the schema carries the full parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (injury reports), qualifies it as 'current' and 'third-party', and enumerates the covered leagues, so the agent can tell it apart from stat-oriented siblings like get_team_stats or get_game_logs. The verb is only implied by the name rather than stated in the description, which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives, no note on prerequisites, and no exclusions. The one usable signal is the league scope, which is already in the schema's enum, so the description adds essentially nothing about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_line_historyOne line over timeARead-onlyIdempotentInspect
Every recorded change to one projection, oldest first. Use an id from get_projections. Developer required. Free evaluation uses the fixed training-set sample.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| limit | No | Maximum rows per page. Up to 1000 on /projections with view=compact. | |
| cursor | No | Opaque cursor from the preceding page. Changes and history use numeric sequence cursors. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds non-obvious context beyond that: chronological ordering of results, a developer-tier auth requirement, and the important caveat that free evaluation returns a fixed training-set sample rather than live data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct information, with the core action and ordering front-loaded before the id source and access caveats. Nothing is repeated from annotations or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description never indicates what a "recorded change" entry actually contains (old vs new value, timestamp, actor), which is the main thing an agent needs to use the result. Pagination is left entirely to the schema's cursor parameter, leaving a notable gap for a history-listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and limit/cursor/user_request are already well documented in the schema, so the baseline is high. The description still adds real value by naming the provenance of the otherwise bare `id` string (take it from get_projections), which the schema does not say.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieving every recorded change to a single projection, with an explicit ordering ("oldest first"). It is distinguishable from siblings like compare_lines or get_changes, though the name/description slip between "line" and "projection" terminology without clarifying they are the same entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use an id from get_projections" explicitly routes the agent to the sibling that supplies the required identifier, and "Developer required" plus the free-evaluation note set expectations about access tier. It stops short of saying when to prefer this over compare_lines or get_changes, so the exclusion side is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_line_popularityPick count over timeBRead-onlyIdempotentInspect
The reported pick count of one line every 15 minutes, and its value at the start. Use an id from get_projections.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| limit | No | Maximum rows. | |
| cursor | No | next_cursor from the preceding page. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile needs no restating. The description adds the useful behavioral detail that data is bucketed every 15 minutes and includes the starting value. It is silent on pagination behavior even though limit and cursor exist, and on how large the result set can get.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the resource and the sampling interval, then the prerequisite. Nothing is wasted, though the trailing clause about the starting value is slightly compressed and could read more clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, four-parameter time-series call with no output schema, the description covers the grain of the data but not the response shape, max row count, or how pagination interacts with the 200-row default. It is adequate to call the tool correctly but not to predict what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, with limit and cursor fully documented and user_request explained in depth, so the baseline is 3. The description adds genuine meaning only for id by naming get_projections as its source, which is the one gap the schema leaves open.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns the reported pick count for a single line at 15-minute intervals, plus the starting value. An agent can tell it is a time-series read for one line rather than a comparison or a history dump. It does not distinguish itself from the similar sibling get_line_history, which leaves some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a prerequisite pointer: 'Use an id from get_projections,' which directly tells the agent where the required id comes from. It says nothing about when to choose this tool over get_line_history or compare_lines, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_live_sportsLive game stateARead-onlyIdempotentInspect
Developer or Production: latest source-pushed game scores, period, clock and status. Optional league and source filters. Use source=prizepicks for PrizePicks game state; default is polymarket. These are game updates, not projection lines. Always report observed_at and meta.feed_connected; PrizePicks supplies source_updated_at, while Polymarket leaves it null. A connected socket does not mean each game changed this second. If disconnected, say the returned state may be stale.
| Name | Required | Description | Default |
|---|---|---|---|
| league | No | Optional league code, for example NBA or NFL. | |
| source | No | Game feed. Defaults to polymarket for compatibility. | polymarket |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the read-only/idempotent safety profile, and the description adds substantive behavior beyond them: feed connectivity via meta.feed_connected, staleness caveats ('a connected socket does not mean each game changed this second', 'if disconnected, say the returned state may be stale'), and per-source differences in source_updated_at. This is exactly the kind of operational context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose and source selection are front-loaded, and most sentences are terse and functional. The 'Developer or Production:' fragment at the start is slightly cryptic and the reporting instructions ('Always report observed_at...') are somewhat dense, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of return-value context and does so for the key fields (observed_at, meta.feed_connected, source_updated_at). It stops short of describing the per-game payload itself (teams, score fields, period formatting) and how league filtering affects results, leaving a modest gap for a live-data tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes slightly beyond by contrasting the two source values' downstream behavior (PrizePicks supplies source_updated_at, Polymarket leaves it null) and by noting the league filter is optional. It says nothing additional about the required user_request parameter, so it is not fully additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('latest source-pushed game scores, period, clock and status') and explicitly distinguishes itself from sibling territory with 'These are game updates, not projection lines', separating it from get_projections/get_odds. An agent can route to it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete selection rule for the source parameter ('use source=prizepicks for PrizePicks game state; default is polymarket') and instructions on what to report back. It does not name alternative siblings such as get_game_logs or get_odds when historical or betting-line data is the actual need, so the when-not guidance is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_oddsOdds by fixtureBRead-onlyIdempotentInspect
PrizePicks lines and book prices grouped by fixture. Needs fixture_id or league.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | US Eastern calendar date of the start, YYYY-MM-DD. | |
| books | No | Books for book_odds: betrivers, kalshi, both comma-separated (default), or none. | |
| limit | No | Fixtures per page. | |
| cursor | No | Opaque cursor from meta.next_cursor. | |
| league | No | League code. Sibling leagues fold onto their game: NBA1Q lines belong to the NBA fixture. | |
| market | No | A market_id, for example player_points. | |
| player | No | A player_id (pl_...) or a PrizePicks player id. | |
| status | No | Fixture status. | |
| main_only | No | true: only standard (main) lines. | |
| book_lines | No | pickem (default): only book lines at a number PrizePicks currently offers for that player and stat. all: every alternate line. | pickem |
| fixture_id | No | One fixture. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world, so the safety profile is fully covered. The description adds only the scoping/grouping behavior; it says nothing about pagination behavior (limit/cursor/meta.next_cursor) or how lines and book prices are combined in the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, and the resource identification is front-loaded before the input requirement. It is efficient, though it spends its brevity budget on almost no behavioral detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 12-parameter, paginated odds tool with no output schema, and the description is two sentences. It never explains what a result element looks like, how pagination interacts with the 5-per-page default, or how this differs from the many sibling odds/line tools, leaving real gaps for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 12 parameters, so the schema already explains date, books, limit, cursor, league, market, player, status, main_only, book_lines and fixture_id in detail. The description contributes only the fixture_id-or-league requirement, which is worth something but is baseline-level when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource and shape: 'PrizePicks lines and book prices grouped by fixture.' That distinguishes it from get_fixtures (fixtures, not odds) and get_projections (modeled numbers, not market prices), but it never names those siblings explicitly, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Needs fixture_id or league' gives a precondition, which is more than nothing, but there is no when-to-use vs when-not guidance and no routing to compare_lines, get_line_history, or get_projections. It also conflicts subtly with the schema, where only user_request is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_opponent_statsWhat a team allowsARead-onlyIdempotentInspect
What a team gives up per game to opposing teams, or by=position for what each position records against it. Needs league, one of meta.stats_leagues. Send team, or a season to read every team. Set end_date to read it as of a past day. Free plan: one team, its last 10 games.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | team or position. | team |
| date | No | One game date, league local. | |
| last | No | That team's most recent N games, as one row with season null. Needs team. | |
| team | No | The team whose defense you are reading: a code (BOS) or team id (tm_...). | |
| limit | No | Teams per page: up to 100 with by=team, up to 10 with by=position. | |
| cursor | No | meta.next_cursor from the preceding page. Send the same filters. | |
| league | Yes | League code, for example NBA. meta.stats_leagues lists the leagues with stats loaded; any other league returns an empty page with a warning. A segment league from a projection row (NBA1Q) reads as its full league. SOCCER and TENNIS read every competition listed under them, and each row's league names the competition. | |
| season | No | Season label, as listed in meta.coverage.seasons: 2025-26, or 2026 in single-year leagues. | |
| end_date | No | Games on or before this league-local date. For a feature as it stood before a game, set this to the day before. | |
| position | No | by=position only: return one position. | |
| start_date | No | Games on or after this league-local date. | |
| season_type | No | regular, postseason, play_in or preseason, where the league has them. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, closed read, so the description is not the only safety signal. It still adds real behavioral context the annotations cannot: plan-tier limits (free plan capped at one team and its last 10 games), that an unloaded league returns an empty page with a warning, and that SOCCER/TENNIS aggregate every competition while each row names its competition. Return shape and pagination behavior remain unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose and the by= mode split are front-loaded in the first sentence, with prerequisites and plan limits after. It is terse to the point of clipped fragments ('Send team, or a season to read every team'), which is efficient but slightly telegraphic for a 13-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with 100% schema coverage, rich league-coverage notes, and annotations covering the safety profile, the description needs mainly to orient rather than document each field, and it does. The remaining gap is return content: with no output schema, an agent learns rows are per-game per-team or per-position stats but not which stat columns appear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds interpretive meaning the schema only hints at: the team-vs-season dichotomy for scoping rows, the by=position mode as a different unit of analysis, and end_date framed as 'the day before' a game for pre-game features. That framing is genuinely useful for an agent reasoning about point-in-time reads.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific resource and verb-equivalent: 'What a team gives up per game to opposing teams,' and immediately branches the semantics with 'or by=position for what each position records against it.' An agent knows exactly what data is returned per row. It stops short of naming its closest sibling (get_team_stats), so an agent must infer the team-offense vs opponent-allowed distinction from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete selection rules: pass a team for one defense, or a season to read every team, and use end_date to read a past-day snapshot. It also states hard preconditions — league must be in meta.stats_leagues — and the free-plan restriction of one team over its last 10 games. No explicit exclusion against alternatives like get_team_stats or get_hit_rates, which keeps it out of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payoutsPayout ratesCRead-onlyIdempotentInspect
Standard PrizePicks payout tables with per-leg break-even rates.
| Name | Required | Description | Default |
|---|---|---|---|
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and closed-world behavior, so the safety profile is covered. The description adds only the qualifier 'Standard', which implies fixed PrizePicks tables rather than custom ones, but it says nothing about how many legs are covered, how the break-even rates are computed, or what the result set looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the resource being returned and free of filler. It is arguably over-trimmed for a tool with no output schema, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, single-parameter, read-only lookup with no nested objects, the annotations and schema cover most of what an agent needs. However, with no output schema, the description should say more about what the payout table contains, such as which leg counts and multipliers are included, so the agent knows whether this tool answers its question.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter and the schema documents it at 100% coverage, including length bounds and privacy guidance, so the schema carries the full load. The description adds no extra meaning about user_request or about how the payout data relates to the caller's task.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource returned: 'Standard PrizePicks payout tables with per-leg break-even rates.' That is concrete enough to distinguish it from every sibling, none of which deals with payout or break-even data, though the verb is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: nothing says when an agent should fetch payout tables versus, say, compare_lines or get_odds, and no prerequisites or follow-up steps are mentioned. The agent must infer the trigger from the phrase 'break-even rates' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectionsCurrent linesARead-onlyIdempotentInspect
The first place to get current PrizePicks lines, with goblin and demon tiers labeled. Filter by one league or comma-separated leagues (NBA,NFL,NHL), stat, player or team search, and tier (standard, goblin, demon). Exact league codes only. Optional start_after (inclusive) and start_before (exclusive) filter scheduled event starts with explicit timezones; unknown start times are excluded. Rows are compact by default: player, league, stat, period and starts_at are flat fields; pass view=full for nested player, market and event objects.
| Name | Required | Description | Default |
|---|---|---|---|
| stat | No | Exact market label. For league=NHL, aliases faceoff_wins, shots_on_goal and goalie_saves map to Faceoffs Won, Shots On Goal and Goalie Saves. | |
| tier | No | Match either selection tier. | |
| view | No | compact returns flat player, league, stat, period, line and starts_at fields; full uses nested player, market and event objects. Both preserve exact league codes and projection IDs. | compact |
| limit | No | Maximum rows per page. Up to 1000 on /projections with view=compact. | |
| cursor | No | Opaque cursor from the preceding page. Changes and history use numeric sequence cursors. | |
| league | No | One league code or up to 10 comma-separated codes, for example NBA,NFL,NHL. Exact leagues only; NBA does not include NBA1Q. | |
| search | No | Case-insensitive player name search. | |
| status | No | Live active results must appear in the latest successful scope response and be confirmed within 30 minutes. all includes retained, potentially stale observations. | active |
| start_after | No | Scheduled event.starts_at at or after this ISO instant, with explicit timezone. Unknown starts excluded. Available on projections only. | |
| start_before | No | Scheduled event.starts_at before this ISO instant, with explicit timezone. Use the user timezone to convert local noon, respecting daylight saving time. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so safety needs no restating. The description adds real behavioral detail beyond them: exact league codes are required, unknown start times are excluded by the time filters, and output rows switch shape based on view. Pagination behavior and rate limits are left implicit, which keeps it at a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the tool's purpose and primary value, then moves through filters, time-boundary rules, and output shape in a logical order. It is dense but each clause carries information; only the repeated view/compact explanation overlaps with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, no output schema, and heavy filtering, the description covers the return row shape (flat fields vs nested objects), the tier labeling, and the inclusive/exclusive time boundary rules. An agent has enough to call it correctly without opening the schema, and the annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries the parameter burden and baseline is 3. The description does reinforce a few semantics the schema also states — exact league codes only, start_after inclusive vs start_before exclusive, unknown starts excluded, view=full for nested objects — but adds little that is not already in the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('get current PrizePicks lines') and adds a positioning claim ('the first place to get current PrizePicks lines') that distinguishes it from the many sibling read tools like get_board_at, get_changes, and get_line_history. It also names the filtering axes and the tier labeling, so an agent knows exactly what this tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'The first place to get...' gives a clear default entry point when the agent wants current lines, and the description enumerates the filter combinations that select this tool (league, stat, player/team search, tier). It stops short of naming explicit alternatives or when-not-to-use conditions, so it falls just below the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resultsGraded resultsARead-onlyIdempotentInspect
Lines graded against final box scores, NBA and the leagues in meta.leagues_graded: closing line, actual value, over, under, push or void. Developer required. Free evaluation uses the fixed training-set sample.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | US Eastern game date. | |
| stat | No | Exact PrizePicks stat name, case-insensitive, for example Points or Pts+Rebs+Asts. | |
| limit | No | Maximum rows per page. | |
| cursor | No | meta.next_cursor from the preceding page (numeric sequence). | |
| league | No | League code. meta.leagues_graded lists the leagues graded now. | |
| player | No | Case-insensitive substring of the PrizePicks player name. Up to 100 characters. | |
| result | No | Filter by outcome. | |
| status | No | Filter by grading status. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a safe, idempotent, closed-world read, so the bar is lower; the description still adds real behavior: an authentication/tier requirement (developer access), the data source (final box scores), and a free-tier caveat about the fixed training-set sample. It stops short of describing ordering, pagination limits, or what a void/ungraded row looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is returned, then access constraints. The phrasing is telegraphic and slightly clipped, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries some burden for explaining the response, and it does name the key fields, but only in a single compressed clause. For a 9-parameter tool with pagination (limit/cursor), it does not explain result ordering or how paging interacts with filters, leaving a modest gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema and baseline 3 applies. The description reinforces the league filter via meta.leagues_graded and lists the outcome values, but adds no syntax or format guidance beyond what the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource and content — lines graded against final box scores, returning closing line, actual value and outcome (over/under/push/void). It also scopes the data to NBA plus whatever meta.leagues_graded lists, but it does not contrast itself with close siblings like get_projections or compare_lines, leaving some disambiguation to the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Developer required" gives a clear access precondition and "Free evaluation uses the fixed training-set sample" hints at an alternative path for non-developers, but the sibling get_training_set is never named and there is no explicit statement of when to prefer this tool over compare_lines or get_line_history. Usage must be inferred rather than read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stale_linesBook moved, line did notARead-onlyIdempotentInspect
PrizePicks lines (NBA, NFL, NHL, before the game) where the BetRivers or Kalshi price for the same player and stat moved materially while the PrizePicks line stayed. Each row has the line, the book move in probability points, when it moved, how long the line has stayed since, and observed_at for both sides. Information about prices, not a prediction or betting advice: say so when you relay it.
| Name | Required | Description | Default |
|---|---|---|---|
| book | No | betrivers, kalshi or both comma-separated. Default both. | |
| stat | No | Exact PrizePicks stat name, case-insensitive, for example Points. | |
| limit | No | Rows, newest move first. | |
| league | No | NBA, NFL or NHL. | |
| player | No | Case-insensitive substring of the PrizePicks player name. | |
| min_move | No | Smallest move in the book over probability, in percentage points. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. | |
| max_age_minutes | No | Only moves first seen within this many minutes. | |
| include_reverted | No | true also lists moves the book has since undone (book.still_moved false). | |
| lookback_minutes | No | The move is measured against the value this many minutes earlier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that: the pre-game domain restriction, the two book sources compared, what each row contains, and a required disclosure when relaying results. It stops short of describing volume, ordering guarantees beyond the limit param, or how ties/absent books are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core definition and followed by row contents and the relay caveat. No filler, no restatement of the title, and the non-advice instruction is placed where it will be read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters and no output schema, the description carries the return-shape burden and does so by enumerating row fields, plus it scopes the domain and adds the disclosure requirement. Minor gaps remain around pagination behaviour and what an empty result implies, but nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents book, stat, limit, league, player, min_move, user_request, max_age_minutes, include_reverted and lookback_minutes. The description reinforces the semantics of a measured 'move in probability points' and the notion of a line that 'stayed', which underpins min_move and lookback_minutes, but adds no field-level detail the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific, distinctive resource: PrizePicks lines in NBA/NFL/NHL pre-game where the BetRivers or Kalshi price moved materially while the PrizePicks line stayed. It also enumerates the per-row fields (line, move in probability points, move time, staleness duration, observed_at for both sides), so an agent knows exactly what it gets and how this differs from a generic change feed or line-history sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicit usage is clear (surface stale PrizePicks lines relative to book movement) and the 'before the game' scope plus the 'information about prices, not a prediction or betting advice' relay instruction are useful constraints. However, it never says when to prefer this over siblings such as get_line_history, get_changes or compare_lines, nor any when-not conditions, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_team_statsTeam statsARead-onlyIdempotentInspect
A team's stats per game with the opponent's beside them, or group_by=season for per-game averages and totals. Needs league, one of meta.stats_leagues. Send team, or a season to read every team. Free plan: one team, its last 10 games.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | One game date, league local. | |
| last | No | The team's most recent N games. Needs team. limit and cursor are ignored. | |
| team | No | A team code (BOS) or team id (tm_...). | |
| view | No | group_by=game only: compact is flat and allows limit up to 1000. | full |
| limit | No | group_by=game: rows, up to 200 with view=full and 1000 with view=compact. group_by=season: teams, up to 100. | |
| cursor | No | meta.next_cursor from the preceding page. Send the same filters. | |
| league | Yes | League code, for example NBA. meta.stats_leagues lists the leagues with stats loaded; any other league returns an empty page with a warning. A segment league from a projection row (NBA1Q) reads as its full league. SOCCER and TENNIS read every competition listed under them, and each row's league names the competition. | |
| season | No | Season label, as listed in meta.coverage.seasons: 2025-26, or 2026 in single-year leagues. | |
| end_date | No | Games on or before this league-local date. For a feature as it stood before a game, set this to the day before. | |
| group_by | No | game or season. | game |
| opponent | No | Only games against this team. | |
| start_date | No | Games on or after this league-local date. | |
| season_type | No | regular, postseason, play_in or preseason, where the league has them. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed world), so the bar is lower, and the description still adds genuine context: an unknown league returns an empty page with a warning, segment leagues resolve to their parent league, and the free plan exposes only one team's last 10 games. It says little about pagination or row shape beyond the opponent-beside-team framing, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler, and the output shape is front-loaded before the mode switch and the constraints. The telegraphic phrasing ('with the opponent's beside them') is slightly harder to parse than plain prose, which costs it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, multi-mode tool with no output schema, the description covers the mode switch, prerequisites and plan limits but leaves return values largely implicit and says nothing about paging behavior or how view/limit interact across modes. The rich schema carries most of the weight, so this is adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning the schema does not: team and season are alternatives that select a different result grain, and group_by=season switches from rows-per-game to per-game averages and totals. The free-plan sentence also explains why a team/limit combination may return less than requested.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and shape: a team's per-game stats with the opponent's stats alongside, plus a season-aggregate mode via group_by=season. It implicitly separates itself from get_opponent_stats by saying opponent figures come back in the same rows, but that distinction is left for the agent to infer rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real prerequisites (league must come from meta.stats_leagues) and both usage modes: pass team, or pass a season to read every team. It also flags a plan constraint. What is missing is explicit routing against siblings such as get_game_logs or get_opponent_stats, so the agent must guess when this is the better call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_setModel training rowsARead-onlyIdempotentInspect
One flat row per graded line for building a prop model: opening and closing line, tier, opponent, home or away, rest days, minutes, actual value, result. Voids left out unless include_void=true. Page with cursor; save rows as you go rather than holding them in the conversation. Free plan: one page, a labeled sample of up to 100 rows from the last 7 days.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Last US Eastern game date, inclusive. | |
| date | No | US Eastern game date. Use this or from and to. | |
| from | No | First US Eastern game date, inclusive. | |
| stat | No | Exact PrizePicks stat name, case-insensitive. | |
| tier | No | Line tier. | |
| limit | No | Rows per page. | |
| cursor | No | meta.next_cursor from the previous page, or the X-Next-Cursor header on CSV. | |
| league | No | League code. meta.leagues_graded on /results lists the leagues graded now. | |
| player | No | Case-insensitive substring of the PrizePicks player name. | |
| player_id | No | PrizePicks player id (pp_player_id). | |
| include_void | No | true also returns void rows, with reason. Default false. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, and the description adds real substance beyond them: default void exclusion, cursor pagination, a streaming/memory warning, and a concrete free-plan ceiling (one page, up to 100 sampled rows from the last 7 days). No mention of rate limits or auth, but the plan constraint is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the row shape an agent needs first, then behavioural caveats, then plan limits. The field enumeration is long but informative; nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter read tool with no output schema, the description supplies the row shape, pagination model, default filtering, and plan limits — enough to invoke it correctly. Minor gaps remain around filter interaction (e.g., whether date filters are required) but the schema covers those fields thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including cursor, include_void, and the date fields is already documented. The description's remarks on voids and cursoring largely restate the schema, so it sits at the baseline rather than adding new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and its shape: one flat row per graded line, with an enumerated set of columns (opening/closing line, tier, opponent, home/away, rest days, minutes, actual value, result). This differentiates it in substance from siblings like get_results or get_game_logs, though it never names those tools explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context ('for building a prop model') plus operational guidance: voids are excluded unless opted in, page with cursor, persist rows rather than holding them in conversation. It stops short of explicit when-not-to-use or naming an alternative sibling for non-training queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trendingMost picked linesARead-onlyIdempotentInspect
Current lines by reported pick count, or with sort=change by how fast the count is rising. Most lines report no count. For screens and alerts.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | count: highest count first. change: biggest rise over window_minutes first; lines with no sample that far back come last. | count |
| limit | No | Maximum rows. | |
| league | No | Optional league code, for example NBA. | |
| user_request | Yes | The current user task for this call, 3 to 500 characters in one sentence, close to their words. Required on every data call, including follow-ups and pagination. Reuse it while working on the same task and update it for each new user request. Do not ask the user again if their goal is already clear. If no person asked, as in a scheduled job, say what the job is for. Saved to their account for 35 days and read by the team to decide what to build. Leave out names, contact details and anything private. | |
| window_minutes | No | How far back change is measured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe, read-only, idempotent call, so the bar is lower. The description still adds real behavioral context that the annotations cannot: most lines report no count, so sparse/empty values are expected, and with sort=change lines lacking an old enough sample are pushed to the end. It does not mention rate limits or payload size, but the key data-quality caveat is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool returns rather than with preamble. "For screens and alerts" is slightly clipped and vague, but nothing in the text is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, rich annotations, no output schema and only five parameters, the description only needs to add the delta. It covers the ranking behavior and the important caveat that most lines have no count; what is missing is the distinction from get_line_popularity and any sense of the row shape returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so sort, limit, league, window_minutes and user_request are all documented in the schema, giving a baseline of 3. The description's phrasing of sort=change ("how fast the count is rising") only restates the schema's "biggest rise over window_minutes" and adds no new detail on window/limit interaction.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Current lines by reported pick count" states a concrete resource (lines) and ranking basis (pick count), with the alternate ranking mode called out inline. It does not distinguish itself from the close sibling get_line_popularity, which also sounds like it ranks lines by popularity, so an agent must still guess between the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"For screens and alerts" gives an implied context but names no alternative tool and no exclusion condition. The two sort modes are effectively a usage guide (use sort=change for rising momentum), but the choice against get_line_popularity or get_line_history is left unaddressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch public PrizePicks pagesARead-onlyIdempotentInspect
Find a player, league, guide or answer on prizepicksapi.com. Needs no key. Then call fetch with a result id. Use this when no API key is connected.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Words to look for, for example a player name, a league or a question. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and closed-world behavior, so the safety bar is low. The description adds genuinely new operational context: no authentication key is required, and results feed a two-step flow into fetch via a result id, which tells the agent how to chain calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the capability, then the key constraint, then the follow-up action. No filler and no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers purpose, auth precondition and next step. The only meaningful gap is the lack of differentiation from find_players for a tool whose purpose is close to it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's own description already explains it takes words like a player name, league or question. The description's 'player, league, guide or answer' phrasing largely restates the schema rather than adding format, syntax or matching-behavior detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Find') and names concrete resource types (player, league, guide, answer) plus the site it searches, so the agent knows exactly what it does. It stops short of distinguishing itself from the sibling find_players, which appears to overlap on player lookup, leaving some ambiguity about which to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear selecting condition ('Use this when no API key is connected') and a follow-up step ('Then call fetch with a result id'), which is actionable routing guidance. It does not explicitly exclude or compare against sibling find_players, so the alternative-selection picture is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_feedbackTell the team what you needAInspect
Report data or a feature you needed and could not get, wrong data, or anything confusing. Be specific about league, stat, field and what you were trying to do. Leave out personal data. Needs no key and costs no quota.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | missing_data | |
| agent | No | Your agent or client name. | |
| message | Yes | What you needed or what went wrong, 3 to 2000 characters. | |
| blocking | No | True if this stops the task. | |
| endpoint | No | The tool or endpoint involved. | |
| use_case | No | What is being built, up to 500 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false. The description adds real value beyond them: submission needs no key and costs no quota, and personal data should be excluded. It does not say whether the submission is one-way or whether any acknowledgement or ticket identifier comes back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what to report and followed by specificity and privacy constraints plus the cost note. Every clause carries information; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, one-required submission tool with no output schema and rich annotations, the description covers purpose, content quality, privacy and cost. The only meaningful gap is what happens after submission, since no output schema exists to explain the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the schema already explains message, agent, blocking, endpoint and use_case. The description reinforces message content (league, stat, field, intent) and the privacy constraint, which meaningfully shapes what goes into that field. It says nothing about the kind enum, the blocking flag, or endpoint, which remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and enumerates the exact things to report: missing data or features, wrong data, or anything confusing. It is unmistakably distinct from the data-retrieval siblings. It stops short of naming the destination explicitly (the team), leaving that to the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use conditions (data or feature you needed and could not get, wrong data, confusing behavior) plus content guidance: be specific about league, stat, field and intent, and omit personal data. No alternative tool is named, but no sibling overlaps this submit-feedback role, so there is nothing to route away from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_signupGet an API key for your userAInspect
Starts getting a free API key. Say what data your user wants and what they want to do with it; ask them if you do not know, and do not guess. Returns a link for your user to approve in the browser. Show them the link and code, then call finish_signup.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | Your agent or client name. | |
| details | No | Any other fields worth telling us, with any names you like, for example language, schedule or team_size. Up to 20. | |
| found_us | Yes | How your user found this API, or how you did if you found it yourself, for example a web search or a recommendation. Ask if you do not know, and do not guess. Up to 300 characters. | |
| use_case | Yes | What they want to do with it. 3 to 1000 characters. | |
| data_wanted | Yes | What data they are looking for: leagues, stats, tiers, history, refresh speed. 3 to 1000 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-read-only, non-destructive, non-idempotent operation, and the description adds the crucial human-in-the-loop detail: it returns a link the user must approve in the browser, plus a code they must be shown. This return-shape disclosure is valuable given there is no output schema, though failure modes and link expiry are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose, then the prerequisite, then the next step. The first sentence is compressed into a semicolon clause but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a signup-initiation tool with a nested details object and no output schema, the description supplies the key missing pieces: what the call returns (link and code), that the user must approve it, and what to call next. Only error and retry behavior is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented, including the 'ask, do not guess' instruction on found_us. The description restates the data_wanted and use_case requirements at a high level without adding format or constraint detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and outcome ('Starts getting a free API key') and names the follow-up sibling finish_signup, so the agent can place it in a two-step flow. It stops short of distinguishing itself from complete_setup or the other setup-adjacent siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear contextual guidance: only call it once you know what data the user wants and their use case, ask rather than guess, then call finish_signup. There is no explicit when-not-to-use or comparison against complete_setup.
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.
30 tool updates
- First observed
compare_lines - First observed
complete_setup - First observed
fetch - First observed
find_players - First observed
finish_signup - First observed
get_board_at - First observed
get_changes - First observed
get_coverage - First observed
get_demo_projections - First observed
get_fixture - First observed
get_fixtures - First observed
get_game_logs - First observed
get_hit_rates - First observed
get_imported_lines - First observed
get_injuries - First observed
get_line_history - First observed
get_line_popularity - First observed
get_live_sports - First observed
get_odds - First observed
get_opponent_stats - First observed
get_payouts - First observed
get_projections - First observed
get_results - First observed
get_stale_lines - First observed
get_team_stats - First observed
get_training_set - First observed
get_trending - First observed
search - First observed
send_feedback - First observed
start_signup
Related MCP Connectors
Sports betting odds, player props, scores, betting splits and history from 30+ sportsbooks
NBA and WNBA player-prop analytics: daily board, graded track record, matchup and referee data.
Real-time sports betting data: odds, player props, edges and arbitrage from 35+ books and DFS apps.
Live odds, cross-book +EV and graded player-prop results across 37 books. Hosted endpoint included.
Related MCP Servers
AlicenseAqualityAmaintenanceLive sports betting odds, cross-book +EV, and graded player-prop resolution across 13 books.11790 npm1MIT- AlicenseNot gradedqualityCmaintenanceProps-first sports odds API with a hosted MCP server. Live odds and player props (moneyline, spreads, totals) across US sportsbooks, normalized to JSON. Tools: get_odds, get_props, get_events, get_books. API-key auth, free tier.MIT No Attribution
- AlicenseNot gradedqualityCmaintenanceGrades sports bets against thousands of play-by-play simulations, reporting simulated probability, implied probability, and edge.MIT
- AlicenseAqualityAmaintenanceLive 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.5MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.