Skip to main content
Glama

Prediction Markets Quant

NFL Edge (model vs Kalshi)

nfl_edge
Read-only

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.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "nfl_edge"
  }
}

Input Schema

NameRequiredDescriptionDefault
limitNoMax rows (default 10; 5 when the call has no arguments).
marketNogame = this week; futures = win totals; mvp; championship = playoffs to Super Bowl. One of: game · futures · mvp · championship.
minEdgeNoMin |edge| in pp (default 4), futures/mvp/championship only.
tickersNoOptional Kalshi ticker watchlist (up to 25), market or event tickers. Unmodeled tickers return not_covered.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / limit / description
      Previous value: -"Max rows (default 10)."New value: +"Max rows (default 10; 5 when the call has no arguments)."
  2. Changed5 schema fields changed
    • removedInput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • changedInput schema / properties / limit / description
      Previous value: -"Max rows (default 10). Values above 25 are clamped to 25."New value: +"Max rows (default 10)."
    • changedInput schema / properties / market / description
      Previous value: -"game = this week moneyline edges; futures = season win totals; mvp = KXNFLMVP; championship = playoff/conference/Super Bowl. One of: game · futures · mvp · championship."New value: +"game = this week; futures = win totals; mvp; championship = playoffs to Super Bowl. One of: game · futures · mvp · championship."
    • changedInput schema / properties / minEdge / description
      Previous value: -"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%\")."New value: +"Min |edge| in pp (default 4), futures/mvp/championship only."
    • changedInput schema / properties / tickers / description
      Previous value: -"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)."New value: +"Optional Kalshi ticker watchlist (up to 25), market or event tickers. Unmodeled tickers return not_covered."
  3. Changed4 schema fields changed
    • removedInput schema / properties / limit / anyOf
      Removed value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "type": "number"
      -      },
      -      {
      -        "type": "string"
      -      }
      -    ]
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / limit / type
      Added value: +[
      +  "number",
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / minEdge / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • addedInput schema / properties / minEdge / type
      Added value: +[
      +  "number",
      +  "string"
      +]
  4. Changed5 schema fields changed
    • addedInput schema / properties / market / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "enum": [
      +      "game",
      +      "futures",
      +      "mvp",
      +      "championship"
      +    ],
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / market / default
      Removed value: -"game"
    • changedInput schema / properties / market / description
      Previous 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."
    • removedInput schema / properties / market / enum
      Removed value: -[
      -  "game",
      -  "futures",
      -  "mvp",
      -  "championship"
      -]
    • removedInput schema / properties / market / type
      Removed value: -"string"
  5. Changed6 schema fields changed
    • addedInput schema / properties / limit / anyOf
      Added value: +[
      +  {
      +    "anyOf": [
      +      {
      +        "type": "number"
      +      },
      +      {
      +        "type": "string"
      +      }
      +    ]
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / limit / default
      Removed value: -10
    • changedInput schema / properties / limit / description
      Previous value: -"Max rows (default 10)."New value: +"Max rows (default 10). Values above 25 are clamped to 25."
    • removedInput schema / properties / limit / maximum
      Removed value: -25
    • removedInput schema / properties / limit / minimum
      Removed value: -1
    • removedInput schema / properties / limit / type
      Removed value: -"integer"
  6. Changed1 schema field changed
    • changedInput schema / properties / minEdge / description
      Previous value: -"Minimum absolute edge in pp to include (default 4). Ignored when tickers[] is passed. Accepts a number or a numeric string (\"3\", \"3pp\", \"3%\")."New value: +"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%\")."
  7. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds non-obvious behavior the schema cannot: the tool is gated behind Pro (PredictionMarketsPicks sign-in or Pro API key), and unmodeled tickers return a not_covered result. It does not discuss price freshness or any rate limits.

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

Conciseness4/5

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

The trigger phrases are front-loaded, followed by scope, return fields, the tickers use case, and the auth note. It is dense and every clause carries information, though the quoted query strings make the opening slightly choppy.

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

Completeness4/5

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

With no output schema, the description correctly carries the return-value burden by enumerating model probability, price, edge and side. Auth gating and the not_covered case are disclosed; only edge cases like empty results or market/ticker interaction remain unstated.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents limit, market, minEdge and tickers defaults. The description still adds meaning by framing tickers[] as a watchlist spanning futures, mvp and championship, and by listing the output fields (model probability, price, edge, side) that the parameters drive.

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

Purpose4/5

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

The description names a specific resource and scope: an NFL model compared against live Kalshi prices, covering this week's games, season win totals, MVP and championship odds. That scope separates it from the player-prop siblings (nfl_prop_board, nfl_prop_edge) and from nfl_ladder or nfl_power_ratings, though it never names an alternative explicitly.

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

Usage Guidelines4/5

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

It opens with concrete trigger phrasing ("which NFL games are mispriced on Kalshi", "NFL win total, MVP or Super Bowl edges") and adds a watchlist-checking use case via tickers[]. There is no explicit when-not-to-use or routing to a sibling tool, which keeps it 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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.