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

Always returns: count, cursor, markets

FieldTypeDescription
countnumberNumber of markets returned
cursorstring | nullPagination cursor for next batch
marketsarrayList of formatted markets
Full JSON Schema
{
  "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"
    }
  },
  "required": [
    "count",
    "cursor",
    "markets"
  ]
}

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 October 5, 2026