# Crosswire — Polymarket & Kalshi Arbitrage

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/NicolasDuarte04/crosswire-mcp  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/crosswire-polymarket-kalshi-arbitrage

## Description
Cross-venue Polymarket+Kalshi arbitrage: resolution mismatch, void risk & settlement divergence.

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "crosswire-polymarket-kalshi-arbitrage": {
    "command": "npx",
    "args": ["-y","crosswire-polymarket-kalshi-arbitrage"]
  }
}
```

## Documentation & README

# Crosswire — MCP server

**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](https://crosswire-api.com) · Status & track record: [api.crosswire-api.com](https://api.crosswire-api.com/)

### Connect

Generic MCP client config (`mcp.json`):

```json
{
  "mcpServers": {
    "crosswire": {
      "url": "https://api.crosswire-api.com/mcp"
    }
  }
}
```

Claude Code:

```bash
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**:

1. `canonical_event_id` — a pair id from `list_covered_events`,
   e.g. `"wc26:match:MEX-RSA:2026-06-11:result#home"` (`#home` / `#draw` / `#away` selects the outcome leg), **or**
2. `market_a` + `market_b` — one Polymarket `conditionId` (`0x…` hex) and one Kalshi ticker
   (e.g. `KXWCGAME-26JUN11MEXRSA-MEX`), order-insensitive. `outcome` on 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:

```json
{
  "canonical_event_id": "wc26:match:MEX-RSA:2026-06-11:result#home"
}
```

Response (abridged with `…`):

```json
{
  "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`](https://api.crosswire-api.com/v1/events) and
[`/v1/health`](https://api.crosswire-api.com/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](mailto:nicolasduartejaraba@gmail.com?subject=Crosswire%20API%20key).

## 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](LICENSE) — covers this repository (listing metadata and documentation). The Crosswire
service itself is proprietary.

