Skip to main content
Glama
Sofiia7

actually-mcp-server

Actually - Что рынки действительно думают

Расширение для Chrome и MCP-сервер, которе накладывают котировки рынков предсказаний на новости, которе вы уже читаете.

Новости говорят вам, что «эксперты обеспокоены» или что «шасы растут». Они редко называют число. Число сусествует — на рынке предсказаний, где люди стаят собственные денги на исход. Просто оно жвёт в другой вкладке, и чтобы его найти, нужно вообще знать, что такой рынок сусествует.

Actually закрывает этот разрыв. Откройте статю, нажмите значок на панели инструментов, и расширение сопост авит текст с рынками Polymarket в реальном времени и покажет собст венную вероятност рынка. Никакого аккаунта, никакого кошелка, никакой регистрации.

Новостная стат я, сопост авленная с живым рынком Polymarket

Что это делает

  • Сопост авляет статю с рынком. Локалная мод ель эмбеддингов (Xenova/all-MiniLM-L12-v2, ~33 MB) оц енивает текст стат и по срав нению с кэшированным набором рынков, с усилением по пересеч ению ключевых слов и чис ел — чис ла важны, потом у что энкодер почти слеп к ним, и «паден ие до $57,500» кодируется почти так же, как «достичь $120,000».

  • Работает на вашем устойстве. Мод ель и среда выполнения WASM встраиваются на этапе сбрки — при установке или в работе ничего не загружается с CDN, а при настройках по умолчанию текст стати никогда не покидает устойство.

  • Читает неанглийские страницы. Перед сопост авлением они переводятся на анг лийский с помощю встро енного API Translator от Chrome (локално, без сети). Каждый вопрос Polymarket написа н на анг лийском, а локалная мод ель сод ержит 86 кириллических токенов из 30522 — непе реведённый русский заголовок превр ащается в шум. После пе ревода тот же заголовок набирает 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:

actually MCP server

Как это устроено

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 открытых рынков с предвычисленными эмбеддингами, пе рестраиваемый каждые два часа. Выборка объединяет три порядка — объём за 24 часа, общий объём и новизну — потому что ранжирование только по общему объёму — неправильный подход для новостного инструмента: рынок, открытый сегодня утром под сегодняшним заголовком, не имеет истории и каждый раз проигрывает рынку выборов годовой давности.

Worker сусествует, чтобы ни один клиент не хранил учётные данные. Он проксирует API Polymarket, обслуживает предвычисленный кэш и выступает удалённым подписантом для релея, поэтому учётные данные билдера остаются на се рвере и никогда не поставляются внутри расшрения.

Запуск

npm install
npm run models:fetch -w extension   # bundle the embedding model
npm run build -w extension          # type-check + build to extension/dist

Загрузите extension/dist как распакованное расшрение в Chrome. Сначала скопируйте extension/.env.example в .env.local и заполните его — сборка встраивает URL Worker, project id WalletConnect и билдер-код.

npm test --workspaces               # 686 tests across four workspaces

Конфиденциальность

Поиск бесплатен и не требу ет аккаунта. Здесь нет контентных скриптов: страница читается только по клику и только в активной вкладке. При настройках по умолчанию (локалные эмбеддинги, пе ревод на устойстве) текст стати не покидает ваше устойство. Телеметрия опционална и по умолчанию выключена.

Полная полitika: <https://actually-api.sofiasere meteva.workers.dev/privacy>

Статус

Расшрение собрано и проходит свои релизные гейты; подача в Chrome Web Store в процессе. ac tually-mcp-server опубликован на npm и указан в официальном реестре MCP.

Погашение решённой поз иции наход ится в тестировании: аутентификация билдера, выбор контракта с негтивным риском и зашита от нулевого балнса проверяются на живых се рвисах, но пока ни одно погашение не было наблюдено соби рающем средства на всем пути.

Торговля недост упна в некоторих юрисдикциях (US, GB, FR, BE, AU, SG, TH, TW, PL и санкционных странах), применяется на стороне Worker. Просмотр котировок работает везде.

Actually не предоставляет финасовых консультаций.

Лицензия

См. LICENSE.

Available Tools

2 tools
check_newsCheck news text against prediction marketsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 orderbookA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
outcomeNoWhich 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.
marketIdYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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. 1 tool updatev0.1.8
    • Changedget_market1 field changed
      • addedInput schema / properties / outcome
        Added 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. 2 tool updatesv0.1.7
    • First observedcheck_news
    • First observedget_market

TDQS

A4.1/5.0

Scored across 2 tools

Disambiguation5/5

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.

Naming Consistency5/5

Both tools follow a consistent verb_noun snake_case pattern (check_news, get_market), making the naming predictable and easy to parse.

Tool Count3/5

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.

Completeness3/5

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

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
    -
  • A
    license
    B
    quality
    D
    maintenance
    Enables LLM agents to interact with Polymarket prediction markets, including market discovery, real-time pricing, analytics, account management, and trading with built-in safety guards.
    34
    MIT