Prediction Markets Quant
Server Details
Free, no key: NFL prop board, Kalshi vs Polymarket gaps, 15-min crypto, Fed odds, NHL, EV/Kelly.
- Status
- Healthy
- Uptime
- 100.0% over 46 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- predictionmarketspicks/mcp
- GitHub Stars
- 0
- Server Listing
- PredictionMarketsPicks Quant
TDQS
Scored across 44 tools
Several clusters overlap heavily: player_outlook, compare_players, start_sit, who_do_i_draft all return Kalshi prop prices for named players; and nfl_prop_board, nfl_prop_edge, nfl_ladder, explain_player, explain_prop, explain_ladder, sleepers_and_busts all circle the same NFL prop/ladder data. The descriptions do provide differentiation (market-only vs model, one-player vs 2-4, board vs explainer), so an attentive agent can separate them, but the boundaries are genuinely subtle and invite misselection.
Names are uniformly snake_case, which keeps them readable and greppable. There is minor stylistic drift between verb_noun (find_arbitrage, convert_probability, calculate_ev, scan_mispricings, explain_*) and bare noun phrases (weather_board, senate_map, market_pulse, best_available, my_league, track_record), but the convention is consistent enough to be predictable.
44 tools is well past the 25+ threshold and the surface sprawls across NFL, NBA, NHL, fantasy football, macro, elections, crypto perps and cross-venue arbitrage. The breadth partially justifies it, but there is clear redundancy (multiple prop-price and edge tools per sport) that inflates the count beyond what the scope needs.
Coverage of the quant analytics domain is broad: pricing, EV, Kelly sizing, arbitrage, edge alerts, perps, liquidation, election maps, macro pulse and explainer tools are all present, with good lifecycle coverage for props and ladders. Gaps are minor — no account/portfolio or order-execution layer, and NBA/NHL give markets without a matching model-edge tool — but agents can work around these.
Available Tools
44 toolsadp_market_gapsKalshi vs Book-Consensus Gaps — this week's NFL propsARead-onlyInspect
In season: Kalshi vs book-consensus gaps on this week's NFL props, widest first, filter by position. Free. (ADP gaps return in the 2027 offseason.)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 15). Values above 50 are clamped to 50. | |
| position | No | Optional position filter (FLEX = RB/WR/TE). One of: QB · RB · WR · TE · FLEX. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely non-obvious traits: results are sorted widest-first, the call is free, and ADP gaps will not return until the 2027 offseason — a caveat that prevents the agent from mis-selecting this tool for an ADP request based on its name. Return format/pagination behavior is not described.
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; the season/scope constraint is front-loaded before the ADP caveat. Every clause carries information an agent needs.
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 should carry the return-shape burden, and it partially does via ordering and scope. Parameters are fully covered by the schema, and the seasonality caveat closes the largest ambiguity. Missing only a note on what fields/columns a gap row contains.
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%: limit (default 15, clamped at 50) and position (with FLEX semantics) are fully documented in the schema. The description only echoes the position filter and adds "widest first" ordering, adding marginal value beyond structured fields. 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?
Names a concrete resource (Kalshi vs book-consensus gaps on this week's NFL props) and states ordering and filtering scope, so the agent knows exactly what comes back. It does not explicitly contrast itself with close siblings like nfl_prop_edge or scan_mispricings, leaving the agent to infer the distinction. The title/name mismatch (adp_market_gaps vs a props tool) is resolved only by the parenthetical caveat.
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 leading "In season:" implies a usage window, but no alternative tool is named and no explicit when-not condition is given beyond the ADP caveat. The agent can infer this is the current-season props gap tool, but routing against nfl_prop_edge/scan_mispricings is left to guesswork.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
base_rate_gapBase Rate GapARead-onlyInspect
Use for "how does this price compare to history" and "is the market ignoring the base rate". Compares a market price with the historical base rate for a class of events: the gap in pp, a signal, and sample-size quality. Pass a known baseRateId (the parameter lists them) or your own baseRateValue.
| Name | Required | Description | Default |
|---|---|---|---|
| baseRateId | No | Known base-rate id to look up (includes sample size + source). One of: incumbent_reelected · fed_hold_unemp_below_4 · fed_cut_cpi_above_3 · recession_called_12mo · sp500_positive_year · bitcoin_above_100k_eoy · gdp_growth_above_2 · cpi_above_3 · senate_incumbent_wins_primary · vix_below_20_eoy · interest_rate_cut_next_meeting · major_sports_upset. | |
| marketPrice | No | Current market price in cents / implied probability % (0–100). Needed for a real answer. Accepts 55, "55%", "55¢", "$0.55", 0.55 or American odds (+120 / -150) — all read as 55%. | |
| baseRateValue | No | Your own base rate in % (0–100), used when no baseRateId is given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds value by disclosing the return payload — gap in percentage points, a signal, and sample-size quality — which matters since no output schema exists.
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 triggering questions before the mechanics, with no filler. The nested quotation marks are slightly awkward but don't impede parsing.
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 compute tool with no output schema, the description adequately covers inputs, the identifier-or-value choice, and the shape of the result. It doesn't clarify what happens when marketPrice is omitted despite zero required parameters, a minor 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 the baseline is 3; the schema already documents baseRateId enums, marketPrice input formats, and baseRateValue ranges in more detail than the description. The only added meaning is the either/or relationship between baseRateId and baseRateValue.
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: 'Compares a market price with the historical base rate for a class of events,' and enumerates the outputs (gap in pp, signal, sample-size quality). That scope is clearly distinguishable from siblings like calculate_ev, kelly_size, or convert_probability, which handle different computations.
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 explicit user-phrasing triggers ('how does this price compare to history', 'is the market ignoring the base rate') that map a real question to this tool. It stops short of naming alternatives or stating when-not to use it, e.g. versus calculate_ev.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bayes_updateBayesian Probability UpdateARead-onlyInspect
Update a prior probability with one or more pieces of evidence using Bayes theorem. Given a prior and a list of evidence items (each with P(evidence | true) and P(evidence | false)), returns the posterior probability and the per-step chain. Use for "update my estimate with new information", "posterior probability", "how does this news change the odds".
| Name | Required | Description | Default |
|---|---|---|---|
| prior | No | Prior probability the hypothesis is true, in % (0–100). Needed for a real answer. Accepts 55, "55%", "55¢", "$0.55", 0.55 or American odds (+120 / -150) — all read as 55%. | |
| evidence | No | One or more evidence items, applied in order. Each item needs likelihoodIfTrue and likelihoodIfFalse on the 0–100 scale, e.g. [{ "likelihoodIfTrue": 80, "likelihoodIfFalse": 20 }]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false and a closed-world scope, so safety is covered. The description adds genuine behavioral context beyond that: evidence items are applied sequentially and the response contains the posterior plus the per-step chain, which matters because there is no output 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?
Two sentences, front-loaded with the computation and its return value, followed by trigger phrasing. Every clause carries information; nothing is padding.
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 correctly names what comes back (posterior and per-step chain), and the input schema fully documents both parameters. It does not address error or edge behavior (e.g. contradictory evidence, 0/100 likelihoods), which keeps it from a 5.
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 schema is unusually rich, documenting accepted formats (55, "55%", "55¢", "$0.55", 0.55, American odds) and the 0–100 scale. The description only restates the evidence likelihood semantics, so it adds little beyond the schema and the baseline of 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 (update) and resource (prior probability) plus the method (Bayes theorem) and the output (posterior plus per-step chain). This is clearly distinguishable from siblings such as convert_probability or calculate_ev, which do different math on different inputs.
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 'Use for...' clause supplies three concrete natural-language triggers that map cleanly onto this tool rather than its siblings. It gives no explicit exclusions or named alternatives (e.g. when to prefer base_rate_gap), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
best_availableBest Available Price — this week's NFL propsBRead-onlyInspect
In season: where the best available PRICE is on this week's NFL props — strikes where Kalshi and the book consensus are 5¢+ apart. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 15). Values above 50 are clamped to 50. | |
| roster | No | Optional: player names on the USER's team — their strikes are shown first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds two useful non-schema facts: the tool is only meaningful 'in season' and it is 'free.' It says nothing about pagination behavior or how many rows come back by default, so the added value is modest.
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 tight sentence with the seasonality caveat front-loaded and the 'Free' note trailing. Fragmented punctuation ('In season:' / 'Free.') but no wasted words and the core criterion is stated early.
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 more of the burden and it does convey the gist of the result set (price strikes where Kalshi and consensus diverge by 5¢+). It does not describe the row shape (columns, prices shown, ordering) which a 2-param analytical tool would benefit from. Adequate but with clear gaps.
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% — both `limit` (with its 50-row clamp) and `roster` (user-team prioritization) are fully documented in the schema. The description adds no parameter meaning beyond that, so the baseline of 3 is correct.
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 (this week's NFL props) and a precise criterion (strikes where Kalshi and book consensus are 5¢+ apart), which tells the agent exactly what the tool surfaces. It is not verb-led and does not explicitly distinguish itself from close siblings like nfl_prop_edge, scan_mispricings, or nfl_prop_board, but the 'Kalshi vs book consensus' angle is distinctive enough to separate it.
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 'In season:' prefix gives a genuine applicability condition (NFL season only), which is more than most siblings offer. However, it never names an alternative tool or states when to prefer nfl_prop_edge / nfl_prop_board instead, so the routing decision 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.
calculate_evCalculate EV EdgeARead-onlyInspect
Use for "is this contract mispriced" and "what is my edge". Give a Kalshi or Polymarket price in cents and your own probability; returns the % expected-value edge and a BUY / SELL / SKIP read.
| Name | Required | Description | Default |
|---|---|---|---|
| marketPrice | No | Current contract price in cents (1–99), equal to the implied probability in %. Required for a real answer. Accepts 55, "55%", "55¢", "$0.55", 0.55 or American odds (+120 / -150) — all read as 55%. | |
| yourProbability | No | Your own estimate of the true probability the contract resolves YES, in % (0–100). Required for a real answer. Accepts 55, "55%", "55¢", "$0.55", 0.55 or American odds (+120 / -150) — all read as 55%. |
Output Schema
| Name | Required | Description |
|---|---|---|
| signal | No | BUY / SELL / SKIP. |
| edge_pp | No | Your probability minus the price, pp. |
| sources | No | |
| edge_pct | No | Expected-value edge, %. |
| tell_user | No | Show this sentence to the user first. |
| timestamp | No | |
| needs_input | No | |
| example_call | No | |
| data_freshness | No | |
| interpretation | No | Plain-English read. |
| market_price_cents | No | Price used, cents. |
| your_probability_pct | No | Probability used, %. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safe, side-effect-free nature is covered structurally. The description adds useful domain scope by tying the tool to Kalshi and Polymarket prices and previews the verdict output, but says nothing about rate limits, accuracy assumptions, or edge cases (e.g. price at 0/100).
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 tight sentences: the trigger/question framing is front-loaded, followed by the inputs and the returned outputs. No filler, no repetition of 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 an output schema present the description need not explain the return payload, and with 100% schema coverage it need not document parameters. It covers purpose, trigger, and output shape. The remaining gap is cluster-level: no pointer to kelly_size for follow-on position sizing.
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 schema descriptions already enumerate every accepted input format (55, "55%", "55¢", "$0.55", 0.55, American odds). The description only paraphrases this as "in cents and your own probability", which is actually narrower than the schema. Baseline 3 is correct when the schema carries the semantics.
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 function: take a market price plus the user's own probability and return the % EV edge and a BUY/SELL/SKIP read. That is a clear verb+resource with an output preview. It does not distinguish itself from the related sibling kelly_size, which an agent might reasonably confuse it with.
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 for 'is this contract mispriced' and 'what is my edge'" gives an explicit when-to-use trigger in the user's own vocabulary. It offers no exclusions and never names the obvious downstream alternative (kelly_size for sizing once edge is known), so sibling routing 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.
combo_edgeCombo Edge VerdictARead-onlyInspect
Use for "price a same-game NFL combo" and "is this combo worth it". Pass nflGame ("NYG-LAR", "Giants vs Rams") to list that game's Kalshi legs — moneyline, spreads, totals, player props — then legIds to price your pick with the correlation done for you. Or pass legPrices + trueWinProbability for a fair band; add offeredOdds for EV and a verdict. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | With nflGame: "game" = all game lines, "prop" = props only. One of: game · prop. | |
| stat | No | With nflGame: props of one stat (e.g. "rec_yds"). | |
| limit | No | With nflGame: max props listed (default 40, max 200). | |
| legIds | No | 2–6 leg ids from a previous nflGame call (an array, or one comma-separated string). We compute the correlation-aware joint for exactly these legs. | |
| player | No | With nflGame: every strike for a player whose name contains this (e.g. "Mariota"). | |
| nflGame | No | An NFL game on the live board, as "AWAY-HOME" (e.g. "NYG-LAR"). Alone: lists its legs with ids, trimmed (narrow with player/stat/kind/limit). With legIds: prices that exact combo. | |
| legPrices | No | Each leg's YES price in cents (1–99). Used only for the theoretical assemble ceiling. Omit when using nflGame + legIds — we read the real prices. | |
| offeredOdds | No | The combo price your platform actually quotes — American odds (e.g. -150, 988) or a decimal payout multiplier (e.g. 10.7). Grades EV + verdict against fair value. Omit to get fair value + band only. | |
| offeredAmerican | No | Alias for offeredOdds (the response reports the quote as offered_american, so this name is accepted on input too). American odds or a decimal multiplier, same parsing. If both are given, offeredOdds wins. | |
| trueWinProbability | No | Your correlation-aware estimate of the true joint probability all legs hit, in % (0–100). Omit when using nflGame + legIds — we compute it from the scoreline model. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint=false, so the bar is lower; the description still adds real behavior — automatic correlation of the joint, EV/verdict grading when offeredOdds is supplied, and the note that it's free. It doesn't disclose error behavior or leg-count limits beyond the schema, but the workflow outcomes are well conveyed.
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 the two trigger phrases and then the two invocation paths in three dense sentences with examples. Slightly packed but every clause carries routing or format information; 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 complex 10-parameter, zero-required, no-output-schema tool, the description covers both input modes, their mutual exclusivity, and the graded outputs (fair band, EV, verdict). It leaves the exact response shape and failure modes unstated, but that's a minor gap for an exploratory pricing 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?
With 100% schema coverage the baseline is 3, but the description adds genuine meaning: nflGame accepts 'NYG-LAR' or 'Giants vs Rams', legPrices is 'used only for the theoretical assemble ceiling', and both legPrices and trueWinProbability should be omitted when using nflGame+legIds. That sequencing context is not 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?
States a specific verb and resource ('price a same-game NFL combo') and immediately names the value proposition ('with the correlation done for you'). This cleanly separates it from generic siblings like calculate_ev or ladder_arb, which don't do correlation-aware same-game joint pricing.
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 routes two workflows: (a) pass nflGame to list legs, then legIds to price, or (b) pass legPrices + trueWinProbability for a fair band and add offeredOdds for EV. It stops short of naming sibling alternatives (e.g. when to prefer calculate_ev or nfl_prop_edge), but the conditional branches are clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commodity_edgeCommodity Edge (Gold / Silver / Oil / Bitcoin)ARead-onlyInspect
Use for "gold edge today" and "oil or bitcoin trade signal". The Kalshi daily gold, silver or WTI strike, or hourly bitcoin strike, with the largest PMP model edge, as a ticket: side, entry price, resolve criterion, model probability, edge, tier and quarter-Kelly size. Pass tickers[] to check a watchlist. Pro — sign in with PredictionMarketsPicks, or a Pro API key.
| Name | Required | Description | Default |
|---|---|---|---|
| tickers | No | Optional Kalshi ticker watchlist (up to 25) — e.g. paste the tickers from your Kalshi Pro screener or Canvas to get PMP's edge on exactly those markets. Full market or 3-segment event tickers both work. Tickers PMP doesn't model are returned as not_covered (never a fabricated edge). | |
| commodity | No | Which commodity edge to read (needed for a real answer). One of: silver · bitcoin · gold · oil. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/destructive=false and openWorld, so those add nothing here. The description goes beyond them by disclosing the Pro auth requirement (sign in with PredictionMarketsPicks or a Pro API key) and the not_covered fallback ('never a fabricated edge'), which are meaningful behavioral facts.
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 trigger phrasings and commodity list are front-loaded, and the auth caveat is placed last. It is slightly verbose in enumerating the ticket fields, but each clause carries useful 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?
With no output schema, the description carries the return-value burden and does so by listing the ticket fields (side, entry price, resolve criterion, probability, edge, tier, Kelly size). Auth and watchlist behavior are covered; only deeper edge/model detail is left out, which is acceptable.
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 both parameters are already fully documented in the schema, including the watchlist semantics and not_covered behavior. The description's restatement that commodity is 'needed for a real answer' adds little beyond what the schema provides, 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 states a specific resource (the Kalshi gold/silver/WTI/bitcoin strike with the largest PMP model edge) and enumerates the returned ticket fields, so an agent knows what it retrieves. It does not, however, name or differentiate from siblings like calculate_ev or kelly_size, leaving that to inference.
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 trigger phrasing ('gold edge today', 'oil or bitcoin trade signal') and notes tickers[] for a watchlist, giving implied usage context. But it offers no when-not guidance and never names an alternative sibling tool, so routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_playersCompare Players This Week — Kalshi prop linesARead-onlyInspect
Compare 2–4 NFL players this week: every Kalshi prop strike each has, the best price per side across venues, our probability where we publish one, and a ranked verdict on whose price the model disagrees with most, and on which strike. Use for " or this week", "compare and props", "who has the better prop, or ", " vs receiving yards".
| Name | Required | Description | Default |
|---|---|---|---|
| players | No | 2–4 player full names to compare. | |
| scoring | No | Scoring format: standard, half_ppr (default), or ppr (full PPR). Overrides a platform preset. Works for Yahoo/ESPN/Sleeper defaults. One of: standard · half_ppr · ppr. | |
| platform | No | League platform — applies its default scoring, size, roster + best-ball settings (overridable by explicit scoring/teams). Underdog/DraftKings are best ball. One of: yahoo · espn · sleeper · nfl · cbs · fantrax · draftkings · underdog. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it discloses the shape of the returned comparison (strikes, best price per side across venues, probability where published, ranked verdict), which matters because there is no output schema. It omits auth/rate-limit details, keeping it at 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?
The output summary is front-loaded in a single dense sentence, followed by an immediately actionable 'Use for' set of examples. It is slightly long but every clause (outputs, then trigger phrases) 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 small 3-parameter, no-output-schema tool, the description supplies the return-value picture an agent would otherwise lack and covers the temporal scope. The scoring/platform parameters are left entirely to the schema, but that is acceptable given full description coverage there.
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 schema already documents players, scoring and platform. The description reinforces the 2–4 player bound and the 'this week' temporal scope but adds no syntax or format detail beyond the schema. Baseline 3 is correct 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?
States a specific verb (compare), resource (2–4 NFL players this week) and enumerates exactly what the comparison returns: each Kalshi prop strike, best price per side across venues, model probability, and a ranked verdict. This is detailed enough that an agent can distinguish it from siblings like explain_prop or nfl_prop_edge 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?
The 'Use for' clause supplies four concrete query patterns ('<A> or <B> this week', 'compare <A> and <B> props', 'who has the better prop...', '<A> vs <B> receiving yards') that clearly map user intent to this tool. It stops short of naming a competing sibling as the alternative or stating when-not to use it, so it lands at 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_probabilityConvert Probability / OddsARead-onlyInspect
Convert between implied probability, American odds, and decimal odds. Give one value and its format and get all three back (American odds carry no commas, e.g. +441 or -200). Use for "what is +150 as a probability", "convert 62% to American odds", "decimal to implied odds".
| Name | Required | Description | Default |
|---|---|---|---|
| value | No | The numeric value to convert. Needed for a real answer, with format. Accepts a number or a numeric string ("+150", "62%", "2.5"). | |
| format | No | Format of `value`: probability (0–100 %), american (e.g. -200 / +150), or decimal (e.g. 2.5). One of: probability · american · decimal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sources | No | |
| tell_user | No | Show this sentence to the user first. |
| timestamp | No | |
| needs_input | No | |
| decimal_odds | No | Decimal odds. |
| example_call | No | |
| american_odds | No | American odds, no commas. |
| data_freshness | No | |
| probability_pct | No | Implied probability, %. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the bar is low. The description still adds real behavioral context beyond them: the output always contains all three representations, and American odds use the no-comma convention (+441 or -200). It does not restate return format in detail, but an output schema exists so that is not required.
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 sentences, front-loaded with purpose, then output convention, then trigger examples. No filler, and the critical formatting caveat is parenthetical rather than buried. The quoted example phrases are slightly redundant with the purpose sentence, keeping this just below a 5.
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?
A pure two-parameter, read-only converter with an output schema, full schema description coverage and safety annotations. The description covers what it does, what comes back, the input convention quirk, and when to reach for it — nothing an agent needs in order to call it correctly 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%, so the baseline would be 3. The description earns above baseline by explaining the no-comma American convention and illustrating accepted input strings ('+150', '62%', '2.5'), which clarifies the number-or-string typing in the schema. It does not, however, add anything not already implied about the range or enum semantics of `format`.
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 verb (Convert) and the exact resources (implied probability, American odds, decimal odds), and states the round-trip behavior (give one, get all three). An agent can immediately distinguish this from calculate_ev or kelly_size, which compute value or stake rather than reformat an odds figure.
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 concrete trigger phrasings ('what is +150 as a probability', 'convert 62% to American odds', 'decimal to implied odds'), which is strong positive routing. It stops short of naming a sibling as the alternative or stating when-not to use it (e.g. if you want expected value, use calculate_ev), so it is clear context rather than full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_boardThis Week's Rankings by the MarketARead-onlyInspect
In season: this week's QB/RB/WR/TE rankings by the median Kalshi prices each player at (pass/rush/rec yds), plus anytime-TD price. Free. (Draft board returns in 2027.)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 15). Values above 50 are clamped to 50. | |
| position | No | Optional position filter (FLEX = RB/WR/TE). One of: QB · RB · WR · TE · FLEX. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, closed-world, non-destructive behavior, so the safety profile is covered. The description adds real context beyond that: cost ('Free'), seasonal availability ('In season'), and that the draft-board variant is unavailable until 2027 — all useful for deciding whether to call it.
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?
Compact and front-loaded: the rankings concept leads, with clarifying parentheticals for cost and draft-board availability. Dense but not wasteful, though the 'plus anytime-TD price' clause could sit in a cleaner position.
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 usefully sketches the returned content (median market prices for passing/rushing/receiving yards plus anytime-TD). It leaves the exact row/field shape unstated, but for a two-parameter read-only board that is a minor 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%, with both limit (default 15, clamped at 50) and position (enum including FLEX) fully documented in the schema. The description adds nothing about parameter syntax or defaults, which is acceptable at this coverage level but earns no extra credit.
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 concrete artifact (this week's QB/RB/WR/TE rankings) and the data source (median Kalshi prices for pass/rush/rec yds plus anytime-TD price). That is enough to distinguish it from prop-board and draft-oriented siblings like nfl_prop_board and who_do_i_draft, though it never explicitly contrasts itself with them.
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 'In season' framing and 'Free' note imply when the tool is usable, and the 2027 parenthetical rules out the draft-board use case for now. However, there is no explicit statement of when to pick this over the many other NFL/edge tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edge_alertsEdge Alerts (weather / commodity / mispricing)ARead-onlyInspect
Use for "any edge on Kalshi" and "weather trade signals". Our model alerts on Kalshi — weather, bitcoin/silver/gold/oil, mispricings — with feed, tier, side, price, model probability, edge and link. Real time with Pro; free is delayed 24h without the thesis. One identical, impersonal feed for every subscriber; filters only select. Informational, not investment advice.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | Comma-separated feeds to include: weather, bitcoin, silver, gold, oil, mispricing, sports_arb, nfl. Omit for all. | |
| limit | No | Max alerts to return (default 25). Values above 100 are clamped to 100. | |
| since | No | ISO-8601 timestamp — only alerts created after it. | |
| min_tier | No | Minimum confidence tier (returns that tier and above). One of: SPECULATIVE · MODERATE · STRONG. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses tier-gated behavior (real time with Pro, free delayed 24h without the thesis), that the feed is identical and impersonal for every subscriber, that filters only select rather than personalize, and an informational-use disclaimer. These are exactly the behavioral traits annotations cannot carry.
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 front-loaded with the usage trigger and packs payload, tiering, and disclaimers into a few compact sentences. The marketing-toned phrases ('any edge on Kalshi', 'One identical, impersonal feed') add some noise but are short.
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 compensates by enumerating the returned fields and explaining the real-time vs 24h-delayed access model and filter semantics. For a read-only feed with all four params documented in schema, nothing an agent needs to call it correctly 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 feed, limit, since, and min_tier are already fully documented in the schema. The description's list of 'feed, tier, side, price, model probability, edge and link' describes output fields, not parameter meaning, so it adds nothing to parameter interpretation. 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 names the resource (Kalshi model alerts) and enumerates the covered categories (weather, bitcoin/silver/gold/oil, mispricings) plus the returned fields, so the agent knows this is a unified alert feed rather than a single-market board. It stops short of explicitly distinguishing itself from near siblings like weather_board, commodity_edge, or scan_mispricings.
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 opens with a direct usage trigger — 'Use for "any edge on Kalshi" and "weather trade signals"' — which gives the agent clear context for selection. However, it names no when-not conditions and does not route the agent to or away from the overlapping sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_gameExplain This Game — why we price an NFL game thereARead-onlyInspect
Why the PredictionMarketsPicks model prices one NFL game where it does: the Kalshi price and market line, our published win probability and what it is anchored to, the model's own line as a lean in points, each team's power rating split into offense, defense and special teams, the QB gate (PASS, ADJUSTED, FORK with both lines, or HOLD), and the published position (side, Kalshi price, edge) or why none is published. Use for "why do you price vs there", "explain the game line", "what is driving the model on 's game". Pass game as two teams in any form ("Bills vs Chiefs", "BUF@KC") or one team for its game; week defaults to the current week.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | The matchup — two teams in any form ("Bills vs Chiefs", "BUF@KC", "Buffalo at Kansas City"), or one team for its game that week. | |
| week | No | Optional NFL week (e.g. 6). Defaults to the current week. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no output schema, the description carries the full burden and discharges it: it names the returned elements (Kalshi price and market line, published win probability and its anchor, model line as a points lean, offense/defense/special-teams power rating split), discloses the QB gate states (PASS, ADJUSTED, FORK with both lines, HOLD), and explains the negative case — the published position or why none is published. Annotations already declare it read-only and closed-world, and nothing here contradicts them.
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 core deliverable and then the usage triggers; every clause maps to actual output content rather than filler. The opening sentence is dense and long, packing seven-plus return components into one clause chain, which costs a point on readability but not on waste.
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 tool with zero required params, no output schema, and no enum constraints, the description supplies the return-value semantics and the input format guidance an agent needs. It stops short of covering edge behavior — e.g. what happens with an ambiguous or unknown team, or a week with no game — which is the only remaining 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%, and both the game-format flexibility ("Bills vs Chiefs", "BUF@KC", "Buffalo at Kansas City", or one team) and the week default are already stated verbatim in the schema. The description's restatement adds example color but no semantics beyond the structured fields, 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?
States a specific verb and resource (explain why the model prices one NFL game where it does) and enumerates the exact reasoning components returned. It is clearly distinguishable from the many sibling 'explain_*' tools (explain_ladder, explain_player, explain_prop) and from nfl_win_probability/nfl_power_ratings by naming the NFL game line as its subject.
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 trigger phrases ("why do you price <team> vs <team> there", "explain the <team> game line", "what is driving the model on <team>'s game") plus the accepted game formats and the week default. It does not explicitly say when NOT to use this tool or name a sibling alternative (e.g. explain_prop for a single prop question), so routing to the nearest neighbor 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.
explain_ladderExplain This Ladder — why The Ladder reads one NFL market the way it doesARead-onlyInspect
Why PredictionMarketsPicks' Ladder reads one NFL strike ladder the way it does — a game's spread, a team's season win total, or a player's prop: the read (SHAPE, LOCATION, PRICED, MARKET READ or QB HOLD) in words — which way our curve leans, or whether it is tighter or wider than Kalshi's and where they cross — where Kalshi's ladder centres beside our projection, the widest published gap, and every listed strike with Kalshi's price and our number where we publish one (30–70% only). One ladder per call. Use for "explain the Chiefs win total ladder", "why does the ladder lean Browns", "what does SHAPE mean on receptions".
| Name | Required | Description | Default |
|---|---|---|---|
| stat | No | Prop stat for a player, e.g. "receptions" or "rec_yds". Defaults to his widest ladder. | |
| team | No | Team code or nickname (KC, Chiefs) — its game spread ladder, or its season-win ladder with family "season_wins". | |
| family | No | Ladder family. Omit to take the team's spread first. One of: spread · season_wins · props. | |
| player | No | Player name, full or partial — his prop ladder. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false, destructiveHint=false). The description adds real behavioral context beyond those: it enumerates what the output contains (curve lean, tighter/wider than Kalshi, crossing point, Kalshi's ladder centre, widest published gap, every listed strike) and discloses a coverage limitation (published number only at 30–70%). No auth or cost notes, so not 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?
Front-loads the purpose, which is good, but the middle sentence is a long dash-chained run that piles multiple output elements together and is hard to parse on a single read. It is information-dense rather than wasteful, but it is not tightly 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?
With no output schema, the description carries the return-value burden and does so thoroughly, and annotations handle safety. It also handles the all-optional parameter surface by explaining the defaults. Slightly short of 5 only because the family/stat/player interaction and multi-market fallbacks could be spelled out more explicitly.
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 stat, team, family, and player, including the family default (spread first) and the season_wins pairing. The description restates the market types (spread / season win total / player prop) but adds no syntax, format, or edge-case detail beyond the schema, 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?
Names a specific verb (explain) and a specific resource/scope (one NFL strike ladder: a game spread, a season win total, or a player prop), and enumerates the read categories it produces (SHAPE, LOCATION, PRICED, MARKET READ, QB HOLD). It does not explicitly contrast itself with close siblings such as explain_prop, explain_player, or nfl_ladder, so the boundary is left to inference.
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?
Provides concrete trigger phrasings ("explain the Chiefs win total ladder", "why does the ladder lean Browns", "what does SHAPE mean on <player> receptions") and a clear constraint that it is one ladder per call. No explicit when-not or alternative-tool routing is given, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_playerExplain This Price — why we price a player’s strikes thereARead-onlyInspect
Why the PredictionMarketsPicks model prices an NFL player's Kalshi prop strikes where it does this week: the projection, The Ladder's verdict (SHAPE, LOCATION, PRICED or market-only), the widest published model-vs-market gap, and what the model does NOT account for. Our number appears only where it is measured calibrated (30–70%). Use for "why do you price there", "explain 's prop", "what's driving the model on ", "why is 's over priced at that".
| Name | Required | Description | Default |
|---|---|---|---|
| stat | No | Optional stat to narrow to, e.g. "rec_yds", "receptions", "rush_yds". | |
| player | No | Player name, full or partial (e.g. "Puka Nacua"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, and closed-world, so safety is covered. The description adds real behavioral context: the response content, the calibration constraint (number only appears in the measured-calibrated 30–70% band), and that it discloses what the model does NOT account for — useful for interpreting output.
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 core purpose followed by a dense but informative enumeration of outputs, then trigger examples. Every clause carries information, though the parenthetical breakdown is slightly heavy for a single sentence.
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 correctly compensates by enumerating the response components (projection, verdict, gap, caveats) and the calibration caveat. An agent has enough to call it and interpret results, though pagination or scope limits (single week) are only briefly implied.
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% with both parameters fully described in the schema, including an example value for 'stat'. The description adds no syntax or format detail beyond the schema, so the baseline of 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 (explain) and resource (why the model prices a player's Kalshi prop strikes where it does), and enumerates exactly what the explanation contains: projection, The Ladder verdict, model-vs-market gap, and known exclusions. This distinguishes it from siblings like explain_prop, explain_ladder, and explain_game.
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?
Provides explicit trigger phrasing ('why do you price <player> there', 'explain <player>'s prop') that maps user intent directly to this tool. It lacks explicit negative routing or named alternatives (e.g., 'for game-level questions use explain_game'), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_propExplain This Prop — why a player prop is a callARead-onlyInspect
Why PredictionMarketsPicks publishes a call on one NFL player prop this week: the Kalshi contract, the YES/NO call and Kalshi's price for that side, our tier and — where our probability is measured calibrated — our odds, our projection against the threshold, whether it is published or held at WATCH (and why), The Ladder's read on that stat, and what the model does not account for. One contract per call. Use for "why do you like 's over", "explain the prop", "why is on your board". For the full strike ladder use explain_player.
| Name | Required | Description | Default |
|---|---|---|---|
| line | No | Optional contract threshold or line (e.g. 60 or 59.5) to pick one strike. | |
| stat | No | Optional stat, e.g. "rec_yds", "receptions", "rush_yds", "pass_tds" or "receiving yards". Defaults to the player's strongest published call. | |
| player | No | Player name, full or partial (e.g. "Josh Allen"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: it discloses the returned content (tier, calibrated odds, projection vs threshold, and WATCH-vs-published status including the reason) and explicitly notes what the model does not account for. It does not discuss latency, caching, or error behavior, so it stops 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?
The long enumerative sentence is dense but each item earns its place because no output schema exists to convey the response shape. Purpose and usage examples are present and the alternative-tool routing is at the end rather than the front, a minor structural weakness.
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 correctly compensates by enumerating the returned fields and the WATCH/held distinction. Combined with the sibling pointer to explain_player, an agent has enough to call and interpret the tool; only the player-name matching semantics (full vs partial) are left entirely to the 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% and all three parameters carry their own examples and defaults, so the schema does the heavy lifting. The description only implies the line/stat selection via 'One contract per call' and adds no format or default guidance beyond the schema, which is the expected 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?
States a specific verb+resource: explaining why a published call exists on one NFL player prop, and enumerates exactly what the explanation contains (Kalshi contract, YES/NO side, price, tier, odds, projection, WATCH status). It explicitly distinguishes itself from the sibling explain_player ('For the full strike ladder use explain_player').
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?
Provides concrete trigger utterances ('why do you like <player>'s over', 'explain the <player> prop') and names the alternative tool plus the condition (full strike ladder) that routes to it. Also scopes to 'one contract per call', which prevents misuse for multi-strike lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fed_rate_oddsFed Rate Odds (FOMC)ARead-onlyInspect
Use for "will the Fed cut, hold or hike" and "next FOMC meeting odds". Live Kalshi odds for each remaining 2026 FOMC meeting: the next meeting's full strike breakdown and days-until, the rate path, the current fed funds rate, and a next-meeting cross-venue check against Polymarket and CME futures, with the gap in pp.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| sources | No | |
| by_venue | No | Next-meeting odds by venue (Kalshi, Polymarket, CME futures). |
| tell_user | No | Show this sentence to the user first. |
| timestamp | No | |
| needs_input | No | |
| example_call | No | |
| next_meeting | No | Next FOMC meeting: date, days until, strike breakdown. |
| divergence_pp | No | Headline cross-venue gap for the next meeting, pp. |
| data_freshness | No | |
| rate_path_2026 | No | Implied outcome at each remaining 2026 meeting. |
| current_target_range | No | Current fed funds target range. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds behavioral context beyond that: the data is live, the scope is remaining 2026 meetings, and it includes a cross-venue comparison against Polymarket and CME futures with a gap measured in pp. No auth, freshness, or staleness caveats are given.
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, zero filler: the usage trigger is front-loaded, followed by a dense enumeration of returned content. Every clause earns its place and nothing is repeated from structured fields.
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, the return shape needn't be explained, and the description correctly focuses on scope and coverage instead. It is nearly complete for a no-arg tool; the only minor gap is no indication of behavior when data is unavailable (e.g., between meetings or markets closed).
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 tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the empty schema already conveys. The baseline of 4 applies; no additional parameter meaning is needed or missing.
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: it returns live Kalshi odds for each remaining 2026 FOMC meeting, with an explicit inventory of what it covers (strike breakdown, days-until, rate path, current fed funds rate, cross-venue check). This is precise enough that an agent can distinguish it from generic market tools like market_pulse or base_rate_gap without opening the 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?
The opening clause gives concrete query intents that select this tool: "will the Fed cut, hold or hike" and "next FOMC meeting odds". That is clear when-to-use guidance, but it names no alternatives and gives no exclusions, so an agent must infer its boundary against sibling rate/market tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fifteen_min_boardKalshi 15-Minute Markets — every series, liveARead-onlyInspect
Use for "what is the ETH 15-minute market doing" and "which Kalshi 15-minute markets are open". Every Kalshi 15-minute up-or-down series — crypto, metals, energy, FX — with window status, YES price, close time, target price, what it settles on and the up rate over the last 96 windows, plus the same window on Polymarket (international) for BTC, ETH, SOL and XRP with each venue's settlement index, and our Bitcoin top-of-hour rule (WATCH mode). Pass series ("eth", "KXBTC15M") or asset_class.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 30). Values above 40 are clamped to 40. | |
| series | No | One series: ticker (KXETH15M) or asset ("eth", "gold", "euro"). | |
| open_only | No | Only series with a window open right now (default false). | |
| asset_class | No | crypto · commodity · currency · all (default all). |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | Kalshi 15-minute series: window status, YES price, close time, target, settlement source, up rate. |
| as_of | No | When the board was read. |
| sources | No | |
| our_model | No | Bitcoin only: our published top-of-hour rule — status (WATCH until it passes), paper record, last graded call, next decision time, and current_call: the bot's own :55 decision for the open window (PLAY = live, WATCH = paper). |
| tell_user | No | Show this sentence to the user first. |
| timestamp | No | |
| needs_input | No | |
| example_call | No | |
| data_freshness | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is covered; the description adds real behavioral scope beyond that — window status, close time, settlement index, the 96-window up rate, a Polymarket comparison, and a WATCH-mode rule. It does not mention freshness/latency, rate limits, or auth, which keeps it below 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?
Front-loaded with usage examples, which is good, but the middle of the description is a single run-on sentence enumerating return fields that an output schema already covers. That list costs length without adding decision-relevant 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?
An output schema exists, so return values needn't be explained, and the description still covers scope, venue comparison and the special rule. Enough for an agent to call it correctly, though unexplained references like 'WATCH mode' and the 96-window up rate are left for the agent to interpret from the payload.
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 limit, series, open_only and asset_class, including examples ('eth', 'gold', 'euro'). The description's 'Pass series ("eth", "KXBTC15M") or asset_class' mostly restates the schema, though it usefully shows the ticker form; 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 precise resource — live Kalshi 15-minute up-or-down series across crypto, metals, energy and FX — with an implied read verb and clear scope. The '15-minute' qualifier plus cross-venue Polymarket detail cleanly separates it from siblings like perps_board and commodity_edge, which cover different instrument sets.
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?
Front-loads two concrete triggering questions ('what is the ETH 15-minute market doing', 'which Kalshi 15-minute markets are open') that map directly to the series/open_only params. It gives clear context for when to reach for it, but never names an alternative tool or states when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_arbitrageFind Sports Arbitrage GapsARead-onlyInspect
Use for "where is the arbitrage" and "Kalshi vs Polymarket price gaps". Cross-venue gaps on the same sports contract (NFL, NBA, NHL, MLB) against Polymarket's international book: the gap in pp, the WATCH/ARB signal, the cheaper venue and whether both contracts settle the same way (settlement_match). Free: the top 3 gaps in full; Pro returns the whole board.
| Name | Required | Description | Default |
|---|---|---|---|
| minGap | No | Minimum gap in percentage points to include (default 3 = WATCH threshold). Accepts a number or a numeric string ("3", "3pp", "3%"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, openWorld, non-destructive), and the description adds substantial behavior beyond them: the exact signal vocabulary (WATCH/ARB), the fields returned (gap in pp, cheaper venue, settlement_match), and a tier gate — free returns only the top 3 gaps while Pro returns the full board. That tiering and settlement-comparison context is exactly what an agent needs to interpret results.
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 the use case in the first sentence, then lists the returned quantities compactly, and closes with the free/Pro distinction. Slightly dense with quoted trigger phrases and jargon, but every clause carries information and 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 return-value burden and does so: it enumerates the output fields and the free/Pro result-set sizes. For a one-optional-parameter read tool, an agent has everything needed to call it and interpret 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 100% and minGap's accepted formats (number or "3pp"/"3%") and default/WATCH-threshold meaning are already documented in the schema. The description mentions the WATCH/ARB signal and "top 3 gaps" but adds no new syntax or filtering semantics beyond what the schema provides, 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?
States a specific verb+resource — cross-venue arbitrage gaps on the same sports contract between Kalshi and Polymarket — and names the concrete deliverables (gap in pp, WATCH/ARB signal, cheaper venue, settlement_match). This is clearly separable from siblings like ladder_arb, combo_edge, or scan_mispricings, which cover different products or strategies.
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 explicit user-phrasing triggers ("where is the arbitrage", "Kalshi vs Polymarket price gaps") that map well to intent, plus a free-vs-Pro condition. It does not name an alternative tool or state when not to use it, so the routing guidance stops short of full 5-level specificity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kelly_sizeKelly Position SizeARead-onlyInspect
Compute the optimal Kelly position size for a prediction-market contract. Given your win probability, the market price (which sets the payout), your bankroll, and a Kelly fraction (full / half / quarter / eighth), returns the dollar stake and a risk rating. Use for "how much should I stake", "what is my position size", "Kelly sizing for this trade".
| Name | Required | Description | Default |
|---|---|---|---|
| bankroll | No | Total bankroll in dollars (e.g. 1000). Optional — omit it and the result is the % of bankroll to stake, without a dollar figure. Accepts a number or a numeric string ("1000", "$1,000"). | |
| fraction | No | Kelly fraction to apply. Half-Kelly is the common sharp-money default. One of: full · half · quarter · eighth. | |
| marketPrice | Yes | Contract price in cents (1–99). Sets the payout ratio. Accepts 55, "55%", "55¢", "$0.55", 0.55 or American odds (+120 / -150) — all read as 55%. | |
| winProbability | Yes | Your probability the contract resolves YES, in % (0–100). Accepts 55, "55%", "55¢", "$0.55", 0.55 or American odds (+120 / -150) — all read as 55%. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rating | No | Qualitative read of the sizing. |
| sources | No | |
| tell_user | No | Show this sentence to the user first. |
| timestamp | No | |
| needs_input | No | |
| example_call | No | |
| stake_dollars | No | Suggested stake in dollars (when a bankroll was given). |
| data_freshness | No | |
| full_kelly_pct | No | Full-Kelly fraction of bankroll, %. |
| applied_fraction_pct | No | The fraction applied, %. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description usefully adds that the tool is a pure computation returning a stake amount and a risk rating, which tells the agent there are no side effects. It doesn't discuss edge cases such as invalid probabilities or the meaning of the risk rating, keeping 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 compact sentences, front-loaded with the core action and its inputs/outputs before the example triggers. Every sentence earns its place, though the trailing quoted-phrase list is slightly listy and could be trimmed.
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, yet the description still concisely previews the return ('dollar stake and a risk rating'), and it names all four inputs with the optional bankroll implication clear via the schema. For a stateless calculator this is fully sufficient to call 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 the schema already documents each parameter in detail (bankroll optionality, accepted price/probability formats, fraction values). The description restates the same inputs — 'win probability, market price (which sets the payout), your bankroll, a Kelly fraction (full / half / quarter / eighth)' — adding only the note that market price sets the payout. 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?
States a specific verb and resource ('Compute the optimal Kelly position size for a prediction-market contract') and goes on to name the exact inputs and outputs, so it is clearly separable from siblings like calculate_ev and convert_probability. An agent knows immediately what this tool returns (dollar stake + risk rating).
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?
Provides concrete triggering phrases — "how much should I stake", "what is my position size", "Kelly sizing for this trade" — which give clear context for when to reach for this tool. It stops short of naming when NOT to use it or pointing to alternative siblings (e.g. calculate_ev for edge, not sizing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ladder_arbLadder Arb Scanner — Kalshi CFB + NFL spread/total ladders priced out of orderARead-onlyInspect
Use for "is any CFB ladder mispriced" and "where can I make a market on Kalshi". Kalshi college football and NFL spread/total strikes priced out of order: locked arbitrage, crossed-mid inversions and wide books worth making a market in, with both tickers and books, gross edge, volume and tier. Pro adds the resting orders, net-of-fee edge and quarter-Kelly size.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 20, max 100). Values above 100 are clamped to 100. | |
| sport | No | cfb · nfl · both (default both). | |
| signal | No | locked · inverted · wide · all (default all). | |
| min_edge | No | Minimum NET edge in cents (default 1). Accepts 2, "2c", "2". Accepts a number or a numeric string ("+150", "62%", "2.5"). | |
| min_volume | No | Minimum per-leg volume in dollars (default 20000). Accepts 20000, "$20,000". Accepts a number or a numeric string ("+150", "62%", "2.5"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds useful output context — that results include both tickers and books, gross edge, volume and tier, and that a Pro tier also returns resting orders, net-of-fee edge and quarter-Kelly size — which is real value beyond the annotations, though it says nothing about auth needs, rate limits, or what 'Pro'/'tier' actually means.
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 sentences, front-loaded with the triggering user questions before the mechanics, with no filler. It is dense but every sentence contributes (usage, scope/outputs, Pro tier differentiation).
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 correctly compensates by describing the returned fields, and all five optional parameters are fully documented in the schema. The remaining gap is the unexplained 'Pro'/'tier' concept and no sense of result ordering or pagination, but for a read-only scan tool it is largely 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 description coverage is 100%: every parameter documents its default, accepted formats and clamping behavior. The description adds no parameter-level meaning beyond that (its 'net-of-fee edge' phrasing only loosely echoes min_edge, which the schema already defines), 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 states a concrete verb and resource: scanning Kalshi college football and NFL spread/total strikes that are priced out of order for locked arbitrage, crossed-mid inversions and wide books. It is clearly more specific than a generic 'find arbitrage' tool, but it never names the siblings it is not (e.g. nfl_ladder or find_arbitrage), so an 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?
It gives explicit trigger questions — "is any CFB ladder mispriced" and "where can I make a market on Kalshi" — which map well to the tool's job. However, it offers no when-not guidance and does not route to alternative tools for the adjacent cases, so it stops short of full alternative-aware guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_pulseMarket Pulse — MacroARead-onlyInspect
The US macro-health composite (0–100) and regime plus the six category scores (growth, labor, inflation, rates, liquidity, sentiment). Returns the composite, the regime call and 2 category scores without an account, 4 to a signed-in account, and all six with Pro. Use for "how is the US economy", "macro regime", "risk-on or risk-off".
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | macro = the US macro-health composite (the only topic). One of: macro. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, non-destructive, openWorld), and the description adds the crucial behavioral detail annotations cannot: tiered access gating — composite/regime/2 categories unauthenticated, 4 signed in, all six with Pro. That is exactly the auth/permission context an agent needs before calling.
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 sentences, each carrying distinct load: what it returns, what access tier yields what, and when to use it. Front-loaded with the resource and 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?
With no output schema, the description correctly spells out the return payload (composite, regime call, category scores) and qualifies it by tier. Nothing an agent needs to invoke or interpret the result 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?
Only one optional parameter, and schema coverage is 100% — the schema already documents that 'macro' is the sole topic. The description restates the composite concept but adds no syntax or format meaning beyond the schema, 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?
States a specific resource (US macro-health composite, regime, six category scores) with a clear scope (0-100 composite, regime call). An agent can immediately tell this apart from the sibling odds/political tools, none of which touch macro 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?
Provides explicit trigger phrases — "how is the US economy", "macro regime", "risk-on or risk-off" — so the agent knows the intent this tool serves. It names no alternative tools or when-not-to-use conditions, but the siblings are unrelated domains, so the gap is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_leagueMy Sleeper League — your starters beside their Kalshi marketsARead-onlyInspect
Use for "show my fantasy team" and "what is Kalshi pricing my starters at". Give a Sleeper username (and a league name if you have several): your roster, each starter's opponent and kickoff, OUT and QB-gate flags, and every Kalshi prop strike on him this week with the best price per side. Market data; Pro adds our weekly projection.
| Name | Required | Description | Default |
|---|---|---|---|
| league | No | League name (partial) or Sleeper league id, when the user is in several. | |
| sleeper_username | No | Sleeper username (profile → username, not the display name). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only/open-world profile, so the description's job is to add context — and it does, enumerating exactly what comes back (opponent, kickoff, OUT and QB-gate flags, best price per side) plus the Pro-tier projection gate. It does not mention rate limits or data freshness, but the added payload detail is substantial.
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 sentences, trigger phrasings front-loaded, then inputs, then returned content. Slightly dense in the enumeration clause, but every clause describes real returned data rather than 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?
There is no output schema, so the description has to characterize the return shape — and it does so item by item, including the market-pricing and Pro-tier caveats. What remains thin is how multiple leagues are disambiguated and whether the username is strictly required, though the schema partially covers the latter.
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 both parameters are already documented in the schema, including the 'when the user is in several' condition for league. The description restates that same condition for league and adds only that the username is required in practice, so it adds little beyond the structured fields. 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 opens with literal user triggers ('show my fantasy team', 'what is Kalshi pricing my starters at') and then states the concrete resource: roster, starter matchups, and per-starter Kalshi strikes. This is distinguishable from siblings like player_outlook or start_sit, which do not mix roster display with market pricing.
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 clearly states when to reach for this tool via quoted user phrasings, and implies the input condition for the league parameter. It never names a competing sibling or an exclusion, so it stops short of a full routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_game_boardNBA Game Line Board (Kalshi vs the books)ARead-onlyInspect
Use for "Knicks moneyline on Kalshi vs the books" and "cheapest place for the Celtics spread tonight". Kalshi NBA moneyline, spread and total beside DraftKings, FanDuel, BetRivers, Fanatics, ESPN, Novig and ProphetX at the same line: the cheapest venue per side, Kalshi fee included. Market prices only, no model.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Two teams, e.g. "BOS @ DET". | |
| team | No | Team code or name (NYK, Knicks). | |
| limit | No | Max games (default 5). Values above 20 are clamped to 20. | |
| market | No | Optional market. One of: moneyline · spread · total. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds genuinely useful behavioral context beyond that: pricing is 'market prices only, no model' and the Kalshi fee is included in the comparison. It omits pagination/return-shape details, but that is a minor gap.
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 usage trigger, followed by scope and a key caveat in two sentences. The example queries are slightly verbose but they earn their place by anchoring invocation phrasing.
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 four optional params and no output schema, the description does the needed work of explaining what the result represents (the cheapest venue per side, fee included) and what it is not (model output). Coverage is adequate for a read-only board tool; only pagination/response-format specifics are unaddressed.
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% (game, team, limit with clamping note, market enum), so the schema carries parameter meaning. The description reinforces that moneyline/spread/total are the markets but adds no syntax or format detail beyond what the schema already documents.
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 scope: Kalshi NBA moneyline/spread/total compared against a named list of sportsbooks at the same line, with the cheapest venue per side. An agent can distinguish this from player-prop siblings (nba_prop_board) and generic tools (best_available) 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?
The 'Use for...' examples (Knicks moneyline on Kalshi vs the books, cheapest Celtics spread tonight) give concrete trigger phrasings that map directly to invocation. It stops short of naming explicit alternatives or when-not-to-use cases, so it is strong context but not full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_injury_impactNBA Injury Report + Who Benefits (with/without splits)ARead-onlyInspect
Use for "Embiid's out tonight — who benefits?" and "who's out in the NBA today". Today's NBA absences from the official injury report, and for each absent star the teammates whose minutes, points, rebounds, assists and usage rose in past games without him (last two seasons, sample size on every row), beside today's Kalshi prop prices. Questionable players fork into plays/sits branches until ruled. Historical splits only, no projection.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Two teams, e.g. "BOS @ NYK". | |
| stat | No | Stat to rank beneficiaries by (default points). One of: pts · reb · ast · min · usg · fg3m · stl · blk. | |
| team | No | Team code or name (PHI, Sixers). | |
| player | No | The absent player, or a teammate to look up (partial name). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses genuinely useful behavior: sample size on every row, a two-season lookback window, Kalshi prop prices shown alongside, questionable players forking into plays/sits branches, and the explicit 'no projection' caveat. This is rich context an agent could not infer from structured fields.
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 'Use for...' trigger phrases and dense with information; nearly every clause earns its place. It is a long single paragraph rather than cleanly segmented, which keeps it from a 5.
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 return-value burden well: it explains that each absent star yields beneficiary rows with per-row sample sizes and side-by-side Kalshi prices, and notes the plays/sits branch behavior for questionable players. An agent knows what it will get 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 description coverage is 100%, so all four parameters are already documented in the schema. The description echoes the stat concepts (minutes, points, rebounds, assists, usage) but adds no format or default guidance beyond what the schema provides, 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?
States a specific verb+resource: NBA absences from the official injury report plus the teammates whose stats rose without the absent star. The example queries ('Embiid's out tonight — who benefits?') make the intent unmistakable and distinguish it from prop/game board 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?
The 'Use for...' framing plus two concrete example questions give clear when-to-use context, and 'Historical splits only, no projection' sets a boundary. It never names a sibling alternative (e.g. nba_prop_board) explicitly, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nba_prop_boardNBA Prop Price Board (Kalshi vs the books)ARead-onlyInspect
Use for "where is LeBron's points line cheapest tonight". Every Kalshi NBA player-prop strike (points, rebounds, assists, threes) beside DraftKings, FanDuel, BetRivers, Fanatics, ESPN, Novig and ProphetX at the same strike: the cheapest venue per side, Kalshi fee included. Market prices only, no model.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Two teams, e.g. "BOS @ DET". | |
| team | No | Team code or name (LAL, Lakers). | |
| limit | No | Max rows (default 15). Values above 50 are clamped to 50. | |
| player | No | Player name (partial). | |
| statType | No | Optional stat. One of: pts · reb · ast · threes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so safety is covered. The description adds genuinely useful behavior: prices are market-only (no model output) and the Kalshi fee is included in the cheapest-venue computation, which materially affects interpretation.
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 use-case trigger, then the return shape, in two tight sentences with no filler. The verbatim user-question framing is slightly informal for a spec but earns its place by anchoring intent.
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 describing returns, and it does: cheapest venue per side across named books with fees included. Combined with 100% schema coverage on inputs and read-only annotations, an agent has enough to invoke it correctly; only the exact response row shape is unspecified.
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 (game, team, limit clamping, player, statType with its four options) is already documented in the schema. The description's mention of points/rebounds/assists/threes only restates the statType enum, adding no syntax or format detail beyond the schema. 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?
Names a specific resource (every Kalshi NBA player-prop strike) and the exact output (the same strike priced beside DraftKings, FanDuel, BetRivers, Fanatics, ESPN, Novig, ProphetX, cheapest venue per side). Clearly distinct from siblings like nfl_prop_board, explain_prop, and best_available.
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 opening quote — "where is LeBron's points line cheapest tonight" — gives a concrete trigger scenario that makes the intended use obvious. However, it states no when-not condition and does not explicitly route the agent to alternatives (e.g. nfl_prop_board for NFL props, explain_prop for explanations).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nfl_edgeNFL Edge (model vs Kalshi)ARead-onlyInspect
Use for "which NFL games are mispriced on Kalshi" and "NFL win total, MVP or Super Bowl edges". Our NFL model vs live Kalshi prices — this week's game positions, season win totals, MVP and championship odds: model probability, price, edge and side. tickers[] checks a watchlist (futures, mvp, championship). Pro — sign in with PredictionMarketsPicks, or a Pro API key.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 10). Values above 25 are clamped to 25. | |
| market | No | game = this week moneyline edges; futures = season win totals; mvp = KXNFLMVP; championship = playoff/conference/Super Bowl. One of: game · futures · mvp · championship. | |
| minEdge | No | Minimum absolute edge in pp (default 4) — futures / mvp / championship only; game rows are the published positions. Ignored when tickers[] is passed. Accepts a number or a numeric string ("3", "3pp", "3%"). | |
| tickers | No | Optional Kalshi ticker watchlist (up to 25) — e.g. paste the tickers from your Kalshi Pro screener or Canvas to get PMP's edge on exactly those markets. Full market or 3-segment event tickers both work. Tickers PMP doesn't model are returned as not_covered (never a fabricated edge). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds genuinely non-structured context: a Pro auth requirement (sign in with PredictionMarketsPicks or a Pro API key) and the sourcing guarantee that unmodeled tickers return not_covered rather than fabricated edges.
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 the user-intent queries, then packs market scope, output fields, watchlist behavior and auth into a compact block. It is dense but not padded; the em-dash clause is slightly run-on but each phrase carries 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 read-only tool with no output schema, the description discloses the returned fields (probability, price, edge, side), the auth gate and the tickers/not_covered behavior, which is enough to call it correctly. Minor gaps remain around pagination and the exact shape of game rows versus futures rows.
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 limit, market, minEdge (including its ignore-when-tickers rule) and tickers. The description only lightly reinforces the tickers watchlist use case without adding syntax or format detail beyond the schema, 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?
States a specific verb+resource: an NFL model vs live Kalshi prices surfacing mispricings, with the concrete market coverage (game positions, win totals, MVP, championship) and output fields (model probability, price, edge, side). It is clearly distinguishable from siblings like nfl_prop_edge, nfl_power_ratings and nhl_edge without opening any 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?
Opens with explicit when-to-use phrasing ("which NFL games are mispriced on Kalshi", "NFL win total, MVP or Super Bowl edges"), giving a clear invocation context. It does not name the alternatives an agent should prefer (nfl_prop_edge for props, scan_mispricings or nhl_edge), so there is context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nfl_ladderThe Ladder — NFL strike ladders: every Kalshi strike vs the PMP distributionARead-onlyInspect
Use for "where does the model disagree with Kalshi on the Rams spread" and "biggest ladder gaps this week". Every NFL strike ladder — spreads, season win totals, player props — with Kalshi's price at each strike beside our distribution and a SHAPE / LOCATION / PRICED / PARTIAL verdict. Our number is published only between 30% and 70%.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Verdict filter. One of: shape · location · agree · partial. | |
| team | No | Team abbrev (SEA, LAR, JAX) — ladders involving that club. | |
| limit | No | Max ladders (default 8). Values above 25 are clamped to 25. | |
| family | No | Ladder family. Omit for all three. One of: spread · season_wins · props. | |
| player | No | Player name (partial, case-insensitive) — prop ladders only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | Ladders: subject, stat, verdict, and each rung with market and model (model only inside the published band). |
| week | No | NFL week. |
| count | No | Ladders returned. |
| sources | No | |
| tell_user | No | Show this sentence to the user first. |
| timestamp | No | |
| needs_input | No | |
| example_call | No | |
| data_freshness | No | |
| published_band | No | { lo, hi } — our probability is published only inside this band. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint/destructiveHint, so the safety profile is covered. The description adds genuine behavioral context beyond that: the model's number is only published between 30% and 70%, and outputs carry a SHAPE/LOCATION/PRICED/PARTIAL verdict — both are things an agent needs to interpret results.
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 'Use for' cue and two sentences that each carry content — resource, contents, verdict taxonomy, and the publication constraint. The example queries are slightly verbose but earn their place by grounding the use case.
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, families, verdicts, and the 30-70% constraint. The remaining gap is the verdict term mismatch with the schema enum and lack of any note on default/clamp behavior referenced in the 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 coverage is 100%, so the schema already documents all five filters, and the baseline is 3. The description adds little, and worse it introduces a conflicting label: it lists the verdict as 'PRICED' while the `kind` enum uses 'agree', which could mislead an agent filtering on that value.
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 (NFL strike ladders — spreads, season win totals, player props) and specific content (Kalshi's price at each strike beside our distribution plus a verdict). The example queries ('where does the model disagree with Kalshi on the Rams spread') make the tool's function unambiguous and separable from generic edge tools like nfl_edge or ladder_arb.
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 'Use for ...' framing supplies two concrete triggering questions, giving clear context for when to reach for this tool. However, it names no alternatives or exclusions, leaving the agent to infer when explain_ladder or ladder_arb would be the better choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nfl_power_ratingsNFL Power Ratings (PWR)ARead-onlyInspect
The PredictionMarketsPicks NFL power ratings — PWR for all 32 teams: points per game above an average team on a neutral field, where PWR = Off PR + Def PR + ST PR. Includes each team's rank and tier. Use for "best NFL teams by power rating", "NFL power rankings 2026", "is Baltimore overrated", "how good is Kansas City", "NFL team ratings".
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Optional team abbreviation (e.g. "KC", "SF", "LAR") — returns just that team's rating + rank. | |
| tier | No | Optional: only teams in this tier — one of "Elite" (PWR ≥+7), "Contender" (≥+4), "Playoff" (≥+1), "Average" (≥−2), "Below Avg" (≥−5), "Rebuild" (<−5). A tier with no teams at current ratings returns an empty board, not an error. | |
| limit | No | Max teams to return, best rating first (default 32 = full board). Values above 32 are clamped to 32. |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | No | When the ratings were generated. |
| count | No | Teams returned. |
| teams | No | Rank, team, PWR (points per game above average, neutral field) and tier. |
| season | No | Season. |
| sources | No | |
| tell_user | No | Show this sentence to the user first. |
| timestamp | No | |
| needs_input | No | |
| example_call | No | |
| data_freshness | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond that: the exact meaning of the returned number, and that rank and tier are bundled in. It stops short of noting empty-result or clamping behavior in prose (those live in the 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?
Front-loads the resource and metric definition, then the usage examples. The example-query list is slightly long but each phrase maps to a real lookup pattern, so nothing is truly 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?
With an output schema present the description needn't explain return values, annotations cover the safety profile, and all three parameters are documented. It supplies the metric definition an agent needs to interpret results; only minor gaps (empty-board behavior in prose) remain.
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 team, tier, and limit (including tier thresholds and the clamping rule). The description adds no parameter syntax or format detail beyond that, so the baseline 3 is correct.
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 (NFL power ratings / PWR for all 32 teams) and defines the metric precisely, including the PWR = Off PR + Def PR + ST PR formula and that rank and tier are included. It does not name or contrast a sibling tool, so it stops short of the sibling-differentiation bar for 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?
The 'Use for ...' clause gives concrete triggering queries ('best NFL teams by power rating', 'is Baltimore overrated'), which is clear usage context. It offers no exclusions or explicit pointers to alternative siblings, so it is a solid 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nfl_prop_boardNFL Prop Market Board (Kalshi vs the books vs exchanges)ARead-onlyInspect
Use for "where is the best price on receiving yards" and "is Kalshi cheaper than the books". Best price on every NFL prop this week: Kalshi (fee included) vs five books (DraftKings, FanDuel, BetRivers, Fanatics, ESPN) and the Novig and ProphetX exchanges — the best price per side, how much cheaper Kalshi is than the books, the consensus gap, and the Kalshi close once a strike settles. Filter by team, game, player or stat.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Game anchor away-home, e.g. "ne-sea" — rows for that game only. | |
| team | No | Team abbrev (SEA, NE, LAR, JAX) — rows for that club only. | |
| limit | No | Max rows (default 15). Values above 50 are clamped to 50. | |
| player | No | Player name (partial, case-insensitive), e.g. "Nacua". | |
| gapsOnly | No | Only strikes where Kalshi and the consensus are 5¢+ apart (default false). | |
| statType | No | Optional prop type filter. One of: pass_yds · pass_tds · rush_yds · rec_yds · receptions · anytime_td. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | Priced Kalshi prop strikes: player, stat, strike, Kalshi book, consensus, venue quotes, gap, best price per side. |
| week | No | NFL week. |
| count | No | Rows returned. |
| sources | No | |
| summary | No | Board counts: listed, booked, consensus-priced, gaps, arbs, games. |
| tell_user | No | Show this sentence to the user first. |
| timestamp | No | |
| needs_input | No | |
| example_call | No | |
| data_freshness | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and scope profile is covered. The description adds meaningful behavior the annotations cannot: Kalshi prices include fees, five specific books plus two exchanges are aggregated, and a Kalshi close is captured once a strike settles. No rate limits or refresh cadence are mentioned.
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?
Trigger queries are front-loaded, and the remaining single sentence packs the source list and return content without filler. Every clause earns its place given the tool's comparison scope.
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-value details need not be explained, and the description still previews the key outputs (best price per side, Kalshi's discount vs books, consensus gap, settled close). Inputs and intent are fully covered for a read-only board 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%, so all six filters (game, team, player, statType, limit, gapsOnly) are already documented with formats and defaults. The closing 'Filter by team, game, player or stat' only restates a subset of what the schema says and omits gapsOnly and limit, adding little beyond 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?
States a specific resource (best price on every NFL prop this week) and enumerates the exact sources it compares: Kalshi with fees, five named books, and the Novig/ProphetX exchanges. An agent immediately knows this is a cross-venue price board, though it never explicitly distinguishes itself from siblings like nfl_prop_edge or nba_prop_board.
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?
Opens with two concrete trigger queries — 'where is the best price on <player> receiving yards' and 'is Kalshi cheaper than the books' — which map the tool to a clear intent. It does not state when to prefer alternatives (e.g., nfl_prop_edge for single-strike edge math), so no exclusions are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nfl_prop_edgeNFL Player Prop Edge (model vs Kalshi)ARead-onlyInspect
Use for "best NFL props today" and "receiving yards prop value". Our projection vs the Kalshi "X or more" prop line: the contract, the YES/NO call, our odds and Kalshi's price for that side, the projection and the edge, with WATCH rows labelled. Live in season. Pro — sign in with PredictionMarketsPicks, or a Pro API key.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 10). Values above 25 are clamped to 25. | |
| minEdge | No | Min absolute edge in pp (default 5). Accepts a number or a numeric string ("3", "3pp", "3%"). | |
| propType | No | Optional filter by prop type. One of: pass_yds · pass_tds · rush_yds · rec_yds · receptions · anytime_td. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: the exact shape of returned rows (including 'WATCH rows labelled'), the temporal constraint ('Live in season'), and the auth requirement (Pro, sign in with PredictionMarketsPicks or a Pro API key).
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?
Compact and front-loaded: the usage trigger leads, then the return shape, then the availability and auth caveats. No sentence is filler, and the field enumeration packs useful detail into a short span.
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 compensates by enumerating the returned fields, and it covers auth and season availability, which are the real gating concerns for a live prop tool. For a zero-required, three-parameter tool with full schema coverage and annotations, nothing essential 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%, so limit, minEdge, and propType are already fully documented in the schema. The description hints at prop-type filtering via 'receiving yards prop value' but adds no syntax, defaults, or clamping detail beyond what the schema provides, 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?
States a specific verb+resource: it compares 'our projection vs the Kalshi
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?
Front-loads concrete trigger queries ('best NFL props today', 'receiving yards prop value'), giving clear context for when to reach for it. There is no explicit exclusion or routing to alternatives such as nfl_prop_board, so it falls short of a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nfl_win_probabilityNFL Win Probability CalculatorARead-onlyInspect
Use for "who wins Chiefs vs 49ers" and "what does a -7 spread mean". Pass homeTeam + awayTeam (or game, or one team) for our QB-gated model line (raw power ratings if unscheduled), or a spread (home favored negative). Returns win, cover and over/under probability, the projected score and our own total; neutral-site games get no home edge.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Or name the game in one string — "Bills vs Chiefs", "BUF@KC", "Buffalo at Kansas City". The schedule decides which side is home. | |
| total | No | Game total (over/under points) — this is the LINE you want tested, not our projection. Defaults to the model’s league-average total if omitted. Our own projected total comes back as `model_total` regardless of what you pass here (teams mode only). | |
| spread | No | Point spread from the home team's perspective — home favored is NEGATIVE (e.g. -6.5). Provide this OR homeTeam+awayTeam. | |
| awayTeam | No | Away team — same formats as homeTeam (SF, 49ers, San Francisco 49ers). Used with homeTeam. | |
| homeTeam | No | Home team — abbrev (KC), nickname (Chiefs), full name (Kansas City Chiefs) or city (Kansas City) all work. Auto-derives the spread from PMP power ratings. |
Output Schema
| Name | Required | Description |
|---|---|---|
| basis | No | How the spread was derived. |
| qb_gate | No | PASS/ADJUSTED/FORK (quote both fork_lines)/HOLD (no number). |
| sources | No | |
| over_pct | No | Probability the game goes over `total`, %. |
| tell_user | No | Show this sentence to the user first. |
| this_week | No | This week's games as { homeTeam, awayTeam } (when no game was named). |
| timestamp | No | |
| model_total | No | Our own projected total (teams mode). |
| needs_input | No | |
| spread_home | No | Expected home margin in points — positive = home favored (the input `spread` uses the opposite sign). Same value as expected_home_margin. |
| away_win_pct | No | Away win probability, %. |
| example_call | No | |
| home_win_pct | No | Home win probability, %. |
| data_freshness | No | |
| home_cover_pct | No | Home cover probability, %. |
| interpreted_as | No | Which teams the inputs were read as. |
| expected_home_margin | No | Expected home margin in points — positive = home favored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/non-destructive/closed-world, so the bar is lower, and the description still adds real behavioral context: it is a QB-gated model, falls back to raw power ratings for unscheduled games, auto-derives the spread from PMP ratings, and gives neutral-site games no home edge. Those model-level traits go well beyond the annotation surface.
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 two sentences are front-loaded with the triggering example queries before the mechanics, and every clause (input combos, spread sign, return set, neutral-site rule) carries information. It is dense and heavily parenthetical, which costs a little readability, but 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?
An output schema exists so return values need not be described, yet the description still summarizes them and covers the key edge cases (unscheduled games, neutral sites, model_total vs supplied total). For a 5-param zero-required tool this is essentially complete, with only the absence of named-alternative routing keeping it from the top.
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 more by clarifying the spread sign convention (home favored negative) and the OR-combination logic across homeTeam+awayTeam / game / single team / spread that the schema does not state as a decision. It adds combination guidance rather than merely restating field docs.
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+resource (NFL win probability), pairs it with two example user phrasings so intent-matching is trivial, and pins down the output family (win, cover, over/under probability, projected score). It implicitly separates itself from NFL power-rating siblings by calling this "our QB-gated model line," though it never names another tool 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?
It gives clear, actionable usage context: pass homeTeam+awayTeam, or game, or a single team, or a spread. The example queries ("who wins Chiefs vs 49ers", "what does a -7 spread mean") anchor when to reach for it. It stops short of any explicit when-not-to-use or named alternative, so it is strong context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhl_edgeNHL Edge — Goal Light model vs KalshiARead-onlyInspect
Use for "NHL predictions tonight" and "Stanley Cup odds". Tonight's NHL games on Kalshi — moneyline, puck line, totals, period markets — as Market · Model · Fair, starting goalies checked first. market=goals: anytime and first-goal contracts; market=futures: Cup, conference and division markets on Kalshi and Polymarket (international book) vs a 10,000-season sim. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Optional NHL club to filter — code (CAR, EDM, LAK), Kalshi code (LA, TB), nickname ("Oilers") or city ("Edmonton"). | |
| limit | No | Max rows (default 16). Values above 40 are clamped to 40. | |
| market | No | game = tonight's board (moneyline, puck line, totals, periods); goals = player-goal contracts; futures = Stanley Cup + season markets. One of: game · goals · futures. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered; the description adds real context beyond them — data sources (Kalshi, Polymarket as an international book), the "starting goalies checked first" precondition, the 10,000-season sim backing futures, and the "Free" cost note. It stops short of describing latency, rate limits, or failure 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?
The description is front-loaded with the trigger phrases and then moves through scope, output shape and market modes in three dense sentences with little redundancy. The em-dash and middle-dot notation (Market · Model · Fair) is compact but adds a small parsing burden.
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 zero-required-parameter, read-only tool with no output schema, the description supplies the essentials: what the rows represent, the two data sources, and the market modes. The output format summary compensates for the missing output schema, though it does not describe row granularity or error cases.
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 that by explaining what each market value actually yields (goals = anytime and first-goal contracts; futures = Cup, conference and division markets), which goes beyond the schema's terser "player-goal contracts" and "Stanley Cup + season markets". It adds no detail on team or limit, but those are fully documented 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 description names a specific resource (tonight's NHL games on Kalshi priced as Market · Model · Fair) and enumerates the market types, so an agent can tell it serves NHL betting-model comparisons. It does not use an explicit verb like "get" or "list", and sibling differentiation rests entirely on the word "NHL" rather than a named contrast with tools like nfl_edge.
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 for 'NHL predictions tonight' and 'Stanley Cup odds'" gives concrete trigger queries that map directly to the tool, and the market=goals / market=futures clauses clarify which mode serves which need. No exclusions or named alternatives are given, so an agent must infer when not to reach for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perp_liquidationKalshi Perp Liquidation — where a leveraged position gets closed outARead-onlyInspect
Use for "where does a 5x bitcoin long liquidate on Kalshi". Estimates a Kalshi perp's liquidation price and the % move to it from Kalshi's risk parameters (a 5x BTC long is about 8% away, not the 20% the 100÷leverage rule implies), plus fees and expected funding. An estimate; Kalshi's app shows the exact one. Assets: btc, eth, sol, xrp, doge, hype, link, gold, silver, platinum, palladium. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | Direction. One of: long · short. | |
| asset | No | The perp. One of: btc · eth · sol · xrp · doge · hype · link · gold · silver · platinum · palladium. | |
| entry | No | Entry price (default: the live price). Accepts a number or a numeric string ("+150", "62%", "2.5"). | |
| margin | No | Margin in dollars (default 1000). Accepts a number or a numeric string ("+150", "62%", "2.5"). | |
| leverage | No | Leverage, e.g. 5 or "5x". Capped at Kalshi’s maximum for the size and side. | |
| hold_days | No | Days held, for the funding estimate (default 7). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that: this is an estimate with a stated error characteristic (Kalshi's app shows the exact value), it incorporates fees and expected funding, and it is free. That is useful disclosure, though return-level detail is left implicit.
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 trigger phrase and the core explanation are front-loaded and the whole thing reads as one efficient block. The 11-asset enumeration duplicates the schema enum, which is mild waste, but the example and the estimate caveat earn their 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?
With no output schema, the description carries the return-value burden and does so — it names the liquidation price, the percent move, fees, and expected funding. Combined with annotations covering safety and a 100%-documented input schema, an agent has everything needed to call this 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 (side, asset, entry, margin, leverage, hold_days) is already documented with defaults and accepted formats. The description restates the asset list and frames leverage semantics in prose but adds no parameter syntax or format meaning beyond 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 states a specific verb and resource — it estimates a Kalshi perp's liquidation price and the percent move to it — with a concrete example (5x BTC long ~8% away). It is unambiguous about what the tool does, but it never distinguishes itself from the closely related sibling perps_board, so it stops 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?
"Use for 'where does a 5x bitcoin long liquidate on Kalshi'" gives a clear, concrete triggering context so the agent knows when to reach for it. However, there are no when-not conditions and no explicit routing against alternatives like perps_board or kelly_size.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perps_boardKalshi Perps Board — price, leverage and funding for every perpARead-onlyInspect
Use for "Kalshi perps funding rate" and "how much leverage on Kalshi gold perps". Every Kalshi perpetual future: price, 24h volume, open interest, max leverage long and short, funding cadence, and what funding has cost a long since launch. Pass asset ("btc", "gold") for one.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | One perp: symbol or name ("btc", "gold", "XAG"). | |
| limit | No | Max rows (default 25). Values above 30 are clamped to 30. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | Kalshi perps: price, 24h volume, open interest, max leverage, funding. |
| as_of | No | When the board was read. |
| sources | No | |
| tell_user | No | Show this sentence to the user first. |
| timestamp | No | |
| needs_input | No | |
| example_call | No | |
| data_freshness | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that by disclosing the return payload's shape, including a derived metric (cumulative funding paid by a long since launch) and the fact that all perps are returned by default.
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 sentences, front-loaded with usage triggers before the field inventory, with no filler sentences. The field enumeration is long but each item earns its place by telling the agent what data comes back.
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, the return values need not be described, and the read-only/open-world annotations cover safety. The description still supplies enough context (default full-board behavior, asset narrowing, funding-cadence framing) that an agent can invoke it confidently; only an explicit sibling tie-breaker 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 both parameters are fully documented in the schema, including the limit clamp at 30. The description repeats the asset examples ("btc", "gold") but adds no syntax or format detail the schema lacks, making the baseline 3 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 resource and enumerates exactly what the board contains: price, 24h volume, open interest, max leverage long/short, funding cadence, and cumulative funding cost for longs. An agent can distinguish this from siblings like perp_liquidation (liquidation events) or calculate_ev 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?
Opens with concrete user-phrasing triggers ("Kalshi perps funding rate", "how much leverage on Kalshi gold perps") and tells the agent how to narrow the result by passing an asset. It stops short of naming an alternative or stating when-not-to-use (e.g., versus perp_liquidation), so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
player_outlookPlayer This Week — Kalshi prop linesARead-onlyInspect
One NFL player this week — every Kalshi prop line, the best price across venues, and our probability at each strike. Free. Use for "is a good play this week", " props".
| Name | Required | Description | Default |
|---|---|---|---|
| player | No | Player name, full or partial (e.g. "Puka Nacua", "Bijan"). | |
| scoring | No | Scoring format: standard, half_ppr (default), or ppr (full PPR). Overrides a platform preset. Works for Yahoo/ESPN/Sleeper defaults. One of: standard · half_ppr · ppr. | |
| platform | No | League platform — applies its default scoring, size, roster + best-ball settings (overridable by explicit scoring/teams). Underdog/DraftKings are best ball. One of: yahoo · espn · sleeper · nfl · cbs · fantrax · draftkings · underdog. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds useful context — it is free and aggregates prices across venues plus a model probability — but omits pagination, freshness, or failure 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 core scope and what the response contains. Slightly informal phrasing but no wasted content.
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?
No output schema exists, so the description carries return-value burden — and it does describe the payload (prop lines, best price across venues, probability at each strike). With 0 required params and full schema coverage, remaining gaps are 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%, so all three parameters (player, scoring, platform) are already documented in the schema. The description adds no parameter-level syntax or defaults beyond what the schema provides, 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+resource+scope: 'One NFL player this week — every Kalshi prop line, the best price across venues, and our probability at each strike.' An agent can distinguish this from siblings like compare_players or explain_player.
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?
Provides example queries ('is <player> a good play this week', '<player> props') that imply usage context, but does not name alternatives or state when NOT to use this tool versus explain_player or compare_players.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
race_odds2026 Race Odds — one Senate, governor or House race with every Kalshi legARead-onlyInspect
Use for "who wins the Kansas Senate race" and "Michigan governor odds". Live Kalshi odds for one 2026 Senate, governor or competitive House race, by state, code, slug or district ("TX-34"): every leg's price, volume and link, the seat holder and rating, forecaster bands, and the race page. Prices are never estimated.
| Name | Required | Description | Default |
|---|---|---|---|
| race | Yes | State name or code, a race slug (kansas-senate, michigan-governor, tx-34-house), or a House district (TX-34). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint/destructiveHint=false, so safety is covered. The description adds genuine context beyond them: live Kalshi data, 'prices are never estimated' (a data-freshness/trust guarantee), and an enumeration of what each leg contains.
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 usage examples before the payload description. Efficient, though the trailing list of returned fields is long enough that it could be tightened.
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 describing returns and does so explicitly (leg price, volume, link, seat holder and rating, forecaster bands, race page). For a single-parameter read tool, nothing needed to call it correctly 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% and the single 'race' parameter is already documented with accepted formats. The description restates those formats (state, code, slug, 'TX-34') without adding syntax or disambiguation rules beyond the schema, 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+resource: 'Live Kalshi odds for one 2026 Senate, governor or competitive House race.' The 'one race' scoping distinguishes it from senate_map (all races) and fed_rate_odds (a different market class), so an agent can differentiate without opening schemas.
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?
Opens with concrete trigger phrasings ('who wins the Kansas Senate race', 'Michigan governor odds') that map directly to the intended call. It gives clear context for when to use it but names no exclusion or alternative tool for adjacent cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_mispricingsScan MispricingsARead-onlyInspect
Scan Polymarket contracts for mispricings against the PMP model (a probability swarm). Returns each market where the model disagrees with the price, the direction to take, the edge in percentage points, and quarter-Kelly sizing, sorted by absolute edge. The scanner is being rebuilt for the 2026 midterms and usually returns no rows today; the response says when it last ran. Pro — sign in with PredictionMarketsPicks, or a Pro API key. Use for "where is the edge today", "mispriced markets", "what should I trade".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return (default 10). Values above 25 are clamped to 25. | |
| minEdge | No | Minimum absolute edge in pp to include (default 5). Accepts a number or a numeric string ("3", "3pp", "3%"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld annotations by disclosing that the scanner is being rebuilt and usually returns zero rows today, that the response reports the last run time, that results are sorted by absolute edge, and that Pro auth is required. An agent knows both the failure mode and the auth prerequisite before calling.
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 purpose and return shape lead, with the empty-result caveat and auth note following. Every sentence carries information, though the quoted trigger phrases add some length that could be trimmed.
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 compensates by describing the returned fields (market, direction, edge, Kelly sizing, sort order, last-run timestamp). Between that and the schema, an agent has everything needed to call and interpret this 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 limit's default/clamp behavior and minEdge's accepted formats ('3', '3pp', '3%') are fully documented in the schema itself. The description adds nothing parameter-specific, which is the expected baseline 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?
States a specific verb and resource — scanning Polymarket contracts for mispricings against the PMP probability-swarm model — and enumerates the output (direction, edge in pp, quarter-Kelly sizing). This is distinguishable from siblings like find_arbitrage or calculate_ev without opening any 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 concrete invocation triggers ('where is the edge today', 'mispriced markets', 'what should I trade') and states the access gate (Pro sign-in or API key). It does not compare itself against alternatives such as find_arbitrage or edge_alerts, so it stops short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
senate_map2026 Senate Map — every seat, market price vs structure rating vs forecastersARead-onlyInspect
Use for "2026 Senate map" and "which Senate seats are toss-ups". Every 2026 Senate seat: holder and role, structure rating, forecaster bands where tracked, and the live Kalshi price (Democrat win probability where provable), closest race first, with a page URL per seat. Prices are never estimated — an unpriced seat returns null.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and non-destructive behavior, so the safety profile is covered. The description adds real behavioral context beyond that: results are ordered closest race first, each seat carries a page URL, and prices are never estimated — an unpriced seat returns null. The null-vs-estimate guarantee is exactly the kind of disclosure that prevents an agent from misreading a missing value.
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, both front-loaded: the first is the retrieval trigger, the second is the payload. Every clause (holder, rating, forecaster bands, price, sort order, URL, null policy) earns its place with 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?
With no parameters, no output schema and full annotation coverage, the description's only remaining job is describing the returned data, which it does field by field, including sort order and the null-pricing edge case. Nothing needed to invoke or interpret the result 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?
The tool takes zero parameters, so the baseline of 4 applies: there is no parameter syntax for the description to clarify, and the schema is trivially complete. The description correctly spends no words on inputs.
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 (every 2026 Senate seat) and enumerates exactly what each entry contains: holder and role, structure rating, forecaster bands, live Kalshi price, page URL. The scope ('every seat') is unambiguous and the Senate focus distinguishes it from the broader siblings like race_odds.
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 explicit trigger phrasing: 'Use for "2026 Senate map" and "which Senate seats are toss-ups"', which tells the agent the question shapes this tool answers. It stops short of naming an alternative (e.g., race_odds) or a condition where this tool is the wrong choice, so it is clear context rather than full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sleepers_and_bustsOverpriced & Underpriced This WeekARead-onlyInspect
Every NFL player whose Kalshi prop price the PredictionMarketsPicks model disagrees with this week, ranked, each marked underpriced (model above the market) or overpriced (model below) with the stat driving it. Free, the complete list, no key. Which strike, at what price and by how much is the Pro nfl_prop_edge tool. Use for "undervalued players this week", "who is the market overpricing", "which players is the market wrong on", "overrated players week N", "where does your model disagree with the market most", "sleepers this week", "busts to avoid this week".
| Name | Required | Description | Default |
|---|---|---|---|
| position | No | Optional position filter. One of: QB · RB · WR · TE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnly, non-destructive, closed-world), so the bar is lower. The description adds genuinely useful context beyond them: it is free, needs no key, and returns the complete (non-truncated) list, which affects how an agent should treat coverage.
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 core purpose, the differentiator, and access facts before the query list. The seven quoted trigger phrases are somewhat repetitive, but each sentence still 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?
With no output schema, the description carries return-shape burden and does so reasonably: ranked list, underpriced/overpriced label, and the stat driving each call. Minor gaps (sort order, list size) remain but 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?
Only one optional parameter (position) and schema description coverage is 100%, so the schema fully documents it. The description adds nothing about the position filter, so the baseline 3 for high-coverage schemas 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+resource: every NFL player whose Kalshi prop price the PredictionMarketsPicks model disagrees with this week, ranked, marked underpriced/overpriced with the driving stat. It distinguishes itself from the paid alternative by scoping to the complete disagreement list rather than strike-level detail.
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?
Explicit when-to-use with concrete query phrasings ("undervalued players this week", "who is the market overpricing", "busts to avoid") and an explicit when-not/alternative: strike, price and magnitude live in the Pro nfl_prop_edge tool. Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_sitStart/Sit by the Market — what Kalshi prices each player atARead-onlyInspect
Use for "should I start Nacua or Adams" and "who does the market like more this week". For 2–4 players: the median Kalshi is pricing for each stat (read off his own strike ladder) and his anytime-TD price, compared on the stats they share. Market prices only — the call stays yours; Pro adds our weekly projection.
| Name | Required | Description | Default |
|---|---|---|---|
| players | No | Two to four player names, e.g. ["Puka Nacua", "Davante Adams"] or "Nacua, Adams". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds non-obvious context the annotations cannot convey: output is market prices only with no recommendation, and weekly projections are gated behind a Pro tier. It does not mention rate limits or data freshness, keeping 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?
Roughly two sentences, front-loaded with the user questions that trigger the tool, followed by output scope and the pricing/projection caveat. Dense but essentially waste-free; the 'Pro adds our weekly projection' clause is the only mildly promotional bit.
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 does the work of explaining the return shape — per-stat median strike-ladder prices plus anytime-TD price, compared on shared stats — and covers the 2–4 player constraint and the read-only, no-recommendation nature. Adequate for an agent to call it correctly, though error/edge behavior (unknown player names, fewer than 2) is unaddressed.
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 there is a single 'players' parameter already documented with accepted forms in the schema. The description reinforces the 2–4 player limit and names example players, but adds no format or syntax detail beyond what the schema provides, 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?
The description states a concrete verb+resource: it returns the median Kalshi market price for each stat plus anytime-TD price for 2–4 named players, compared on shared stats. It differentiates itself from projection-based tools via 'Market prices only — the call stays yours', though it never names the closest sibling, compare_players, so the boundary with that tool is left to inference.
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 clear triggering context with quoted user questions ('should I start Nacua or Adams', 'who does the market like more this week') and a cardinality constraint (2–4 players). It does not state any exclusion or explicitly route the agent to a named alternative such as compare_players, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_recordTrack Record — our graded signals, winners and losersARead-onlyInspect
Use for "how accurate is your model" and "what's your track record". Every graded PredictionMarketsPicks signal per engine (bitcoin, gold, silver, oil, weather, NHL) and the daily editorial call (POTD): W-L, net P/L, a 95% win-rate range and the current model era, and the NFL model's backtest. WATCH calls are reported apart.
| Name | Required | Description | Default |
|---|---|---|---|
| lane | No | Optional lane: bitcoin, gold, silver, oil, weather, nhl, potd, nfl — or an engine slug. Omit for every lane. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds a genuinely useful interpretive note that WATCH calls are reported separately, but says nothing about data freshness, grading lag, or how the 'current model era' is bounded.
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, trigger phrases front-loaded ahead of the content inventory, no filler. The second sentence is dense with enumerated metrics but each item is a distinct return field, so the length is earned rather than padded.
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?
No output schema exists, so the description carries the return-value burden and does so reasonably: it names the metrics (W-L, net P/L, 95% range, model era, backtest) and the separate WATCH reporting. It could still clarify ordering, per-engine grouping, or grading recency for full completeness.
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 lane parameter's allowed values are fully listed in the schema, so the schema already does the heavy lifting. The description's engine list (bitcoin, gold, silver, oil, weather, NHL, POTD, NFL) merely mirrors the schema's lane values, adding no new semantics such as default behavior or slug format.
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 combination — every graded signal per engine plus the daily editorial call — and enumerates exactly what metrics come back (W-L, net P/L, 95% win-rate range, model era, NFL backtest). No sibling covers accuracy/track-record reporting, so an agent can route here unambiguously.
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?
Opens with explicit trigger phrasings ('how accurate is your model', 'what's your track record'), which is clear when-to-use guidance. It does not name an alternative or an exclusion case, so it stops short of the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waiver_targetsWaiver Targets — Sleeper trending adds with their Kalshi marketsARead-onlyInspect
Use for "who is everyone adding off waivers" and "trending waiver adds this week". Sleeper's most-added players in the last 24 hours with what Kalshi is pricing each at this week; pass position, and a Sleeper username + league to see only players still available. Market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max players (default 10). Values above 25 are clamped to 25. | |
| league | No | League name (partial) or id, when the user is in several. | |
| position | No | Optional position filter. One of: QB · RB · WR · TE. | |
| sleeper_username | No | Sleeper username — with it, players already rostered in your league are left out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety and external-data behavior are covered. The description adds the 24-hour trending window, the Sleeper source and Kalshi price pairing, and the "Market data only" caveat, but says nothing about rate limits, auth needs, or failure modes.
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 tightly packed sentence: use-case phrasing first, then data sources, then the parameter-conditioned filtering behavior, then a scoping caveat. Nothing is redundant with the title, and every clause carries 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 simple 4-parameter read tool with no output schema or nesting, the description covers the data source, freshness, enrichment (market prices), and the effect of optional filters. Return shape is only implied (players plus prices), which is the main remaining 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 (including the limit clamp at 25) is already documented. The description restates the filtered-availability semantics of sleeper_username plus league, but adds little beyond what the schema text already conveys; 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/resource combination: Sleeper's most-added players over the last 24 hours paired with Kalshi market prices. "Market data only" frames the scope as pricing rather than league actions, which helps separate it from siblings like my_league or best_available, though no sibling is named directly.
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?
Opens with quoted user intents ("who is everyone adding off waivers", "trending waiver adds this week") that give concrete trigger conditions, and explains that adding position/username/league narrows to still-available players. No explicit when-not or named alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
weather_boardKalshi Weather Board — daily-high strikes vs the NWS forecastARead-onlyInspect
Use for "Kalshi NYC high temperature odds". Every open Kalshi daily-high strike in 13 cities: YES price, settlement station and source, the strict-comparison rule, close time, and the NWS forecast high beside it. Pass city ("nyc", "KXHIGHCHI"). Market data only.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | today · tomorrow · all (default). | |
| city | No | City name or series ("nyc", "KXHIGHTBOS"). Omit for all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rule | No | The strict comparison Kalshi settles on. |
| as_of | No | When the board was read. |
| cities | No | Per city and settlement day: NWS high, bias-adjusted high, close time, strikes with two-sided YES mids. |
| sources | No | |
| tell_user | No | Show this sentence to the user first. |
| timestamp | No | |
| needs_input | No | |
| example_call | No | |
| data_freshness | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/destructive=false, so the safety profile is covered. The description adds real context beyond that: the strict-comparison settlement rule, the settlement station and source, and the close time — meaningful for interpreting the odds. No access requirements or throttling mentioned.
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: trigger phrase first, payload contents second, parameter hint and scope guard last. No redundant restatement of the title, and the "Market data only" fragment earns its place as a routing guard.
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 and both parameters fully documented, the remaining burden is scope and semantics — both covered (13 cities, settlement rule, market-data-only). An agent has everything needed to decide and call 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 coverage is 100%, so both parameters (day, city) are already fully documented with examples and defaults. The description repeats the same city examples without adding syntax, format, or fallback behavior beyond what the schema provides, so baseline 3 is correct.
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 clear resource (Kalshi daily-high temperature markets across 13 cities) and enumerates exactly what each row contains: YES price, settlement station/source, strict-comparison rule, close time, and NWS forecast high. No sibling tool touches weather markets, so the agent can identify this as the weather-market board without 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?
"Use for 'Kalshi NYC high temperature odds'" gives a direct trigger, and "Market data only" implicitly routes EV/edge/arbitrage needs to siblings like calculate_ev or find_arbitrage. It stops short of naming an alternative explicitly, so it lands just below the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
who_do_i_draftYour Roster's Props This WeekARead-onlyInspect
In season: the Kalshi props listed on the players you name (2–4), with the best price per strike. Free. Pass roster: ['Player A', 'Player B'].
| Name | Required | Description | Default |
|---|---|---|---|
| roster | No | 2–4 player names on your roster (full or partial). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds genuinely non-structured traits: that the call is 'Free' (cost behavior) and only valid 'In season' (availability constraint). It does not explain behavior out of season, but the annotations plus these two facts give solid coverage.
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?
Very short and front-loaded: season condition, output, cost, and call format. The telegraphic fragments ('Free.') are efficient, though the style is slightly clipped and the example could be trimmed without loss.
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-optional-parameter, read-only tool with no output schema, the description covers what is returned (props with best price per strike) and gives an invocation example. Only the out-of-season behavior and the meaning of 'best price per strike' tie-breaking remain unspecified.
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 'roster' parameter and its 2–4 name constraint are already documented. The description adds a literal call example ('Pass roster: ["Player A", "Player B"]'), which is marginally useful, 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 states a concrete return: Kalshi props on 2–4 named players, with the best price per strike. It differs from the tool name ('who_do_i_draft' suggests draft advice) but clarifies the actual behavior, though it never names a sibling tool to differentiate itself among the many prop/edge tools.
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?
'In season:' implies a usage window and 'Free' signals no cost, which is mild context. However, no alternatives are named (e.g., nfl_prop_board, nfl_prop_edge) and there is no explicit when-not guidance, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
27 tool updates
- Changed
adp_market_gaps2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
base_rate_gap2 fields changed- removed
Input schema / properties / marketPrice / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / marketPrice / typeAdded value: +[ + "number", + "string" +]
- Changed
bayes_update6 fields changed- removed
Input schema / properties / evidence / items / properties / likelihoodIfFalse / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / evidence / items / properties / likelihoodIfFalse / typeAdded value: +[ + "number", + "string" +] - removed
Input schema / properties / evidence / items / properties / likelihoodIfTrue / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / evidence / items / properties / likelihoodIfTrue / typeAdded value: +[ + "number", + "string" +] - removed
Input schema / properties / prior / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / prior / typeAdded value: +[ + "number", + "string" +]
- Changed
best_available2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
calculate_ev4 fields changed- removed
Input schema / properties / marketPrice / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / marketPrice / typeAdded value: +[ + "number", + "string" +] - removed
Input schema / properties / yourProbability / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / yourProbability / typeAdded value: +[ + "number", + "string" +]
- Changed
combo_edge2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
convert_probability2 fields changed- removed
Input schema / properties / value / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / value / typeAdded value: +[ + "number", + "string" +]
- Changed
draft_board2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
edge_alerts2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
explain_game2 fields changed- removed
Input schema / properties / week / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / week / typeAdded value: +[ + "number", + "string" +]
- Changed
explain_prop2 fields changed- removed
Input schema / properties / line / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / line / typeAdded value: +[ + "number", + "string" +]
- Changed
fifteen_min_board2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
find_arbitrage2 fields changed- removed
Input schema / properties / minGap / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / minGap / typeAdded value: +[ + "number", + "string" +]
- Changed
kelly_size6 fields changed- removed
Input schema / properties / bankroll / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / bankroll / typeAdded value: +[ + "number", + "string" +] - removed
Input schema / properties / marketPrice / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / marketPrice / typeAdded value: +[ + "number", + "string" +] - removed
Input schema / properties / winProbability / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / winProbability / typeAdded value: +[ + "number", + "string" +]
- Changed
ladder_arb6 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +] - removed
Input schema / properties / min_edge / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / min_edge / typeAdded value: +[ + "number", + "string" +] - removed
Input schema / properties / min_volume / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / min_volume / typeAdded value: +[ + "number", + "string" +]
- Changed
nba_game_board2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
nba_prop_board2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
nfl_edge4 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +] - removed
Input schema / properties / minEdge / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / minEdge / typeAdded value: +[ + "number", + "string" +]
- Changed
nfl_ladder2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
nfl_power_ratings2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
nfl_prop_board2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
nfl_prop_edge4 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +] - removed
Input schema / properties / minEdge / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / minEdge / typeAdded value: +[ + "number", + "string" +]
- Changed
nhl_edge2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
perp_liquidation6 fields changed- removed
Input schema / properties / entry / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / entry / typeAdded value: +[ + "number", + "string" +] - removed
Input schema / properties / leverage / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / leverage / typeAdded value: +[ + "number", + "string" +] - removed
Input schema / properties / margin / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / margin / typeAdded value: +[ + "number", + "string" +]
- Changed
perps_board2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
- Changed
scan_mispricings4 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +] - removed
Input schema / properties / minEdge / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "string" - } -] - added
Input schema / properties / minEdge / typeAdded value: +[ + "number", + "string" +]
- Changed
waiver_targets2 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +[ + "number", + "string", + "null" +]
1 tool update
- Added
explain_ladder
1 tool update
- Added
explain_prop
1 tool update
- Added
nba_injury_impact
1 tool update
- Added
nba_game_board
1 tool update
- Added
explain_game
2 tool updates
- Changed
bayes_update1 field changed- changed
Input schema / properties / evidence / descriptionPrevious value: -"One or more evidence items, applied in order. Each item needs likelihoodIfTrue and likelihoodIfFalse on the 0–100 scale, e.g. [{ \"likelihoodIfTrue\": 80, \"likelihoodIfFalse\": 20 }]. A single item may be sent as one object."New value: +"One or more evidence items, applied in order. Each item needs likelihoodIfTrue and likelihoodIfFalse on the 0–100 scale, e.g. [{ \"likelihoodIfTrue\": 80, \"likelihoodIfFalse\": 20 }]."
- Changed
nfl_win_probability1 field changed- changed
Input schema / properties / total / descriptionPrevious value: -"Game total (over/under points) — this is the LINE you want tested, not our projection. Defaults to the fitted league baseline (NFL_MODEL_CONSTANTS.TOTAL_BASELINE) if omitted. Our own projected total comes back as `model_total` regardless of what you pass here (teams mode only)."New value: +"Game total (over/under points) — this is the LINE you want tested, not our projection. Defaults to the model’s league-average total if omitted. Our own projected total comes back as `model_total` regardless of what you pass here (teams mode only)."
1 tool update
- Changed
fifteen_min_board1 field changed- changed
Output schema / properties / our_model / descriptionPrevious value: -"Bitcoin only: our published top-of-hour rule — status (WATCH until it passes), paper record, last graded call, next decision time."New value: +"Bitcoin only: our published top-of-hour rule — status (WATCH until it passes), paper record, last graded call, next decision time, and current_call: the bot's own :55 decision for the open window (PLAY = live, WATCH = paper)."
1 tool update
- Added
nba_prop_board
5 tool updates
- Changed
fifteen_min_board1 field changed- added
Output schema / properties / our_modelAdded value: +{ + "description": "Bitcoin only: our published top-of-hour rule — status (WATCH until it passes), paper record, last graded call, next decision time." +}
- Added
my_league - Added
start_sit - Added
track_record - Added
waiver_targets
4 tool updates
- Added
adp_market_gaps - Added
best_available - Added
draft_board - Added
who_do_i_draft
9 tool updates
- Changed
base_rate_gap4 fields changed- added
Input schema / properties / baseRateId / anyOfAdded value: +[ + { + "type": "string" + }, + { + "enum": [ + "incumbent_reelected", + "fed_hold_unemp_below_4", + "fed_cut_cpi_above_3", + "recession_called_12mo", + "sp500_positive_year", + "bitcoin_above_100k_eoy", + "gdp_growth_above_2", + "cpi_above_3", + "senate_incumbent_wins_primary", + "vix_below_20_eoy", + "interest_rate_cut_next_meeting", + "major_sports_upset" + ], + "type": "string" + } +] - changed
Input schema / properties / baseRateId / descriptionPrevious value: -"Known base-rate id to look up (includes sample size + source)."New value: +"Known base-rate id to look up (includes sample size + source). One of: incumbent_reelected · fed_hold_unemp_below_4 · fed_cut_cpi_above_3 · recession_called_12mo · sp500_positive_year · bitcoin_above_100k_eoy · gdp_growth_above_2 · cpi_above_3 · senate_incumbent_wins_primary · vix_below_20_eoy · interest_rate_cut_next_meeting · major_sports_upset." - removed
Input schema / properties / baseRateId / enumRemoved value: -[ - "incumbent_reelected", - "fed_hold_unemp_below_4", - "fed_cut_cpi_above_3", - "recession_called_12mo", - "sp500_positive_year", - "bitcoin_above_100k_eoy", - "gdp_growth_above_2", - "cpi_above_3", - "senate_incumbent_wins_primary", - "vix_below_20_eoy", - "interest_rate_cut_next_meeting", - "major_sports_upset" -] - removed
Input schema / properties / baseRateId / typeRemoved value: -"string"
- Changed
edge_alerts4 fields changed- added
Input schema / properties / min_tier / anyOfAdded value: +[ + { + "type": "string" + }, + { + "enum": [ + "SPECULATIVE", + "MODERATE", + "STRONG" + ], + "type": "string" + } +] - changed
Input schema / properties / min_tier / descriptionPrevious value: -"Minimum confidence tier (returns that tier and above)."New value: +"Minimum confidence tier (returns that tier and above). One of: SPECULATIVE · MODERATE · STRONG." - removed
Input schema / properties / min_tier / enumRemoved value: -[ - "SPECULATIVE", - "MODERATE", - "STRONG" -] - removed
Input schema / properties / min_tier / typeRemoved value: -"string"
- Changed
kelly_size5 fields changed- added
Input schema / properties / fraction / anyOfAdded value: +[ + { + "type": "string" + }, + { + "enum": [ + "full", + "half", + "quarter", + "eighth" + ], + "type": "string" + } +] - removed
Input schema / properties / fraction / defaultRemoved value: -"half" - changed
Input schema / properties / fraction / descriptionPrevious value: -"Kelly fraction to apply. Half-Kelly is the common sharp-money default."New value: +"Kelly fraction to apply. Half-Kelly is the common sharp-money default. One of: full · half · quarter · eighth." - removed
Input schema / properties / fraction / enumRemoved value: -[ - "full", - "half", - "quarter", - "eighth" -] - removed
Input schema / properties / fraction / typeRemoved value: -"string"
- Changed
market_pulse5 fields changed- added
Input schema / properties / topic / anyOfAdded value: +[ + { + "type": "string" + }, + { + "enum": [ + "macro" + ], + "type": "string" + } +] - removed
Input schema / properties / topic / defaultRemoved value: -"macro" - changed
Input schema / properties / topic / descriptionPrevious value: -"macro = the US macro-health composite (the only topic)."New value: +"macro = the US macro-health composite (the only topic). One of: macro." - removed
Input schema / properties / topic / enumRemoved value: -[ - "macro" -] - removed
Input schema / properties / topic / typeRemoved value: -"string"
- Changed
nfl_edge5 fields changed- added
Input schema / properties / market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "enum": [ + "game", + "futures", + "mvp", + "championship" + ], + "type": "string" + } +] - removed
Input schema / properties / market / defaultRemoved value: -"game" - changed
Input schema / properties / market / descriptionPrevious value: -"game = this week moneyline edges; futures = season win totals; mvp = KXNFLMVP; championship = playoff/conference/Super Bowl."New value: +"game = this week moneyline edges; futures = season win totals; mvp = KXNFLMVP; championship = playoff/conference/Super Bowl. One of: game · futures · mvp · championship." - removed
Input schema / properties / market / enumRemoved value: -[ - "game", - "futures", - "mvp", - "championship" -] - removed
Input schema / properties / market / typeRemoved value: -"string"
- Changed
nfl_ladder8 fields changed- added
Input schema / properties / family / anyOfAdded value: +[ + { + "type": "string" + }, + { + "enum": [ + "spread", + "season_wins", + "props" + ], + "type": "string" + } +] - changed
Input schema / properties / family / descriptionPrevious value: -"Ladder family. Omit for all three."New value: +"Ladder family. Omit for all three. One of: spread · season_wins · props." - removed
Input schema / properties / family / enumRemoved value: -[ - "spread", - "season_wins", - "props" -] - removed
Input schema / properties / family / typeRemoved value: -"string" - added
Input schema / properties / kind / anyOfAdded value: +[ + { + "type": "string" + }, + { + "enum": [ + "shape", + "location", + "agree", + "partial" + ], + "type": "string" + } +] - changed
Input schema / properties / kind / descriptionPrevious value: -"Verdict filter."New value: +"Verdict filter. One of: shape · location · agree · partial." - removed
Input schema / properties / kind / enumRemoved value: -[ - "shape", - "location", - "agree", - "partial" -] - removed
Input schema / properties / kind / typeRemoved value: -"string"
- Changed
nfl_prop_board4 fields changed- added
Input schema / properties / statType / anyOfAdded value: +[ + { + "type": "string" + }, + { + "enum": [ + "pass_yds", + "pass_tds", + "rush_yds", + "rec_yds", + "receptions", + "anytime_td" + ], + "type": "string" + } +] - changed
Input schema / properties / statType / descriptionPrevious value: -"Optional prop type filter."New value: +"Optional prop type filter. One of: pass_yds · pass_tds · rush_yds · rec_yds · receptions · anytime_td." - removed
Input schema / properties / statType / enumRemoved value: -[ - "pass_yds", - "pass_tds", - "rush_yds", - "rec_yds", - "receptions", - "anytime_td" -] - removed
Input schema / properties / statType / typeRemoved value: -"string"
- Changed
nfl_prop_edge4 fields changed- added
Input schema / properties / propType / anyOfAdded value: +[ + { + "type": "string" + }, + { + "enum": [ + "pass_yds", + "pass_tds", + "rush_yds", + "rec_yds", + "receptions", + "anytime_td" + ], + "type": "string" + } +] - changed
Input schema / properties / propType / descriptionPrevious value: -"Optional filter by prop type: pass_yds, pass_tds, rush_yds, rec_yds, receptions, anytime_td."New value: +"Optional filter by prop type. One of: pass_yds · pass_tds · rush_yds · rec_yds · receptions · anytime_td." - removed
Input schema / properties / propType / enumRemoved value: -[ - "pass_yds", - "pass_tds", - "rush_yds", - "rec_yds", - "receptions", - "anytime_td" -] - removed
Input schema / properties / propType / typeRemoved value: -"string"
- Changed
nhl_edge7 fields changed- added
Input schema / properties / market / anyOfAdded value: +[ + { + "type": "string" + }, + { + "enum": [ + "game", + "goals", + "futures" + ], + "type": "string" + } +] - removed
Input schema / properties / market / defaultRemoved value: -"game" - changed
Input schema / properties / market / descriptionPrevious value: -"game = tonight's board; goals = player-goal contracts; futures = Stanley Cup + season markets."New value: +"game = tonight's board (moneyline, puck line, totals, periods); goals = player-goal contracts; futures = Stanley Cup + season markets. One of: game · goals · futures." - removed
Input schema / properties / market / enumRemoved value: -[ - "game", - "goals", - "futures" -] - removed
Input schema / properties / market / typeRemoved value: -"string" - changed
Input schema / properties / team / descriptionPrevious value: -"Optional NHL club code (CAR, EDM, LAK…) to filter."New value: +"Optional NHL club to filter — code (CAR, EDM, LAK), Kalshi code (LA, TB), nickname (\"Oilers\") or city (\"Edmonton\")." - changed
Input schema / properties / team / maxLengthPrevious value: -3New value: +40
7 tool updates
- Removed
adp_market_gaps - Removed
best_available - Changed
compare_players1 field changed- removed
Input schema / requiredRemoved value: -[ - "players" -]
- Removed
draft_board - Changed
perp_liquidation1 field changed- removed
Input schema / requiredRemoved value: -[ - "asset", - "side", - "leverage" -]
- Added
weather_board - Removed
who_do_i_draft
1 tool update
- Changed
nfl_win_probability1 field changed- added
Output schema / properties / qb_gateAdded value: +{ + "description": "PASS/ADJUSTED/FORK (quote both fork_lines)/HOLD (no number)." +}
1 tool update
- Changed
combo_edge5 fields changed- added
Input schema / properties / kindAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "enum": [ + "game", + "prop" + ], + "type": "string" + } + ], + "description": "With nflGame: \"game\" = all game lines, \"prop\" = props only. One of: game · prop." +} - added
Input schema / properties / limitAdded value: +{ + "anyOf": [ + { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ], + "description": "With nflGame: max props listed (default 40, max 200)." +} - changed
Input schema / properties / nflGame / descriptionPrevious value: -"An NFL game on the live board, as \"AWAY-HOME\" (e.g. \"NYG-LAR\"). Alone: lists that game's selectable legs with their ids. With legIds: prices that exact combo."New value: +"An NFL game on the live board, as \"AWAY-HOME\" (e.g. \"NYG-LAR\"). Alone: lists its legs with ids, trimmed (narrow with player/stat/kind/limit). With legIds: prices that exact combo." - added
Input schema / properties / playerAdded value: +{ + "description": "With nflGame: every strike for a player whose name contains this (e.g. \"Mariota\").", + "type": "string" +} - added
Input schema / properties / statAdded value: +{ + "description": "With nflGame: props of one stat (e.g. \"rec_yds\").", + "type": "string" +}
Related MCP Connectors
Live Kalshi and Polymarket data: EV edges, cross-venue arbitrage, markets, and whale trades.
Kalshi macro: Fed rate odds, gold, silver, oil and bitcoin edges, 15-min markets, Kelly sizing.
Cross-venue prediction market odds (Polymarket, Kalshi, PredictIt, Manifold) with arbitrage signals
Live Polymarket odds, 1h/24h movers, top markets. Free previews; full data via x402 USDC on Base.
Related MCP Servers
- AlicenseAqualityBmaintenance24/7 autonomous monitoring and edge detection for prediction markets (Kalshi & Polymarket). Features causal tree analysis, orderbook depth tracking, cross-venue comparison, and real-time alerts.16196 npm12MIT
- AlicenseAqualityDmaintenancePrediction market probability oracle for AI agents. 26 tools across 500+ live markets from Kalshi and Polymarket. Cross-source arbitrage detection, structured TPF signals, Kelly Criterion sizing, agent performance tracking, and webhook alerts.922 npm1MIT

PropLineofficial
AlicenseAqualityAmaintenanceLive sports betting odds, cross-book +EV, and graded player-prop resolution across 13 books.11133 npm1MIT- AlicenseAqualityDmaintenanceSchedules, scores, odds, splits & explainable AI bet confidence — 8+ sports, free instant key.1611MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.