actually-mcp-server
Actually - 市場が実際にどう考えているか
あなたがすでに読んでいるニュースに、予測市場のオッズを重ねるChrome拡張機能とMCPサーバーです。
ニュースは「専門家が懸念している」とか「オッズが上昇している」とは伝えますが、数字を伝えることはほとんどありません。その数字は存在します——予測市場に。そこでは人々が結果に対して自分のお金を賭けています。ただ、それは別のタブの中にあり、それを見つけるには、そもそもそんな市場が存在することを知っている必要があります。
Actuallyはそのギャップを埋めます。記事を開き、ツールバーのアイコンをクリックすると、拡張機能がテキストをライブのPolymarketマーケットと照合し、市場自身の確率を表示します。アカウントもウォレットもサインアップも不要です。

機能
記事をマーケットにマッチングします。 ローカルの埋め込みモデル(
Xenova/all-MiniLM-L12-v2、~33 MB)が、キャッシュされたマーケットセットに対して記事テキストをスコアリングし、キーワードと数字の重複によってブーストされます。数字が重要なのは、エンコーダーが数字をほぼ認識できないからです。「$57,500への下落」は「$120,000への到達」とほぼ同じように埋め込まれます。お使いのデバイス上で動作します。 モデルとWASMランタイムはビルド時にバンドルされます。インストール時や実行時にCDNから取得されるものはなく、デフォルト設定では記事テキストがマシンの外に出ることはありません。
英語以外のページも読み取れます。 マッチングの前に、Chrome標準搭載の
TranslatorAPI(ローカル、ネットワーク不要)を使って英語に翻訳されます。Polymarketの質問はすべて英語で書かれており、ローカルモデルは30522トークンのうち86のキリル文字トークンしか保持していません。翻訳されていないロシア語の見出しはノイズとして埋め込まれます。翻訳されれば、同じ見出しは、実際に話題にしているマーケットに対して0.53〜0.71のスコアを出します(下限は0.35)。
任意で取引も可能です。 WalletConnect v2ウォレットを接続すると、指値注文と成行注文、売却、待機注文のキャンセル、コストベースとP&Lを備えたポジションパネルを利用できます。鍵と資金が当社に保持されることはありません。
エージェントにも対応します。 同じ機能がModel Context Protocol経由で公開されています:
check_news、get_market、place_order、sell_order、cancel_order、get_positions。
Related MCP server: Polymarket Predictions MCP
MCPサーバーの使い方
MCPサーバーは公開されているので、クローンもビルドも不要です。任意のMCPクライアント(Claude Desktop、Cursor、そしてプロトコルに対応したその他のすべてのもの)に追加してください:
{
"mcpServers": {
"actually": {
"command": "npx",
"args": ["actually-mcp-server"]
}
}
}これにより、エージェントはキーもウォレットもなしにシグナルツール(check_newsとget_market)を利用できます。見出しを添えて「市場はこれについてどう考えている?」と尋ねると、市場自身の価格で答えてくれます。
取引ツールは、自分自身のキーを提供した場合にのみ表示されます:
"env": {
"POLYMARKET_PRIVATE_KEY": "0x...",
"ACTUALLY_MAX_ORDER_USD": "100",
"ACTUALLY_DAILY_LIMIT_USD": "500"
}両方の上限は、永続化された支出台帳に対してサーバーサイドで強制されるため、エージェントが別の価格を主張してすり抜けることはできません。redeem_positionは、実際のオンチェーン取引を送信するため、さらに明示的なオプトイン(ACTUALLY_ENABLE_REDEEM=true)が必要です。まだテスト中です。
すべての環境変数とガードの背後にある理由を含む完全なドキュメント:packages/mcp-server/README.md。
公式MCPレジストリにio.github.Sofiia7/actuallyとして、またGlamaにも掲載されています:
構成
extension/ Chrome MV3 extension (React popup, offscreen document)
extension/worker/ Cloudflare Worker - API proxy, rate limiting, market cache
packages/core/ Matching, pricing and Polymarket API logic, shared by both clients
packages/mcp-server/ MCP server, published to npm as actually-mcp-server
packages/market-cache-builder/ Cron job that precomputes the market embeddings重い処理はオフスクリーンドキュメントに置かれています。MV3のサービスワーカーはWASMを実行できず、WebSocketを保持できず、注文に署名するのに十分な時間生き残ることができないからです。
マーケットキャッシュは、事前計算された埋め込みを持つ2000件の公開マーケットで、2時間ごとに再構築されます。選択は、24時間の出来高、全期間の出来高、新しさという3つの順序をブレンドします。全期間の出来高だけでランク付けするのは、ニュースツールにとっては間違った棚だからです。今朝、今日の見出しの下で開かれたマーケットには履歴がなく、1年前の選挙マーケットに毎回負けてしまいます。
Workerは、どのクライアントも資格情報を保持する必要がないように存在します。PolymarketのAPIをプロキシし、事前計算されたキャッシュを提供し、リレイヤーのリモート署名者として機能するため、ビルダーの資格情報はサーバー上に留まり、拡張機能の中に同梱されることはありません。
実行方法
npm install
npm run models:fetch -w extension # bundle the embedding model
npm run build -w extension # type-check + build to extension/distChromeでextension/distを展開済みの拡張機能として読み込みます。extension/.env.exampleを.env.localにコピーし、最初に記入してください。ビルドはWorker URL、WalletConnectプロジェクトID、ビルダーコードを焼き込みます。
npm test --workspaces # 686 tests across four workspacesプライバシー
ディスカバリーは無料で、アカウントは不要です。コンテンツスクリプトはありません。ページが読み取られるのは、クリックしたときだけであり、アクティブなタブのみです。デフォルト設定(ローカル埋め込み、翻訳はオフデバイス)では、記事テキストがマシンの外に出ることはありません。テレメトリーはオプトイン制で、デフォルトではオフです。
完全なポリシー:https://actually-api.sofiaseremeteva.workers.dev/privacy
ステータス
拡張機能はビルド済みで、リリースゲートを通過しています。Chrome Web Storeへの提出は進行中です。actually-mcp-serverはnpmで公開され、公式MCPレジストリに掲載されています。
確定済みポジションの償還はテスト中です。ビルダー認証、neg-risk契約の選択、ゼロ残高ガードはそれぞれライブサービスに対して検証されていますが、エンドツーエンドで資金を回収する償還はまだ確認されていません。
取引はいくつかの法域(US、GB、FR、BE、AU、SG、TH、TW、PL、および制裁対象国)では利用できません。Worker側で強制されます。オッズの閲覧はどこでも機能します。
Actuallyは金融アドバイスを提供しません。
ライセンス
LICENSEを参照してください。
Available Tools
2 toolscheck_newsCheck news text against prediction marketsARead-only
Map a piece of news text to the relevant Polymarket market and return its current YES probability - the market's real, unmodified price, not a number synthesized from the text. That price is the crowd's current bet, not a verdict on whether the news is true. It also does not classify whether the news is dramatized or accurate relative to the market - that interpretation is left to the calling agent, which has both the original text and this market anchor. The probability comes from a precomputed cache refreshed on a cron cadence (can be up to ~2 hours stale) - for a live price before trading, call get_market with the returned marketId. If that cache looks abandoned rather than just late, the response adds cacheStale: true and cacheAgeHours - treat the match as unreliable and prefer get_market/a direct search when present.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnlyHint/openWorldHint, and the description goes far beyond them: it discloses the price is the crowd's bet not a truth verdict, that it does NOT classify dramatization/accuracy, that values come from a cron-refreshed cache up to ~2 hours stale, and that an abandoned cache adds cacheStale/cacheAgeHours. This is unusually rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and return value, and each clause carries real signal (cache caveat, non-classification). It is dense and slightly long with embedded dashes, but almost no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return burden and does it: YES probability, market match, marketId for follow-up, and cacheStale/cacheAgeHours failure signals. Nothing an agent needs to call and interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter with 0% schema description coverage, so the schema names 'text' but explains nothing. The description implies it is 'a piece of news text' but adds no length limit, format, or content guidance beyond the schema field name; borderline for a single obvious input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Map a piece of news text to the relevant Polymarket market') and the exact return (current YES probability), and explicitly distinguishes itself from the sibling by naming get_market as the live-price alternative. An agent can tell what this does without opening anything.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (map news to a market anchor), when-to-not-rely (stale/abandoned cache), and the alternative (call get_market with the returned marketId before trading). Routing conditions are spelled out, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketGet a market's price and orderbookARead-only
Look up a specific Polymarket market by id: details, live price, and an orderbook snapshot for ONE outcome token. Falls back to a direct Gamma lookup when the id is outside the precomputed cache's top markets by volume.
| Name | Required | Description | Default |
|---|---|---|---|
| outcome | No | Which token to price - match this to the side you intend to trade (place_order/sell_order's BUY_YES/SELL_YES → 'Yes', BUY_NO/SELL_NO → 'No'). Defaults to 'Yes'. YES and NO books move somewhat independently, not simply 1 − each other, so quoting the wrong one hands you the wrong price. | |
| marketId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered, and the description goes further by disclosing the cache-vs-Gamma fallback path — real behavioral context an agent can't get from structured fields. It stops short of noting failure behavior for unknown ids or how deep the orderbook snapshot is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the primary purpose, then the fallback caveat. Every clause carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the return payload (details, price, orderbook) and explains the cache fallback. Missing only edge-case context such as not-found handling or orderbook depth, which is minor for a read-only lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: the 'outcome' parameter is richly documented in the schema (including its interaction with BUY_YES/SELL_YES), but marketId has no description anywhere. The description says lookup is 'by id' and hints that ids may fall outside the cached top-volume set, but never clarifies the id format, so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('look up a specific Polymarket market by id') plus the returned artifacts (details, live price, orderbook snapshot for ONE outcome token). Nothing overlaps with the unrelated sibling check_news, so an agent can place it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the usage context (fetch a single market by id, with an automatic Gamma fallback for uncached ids) but never states when to prefer this over alternatives or what prerequisites exist. The when-to-use detail ('match to the side you intend to trade') lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.8- Changed
get_market1 field changed- added
Input schema / properties / outcomeAdded value: +{ + "description": "Which token to price - match this to the side you intend to trade (place_order/sell_order's BUY_YES/SELL_YES → 'Yes', BUY_NO/SELL_NO → 'No'). Defaults to 'Yes'. YES and NO books move somewhat independently, not simply 1 − each other, so quoting the wrong one hands you the wrong price.", + "enum": [ + "Yes", + "No" + ], + "type": "string" +}
2 tool updates
v0.1.7- First observed
check_news - First observed
get_market
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: check_news maps news text to a market and returns a cached probability, while get_market looks up a specific market by id for live details and orderbook. The descriptions explicitly direct the agent to call get_market for a live price, avoiding overlap.
Both tools follow a consistent verb_noun snake_case pattern (check_news, get_market), making the naming predictable and easy to parse.
Only two tools are provided, which feels thin for a server that could support broader market exploration (e.g., search, listing). However, they cover the core workflow, so it's borderline rather than severely mismatched.
The surface covers news-to-market mapping and single-market live lookup, but lacks operations like searching markets by keyword, listing multiple outcomes, or retrieving orderbooks for all outcomes. These gaps limit an agent's ability to explore beyond the provided news anchor.
Maintenance
Related MCP Connectors
Polymarket in your AI: market rules, real fill costs, who is trading, top traders. Read-only.
Live Polymarket odds, order books, fee-inclusive quotes and non-custodial prediction trading.
Calibrated world model for AI agents. 40 tools: world state, markets, trading. Kalshi + Polymarket.
Live prediction markets: Polymarket + Kalshi prices, odds, order books. Pay-per-call USDC, no key.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables interaction with Polymarket prediction markets through read-only access to market data, events, orderbooks, and user positions, plus authenticated trading capabilities for creating and managing orders.1-
- AlicenseNot gradedqualityDmaintenanceEnables real-time access to Polymarket prediction market odds, allowing AI agents to retrieve events, markets, and search for predictions with formatted outputs.5MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with Polymarket prediction markets, including retrieving market data, user positions, and trading history.810 npm12Apache 2.0
- AlicenseBqualityDmaintenanceEnables LLM agents to interact with Polymarket prediction markets, including market discovery, real-time pricing, analytics, account management, and trading with built-in safety guards.34MIT