matchwire.win — Mapped Prediction Markets (Kalshi, Polymarket, Predict.fun)

win.matchwire由 matchwire.win 發布官方發布者v0.1.0更新於 Oct 24, 2026

One row per game, matched across Kalshi, Polymarket US/Intl and Predict.fun. Mapping only.

已驗證Streamable HTTP可網頁執行金融資料與分析

概覽

AI 產生的概覽

遠端 MCP 伺服器,把同一場體育賽事在 Kalshi、Polymarket 美國/國際站與 Predict.fun 上的市場對應起來,每場比賽回傳一列並保留各平台自己的市場 id。

可以做什麼
  • 列出運動項目與分組及其比賽數量,並查看服務與各平台健康狀態
  • 依運動、平台、市場類型、聯盟與狀態篩選比賽列,或依對應 id 取得單列
  • 讀取每筆掛單的平台市場 id、比對層級與信心分數,以及在該平台讀取該市場的請求
  • 只拉取自某個序號以來變動的列,包含已移除比賽的墓碑紀錄
  • 向服務方回報對應問題
適用情境
適合需要跨多個預測市場平台比對或交叉參照同一體育賽事市場、又不想自行維護對帳流程的情境。它只說明哪個平台上的哪個市場是同一場比賽,價格與訂單簿仍須從各平台取得。
執行需求
透過 streamable HTTP 連線 api.matchwire.win 遠端端點,不需在本機安裝套件。需要付費 API 金鑰,放在 x-api-key 標頭中;金鑰於服務商網站申請,方案每月 99 美元起,Starter 提供 14 天試用。回傳結果受金鑰所屬方案限制。
安裝前請注意
需要付費訂閱,並在 x-api-key 標頭提供金鑰。僅提供對應,不含價格或訂單簿,交易判斷仍須各平台資料。report_issue 工具會把回饋送給服務商。結果受方案限制,部分運動或平台可能無法使用。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 matchwire.win — Mapped Prediction Markets (Kalshi, Polymarket, Predict.fun),將其新增到工作區。
  2. 連接 x-api-key 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/win.matchwire%2Fmapping/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "matchwire-win-mapped-prediction-markets": {
      "type": "http",
      "url": "https://api.matchwire.win/mcp",
      "headers": {
        "x-api-key": "<YOUR_API_KEY>"
      }
    }
  }
}

README

[matchwire.win]

matchwire.win

Mapped prediction-market data for Node.js and Python. One client, no dependencies: matchwire.win returns one row per game, matched across Kalshi, Polymarket US, Polymarket International and Predict.fun, with each venue's own market id left intact — the pieces you need to compare a Kalshi API market with its Polymarket API twin without owning a reconciliation job.

Market types are matched too: winners, spreads and handicaps, totals and props. The line is part of the match, so over 45.5 is never confused with over 48.5.

Mapping only — no prices, no order books. Prices come from each venue; this library tells you which market on which venue is the same game.

js
import { Matchwire } from 'matchwire.win';
const mw = new Matchwire({ apiKey: process.env.MATCHWIRE_API_KEY });
const { rows, seq } = await mw.rows({ sport: 'nfl', venue: ['kalshi', 'poly'] });const game = rows.find((r) => r.listings.length > 1);console.log(game.name, game.listings.map((l) => `${l.venue}:${l.marketId}`));
  • Zero dependencies. One src/ directory on the global fetch. Nothing installs alongside it.
  • Node.js 18+, ESM and CommonJS, hand-written TypeScript declarations.
  • Typed errors — a 429 is distinguishable from a 401 invalid_key in code, not by string matching.
  • Deltas and streaming — since=<seq> for changed rows and tombstones, or the same updates over SSE.
  • MCP included — the same tools an AI agent gets from https://api.matchwire.win/mcp.
  • MIT licensed.

Install

bash
npm install matchwire.win      # Node.js — zero dependenciespip install matchwire.win      # Python 3.9+ — standard library only

Get a key at matchwire.win — plans start at $99/month with a 14-day trial on Starter.

Quickstart

Save as quickstart.mjs and run node quickstart.mjs (Needs MATCHWIRE_API_KEY in the environment):

