Skip to main content
Glama

Prediction Markets Quant

Kalshi 15-Minute Markets — every series, live

fifteen_min_board
Read-only

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): window status, YES price, close time, target, settlement source and the up rate over the last 96 windows; the same window on Polymarket international for BTC/ETH/SOL/XRP; and our live Bitcoin top-of-hour strategy with its record.

Input Schema

NameRequiredDescriptionDefault
limitNoMax rows (default 30).
seriesNoOne series: ticker (KXETH15M) or asset ("eth", "gold", "euro").
horizonNo15m (Kalshi, default) or 5m (Polymarket US BTC/ETH/SOL/XRP; Kalshi lists none). One of: 15m · 5m.
open_onlyNoOnly series with a window open right now (default false).
asset_classNocrypto · commodity · currency · all (default all).

Output Schema

NameRequiredDescriptionDefault
rowsNoKalshi 15-minute series: window status, YES price, close time, target, settlement source, up rate; for BTC/ETH/SOL/XRP the same window on Polymarket (international, live book: price_source, as_of), and on the Bitcoin row venue_record — the two venues graded on the same windows.
as_ofNoWhen the board was read.
sourcesNo
our_modelNoBitcoin only: our published top-of-hour strategy — version and status ("current version": it stays until it breaks), live_record (our own Kalshi account, after fees), paper record, last_call (the bot's newest decision for a closed window; source bot or paper), next decision time, and current_call: the bot's own :55 decision for the open window (PLAY = live, WATCH = paper).
tell_userNoShow this sentence to the user first.
timestampNo
needs_inputNo
example_callNo
data_freshnessNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / horizon
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "enum": [
      +        "15m",
      +        "5m"
      +      ],
      +      "type": "string"
      +    }
      +  ],
      +  "description": "15m (Kalshi, default) or 5m (Polymarket US BTC/ETH/SOL/XRP; Kalshi lists none). One of: 15m · 5m."
      +}
  2. Changed3 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 30). Values above 40 are clamped to 40."New value: +"Max rows (default 30)."
    • removedOutput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
  3. Changed2 schema fields changed
    • changedOutput schema / properties / our_model / description
      Previous value: -"Bitcoin only: our published top-of-hour rule — status (WATCH = the current version), paper record, last graded call, next decision time, and current_call: the bot's own :55 decision for the open window (PLAY = live, WATCH = paper)."New value: +"Bitcoin only: our published top-of-hour strategy — version and status (\"current version\": it stays until it breaks), live_record (our own Kalshi account, after fees), paper record, last_call (the bot's newest decision for a closed window; source bot or paper), next decision time, and current_call: the bot's own :55 decision for the open window (PLAY = live, WATCH = paper)."
    • changedOutput schema / properties / rows / description
      Previous value: -"Kalshi 15-minute series: window status, YES price, close time, target, settlement source, up rate."New value: +"Kalshi 15-minute series: window status, YES price, close time, target, settlement source, up rate; for BTC/ETH/SOL/XRP the same window on Polymarket (international, live book: price_source, as_of), and on the Bitcoin row venue_record — the two venues graded on the same windows."
  4. Changed1 schema field changed
    • changedOutput schema / properties / our_model / description
      Previous value: -"Bitcoin only: our published top-of-hour rule — status (WATCH until it passes), paper record, last graded call, next decision time, and current_call: the bot's own :55 decision for the open window (PLAY = live, WATCH = paper)."New value: +"Bitcoin only: our published top-of-hour rule — status (WATCH = the current version), paper record, last graded call, next decision time, and current_call: the bot's own :55 decision for the open window (PLAY = live, WATCH = paper)."
  5. Changed2 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"
      +]
  6. Changed1 schema field changed
    • changedOutput schema / properties / our_model / description
      Previous value: -"Bitcoin only: our published top-of-hour rule — status (WATCH until it passes), paper record, last graded call, next decision time."New value: +"Bitcoin only: our published top-of-hour rule — status (WATCH until it passes), paper record, last graded call, next decision time, and current_call: the bot's own :55 decision for the open window (PLAY = live, WATCH = paper)."
  7. Changed1 schema field changed
    • addedOutput schema / properties / our_model
      Added value: +{
      +  "description": "Bitcoin only: our published top-of-hour rule — status (WATCH until it passes), paper record, last graded call, next decision time."
      +}
  8. 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: -30
    • changedInput schema / properties / limit / description
      Previous value: -"Max rows (default 30)."New value: +"Max rows (default 30). Values above 40 are clamped to 40."
    • removedInput schema / properties / limit / maximum
      Removed value: -40
    • removedInput schema / properties / limit / minimum
      Removed value: -1
    • removedInput schema / properties / limit / type
      Removed value: -"integer"
  9. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "as_of": {
      +      "description": "When the board was read."
      +    },
      +    "data_freshness": {},
      +    "example_call": {},
      +    "needs_input": {},
      +    "rows": {
      +      "description": "Kalshi 15-minute series: window status, YES price, close time, target, settlement source, up rate."
      +    },
      +    "sources": {},
      +    "tell_user": {
      +      "description": "Show this sentence to the user first.",
      +      "type": "string"
      +    },
      +    "timestamp": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  10. Added

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/non-destructive, so the description sensibly spends its words on payload behavior instead: that it blends Kalshi with Polymarket international data and includes a live strategy record, which explains the openWorld hint. It omits freshness/refresh cadence and result ordering, so it's strong but not complete.

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 use-case triggers are front-loaded and the description is essentially one dense but readable sentence with no filler. The payload enumeration is long enough that some readers will skim, but every clause carries real information.

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

Completeness5/5

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

With an output schema present, the description needn't document return shapes, and it still tells the agent the scope (all 15-min series plus Polymarket and the BTC strategy), that data is live, and the historical depth (96 windows). Nothing an agent needs before calling is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter's meaning is already spelled out structurally. The description adds only indirect hints (the asset families covered, the 15m vs 5m split), and never explains limit, open_only, or series selector behavior beyond the schema.

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

Purpose5/5

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

States a concrete verb+resource: a live board of every Kalshi 15-minute up-or-down series, and enumerates exactly what each row carries (window status, YES price, close time, target, settlement source, up rate over 96 windows). It also names the non-obvious extra content (Polymarket international comparison, Bitcoin top-of-hour strategy record), which no sibling covers.

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?

Opens with two explicit trigger questions ('what is the ETH 15-minute market doing', 'which Kalshi 15-minute markets are open'), which gives clear usage context. It does not name an alternative tool or a when-not-to-use condition, so the top mark isn't earned.

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.