Crosswire — MCP server
MCP serverDev toolsThis integration lets your AI compare prediction market prices on Polymarket and Kalshi to find cross-venue arbitrage opportunities. It also weighs the risks that come with trading the same event on two venues, such as resolution mismatch, void risk, and settlement divergence.
Use Crosswire — MCP server in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Crosswire — MCP server and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use Crosswire to check resolution risk
No key or account is asked for. Not verified by us yet: Ahel has not run a call through it.
Details
Available today. Use it from your connected AI after setup.
No key or account is asked for. Not verified by us yet: Ahel has not run a call through it.
After adding it, ask your AI to check events listed on both Polymarket and Kalshi for cross-venue arbitrage opportunities and the risks attached to each one.
What your AI can do with it
- Compare prices for the same event across Polymarket and Kalshi
- Surface cross-venue arbitrage opportunities between the two venues
- Flag resolution mismatch where the venues may settle an event differently
- Weigh void risk before acting on a price gap
- Account for settlement divergence between Polymarket and Kalshi
Install Crosswire — MCP server
The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.
Claude Code
claude mcp add --transport http --scope user crosswire-mcp-server 'https://api.crosswire-api.com/mcp'Run it once in your project, then open /mcp to approve any sign-in the server asks for.
Claude Desktop
https://api.crosswire-api.com/mcpAdd a custom connector in Settings, paste this address, and approve the sign-in.
Cursor
cursor://anysphere.cursor-deeplink/mcp/install?name=crosswire-mcp-server&config=eyJ1cmwiOiJodHRwczovL2FwaS5jcm9zc3dpcmUtYXBpLmNvbS9tY3AifQ==Open the link and Cursor adds the server at that address.
ChatGPT
https://api.crosswire-api.com/mcpIn Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.
Codex
codex mcp add crosswire-mcp-server --url 'https://api.crosswire-api.com/mcp'Run it once, then sign in with codex mcp login crosswire-mcp-server if the server asks for an account.
From the project's README
As published by nicolasduarte04/crosswire-mcp in README.md.
Pre-trade resolution-risk firewall for cross-venue prediction-market arbitrage. Before executing a two-leg Polymarket + Kalshi position, Crosswire flags resolution mismatch, void risk, and settlement divergence — void-rule asymmetry, settlement-scope differences (90-minute vs extra-time), settlement-source and -timing gaps, stale data, and thin liquidity between Polymarket and Kalshi FIFA World Cup 2026 markets — so automated trading agents don't get blown up by markets that look identical but settle differently. Verdict: safe / caution / block.
It does not predict outcomes and it does not execute trades. It answers one question: if I buy this contract on one venue and sell its twin on the other, do they actually settle on the same thing? When they don't, it names the exact clause that breaks the hedge.
Remote MCP endpoint
https://api.crosswire-api.com/mcp
- Transport: streamable HTTP
- The MCP tools are free — no API key, no signup
- Website: crosswire-api.com · Status & track record: api.crosswire-api.com
Connect
Generic MCP client config (mcp.json):
{
"mcpServers": {
"crosswire": {
"url": "https://api.crosswire-api.com/mcp"
}
}
}
Claude Code:
claude mcp add --transport http crosswire https://api.crosswire-api.com/mcp
Tools
check_resolution_risk
Pre-trade safety check for a cross-venue pair. Returns a machine-readable verdict —
execution_verdict: safe / caution / block — inside a full Fungibility & Settlement Audit
Object (FSAO) with structured findings, top-level divergence flags, venue rule overrides,
fee-adjusted spread, and verdict reasons.
Identify the pair by either:
canonical_event_id— a pair id fromlist_covered_events, e.g."wc26:match:MEX-RSA:2026-06-11:result#home"(#home/#draw/#awayselects the outcome leg), ormarket_a+market_b— one PolymarketconditionId(0x…hex) and one Kalshi ticker (e.g.KXWCGAME-26JUN11MEXRSA-MEX), order-insensitive.outcomeon a ref is optional — matching uses only(venue, market_id).
Optional: notional_usd (enables the thin-liquidity check at your trade size).
If the pair is not covered, the tool returns a non-error coverage reply (covered: false)
naming the covered matches and the coverage cutoff instead of an FSAO.
Example — real production audit (World Cup opener, Mexico vs South Africa, home leg):
Request:
{
"canonical_event_id": "wc26:match:MEX-RSA:2026-06-11:result#home"
}
Response (abridged with …):
{
"audit_id": "aud_01KTW2Y7S3Q3JFYJK863FJB66X",
"canonical_event_id": "wc26:match:MEX-RSA:2026-06-11:result#home",
"leg_a": { "venue": "polymarket", "market_id": "0x4cd77d45…10ff", "outcome": "Yes" },
"leg_b": { "venue": "kalshi", "market_id": "KXWCGAME-26JUN11MEXRSA-MEX", "outcome": "yes" },
"matching_confidence": 0.98,
"semantically_fungible": false,
"scope_divergence_flag": false,
"void_rule_divergence_flag": true,
"settlement_source_divergence_flag": true,
"settlement_timing_divergence_flag": true,
"polymarket_rule_override": "If the game is canceled entirely, with no make-up game, this market will resolve \"No\". …",
"kalshi_rule_override": "If the game is cancelled or rescheduled to over two weeks away, the market will resolve to a fair price …",
"findings": [
{ "code": "void_rule", "severity": "fatal",
"detail": "Void conditions differ … A core void asymmetry can void one leg while the other settles.",
"affects_fungibility": true },
{ "code": "settlement_source", "severity": "warn",
"detail": "fifa.com (UMA-adjudicated) vs Kalshi internal …" },
{ "code": "settlement_timing", "severity": "warn",
"detail": "2h statistics fallback vs unspecified …" }
],
"fee_adjusted_true_spread": 0.0009,
"snapshot_age_seconds": 61,
"execution_verdict": "block",
"verdict_reasons": [ "void_rule: Void conditions differ …", "…" ],
"ruleset_sha": "…"
}
That block is the product working as intended: a canceled match pays the Polymarket leg
$0 while Kalshi resolves the same position to "a fair price" — the hedge breaks exactly when
you need it.
list_covered_events
Free discovery of everything check_resolution_risk can audit: the covered canonical events,
their per-outcome pair ids (…#home / #draw / #away), the Polymarket conditionIds and
Kalshi tickers with outcome labels for each pair, match dates, the frozen ruleset_sha
pinning the identity graph, the coverage kickoff cutoff, and snapshot freshness. Takes no
arguments. Use a returned pair_id (or a pair's two market ids) as input to
check_resolution_risk.
Verdict semantics
| Verdict | Meaning | Agent action |
|---|---|---|
safe | No fatal findings, data fresh. The two contracts settle on the same thing. | Proceed; your stack decides. |
caution | Non-fatal divergence or degraded data (e.g. stale snapshot, thin liquidity, source/timing gaps). | Proceed only if your strategy tolerates the named finding. |
block | A fatal divergence (void-rule asymmetry, scope mismatch, granularity mismatch…) can settle the legs differently. | Do not execute the pair as a hedge. |
Every FSAO carries the findings that produced the verdict — the audit is explainable,
append-only logged server-side, and reproducible from
{ruleset_sha, snapshot_ts, canonical_event_id}.
Coverage
FIFA World Cup 2026 match markets listed on both Polymarket and Kalshi, expanding in batches
throughout the tournament. Current coverage is always live — query list_covered_events,
or /v1/events and
/v1/health on the REST API. Listings here are
intentionally coverage-generic; the endpoint is the source of truth.
Pricing & keys
The MCP tools are free at launch — no key. The keyed REST API
(POST /v1/audit, same FSAO) issues free opening-weekend keys by mail:
nicolasduartejaraba@gmail.com.
What we never do
- No outcome prediction. No model probabilities are exposed.
- No execution. No order routing or placement. The gate returns a verdict; your stack decides.
- No custody. No customer keys, funds, or settlement.
- No strategy harvesting. The API sees only the two market references being audited and an optional notional.
Crosswire is an advisory data service. Nothing it returns is financial advice.
License
MIT — covers this repository (listing metadata and documentation). The Crosswire service itself is proprietary.
Tools it offers (2)
What this server listed when Ahel dialed its public endpoint in Oct 2026, with no key and no account of yours. The names are the server’s own.
check_resolution_risklist_covered_events
Signals
- GitHub stars
- 1
- Last commit
- Jun 2026
Advanced
- Delivery
- crosswire-polymarket-kalshi-arbitrage MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
- Item type
- mcp-server
- Key
com-crosswire-api-crosswire-polymarket-kalshi-arbitrage- Source
- github.com/nicolasduarte04/crosswire-mcp
- Hosted endpoint
https://api.crosswire-api.com/mcp
github.com/nicolasduarte04/crosswire-mcp