js
import { Matchwire } from 'matchwire.win';
const mw = new Matchwire({ apiKey: process.env.MATCHWIRE_API_KEY });
const status = await mw.status();console.log(`${status.store.events} games, ${status.store.bound} bound listings`);
const { sports } = await mw.sports();console.log(sports.slice(0, 5).map((s) => `${s.sport} ${s.events}`));
const { rows } = await mw.rows({ sport: 'nfl', limit: 3 });for (const row of rows) {  console.log(row.name, row.status, row.listings.map((l) => l.venue).join('+'));}

The repository ships the same thing with formatting and error handling: node examples/quickstart.mjs.

API

MethodEndpointReturns
status()GET /api/v1/statusService and per-venue health, current seq, coverage counts
sports()GET /api/v1/sportsSports with game counts, plus group ids (esports, american-football, …)
rows(params)GET /api/v1/rowsOne row per game with its per-venue listings
row(id)MCP get_rowOne game by its mapped id
stream(params)GET /api/v1/pushThe same updates as Server-Sent Events
callTool(name, args)POST /mcpAny tool the MCP endpoint advertises
tools()POST /mcpThe tool list the endpoint advertises

Filters

sport, venue, type, league, status accept a value or a comma list; they combine. since=<seq> switches to a delta (changed rows plus tombstones).

  • venue= kalshi · poly (Polymarket US) · polyintl (Polymarket International) · predictfun
  • type= winner · total · handicap · map_winner · score · event
  • status= scheduled · live · ended
  • sport= a sport name (baseball, not mlb) or a group id from sports()
js
// Everything that changed since the last call, plus tombstones for pruned games.let seq = 0;const first = await mw.rows({ sport: 'esports', limit: 5000 });seq = first.seq;
const delta = await mw.rows({ since: seq });console.log(delta.rows.length, 'changed', delta.tombstones?.length ?? 0, 'gone');
// Stream instead of polling.for await (const frame of mw.stream({ since: seq })) {  console.log(frame.event, frame.data.rows?.length);  if (Date.now() - started > 10_000) break;   // or AbortController}

Mapping, not prices

Every listing carries the venue's own marketId, a tier (exact, normalized, fuzzy) and a confidence, plus the exact request that reads that market from the venue. Use the mapped row to decide what to compare, then read the prices from each venue with the source you already have.

Agents and MCP

POST https://api.matchwire.win/mcp speaks JSON-RPC 2.0 with your key in the same x-api-key header. Tools: list_sports, find_rows, get_row, get_venue_market, report_issue, service_status. Read-only; every tool result is narrowed by your key's plan exactly like the HTTP API.

js
import { Matchwire } from 'matchwire.win';const mw = new Matchwire({ apiKey: process.env.MATCHWIRE_API_KEY });
console.log((await mw.tools()).map((t) => t.name));const row = await mw.row('ev:nfl:arizona-cardinals:denver-broncos:2026-10-25');console.log(row.listings.map((l) => l.venue));

Plain text for coding assistants: matchwire.win/llms.txt · MCP reference: matchwire.win/docs/mcp/

Errors

js
import { MatchwireError } from 'matchwire.win';
try {  await mw.rows({ sport: 'nope' });} catch (error) {  if (error.isRateLimited) await sleep(error.retryAfterMs);   // 429  else if (error.isAuthError) /* key missing or revoked */ ;  else if (error.isPlanError) /* outside the plan's sports/venues */ ;  else throw error;}

Documentation

Python

python
from matchwire import Matchwire
mw = Matchwire(api_key=os.environ["MATCHWIRE_API_KEY"])rows = mw.rows(sport="nfl", venue=["kalshi", "poly"])["rows"]print(rows[0]["name"], [l["venue"] for l in rows[0]["listings"]])

See python/README.md. Standard library only, Python 3.9+.

License

MIT. Not affiliated with Kalshi, Polymarket or Predict.fun; venue names are used to say what is mapped.

來源:README.md,提交 f4a56fb

工具

0
該伺服器需要 API 金鑰等憑證,因此 SourceWeft 無法在沒有憑證的情況下讀取其工具,也未收錄。

版本歷史

1
  1. v0.1.0最新Sep 30, 2026

評分

已滿足適用檢查項的 85%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分