kalshi_markets

Pack: kalshi · Connect: https://pipeworx.io/mcp (see Connect below for a single-pack URL)

No MCP client? Call it directly: GET https://gateway.pipeworx.io/v1/tools/kalshi_markets for the schema, then POST the same URL with its arguments for the data.

Kalshi prediction markets matching a filter, each with its live Yes/No price.

Tool description as the model sees it

List or search Kalshi prediction markets, open or already settled. Pass keyword to find markets by subject — “inflation”, “Iran”, “Vance” — served by Kalshi’s own full-corpus search, with each result tagged match: market|event|related so you can tell a literal keyword hit from a relevance-ranked neighbor. A keyword search honours status, so status “settled” is how you find a RESOLVED market by subject (its result is the outcome) — Kalshi indexes settled markets separately and the open index does not contain them. Other filters: status (open|closed|settled|unopened), event_ticker (group by event), series_ticker (group by series like KXFED for Fed rate). EVERY path returns the same fields — ticker, event_ticker, series_ticker, title, subtitle, status, yes_ask/yes_bid/no_ask/last_price (cents 1–99), implied_yes_prob, volume, volume_24h, open_interest, liquidity, close_time, category, result — so you can screen by category AND liquidity in one call. Two fields are conditional and say so here rather than surprising you: result is the settled outcome (“yes”/“no”) and is null while a market is still trading, and category comes from the market’s Kalshi series (Kalshi’s market records carry none), so it is null for the rare market whose series lookup fails — listed in fields_omitted when that happens. A keyword search adds two fields a listing has no notion of: event_title and match. Anything we cannot populate is named in fields_omitted rather than returned as a bare null. Use this to discover markets; use kalshi_market for the rules text.

Parameters

NameTypeRequiredDescription
keywordstringnoSubject to search for, e.g. “inflation”, “Iran”, “Vance”. Runs Kalshi’s own search over the full market corpus, in the slice named by status — pass status “settled” to find markets that have already RESOLVED (they carry result), which the default open index does not contain. Word-boundary matched, so “Vance” will not match “advance”.
statusstringnoopen | closed | settled (default open)
event_tickerstringnoFilter to one event (e.g. “KXFED-26OCT”)
series_tickerstringnoFilter to one series (e.g. “KXFED” for Fed funds rate)
limitnumberno1-1000 (default 100)
cursorstringnoPagination cursor from previous response

Example call

Arguments

{
  "keyword": "inflation"
}

curl

curl -X POST https://gateway.pipeworx.io/kalshi/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"kalshi_markets","arguments":{"keyword":"inflation"}}}'

TypeScript (@pipeworx/sdk)

import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();

const result = await pipeworx.call('kalshi_markets', {
  "keyword": "inflation"
});

More examples

{
  "status": "open",
  "limit": 50
}
{
  "series_ticker": "KXFED",
  "limit": 100
}
{
  "keyword": "2024 presidential election",
  "status": "settled",
  "limit": 5
}

Response shape

Full JSON Schema
{
  "type": "object",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "count": {
          "type": "number",
          "description": "Number of markets returned"
        },
        "cursor": {
          "type": [
            "string",
            "null"
          ],
          "description": "Pagination cursor for next batch"
        },
        "markets": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "ticker": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Market ticker"
              },
              "event_ticker": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Parent event ticker"
              },
              "title": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Market title"
              },
              "subtitle": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Market subtitle"
              },
              "status": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "open|closed|settled"
              },
              "yes_ask_cents": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Ask price in cents"
              },
              "yes_bid_cents": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Bid price in cents"
              },
              "no_ask_cents": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "NO ask price in cents"
              },
              "last_price_cents": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Last trade price in cents"
              },
              "implied_yes_prob": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Implied YES probability (0-1)"
              },
              "volume": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Total volume"
              },
              "volume_24h": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "24-hour volume"
              },
              "open_interest": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Open interest"
              },
              "close_time": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Market close/expiration time"
              },
              "category": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Market category"
              }
            }
          },
          "description": "List of formatted markets"
        },
        "found": {
          "type": "boolean",
          "enum": [
            true
          ],
          "description": "Present and true on an answer; a miss is the found:false branch."
        },
        "keyword": {
          "type": "string"
        },
        "source": {
          "type": "string"
        },
        "searched_status": {
          "type": "string"
        },
        "total_results_count": {
          "type": "number"
        },
        "direct_matches": {
          "type": "number"
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "keyword_only_fields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "count",
        "markets"
      ]
    },
    {
      "type": "object",
      "description": "A miss or an unavailable upstream: found:false with a reason and a hint (the shape check-found-false-schemas.mjs expects).",
      "properties": {
        "found": {
          "type": "boolean",
          "enum": [
            false
          ]
        }
      },
      "required": [
        "found"
      ]
    }
  ]
}

Connect

Add this to your MCP client config — every tool in the catalog, including this one — or use one-click install buttons:

{
  "mcpServers": {
    "pipeworx": {
      "url": "https://pipeworx.io/mcp"
    }
  }
}
Connect to just the kalshi pack
{
  "mcpServers": {
    "kalshi": {
      "url": "https://gateway.pipeworx.io/kalshi/mcp"
    }
  }
}

See Getting Started for client-specific install steps.

Regenerated from source · build November 15, 2026