MarketTwits news + Russian market data (x402)

io.github.Croomee由 GitHub 帳號 Croomee 發布v0.1.0更新於 Oct 30, 2026

Pay-per-call market news, CBR/MOEX/Rosstat data and Telegram tools; auto-pays USDC on Base via x402

概覽

AI 產生的概覽

按次付費的 MCP 伺服器,提供英文 MarketTwits 市場新聞、俄羅斯市場資料(央行、MOEX、Rosstat)、公開 Telegram 頻道與 Wildberries 價格,並透過 Base 上的 USDC 自動付款。

可以做什麼
  • 搜尋、摘要與彙整新聞:最新、高重要性、關鍵字搜尋、游標增量抓取、抽取式摘要、情緒、熱門話題、漲跌提及、國家新聞與資料超預期
  • 執行告警檢查:依關鍵字的新增高重要性新聞、匯率區間、商品目標價
  • 取得俄羅斯市場資料:央行關鍵利率與官方匯率、MOEX 報價/指數/漲跌排行、Rosstat 每週燃油價格,以及每日俄羅斯市場簡報
  • 讀取公開 Telegram 頻道:最新貼文與最多五個頻道的關鍵字搜尋
  • 查詢 Wildberries 與 Ozon 商品頁、比較商品、查看價格歷史並監控目標價
適用情境
適合需要即時市場新聞與俄羅斯市場指標,或想輪詢關鍵字、匯率、價格告警而不自行建置資料管線的情境。每次呼叫都會花費少量 USDC,因此較適合偶發查詢或設有預算上限的用途,而非高頻輪詢。
執行需求
需 Node.js 20+ 在本機以 stdio 執行 npm 套件。需要一個專用 Base 錢包私鑰,放在 X402_PRIVATE_KEY(或 X402_PRIVATE_KEY_FILE 指向的檔案)中,錢包內需有少量 USDC,不需 ETH。選用設定:X402_MAX_PAYMENT_USD、X402_BASE_URL、X402_TOOLS_SOURCE、X402_NETWORK。需要能連線至託管 API 的網路。
安裝前請注意
需要熱錢包私鑰(X402_PRIVATE_KEY)在 Base 上簽署真實 USDC 付款;README 建議使用專用錢包,切勿使用主錢包私鑰。每次成功呼叫都會花錢,應設定 X402_MAX_PAYMENT_USD 作為單次上限,並避免密集輪詢。查詢內容與參數會傳送到第三方託管 API。MOEX 報價延遲約 15 分鐘,Ozon 商品查詢目前會失敗。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 MarketTwits news + Russian market data (x402),將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

x402-markettwits-mcp

MCP server (stdio) for the pay-per-call x402-markettwits-news API: MarketTwits market news in English plus Russian market data (Bank of Russia FX and key rate, MOEX quotes, indices and movers, Rosstat fuel prices), public Telegram channels and Wildberries product prices.

Every API endpoint is one MCP tool (31 tools). Each call costs a fixed $0.001–$0.005 in USDC on Base, paid automatically through x402 from a wallet you configure. Only successful responses are charged; invalid parameters (400), not found (404) and upstream failures (502) are free.

Requirements

  • Node.js 20+
  • a dedicated hot wallet on Base with a few USDC (no ETH needed: payments are gasless EIP-3009 authorizations settled by the facilitator). $3 is enough for 300–2,000 calls. Never use your main wallet's key.

Configuration

EnvDefault
X402_PRIVATE_KEY—0x-prefixed private key of the hot wallet (or X402_PRIVATE_KEY_FILE = path to a file holding it). Without it, tools return a payment_required error with the price
X402_MAX_PAYMENT_USD0.02per-call cap: a 402 asking for more is refused before signing
X402_BASE_URLhttps://x402-markettwits-news.onrender.comAPI base URL
X402_TOOLS_SOURCEautoauto = tools from the live /openapi.json (new endpoints appear automatically), falling back to the bundled snapshot; bundled / live force one
X402_NETWORKeip155:8453eip155:84532 (Base Sepolia) for a testnet deployment

Claude Desktop

claude_desktop_config.json (Settings → Developer → Edit Config):

