Skip to content
← Blog

Kalshi + Polymarket MCP for Claude and Cursor

dino.markets

Claude and Cursor can inspect Kalshi and Polymarket through Dino's native Model Context Protocol server. The connection exposes matched markets as tools. An agent can resolve a market name to a stable Dino id, then read the settlement disclosure behind its price comparison.

This guide connects an MCP client with a free Dino key. The server is read-only: it returns market data and confirmed Opportunities, while every trade stays in your own venue account.

Create a key and keep it outside source code

Create a free API key, then add this server block to Claude Desktop or Cursor. Both clients can use mcp-remote to bridge their local MCP process to Dino's Streamable HTTP endpoint. Replace the placeholder in the private local client config:

{
  "mcpServers": {
    "dino-markets": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://api.dino.markets/v2/mcp/",
        "--header",
        "Authorization:Bearer ${DINO_API_KEY}"
      ],
      "env": {
        "DINO_API_KEY": "sk_live_..."
      }
    }
  }
}

The env block gives the local mcp-remote process its DINO_API_KEY; the header argument reads that value. This client config now contains the secret, so keep it out of repositories and shared folders and restrict access to your user account.

The trailing slash on /v2/mcp/ matters because strict clients can fail on the redirect from the no-slash URL. Restart the client after saving the config. Avoid screenshots that reveal the key.

Verify the tools with concrete questions

Once the server appears in the client's tool list, ask questions that map to one clear operation. These prompts exercise the discovery and detail flow without asking the agent to infer market identity from titles:

  1. “List the market categories and valid filters available from Dino.”
  2. “Find open BTC threshold markets across Kalshi and Polymarket.”
  3. “Open the first result and summarize its outcome structure and settlement risks.”
  4. “Find confirmed baseball Opportunities, then inspect the full Market behind the first result.”

The expected tool path is visible in the answer. Category discovery calls list_categories. A name or topic lookup calls find_markets. Full terms come from get_market. Confirmed Opportunities come from find_arbitrage and should be followed by get_market using the returned market_id.

Make the agent read the contract before the price

A useful cross-venue research prompt tells the agent which checks to perform. Use this shape when a market appears on both venues:

Find the matched market for [topic]. Use get_market on the selected id.
Before discussing prices, report:

- the outcome keys and names on the matched Market
- whether both venues have a price for every outcome
- settlement parity and each disclosed risk
- the price difference in percentage points, with priced_at

Treat a spread as an observed difference. Only call something a confirmed
Opportunity when find_arbitrage returns it.

That sequence matters because two listings can share a headline while using different cutoffs, sources, outcome buckets, or boundary wording. Dino's Market detail carries those differences under settlement.risks[]. The signal field stays spread unless the pair passes the full parity and risk gate.

Know the boundary of the MCP server

The MCP server reads Dino's matched catalog and public Opportunity resource. It has no access to venue accounts or funds, and it cannot place orders. This is developer data, not trading or financial advice. watch_markets returns a WebSocket ticket and the channels allowed by your Dino plan; consuming that stream still belongs in a WebSocket client or one of the official SDKs.

All documented MCP tools are available on Free. Channel access differs by plan: Free receives the curated sample and status channels, while paid plans receive the full markets:* stream. Read the MCP tool reference for the complete arguments and the matching guide for the confidence and settlement gates used by the server.

Create a free key and connect the server. Start with the category prompt above.

More from the blog