Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
One row per game, matched across Kalshi, Polymarket US/Intl and Predict.fun. Mapping only.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
x-api-key「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
このアドレスはリクエストの header にキーが必要ですが、コネクタを追加するメニューでは設定できません。代わりにClaude Code、Cursor、VS Codeを使ってください。
ターミナルでこれを実行します
claude mcp add --transport http mapping https://api.matchwire.win/mcp --header 'x-api-key: your-value'動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"mapping": {
"url": "https://api.matchwire.win/mcp",
"headers": {
"x-api-key": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"mapping": {
"type": "http",
"url": "https://api.matchwire.win/mcp",
"headers": {
"x-api-key": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
このアドレスはリクエストの header にキーが必要ですが、コネクタを追加するメニューでは設定できません。代わりにClaude Code、Cursor、VS Codeを使ってください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
x-api-key 秘密 必須 HTTP headerこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
このサーバーのツール一覧はまだ読み取っていません。エンドポイントは順番にチェックしています。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月6日にチェック
レジストリ名はドメイン matchwire.win で確認済みです(レジストリがドメインの所有を確認しています)
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
まだチェックしていません。エンドポイントは順番にチェックしています
まだチェックしていません。エンドポイントは順番にチェックしています
まだチェックしていません。エンドポイントをチェックするときにツール一覧を読み取ります
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:x-api-key
作者のクラウドで動きます。インストール不要でインターネット経由でつながりますが、送った内容は作者のサーバーを通ります。
GitHubリポジトリの最終更新は–、最新バージョン(0.1.0)がレジストリに届いたのは37 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。URLでつながるので、リモートMCPサーバーに対応したアプリ(開発者モードのChatGPTなど)でも使えます。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Symantec Cloud DLP AIops
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Governed Symantec Cloud DLP — 14 MCP tools, read-only with audit.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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.
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}));
src/ directory on the global fetch. Nothing installs alongside it.429 is distinguishable from a 401 invalid_key in code, not by string matching.since= for changed rows and tombstones, or the same updates over SSE.https://api.matchwire.win/mcp.npm install matchwire.win # Node.js — zero dependencies
pip install matchwire.win # Python 3.9+ — standard library only
Get a key at [matchwire.win](https://matchwire.win/#pricing) — plans start at $99/month with a 14-day trial on Starter.
Save as quickstart.mjs and run node quickstart.mjs (Needs MATCHWIRE_API_KEY in the environment):
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.
| Method | Endpoint | Returns |
|---|---|---|
status() | GET /api/v1/status | Service and per-venue health, current seq, coverage counts |
sports() | GET /api/v1/sports | Sports with game counts, plus group ids (esports, american-football, …) |
rows(params) | GET /api/v1/rows | One row per game with its per-venue listings |
row(id) | MCP get_row | One game by its mapped id |
stream(params) | GET /api/v1/push | The same updates as Server-Sent Events |
callTool(name, args) | POST /mcp | Any tool the MCP endpoint advertises |
tools() | POST /mcp | The tool list the endpoint advertises |
sport, venue, type, league, status accept a value or a comma list; they combine. since= switches to a delta (changed rows plus tombstones).
venue= kalshi · poly (Polymarket US) · polyintl (Polymarket International) · predictfuntype= winner · total · handicap · map_winner · score · eventstatus= scheduled · live · endedsport= a sport name (baseball, not mlb) or a group id from sports()// 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 }
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.
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.
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](https://matchwire.win/llms.txt) · MCP reference: [matchwire.win/docs/mcp/](https://matchwire.win/docs/mcp/)
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; }
from matchwire import Matchwire
mw = Matchwire(api_key=os.environ["MATCHWIRE_API_KEY"]) rows = mw.rows(sport="nfl", venue=["kalshi", "poly"])["rows"] print(rows0, [l["venue"] for l in rows0])
See python/README.md. Standard library only, Python 3.9+.
MIT. Not affiliated with Kalshi, Polymarket or Predict.fun; venue names are used to say what is mapped.