NHL Markets Desk
Server Details
NHL on Kalshi: tonight's games and goal scorers vs a model, plus Stanley Cup odds vs Polymarket.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- predictionmarketspicks/mcp
- GitHub Stars
- 0
- Server Listing
- PredictionMarketsPicks Quant
TDQS
Score is being calculated.
Available Tools
6 toolscalculate_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.
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.
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.
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.
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- First observed
calculate_ev - First observed
convert_probability - First observed
find_arbitrage - First observed
kelly_size - First observed
nhl_edge - First observed
track_record
Related MCP Connectors
Free, no key: NFL + NBA prop boards, NHL model, Kalshi vs Polymarket gaps, Fed odds, EV/Kelly.
Live Kalshi and Polymarket data: EV edges, cross-venue arbitrage, markets, and whale trades.
Kalshi NBA props and game lines vs DraftKings, FanDuel and Novig, plus who gains when a star sits.
71Pinnacle fair odds vs Polymarket & Kalshi: winner, totals, spreads, BTTS, tennis, UFC. After fees.
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
- AlicenseAqualityAmaintenancePrediction-market MCP server for Kalshi and Polymarket: market search, live order books and quotes, each venue's fee schedule, fee-aware no-arbitrage checks across related event contracts, and paper orders that walk the book.21376 PyPI493Apache 2.0
- AlicenseNot gradedqualityFmaintenanceUnified access to prediction market data from Kalshi and Polymarket, enabling natural language queries for real-time odds, orderbooks, and trade history.6 npm11MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.