Free, no key: NFL prop board, Kalshi vs Polymarket gaps, 15-min crypto, Fed odds, NHL, EV/Kelly.
com.predictionmarketspicks/quant — MCP Server
A hosted Model Context Protocol (MCP) server that provides AI agents quant tools for Kalshi and Polymarket prediction markets. It includes functionality for expected value, Kelly sizing, Bayesian updating, probability conversion, cross-platform price gaps, live edge signals, and a 2026 NFL fantasy draft assistant. (25 quant tools total; toolCount: 24.)
🛠️ Key Features
Quant tools for Kalshi and Polymarket
Expected value calculations
Kelly sizing
Bayesian updating
Probability conversion
Cross-platform price gap analysis
Live edge signals
2026 NFL fantasy draft assistant
25 quant tools (toolCount: 24)
🚀 Use Cases
Building MCP-enabled agents to analyze prediction market positions
Using quantitative methods for sizing, updating beliefs, and converting probabilities
Monitoring cross-platform pricing differences and live edge signals
Assisting with a 2026 NFL fantasy draft
⚡ Developer Benefits
Integrates with Model Context Protocol
Focused on prediction-markets and llm-tools for ai-agents
Provides market math primitives and a fantasy draft assistant
⚠️ Limitations
Tool availability is described as “25 quant tools” with toolCount reported as 24; exact tool list is not included in the source data.
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.
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.
Parameters2
marketPrice
any
optional
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
any
optional
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%.
Raw schema
{
"type": "object",
"properties": {
"marketPrice": {
"description": "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%.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"yourProbability": {
"description": "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%.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
kelly_size
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".
Parameters4
winProbability
any
required
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%.
marketPrice
any
required
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%.
bankroll
any
optional
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
any
optional
Kelly fraction to apply. Half-Kelly is the common sharp-money default. One of: full · half · quarter · eighth.
Raw schema
{
"type": "object",
"properties": {
"winProbability": {
"description": "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%.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"marketPrice": {
"description": "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%.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"bankroll": {
"description": "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\").",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"fraction": {
"description": "Kelly fraction to apply. Half-Kelly is the common sharp-money default. One of: full · half · quarter · eighth.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"full",
"half",
"quarter",
"eighth"
]
}
]
}
},
"required": [
"winProbability",
"marketPrice"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
bayes_update
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".
Parameters2
prior
any
optional
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
array
optional
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 }].
Raw schema
{
"type": "object",
"properties": {
"prior": {
"description": "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%.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"evidence": {
"description": "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 }].",
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"description": "Optional short caption for this evidence. Defaults to \"Evidence 1\", \"Evidence 2\", …",
"type": "string"
},
"likelihoodIfTrue": {
"description": "P(observing this evidence | hypothesis is true), in % (0–100). Accepts a number or a numeric string (\"3\", \"3pp\", \"3%\").",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"likelihoodIfFalse": {
"description": "P(observing this evidence | hypothesis is false), in % (0–100). Accepts a number or a numeric string (\"3\", \"3pp\", \"3%\").",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
}
},
"required": [
"likelihoodIfTrue",
"likelihoodIfFalse"
]
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
convert_probability
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".
Parameters2
value
any
optional
The numeric value to convert. Needed for a real answer, with format. Accepts a number or a numeric string ("+150", "62%", "2.5").
format
any
optional
Format of `value`: probability (0–100 %), american (e.g. -200 / +150), or decimal (e.g. 2.5). One of: probability · american · decimal.
Raw schema
{
"type": "object",
"properties": {
"value": {
"description": "The numeric value to convert. Needed for a real answer, with format. Accepts a number or a numeric string (\"+150\", \"62%\", \"2.5\").",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"format": {
"description": "Format of `value`: probability (0–100 %), american (e.g. -200 / +150), or decimal (e.g. 2.5). One of: probability · american · decimal.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"probability",
"american",
"decimal"
]
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
base_rate_gap
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.
Parameters3
marketPrice
any
optional
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%.
baseRateId
any
optional
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.
baseRateValue
number
optional
Your own base rate in % (0–100), used when no baseRateId is given.
Raw schema
{
"type": "object",
"properties": {
"marketPrice": {
"description": "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%.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"baseRateId": {
"description": "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.",
"anyOf": [
{
"type": "string"
},
{
"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"
]
}
]
},
"baseRateValue": {
"description": "Your own base rate in % (0–100), used when no baseRateId is given.",
"type": "number",
"minimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
combo_edge
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.
Parameters10
legPrices
array
optional
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.
trueWinProbability
number
optional
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.
nflGame
string
optional
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.
legIds
any
optional
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
string
optional
With nflGame: every strike for a player whose name contains this (e.g. "Mariota").
stat
string
optional
With nflGame: props of one stat (e.g. "rec_yds").
kind
any
optional
With nflGame: "game" = all game lines, "prop" = props only. One of: game · prop.
limit
any
optional
With nflGame: max props listed (default 40, max 200).
offeredOdds
number
optional
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
number
optional
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.
Raw schema
{
"type": "object",
"properties": {
"legPrices": {
"description": "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.",
"minItems": 2,
"type": "array",
"items": {
"type": "number",
"minimum": 1,
"maximum": 99
}
},
"trueWinProbability": {
"description": "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.",
"type": "number",
"minimum": 0,
"maximum": 100
},
"nflGame": {
"description": "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.",
"type": "string"
},
"legIds": {
"description": "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.",
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "string"
}
]
},
"player": {
"description": "With nflGame: every strike for a player whose name contains this (e.g. \"Mariota\").",
"type": "string"
},
"stat": {
"description": "With nflGame: props of one stat (e.g. \"rec_yds\").",
"type": "string"
},
"kind": {
"description": "With nflGame: \"game\" = all game lines, \"prop\" = props only. One of: game · prop.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"game",
"prop"
]
}
]
},
"limit": {
"description": "With nflGame: max props listed (default 40, max 200).",
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
{
"type": "null"
}
]
},
"offeredOdds": {
"description": "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.",
"type": "number"
},
"offeredAmerican": {
"description": "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.",
"type": "number"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
nfl_power_ratings
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".
Parameters3
team
string
optional
Optional team abbreviation (e.g. "KC", "SF", "LAR") — returns just that team's rating + rank.
tier
string
optional
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
any
optional
Max teams to return, best rating first (default 32 = full board). Values above 32 are clamped to 32.
Raw schema
{
"type": "object",
"properties": {
"team": {
"description": "Optional team abbreviation (e.g. \"KC\", \"SF\", \"LAR\") — returns just that team's rating + rank.",
"type": "string"
},
"tier": {
"description": "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.",
"type": "string"
},
"limit": {
"description": "Max teams to return, best rating first (default 32 = full board). Values above 32 are clamped to 32.",
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
{
"type": "null"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
nfl_win_probability
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.
Parameters5
spread
number
optional
Point spread from the home team's perspective — home favored is NEGATIVE (e.g. -6.5). Provide this OR homeTeam+awayTeam.
total
number
optional
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).
homeTeam
string
optional
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.
awayTeam
string
optional
Away team — same formats as homeTeam (SF, 49ers, San Francisco 49ers). Used with homeTeam.
game
string
optional
Or name the game in one string — "Bills vs Chiefs", "BUF@KC", "Buffalo at Kansas City". The schedule decides which side is home.
Raw schema
{
"type": "object",
"properties": {
"spread": {
"description": "Point spread from the home team's perspective — home favored is NEGATIVE (e.g. -6.5). Provide this OR homeTeam+awayTeam.",
"type": "number"
},
"total": {
"description": "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).",
"type": "number",
"exclusiveMinimum": 0
},
"homeTeam": {
"description": "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.",
"type": "string"
},
"awayTeam": {
"description": "Away team — same formats as homeTeam (SF, 49ers, San Francisco 49ers). Used with homeTeam.",
"type": "string"
},
"game": {
"description": "Or name the game in one string — \"Bills vs Chiefs\", \"BUF@KC\", \"Buffalo at Kansas City\". The schedule decides which side is home.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
find_arbitrage
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.
Parameters1
minGap
any
optional
Minimum gap in percentage points to include (default 3 = WATCH threshold). Accepts a number or a numeric string ("3", "3pp", "3%").
Raw schema
{
"type": "object",
"properties": {
"minGap": {
"description": "Minimum gap in percentage points to include (default 3 = WATCH threshold). Accepts a number or a numeric string (\"3\", \"3pp\", \"3%\").",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
market_pulse
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".
Parameters1
topic
any
optional
macro = the US macro-health composite (the only topic). One of: macro.
Raw schema
{
"type": "object",
"properties": {
"topic": {
"description": "macro = the US macro-health composite (the only topic). One of: macro.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"macro"
]
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
commodity_edge
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.
Parameters2
commodity
any
optional
Which commodity edge to read (needed for a real answer). One of: silver · bitcoin · gold · oil.
tickers
array
optional
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).
Raw schema
{
"type": "object",
"properties": {
"commodity": {
"description": "Which commodity edge to read (needed for a real answer). One of: silver · bitcoin · gold · oil.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"silver",
"bitcoin",
"gold",
"oil"
]
}
]
},
"tickers": {
"description": "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).",
"type": "array",
"items": {
"type": "string"
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
scan_mispricings
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".
Parameters2
minEdge
any
optional
Minimum absolute edge in pp to include (default 5). Accepts a number or a numeric string ("3", "3pp", "3%").
limit
any
optional
Max rows to return (default 10). Values above 25 are clamped to 25.
Raw schema
{
"type": "object",
"properties": {
"minEdge": {
"description": "Minimum absolute edge in pp to include (default 5). Accepts a number or a numeric string (\"3\", \"3pp\", \"3%\").",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"limit": {
"description": "Max rows to return (default 10). Values above 25 are clamped to 25.",
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
{
"type": "null"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
edge_alerts
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.
Parameters4
feed
string
optional
Comma-separated feeds to include: weather, bitcoin, silver, gold, oil, mispricing, sports_arb, nfl. Omit for all.
min_tier
any
optional
Minimum confidence tier (returns that tier and above). One of: SPECULATIVE · MODERATE · STRONG.
since
string
optional
ISO-8601 timestamp — only alerts created after it.
limit
any
optional
Max alerts to return (default 25). Values above 100 are clamped to 100.
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.
Parameters4
market
any
optional
game = this week moneyline edges; futures = season win totals; mvp = KXNFLMVP; championship = playoff/conference/Super Bowl. One of: game · futures · mvp · championship.
minEdge
any
optional
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%").
limit
any
optional
Max rows (default 10). Values above 25 are clamped to 25.
tickers
array
optional
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).
Raw schema
{
"type": "object",
"properties": {
"market": {
"description": "game = this week moneyline edges; futures = season win totals; mvp = KXNFLMVP; championship = playoff/conference/Super Bowl. One of: game · futures · mvp · championship.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"game",
"futures",
"mvp",
"championship"
]
}
]
},
"minEdge": {
"description": "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%\").",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"limit": {
"description": "Max rows (default 10). Values above 25 are clamped to 25.",
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
{
"type": "null"
}
]
},
"tickers": {
"description": "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).",
"type": "array",
"items": {
"type": "string"
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
nfl_prop_edge
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.
Parameters3
propType
any
optional
Optional filter by prop type. One of: pass_yds · pass_tds · rush_yds · rec_yds · receptions · anytime_td.
minEdge
any
optional
Min absolute edge in pp (default 5). Accepts a number or a numeric string ("3", "3pp", "3%").
limit
any
optional
Max rows (default 10). Values above 25 are clamped to 25.
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.
Parameters3
market
any
optional
game = tonight's board (moneyline, puck line, totals, periods); goals = player-goal contracts; futures = Stanley Cup + season markets. One of: game · goals · futures.
team
string
optional
Optional NHL club to filter — code (CAR, EDM, LAK), Kalshi code (LA, TB), nickname ("Oilers") or city ("Edmonton").
limit
any
optional
Max rows (default 16). Values above 40 are clamped to 40.
Raw schema
{
"type": "object",
"properties": {
"market": {
"description": "game = tonight's board (moneyline, puck line, totals, periods); goals = player-goal contracts; futures = Stanley Cup + season markets. One of: game · goals · futures.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"game",
"goals",
"futures"
]
}
]
},
"team": {
"description": "Optional NHL club to filter — code (CAR, EDM, LAK), Kalshi code (LA, TB), nickname (\"Oilers\") or city (\"Edmonton\").",
"type": "string",
"maxLength": 40
},
"limit": {
"description": "Max rows (default 16). Values above 40 are clamped to 40.",
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
{
"type": "null"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
nfl_prop_board
Use for "where is the best price on <player> 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.
Parameters6
team
string
optional
Team abbrev (SEA, NE, LAR, JAX) — rows for that club only.
game
string
optional
Game anchor away-home, e.g. "ne-sea" — rows for that game only.
player
string
optional
Player name (partial, case-insensitive), e.g. "Nacua".
statType
any
optional
Optional prop type filter. One of: pass_yds · pass_tds · rush_yds · rec_yds · receptions · anytime_td.
gapsOnly
boolean
optional
Only strikes where Kalshi and the consensus are 5¢+ apart (default false).
limit
any
optional
Max rows (default 15). Values above 50 are clamped to 50.
Raw schema
{
"type": "object",
"properties": {
"team": {
"description": "Team abbrev (SEA, NE, LAR, JAX) — rows for that club only.",
"type": "string"
},
"game": {
"description": "Game anchor away-home, e.g. \"ne-sea\" — rows for that game only.",
"type": "string"
},
"player": {
"description": "Player name (partial, case-insensitive), e.g. \"Nacua\".",
"type": "string"
},
"statType": {
"description": "Optional prop type filter. One of: pass_yds · pass_tds · rush_yds · rec_yds · receptions · anytime_td.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"pass_yds",
"pass_tds",
"rush_yds",
"rec_yds",
"receptions",
"anytime_td"
]
}
]
},
"gapsOnly": {
"description": "Only strikes where Kalshi and the consensus are 5¢+ apart (default false).",
"type": "boolean"
},
"limit": {
"description": "Max rows (default 15). Values above 50 are clamped to 50.",
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
{
"type": "null"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
nba_prop_board
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.
Parameters5
team
string
optional
Team code or name (LAL, Lakers).
game
string
optional
Two teams, e.g. "BOS @ DET".
player
string
optional
Player name (partial).
statType
any
optional
Optional stat. One of: pts · reb · ast · threes.
limit
any
optional
Max rows (default 15). Values above 50 are clamped to 50.
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.
Parameters4
team
string
optional
Team code or name (NYK, Knicks).
game
string
optional
Two teams, e.g. "BOS @ DET".
market
any
optional
Optional market. One of: moneyline · spread · total.
limit
any
optional
Max games (default 5). Values above 20 are clamped to 20.
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.
Parameters4
team
string
optional
Team code or name (PHI, Sixers).
game
string
optional
Two teams, e.g. "BOS @ NYK".
player
string
optional
The absent player, or a teammate to look up (partial name).
stat
any
optional
Stat to rank beneficiaries by (default points). One of: pts · reb · ast · min · usg · fg3m · stl · blk.
Raw schema
{
"type": "object",
"properties": {
"team": {
"description": "Team code or name (PHI, Sixers).",
"type": "string",
"maxLength": 40
},
"game": {
"description": "Two teams, e.g. \"BOS @ NYK\".",
"type": "string",
"maxLength": 60
},
"player": {
"description": "The absent player, or a teammate to look up (partial name).",
"type": "string",
"maxLength": 60
},
"stat": {
"description": "Stat to rank beneficiaries by (default points). One of: pts · reb · ast · min · usg · fg3m · stl · blk.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"pts",
"reb",
"ast",
"min",
"usg",
"fg3m",
"stl",
"blk"
]
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
nfl_ladder
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%.
Parameters5
family
any
optional
Ladder family. Omit for all three. One of: spread · season_wins · props.
team
string
optional
Team abbrev (SEA, LAR, JAX) — ladders involving that club.
player
string
optional
Player name (partial, case-insensitive) — prop ladders only.
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.
Parameters5
sport
any
optional
cfb · nfl · both (default both).
signal
any
optional
locked · inverted · wide · all (default all).
min_edge
any
optional
Minimum NET edge in cents (default 1). Accepts 2, "2c", "2". Accepts a number or a numeric string ("+150", "62%", "2.5").
min_volume
any
optional
Minimum per-leg volume in dollars (default 20000). Accepts 20000, "$20,000". Accepts a number or a numeric string ("+150", "62%", "2.5").
limit
any
optional
Max rows (default 20, max 100). Values above 100 are clamped to 100.
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.
Parameters4
series
string
optional
One series: ticker (KXETH15M) or asset ("eth", "gold", "euro").
asset_class
any
optional
crypto · commodity · currency · all (default all).
open_only
boolean
optional
Only series with a window open right now (default false).
limit
any
optional
Max rows (default 30). Values above 40 are clamped to 40.
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.
Parameters2
city
string
optional
City name or series ("nyc", "KXHIGHTBOS"). Omit for all.
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.
Parameters1
lane
string
optional
Optional lane: bitcoin, gold, silver, oil, weather, nhl, potd, nfl — or an engine slug. Omit for every lane.
Raw schema
{
"type": "object",
"properties": {
"lane": {
"description": "Optional lane: bitcoin, gold, silver, oil, weather, nhl, potd, nfl — or an engine slug. Omit for every lane.",
"type": "string",
"maxLength": 40
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
my_league
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.
Parameters2
sleeper_username
string
optional
Sleeper username (profile → username, not the display name).
league
string
optional
League name (partial) or Sleeper league id, when the user is in several.
Raw schema
{
"type": "object",
"properties": {
"sleeper_username": {
"description": "Sleeper username (profile → username, not the display name).",
"type": "string",
"maxLength": 40
},
"league": {
"description": "League name (partial) or Sleeper league id, when the user is in several.",
"type": "string",
"maxLength": 60
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
start_sit
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.
Parameters1
players
any
optional
Two to four player names, e.g. ["Puka Nacua", "Davante Adams"] or "Nacua, Adams".
Raw schema
{
"type": "object",
"properties": {
"players": {
"description": "Two to four player names, e.g. [\"Puka Nacua\", \"Davante Adams\"] or \"Nacua, Adams\".",
"anyOf": [
{
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"maxLength": 40
}
},
{
"type": "string",
"maxLength": 160
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
waiver_targets
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.
Parameters4
position
any
optional
Optional position filter. One of: QB · RB · WR · TE.
sleeper_username
string
optional
Sleeper username — with it, players already rostered in your league are left out.
league
string
optional
League name (partial) or id, when the user is in several.
limit
any
optional
Max players (default 10). Values above 25 are clamped to 25.
Raw schema
{
"type": "object",
"properties": {
"position": {
"description": "Optional position filter. One of: QB · RB · WR · TE.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"QB",
"RB",
"WR",
"TE"
]
}
]
},
"sleeper_username": {
"description": "Sleeper username — with it, players already rostered in your league are left out.",
"type": "string",
"maxLength": 40
},
"league": {
"description": "League name (partial) or id, when the user is in several.",
"type": "string",
"maxLength": 60
},
"limit": {
"description": "Max players (default 10). Values above 25 are clamped to 25.",
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
{
"type": "null"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
perps_board
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.
Parameters2
asset
string
optional
One perp: symbol or name ("btc", "gold", "XAG").
limit
any
optional
Max rows (default 25). Values above 30 are clamped to 30.
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.
Parameters6
asset
any
optional
The perp. One of: btc · eth · sol · xrp · doge · hype · link · gold · silver · platinum · palladium.
side
any
optional
Direction. One of: long · short.
leverage
any
optional
Leverage, e.g. 5 or "5x". Capped at Kalshi’s maximum for the size and side.
margin
any
optional
Margin in dollars (default 1000). Accepts a number or a numeric string ("+150", "62%", "2.5").
entry
any
optional
Entry price (default: the live price). Accepts a number or a numeric string ("+150", "62%", "2.5").
hold_days
number
optional
Days held, for the funding estimate (default 7).
Raw schema
{
"type": "object",
"properties": {
"asset": {
"description": "The perp. One of: btc · eth · sol · xrp · doge · hype · link · gold · silver · platinum · palladium.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"btc",
"eth",
"sol",
"xrp",
"doge",
"hype",
"link",
"gold",
"silver",
"platinum",
"palladium"
]
}
]
},
"side": {
"description": "Direction. One of: long · short.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"long",
"short"
]
}
]
},
"leverage": {
"description": "Leverage, e.g. 5 or \"5x\". Capped at Kalshi’s maximum for the size and side.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"margin": {
"description": "Margin in dollars (default 1000). Accepts a number or a numeric string (\"+150\", \"62%\", \"2.5\").",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"entry": {
"description": "Entry price (default: the live price). Accepts a number or a numeric string (\"+150\", \"62%\", \"2.5\").",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"hold_days": {
"default": 7,
"description": "Days held, for the funding estimate (default 7).",
"type": "number",
"minimum": 0,
"maximum": 365
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
senate_map
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.
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.
Parameters1
race
string
required
State name or code, a race slug (kansas-senate, michigan-governor, tx-34-house), or a House district (TX-34).
Raw schema
{
"type": "object",
"properties": {
"race": {
"type": "string",
"minLength": 1,
"description": "State name or code, a race slug (kansas-senate, michigan-governor, tx-34-house), or a House district (TX-34)."
}
},
"required": [
"race"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
draft_board
In season: this week's NFL prop market board — every Kalshi player prop with the best price across venues, filter by position. Free. (The 2026 fantasy draft board returns in the 2027 offseason.)
Parameters2
position
any
optional
Optional position filter (FLEX = RB/WR/TE). One of: QB · RB · WR · TE · FLEX.
limit
any
optional
Max rows (default 15). Values above 50 are clamped to 50.
One NFL player this week — every Kalshi prop line, the best price across venues, and our probability at each strike. Free. Use for "is <player> a good play this week", "<player> props".
Parameters3
player
string
optional
Player name, full or partial (e.g. "Puka Nacua", "Bijan").
scoring
any
optional
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
any
optional
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.
Raw schema
{
"type": "object",
"properties": {
"player": {
"description": "Player name, full or partial (e.g. \"Puka Nacua\", \"Bijan\").",
"type": "string"
},
"scoring": {
"description": "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.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"standard",
"half_ppr",
"ppr"
]
}
]
},
"platform": {
"description": "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.",
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"enum": [
"yahoo",
"espn",
"sleeper",
"nfl",
"cbs",
"fantrax",
"draftkings",
"underdog"
]
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
explain_player
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 <player> there", "explain <player>'s prop", "what's driving the model on <player>", "why is <player>'s over priced at that".
Parameters2
player
string
optional
Player name, full or partial (e.g. "Puka Nacua").
stat
string
optional
Optional stat to narrow to, e.g. "rec_yds", "receptions", "rush_yds".
Raw schema
{
"type": "object",
"properties": {
"player": {
"description": "Player name, full or partial (e.g. \"Puka Nacua\").",
"type": "string"
},
"stat": {
"description": "Optional stat to narrow to, e.g. \"rec_yds\", \"receptions\", \"rush_yds\".",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
explain_game
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 <team> vs <team> there", "explain the <team> game line", "what is driving the model on <team>'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.
Parameters2
game
string
optional
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
any
optional
Optional NFL week (e.g. 6). Defaults to the current week.
Raw schema
{
"type": "object",
"properties": {
"game": {
"description": "The matchup — two teams in any form (\"Bills vs Chiefs\", \"BUF@KC\", \"Buffalo at Kansas City\"), or one team for its game that week.",
"type": "string"
},
"week": {
"description": "Optional NFL week (e.g. 6). Defaults to the current week.",
"anyOf": [
{
"type": "number"
},
{
"type": "string"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
compare_players
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 "<A> or <B> this week", "compare <A> and <B> props", "who has the better prop, <A> or <B>", "<A> vs <B> receiving yards".
Parameters3
players
any
optional
2–4 player full names to compare.
scoring
any
optional
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
any
optional
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.
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".
Parameters1
position
any
optional
Optional position filter. One of: QB · RB · WR · TE.
Canonical home:predictionmarketspicks.com/mcp — docs, setup, the live wall and the per-tool track record. This repo is the bridge and the offline calculators; the server lives on the site.
A hosted Model Context Protocol server that gives AI agents quant tools for Kalshi and Polymarket prediction markets — expected value, Kelly sizing, Bayesian updating, probability conversion, cross-platform price gaps, Fed rate odds, Kalshi's 15-minute markets and perps (with liquidation estimates), live edge signals, and the in-season NFL model: power ratings, win probability, The Ladder, the weekly prop board and game/prop edges.
Every signal our engines publish is graded against the market that priced it — per tool, wins and losses both, including the engines that lose money. The live record: predictionmarketspicks.com/track-record
42 tools — 35 free, 5 Pro, 2 free-with-depth-caps. No key needed for the free set. Four of the free tools are fantasy-draft-only and parked until the 2027 offseason (see below), so 31 free tools answer in-season (the 2026 Senate map and per-race odds joined 2026-09-17; the Kalshi 15-minute board and the two perps tools joined 2026-09-26; the NHL board joined 2026-09-28; the graded track record, the Sleeper league view, start/sit and waiver targets joined 2026-10-11; the NBA prop price board joined 2026-10-11; the NFL game explainer, the NBA game-line board and NBA injury impact joined 2026-10-13).
Fantasy draft landing page:predictionmarketspicks.com/draft — the eight draft tools, connect instructions, and the model behind the board. During the season four of them answer week-by-week NFL prop questions (player_outlook, explain_player, compare_players, sleepers_and_busts); the other four reopen for the 2027 offseason.
See it work
Gemini CLI: install in one command, ask which Kalshi 15-minute markets are open. (47s demo · setup)
Kalshi vs Polymarket, in one question: ask where the two venues disagree, then whether they agree on the next Fed meeting. (50s demo · setup guide)
Kalshi 15-minute gold & Bitcoin + the BTC perp: live boards and perp funding in one chat. (48s demo · commodity markets)
That relays the hosted server verbatim — all 42 tools, live data, tool schemas and result payloads untouched. Set PMP_API_KEY in the server's env to unlock the Pro tools; without one you get the free tools at free depth.
code
npx @predictionmarketspicks/mcp # bridge to the hosted quant server (default)
npx @predictionmarketspicks/mcp --draft # bridge to the fantasy-draft server (half parked until 2027)
npx @predictionmarketspicks/mcp --local # 6 calculators, offline, no network at all
--local is a self-contained build of the six stateless calculators. It makes no network calls, so it runs in an air-gapped sandbox — but it cannot serve the live engines, the NFL model, or anything that reads a market.
Other hosted surfaces (same registry, same tool objects, different selection — no separate install):
11 tools: the 8 draft tools (four answer in season, four parked until the 2027 offseason) plus the in-season league tools my_league, start_sit and waiver_targets
The crypto desk: fifteen_min_board, perps_board, perp_liquidation, commodity_edge (bitcoin) + three calculators
Tools
Free tools need no key. Pro tools read the live PMP edge engines and require a PredictionMarketsPicks API key ($14.99/mo). Deeper results on the list-shaped tools unlock instantly and free — no key to copy, nothing to install: unlock here.
Calculators — free, stateless, also available offline via --local
Tool
What it does
calculate_ev
Expected-value edge on a contract from market price + your probability; returns edge % and a BUY / SELL / SKIP read.
kelly_size
Kelly position size (full / half / quarter / eighth) from win probability, price, and bankroll, with a risk rating.
bayes_update
Update a prior with one or more pieces of evidence; returns the posterior and the per-step chain.
convert_probability
Convert between implied probability, American odds, and decimal odds.
base_rate_gap
Compare a market price to the historical base rate for a class of events; returns the gap in points + sample quality.
combo_edge
Grade a same-game multi-leg combo: EV %, fair vs offered odds, correlation-aware joint probability, negative-correlation trap flag.
Markets — free
Tool
What it does
fed_rate_odds
Live Kalshi-implied odds of a Fed rate cut, hold or hike at each remaining 2026 FOMC meeting, plus the next meeting and the current fed funds rate.
fifteen_min_board
Every Kalshi 15-minute series live — crypto, gold, silver, oil, natural gas, copper, currencies — with the open window's YES price, close time, settlement source, and how the last 96 windows settled.
perps_board
Every Kalshi perp — price, volume, open interest, max leverage, and what funding has cost a long since launch.
perp_liquidation
Where a leveraged Kalshi perp position liquidates (an estimate from Kalshi's published risk parameters), with fees and funding over the hold.
weather_board
Every open Kalshi daily-high temperature strike in 13 cities — YES price, settlement station, close time, and the NWS forecast high beside it.
Politics — free
Tool
What it does
senate_map
Every 2026 Senate seat — holder, structure rating, forecaster ratings and the live Kalshi price, closest race first. Unpriced seats return null, never an estimate.
race_odds
Live Kalshi odds for one 2026 Senate, governor or competitive House race (by state or district, e.g. "TX-34") — every leg's price, volume and link, plus the forecaster ratings.
Markets — free, depth-capped
Tool
What it does
find_arbitrage
Cross-venue price gaps between Kalshi and Polymarket on the same contract. Largest gap free; whole board on Pro.
market_pulse
US macro-health composite (0–100) and regime, plus six category scores. Composite always free.
NFL in-season — free
Tool
What it does
nfl_power_ratings
PWR for all 32 NFL teams — points per game above an average team on a neutral field, with rank and tier.
nfl_win_probability
Turn an NFL spread + total into win probability, projected score, and over/cover probability — or pass two teams to derive the spread.
nfl_ladder
The Ladder — every Kalshi strike vs our whole distribution (spreads, season wins, props) with the derived verdict: SHAPE, LOCATION or PRICED.
nfl_prop_board
This week's NFL prop prices venue by venue — every Kalshi strike vs the book consensus, DraftKings/FanDuel lines, Novig/ProphetX, and where the best price for each side actually is.
nba_prop_board
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.
ladder_arb
Ladder Arb Scanner — Kalshi college football + NFL spread/total ladders priced out of order on the same side of the same game: locked arbitrage (buy the low strike, sell the high one) and crossed-mid inversions with the resting orders that capture them.
NHL — free
Tool
What it does
nhl_edge
Goal Light — every NHL game and player contract priced against Kalshi, with the book consensus beside it and a 10,000-season simulation for the futures board.
track_record
Our graded record per engine (bitcoin, gold, silver, oil, weather, NHL) plus the daily editorial call: W-L, net P/L, a 95% win-rate range and the current model era. WATCH calls are reported apart.
my_league
Your Sleeper league by username — each starter beside every Kalshi prop strike on him this week, with the best price per side, opponent, kickoff and OUT/QB-gate flags. Market data only.
start_sit
Two to four players side by side — the median Kalshi is pricing for each stat, read off his own strike ladder, plus his anytime-TD price. Market prices only; the call stays yours.
waiver_targets
Sleeper's most-added players in the last 24 hours with what Kalshi is pricing each at — filtered to players still available in your league when you give a username.
Fantasy draft desk — half in season, half parked until 2027
Answering in season (free):player_outlook · explain_player · compare_players · sleepers_and_busts — the same names, now about this week: one player's Kalshi prop strikes, why the model prices them there, two to four players side by side, and the players the market over- and underprices.
Parked until the 2027 offseason:draft_board · best_available · who_do_i_draft · adp_market_gaps — still registered (and free), but they answer with a redirect to the in-season NFL tools above rather than a draft answer. They reopen with the 2027 board.
Trade tickets from the silver, gold, oil and bitcoin engines; Polymarket contracts trading away from the PMP model; NFL game and prop edges; the alerts feed. edge_alerts is the one hybrid: Pro keys get the feed in real time, and without a key the same feed arrives delayed 24h.
All tool descriptions and outputs use prediction-market terminology (trader / position / contract / market analysis).
Source
This repo is the public home of the server: the manifest, the bridge, the offline calculator build, and the docs. The hosted service and its live data are operated by PredictionMarketsPicks — MIT license covers this repository, and no install is required to use the server.
code
npm install
npm run smoke # offline calculator self-test, no network
npm run smoke:bridge # bridge self-test against the hosted endpoint
npm start -- --local # stdio server, 6 calculators
Or run the offline build with Docker:
code
docker build -t pmp-mcp-quant .
docker run --rm -i pmp-mcp-quant
About
Built by PredictionMarketsPicks — independent quant tools and edge analysis for Kalshi and Polymarket, published by The 7 Oracles. Educational analysis, not financial advice.