Skip to Content
SkewtapeDocs

MCP server

Skewtape runs a remote MCP server at https://api.skewtape.com/mcp (Streamable HTTP). Add it to your agent and it can search these docs for free, and with a Skewtape API key on the Builder or Pro plan read the same data as the REST API.

Tools

ToolKeyReturnsSame as
search_docsNoneDocs pages that match a query, with an excerpt
read_docNoneOne docs page as Markdown
get_marketsBuilderMarkets from every venue in one schemaGET /v1/markets
get_matched_eventsBuilderCross-venue matched events with their member marketsGET /v1/matched_events
get_fillsBuilderTrade-level fills for a market, a matched event or a venueGET /v1/fills
get_candlesBuilder1m, 1h or 1d candles for a market, a matched event or a venueGET /v1/candles
get_resolutionsBuilderHow, when and on what source each market resolvedGET /v1/resolutions

The docs tools never return market data. They read the same text as /llms-full.txt, and need no key. A search_docs query is at most 256 bytes and 16 words.

The data tools take the same filters as their REST routes and answer a page of rows in data, with next_cursor for the next page: pass it back as cursor. A data tool returns 25 rows unless you ask for another limit (1 to 1,000). get_markets with a venue and a single market_ids entry reads that one market, and get_matched_events with an event_id reads that one event.

Set up your client

Create a key in the dashboard. Send it as the X-API-Key header, or as Authorization: Bearer <key>. Leave the key out to use the docs tools only.

Claude Code

claude mcp add --transport http skewtape https://api.skewtape.com/mcp --header "X-API-Key: $SKEWTAPE_API_KEY"

Without a key:

claude mcp add --transport http skewtape https://api.skewtape.com/mcp

Run /mcp in Claude Code to check that skewtape is connected.

Cursor

In .cursor/mcp.json (one project) or ~/.cursor/mcp.json (every project):

{
  "mcpServers": {
    "skewtape": {
      "url": "https://api.skewtape.com/mcp",
      "headers": { "X-API-Key": "${env:SKEWTAPE_API_KEY}" }
    }
  }
}

VS Code

In .vscode/mcp.json. VS Code asks for the key once and stores it:

{
  "inputs": [
    { "type": "promptString", "id": "skewtape-key", "description": "Skewtape API key", "password": true }
  ],
  "servers": {
    "skewtape": {
      "type": "http",
      "url": "https://api.skewtape.com/mcp",
      "headers": { "X-API-Key": "${input:skewtape-key}" }
    }
  }
}

Claude Desktop

For the docs tools alone, add https://api.skewtape.com/mcp as a custom connector. To send a key, run the server through mcp-remote in claude_desktop_config.json:

{
  "mcpServers": {
    "skewtape": {
      "command": "npx",
      "args": ["mcp-remote", "https://api.skewtape.com/mcp", "--header", "Authorization:${SKEWTAPE_AUTH}"],
      "env": { "SKEWTAPE_AUTH": "Bearer st_live_your_key" }
    }
  }
}

Any other client

Point a Streamable HTTP client at https://api.skewtape.com/mcp with the key in X-API-Key or Authorization: Bearer. The server is stateless: it keeps no session between requests and sends no notifications.

Plans, limits and usage

  • The data tools need a key on the Builder or Pro plan. A key on the Free or History plan gets forbidden_plan, which names the plan to move to. Free and History keys, and no key at all, use the docs tools.
  • Each data tool call is one API call. It counts against your plan's calls a second and calls a month exactly as the REST route does, and shows in your dashboard usage under that route, for example GET /v1/markets.
  • The docs tools are free and limited to about 60 calls a minute from one address.

Data policy

The data tools follow the same data policy as the REST API. Some venues' fields are null with blocked: true and a block_reason_code. A venue whose data is withheld is left out of lists, and a read of one of its markets answers blocked. Matched event fields are Skewtape's own data and are never withheld; a member on a withheld venue keeps its ids.

Errors

A refused call is a tool error whose text is the REST error envelope, so your agent sees the same codes: unauthorized, forbidden_plan, blocked, not_found, invalid_request, rate_limited, quota_exceeded and internal. A rate_limited error carries retry_after_seconds, and a quota_exceeded error carries resets_at, when the month's count starts again.

{
  "error": {
    "code": "unauthorized",
    "message": "The data tools need a Skewtape API key. Send it as the X-API-Key header, or as Authorization: Bearer, in the settings of this MCP server.",
    "docs_url": "https://docs.skewtape.com/errors#unauthorized",
    "request_id": "8f2c41d07a9e4b1c"
  }
}

Example

Sample, 12 Nov 2026. A get_matched_events call with {"min_confidence": 0.95, "resolution_equal": true, "limit": 1} answers one page like this (members shortened):

{
  "data": [
    {
      "event_id": "st_evt_00042",
      "question_canonical": "Will US CPI for October 2026 be above 3.0 percent year on year?",
      "category": "economics",
      "confidence": 0.97,
      "resolution_equal": true,
      "rule_note": "Both venues settle on the BLS release for October 2026.",
      "status": "approved",
      "members": [
        { "venue": "polymarket", "market_id": "0x5e1c...", "pairwise_confidence": 0.97, "status": "active" },
        { "venue": "kalshi", "market_id": "KXCPIYOY-26OCT-T3.0", "pairwise_confidence": 0.97, "status": "active" }
      ]
    }
  ],
  "next_cursor": "eyJ2IjoxfQ"
}

confidence is how sure Skewtape is that the members are the same event, not a probability of the outcome.

Powered by Kalshi Research

On this page