json
{  "mcpServers": {    "markettwits": {      "command": "npx",      "args": ["-y", "x402-markettwits-mcp"],      "env": { "X402_PRIVATE_KEY": "0x...", "X402_MAX_PAYMENT_USD": "0.02" }    }  }}

Cursor

~/.cursor/mcp.json (or .cursor/mcp.json in a project):

json
{  "mcpServers": {    "markettwits": {      "command": "npx",      "args": ["-y", "x402-markettwits-mcp"],      "env": { "X402_PRIVATE_KEY": "0x..." }    }  }}

Claude Code

bash
claude mcp add markettwits --env X402_PRIVATE_KEY=0x... -- npx -y x402-markettwits-mcp

Docker

bash
docker build -t x402-markettwits-mcp .docker run -i --rm -e X402_PRIVATE_KEY x402-markettwits-mcp

Tools

ToolEndpointPrice
get_latest_news / get_important_news / search_news/news/latest, /news/important, /news/search$0.0015
get_news_since/news/since (cursor polling)$0.001
check_news_alert / check_new_high_alert/news/alerts/check, /news/alerts/new$0.002 / $0.0025
summarize_news / summarize_recent_news/news/summary, /news/summary/recent$0.004 / $0.0035
get_top_topics / get_trending_topics/news/top-topics, /news/topics/trending$0.0025 / $0.002
get_news_movers / get_country_news/news/movers, /news/country$0.0025 / $0.002
get_data_surprises / get_news_sentiment / get_news_digest/news/data-surprises, /news/sentiment, /news/digest$0.003 / $0.0025 / $0.005
get_cbr_fx_rates / get_cbr_key_rate/ru/fx, /ru/key-rate$0.001
get_moex_quote / get_moex_index / get_moex_movers/moex/quote, /moex/index, /moex/movers (delayed ~15 min)$0.0015 / $0.0015 / $0.002
get_ru_fuel_prices/ru/fuel (Rosstat weekly)$0.0015
get_telegram_channel_latest / search_telegram_channels/tg/channel/latest, /tg/search$0.002 / $0.003
get_product_info / compare_products / monitor_product_price / get_product_price_history/product/* (Wildberries)$0.002 / $0.003 / $0.0025 / $0.002
check_price_alert/alerts/price (Wildberries; Ozon currently blocked → 502, free)$0.0025
check_news_keyword_alert/alerts/news (new high-importance news by keywords since an id/time)$0.002
check_fx_rate_alert/alerts/fx (CBR rate outside a min/max band)$0.0015
get_daily_ru_market_digest/digest/daily (key rate, USD/EUR/CNY, fuel, top news)$0.005

Each tool returns JSON: { ok: true, endpoint, data, payment: { price_usd, transaction, payer, ... } }, or { ok: false, error, ... } with isError: true. The error codes are:

  • payment_required: no key
  • price_above_cap
  • invalid_params: 400
  • not_found: 404
  • upstream_unavailable: 502
  • payment_rejected: e.g. insufficient USDC
  • config_error
  • network_error

Development

bash
npm cinpm test       # tools/list over MCP + mocked 402 flow (no real payments)npm run gen    # refresh openapi.snapshot.json from the live API

來源:mcp/README.md,提交 89d5904

工具

31

check_fx_rate_alert

FX alert: is the official CBR rate of a currency outside your min/max band?

FX alert: is the official CBR rate of a currency outside your min/max band?. Latest official Bank of Russia rate (RUB per 1 unit, as /ru/fx) for one currency vs min and/or max: triggered, rate, breach below_min|above_max|null, distance and the CBR date. Unknown code -> 404, cbr.ru failure -> 502 (neither is settled). GET /alerts/fx — price $0.0015 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數maxmincode必填

check_news_keyword_alert

Keyword alert: new HIGH-importance news since an id or time

Keyword alert: new HIGH-importance news since an id or time. High-importance MarketTwits news matching any (or all) of 1-10 keywords, newer than since (an item id, same cursor as /news/since, or an ISO time; default last 24h). Returns triggered, count, up to 20 items newest first with matched keywords, and next_since for the next poll. GET /alerts/news — price $0.002 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數q必填matchsince

check_price_alert

Price-drop alert: is a Wildberries product at or below your target price?

Price-drop alert: is a Wildberries product at or below your target price?. Live price of one product (same chain as /product/monitor) vs target_price in RUB: triggered (current <= target and in stock), current_price, diff. Wildberries works; Ozon URLs are accepted but Ozon's anti-bot currently blocks them (502, payment not settled). GET /alerts/price — price $0.0025 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數url必填target_price必填

get_daily_ru_market_digest

Daily Russia market digest: key rate, USD/EUR/CNY, fuel prices, top news

Daily Russia market digest: key rate, USD/EUR/CNY, fuel prices, top news. One call: CBR key rate, official USD/EUR/CNY rates with change, Rosstat weekly fuel prices and the top high-importance news of 24h with topics. Fuel is null with a note if Rosstat is slow (call still succeeds); 502, not settled, only if both key rate and FX fail. GET /digest/daily — price $0.005 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數limit

get_moex_index

MOEX index values (IMOEX, RTSI, sector indices) or the index catalogue

MOEX index values (IMOEX, RTSI, sector indices) or the index catalogue. Index level, change/change_pct vs previous close, open/high/low, month/year change, annual high/low and traded value for up to 5 codes (default IMOEX), or code=list for the catalogue of MOEX stock indices (SNDX board + RTS*). Delayed ~15 minutes. Unknown codes -> 404 (not settled). GET /moex/index — price $0.0015 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數code

get_moex_movers

Top gainers and losers on the Moscow Exchange main board (TQBR), with market breadth

Top gainers and losers on the Moscow Exchange main board (TQBR), with market breadth. Ranks TQBR shares by change vs previous close (turnover >= min_value RUB, default 5 mln): top `limit` gainers and losers (default 10, max 50), advancers/decliners/unchanged. Before the session's first trades (mode previous_session) it ranks the last completed session from ISS history. Delayed ~15 minutes. GET /moex/movers — price $0.002 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數limitmin_value

get_moex_quote

Moscow Exchange stock quote (delayed ~15 min): price, change, volume, bid/offer

Moscow Exchange stock quote (delayed ~15 min): price, change, volume, bid/offer. One MOEX shares-market ticker from MOEX ISS (main board TQBR when listed): price (last trade, or previous close before the session's first trade), change/change_pct vs previous close, open/high/low, bid/offer, volume, value_rub, market cap, trading status. Data is delayed ~15 minutes (delayed: true). Unknown ticker -> 404 (not settled). GET /moex/quote — price $0.0015 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數ticker必填

check_news_alert

Keyword alert check: how many matching items in the last N hours

Keyword alert check: how many matching items in the last N hours. Count of news matching q (same matching as /news/search) published in the last N hours (1-168, default 24), plus the 5 most recent GET /news/alerts/check — price $0.002 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數q必填hours

check_new_high_alert

Is there new HIGH-importance news on a keyword in the last N hours?

Is there new HIGH-importance news on a keyword in the last N hours?. Checks only importance=high news matching q in the last N hours (1-168, default 6): has_new, count and the latest item. Cheap poll for market-moving alerts on a topic/ticker. GET /news/alerts/new — price $0.0025 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數q必填hours

get_country_news

News about one country (flag emoji + country keywords) with counts and top topics

News about one country (flag emoji + country keywords) with counts and top topics. Items of the last N hours (1-168, default 24; importance all|high|medium|low) that carry the country's flag emoji or mention it (e.g. RU: Russia/Kremlin/Bank of Russia/MOEX; US: USA/Fed/White House): count, high_count, share_of_window, top_topics and the 10 latest headlines. GET /news/country — price $0.002 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數code必填hoursimportance

get_data_surprises

Macro data and earnings vs. expectations: actual, expected, previous, surprise

Macro data and earnings vs. expectations: actual, expected, previous, surprise. Parses releases like 'US Pending Home Sales (Sep) = -7.3% m/m (exp. -0.5% / prev. +0.3%)' and earnings lines like '3Q REV. $14.58B, EST. $12.87B' from news of the last N hours (1-168, default 24; optional q filter): indicator, actual, expected, previous, unit, surprise (actual - expected), surprise_pct and direction above/below/inline. GET /news/data-surprises — price $0.003 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數qhours

get_news_digest

Sectioned briefing: central banks, macro, energy, equities, crypto, geopolitics

Sectioned briefing: central banks, macro, energy, equities, crypto, geopolitics. Groups news of the last N hours (1-48, default 24) into central_banks, macro, energy, equities, crypto and geopolitics by keyword rules (an item may appear in several), each with count, high_count and up to 5 headlines (high first, then newest), plus top_topics of high items. GET /news/digest — price $0.005 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數hours

get_important_news

High-importance news only (newest first)

High-importance news only (newest first). Only importance=high MarketTwits news (newest first), limit 1-50 GET /news/important — price $0.0015 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數limit

get_latest_news

Latest translated MarketTwits news (newest first)

Latest translated MarketTwits news (newest first). Latest translated MarketTwits news (newest first), limit 1-50 GET /news/latest — price $0.0015 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數limit

get_news_movers

Top gainers/losers reported in the news ('#TICKER = ±X%')

Top gainers/losers reported in the news ('#TICKER = ±X%'). Parses '#TICKER [Name] = ±X%' price-move mentions (stocks, indices, crypto; RU/US/... from the flag) in news of the last N hours (1-72, default 6), newest mention per ticker, |move| >= min_pct (default 0): top 10 gainers and top 10 losers with the source item. GET /news/movers — price $0.0025 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數hoursmin_pct

search_news

Keyword search in translated news (newest first)

Keyword search in translated news (newest first). Case-insensitive keyword search in translated MarketTwits news (all words must match), limit 1-50 GET /news/search — price $0.0015 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數q必填limit

get_news_sentiment

Heuristic bullish/bearish tone of news on a keyword (lexicon, not a model)

Heuristic bullish/bearish tone of news on a keyword (lexicon, not a model). Scores each item matching q in the last N hours (1-168, default 24) with a keyword/emoji lexicon (rise/beat/upgrade vs. fall/miss/sanctions, ⬆️/⬇️) plus explicit '= ±X%' moves, and returns bullish/bearish/neutral counts, score = (bullish - bearish)/count in [-1, 1], a label and examples. method is always 'heuristic'. GET /news/sentiment — price $0.0025 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數q必填hours

get_news_since

Incremental feed: items newer than the id you already have (cursor polling)

Incremental feed: items newer than the id you already have (cursor polling). All stored items with id > id (oldest first, up to limit 1-100, default 50) plus next_id/has_more for the next call. The cheapest way for a bot to poll without duplicates: keep next_id and pass it back. GET /news/since — price $0.001 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數id必填limit

summarize_news

Short extractive English summary of the latest news on a keyword

Short extractive English summary of the latest news on a keyword. 3-5 sentence extractive summary of the latest news matching q (limit 1-50, default 10): lead sentence + de-duplicated headlines, high-importance first GET /news/summary — price $0.004 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數q必填limit

summarize_recent_news

Extractive English summary of news on a keyword from the last N hours

Extractive English summary of news on a keyword from the last N hours. 3-5 sentence extractive summary of news matching q published in the last N hours (1-168, default 12; up to 50 items), with high_count. Use for 'what happened with X today'. GET /news/summary/recent — price $0.0035 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數q必填hours

get_top_topics

Top 5 keywords/hashtags in high-importance news of the last N hours

Top 5 keywords/hashtags in high-importance news of the last N hours. Top 5 topics (hashtags, names, keywords; counted once per item) across high-importance news of the last N hours (1-72, default 6) GET /news/top-topics — price $0.0025 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數hours

compare_products

Compare 2-5 Wildberries products: prices, cheapest, price spread, stock

Compare 2-5 Wildberries products: prices, cheapest, price spread, stock. Fetches 2-5 product URLs (urls=comma-separated, or repeated url=) with the same live chain as /product/info and returns per-item title/price/original_price/in_stock/rating/reviews_count, the cheapest and most expensive item, price_diff (abs RUB and percent of the cheapest), in_stock_count and all_in_stock. Items that fail carry error/detail; returns 502 (payment not settled) only if fewer than 2 items returned a price. GET /product/compare — price $0.003 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數urls必填

get_product_price_history

Wildberries price history: weekly CDN points + observed + live price, min/max/avg, 30-day change

Wildberries price history: weekly CDN points + observed + live price, min/max/avg, 30-day change. Wildberries price history for url: weekly points from WB's price CDN, prices observed by this service and the live price. Returns points (oldest first), current, stats min/max/avg, change_30d, and history_limited when only the current price exists. Ozon: live price only. 502 (payment not settled) if no price is available. GET /product/history — price $0.002 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數url必填

get_product_info

Wildberries / Ozon product card: title, price (RUB), rating, reviews, stock

Wildberries / Ozon product card: title, price (RUB), rating, reviews, stock. Live product data for a Wildberries (wildberries.ru, wb.ru) or Ozon (ozon.ru) product URL: title, current price in RUB (original_amount = list price before discount when known), rating, reviews_count and availability. Cached 10 min per product. If the marketplace blocks or fails, returns 502 upstream_unavailable and the payment is NOT settled. Can take up to ~40s when the live page has to be rendered. GET /product/info — price $0.002 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數url必填

monitor_product_price

Price-target check for one product: is the current price at or below target_price?

Price-target check for one product: is the current price at or below target_price?. Fetches one Wildberries/Ozon product (live, as /product/info) and checks it against target_price (RUB). Returns below_target (current <= target and in stock), current_price, diff_abs/diff_percent, in_stock, product and checked_at. Out of stock: 200 with below_target false, current_price null. 502 (payment not settled) if no product data can be fetched. GET /product/monitor — price $0.0025 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數url必填target_price必填

get_ru_fuel_prices

Russian retail fuel prices (AI-92/95/98, diesel) — Rosstat weekly averages

Russian retail fuel prices (AI-92/95/98, diesel) — Rosstat weekly averages. Average retail pump prices across Russia from Rosstat's weekly release (rosstat.gov.ru nedel_sred_cen.xlsx): price (RUB/l), as_of, week-over-week change, 4-week and year-to-date change and `weeks` of history per fuel. Rosstat publishes weekly (usually Wednesday, prices as of Monday); cached 6 h, a stale copy (stale: true) is served for up to 14 days if Rosstat is unreachable. GET /ru/fuel — price $0.0015 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數weeks

get_cbr_fx_rates

Official Bank of Russia FX rates (RUB) with day-over-day change

Official Bank of Russia FX rates (RUB) with day-over-day change. CBR official exchange rates from cbr.ru XML_daily.asp for a date (default: the latest set) and optional currency codes: per currency nominal, value (RUB per nominal), per_unit (RUB per 1 unit), previous set's per_unit, change and change_pct. Cached 30 min (past dates 7 days). GET /ru/fx — price $0.001 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數datecodes

get_cbr_key_rate

Bank of Russia key rate: current level, since when, and recent changes

Bank of Russia key rate: current level, since when, and recent changes. Current CBR key rate (% p.a.) from the cbr.ru DailyInfo web service (KeyRateXML; the hd_base/KeyRate page as fallback): rate, as_of, effective_since, previous_rate, last_change_bp and every change in the last `months` (default 24) newest first, plus min/max in the window. Cached 3 h. GET /ru/key-rate — price $0.001 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數months

get_telegram_channel_latest

Latest posts of a public Telegram channel (text, date, views, link)

Latest posts of a public Telegram channel (text, date, views, link). Reads the public web preview t.me/s/<channel> (no login): newest `limit` posts (default 20, max 50) with id, date, text (HTML stripped, emoji kept), views, link, media types and channel title/subscribers. Channels without a public preview or that do not exist -> 404 (not settled). Cached 2 min. GET /tg/channel/latest — price $0.002 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數limitchannel必填

search_telegram_channels

Search up to 5 public Telegram channels for a keyword

Search up to 5 public Telegram channels for a keyword. Runs Telegram's own channel search (t.me/s/<channel>?q=) on 1-5 public channels, merges the matches newest first (up to `limit`, default 20) with per-channel counts/errors. 404 when no channel exists, 502 when all fail; partial failures are reported in per_channel. GET /tg/search — price $0.003 USDC per call, paid automatically via x402 on Base (only successful responses are charged; 400/404/502 are free).

輸入參數q必填limitchannels必填

版本歷史

1
  1. v0.1.0最新Oct 22, 2026

評分

已滿足適用檢查項的 80%

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

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。