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 分

    请在仓库或注册中心条目中声明许可证。