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
| Tool | Key | Returns | Same as |
|---|---|---|---|
search_docs | None | Docs pages that match a query, with an excerpt | |
read_doc | None | One docs page as Markdown | |
get_markets | Builder | Markets from every venue in one schema | GET /v1/markets |
get_matched_events | Builder | Cross-venue matched events with their member markets | GET /v1/matched_events |
get_fills | Builder | Trade-level fills for a market, a matched event or a venue | GET /v1/fills |
get_candles | Builder | 1m, 1h or 1d candles for a market, a matched event or a venue | GET /v1/candles |
get_resolutions | Builder | How, when and on what source each market resolved | GET /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/mcpRun /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
Skewtape docs
Prediction-market data from eight venues in one schema. The API reference, the MCP server, monthly deltas and the error codes.
Monthly deltas
Keep a local copy of the History snapshot current. Each month's delta takes last month's snapshot to this month's, with new month files whole and the reference tables as changed rows. Apply it with DuckDB.