mcpField
S
SentimentFX

SentimentFX

远程服务
developers.sentimentfx.org金融数据01 周前更新

关于 SentimentFX

SentimentFX 将 FinBERT 评估的财经新闻标题与 42 种加密货币、外汇、股票、ETF 和大宗商品的日线及日内价格并列提供。投资者和开发者可通过仪表板、REST API 与 MCP 工具查看情绪数据和相关性分析,而非价格预测。

主要功能

  1. 01使用 FinBERT 评估财经新闻
  2. 02提供日线及日内价格
  3. 03分析情绪与价格的相关性
  4. 04跨资产情绪指数
  5. 05REST API 与 CSV 导出

适用场景

  1. 01比较新闻情绪与市场价格
  2. 02为应用获取个股情绪数据
  3. 03查看历史相关性与回测

MCP 相关

MCP 服务提供六种工具,用于列出代码、查询用量及获取情绪、摘要、价格和相关性数据。它通过可流式传输的 HTTP 工作,接受 X-API-Key 请求头或 Bearer 令牌;数据调用按 REST API 同等方式计费。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://api.sentimentfx.org/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://api.sentimentfx.org/mcp需要授权

工具

6

此工具无需参数。

详细介绍

SentimentFX

覆盖加密货币、外汇、股票、ETF 和大宗商品 42 个市场的新闻情绪数据集。SentimentFX 抓取财经新闻标题,使用 FinBERT(一种针对金融领域调优的 transformer 模型)为每条标题评分,并将分数与每日和盘中价格一同存储。你可以通过仪表板、按量计费的 REST API,或通过 MCP 工具为 Claude 和其他 AI 客户端读取数据。

产品提供评分后的存档和实时数据流。它不是价格预测工具:仪表板展示相关性和回测结果,供你自行判断信号,并不声称情绪可以预测收益。

在线访问: sentimentfx.org · app.sentimentfx.org · developers.sentimentfx.org · status.sentimentfx.org


功能

  • 每 15 分钟从 RSS 源(CoinDesk、CoinTelegraph、Yahoo Finance、r/CryptoCurrency 等)抓取新闻标题,并通过保存的 ScraperAI 配置抓取没有 RSS 的新闻网站
  • 使用 FinBERT 为每条新标题评分一次:positive_prob - negative_prob,得分范围为 -1 到 +1,并在界面中显示为 0–100
  • 每小时通过 yfinance 刷新全部 42 个代码的价格(每日 OHLC 和盘中 K 线)
  • 在 180 天的时间范围内,计算每日情绪变化与次日收益的相关性,并提供 95% 置信区间和强度标签
  • 发布免费的跨资产情绪指数(0–100,恐惧 → 贪婪),根据经过评分的新闻文本构建,而非交易者持仓
  • 通过 Stripe 提供付费访问:Pro 仪表板计划、用于 API 的 Data 计划,以及按需提供的完整存档

覆盖范围

类别代码
加密货币(5)BTC、ETH、SOL、XRP、DOGE
外汇(7)EURUSD、GBPUSD、USDJPY、AUDUSD、USDCAD、USDCHF、NZDUSD
股票(20)AAPL、MSFT、GOOGL、AMZN、META、NVDA、TSLA、JPM、BAC、GS、V、MA、XOM、JNJ、AMD、NFLX、WMT、UBER、CRM、PLTR
ETF(6)SPY、QQQ、GLD、SLV、USO、ARKK
大宗商品(4)GC=F(黄金)、SI=F(白银)、CL=F(原油)、NG=F(天然气)

价格货币因类别而异。 加密货币以 GBP 报价(Yahoo 上的 BTC-GBP)。外汇货币对为原始汇率。股票、ETF 和大宗商品期货以本币 USD 计价,不进行 GBP 换算。

产品

仪表板(app.sentimentfx.org)
  • 情绪与价格走势图、带情绪面板的蜡烛图,以及 0–100 情绪仪表
  • 相关性信号、背离卡片、交互式回测模拟器和新闻标题影响面板
  • 新闻标题信息流,逐篇显示评分。默认显示编辑精选新闻,社交来源会添加标记。
  • 排行榜、历史表现和晨间简报页面
  • CSV 导出、电子邮件情绪提醒和晨间简报邮件(Pro)

只有回测通过质量门槛的代码才会触发提醒:样本外净收益为正,且至少 70% 的滚动前向验证折为正。该门槛每日更新。

计划
计划价格包含内容
Free£015 个热门代码(每个类别 3 个)、30 天历史数据、蜡烛图、回测、相关性
Pro£11.99/月或 £99.99/年全部 42 个代码、完整历史数据、CSV 导出、提醒、晨间简报、每月 15,000 次 API 调用
Data£49.99/月或 £499.99/年Pro 全部功能、每月 200,000 次 API 调用
免费 API 密钥£0每 30 天 1,000 次调用,无需银行卡,达到上限后立即停止

批量存档(每条评分后的新闻标题和价格记录,可导出为 CSV 或 JSONL)单独出售。请通过开发者门户上的数据集表单咨询。

开发者 API(api.sentimentfx.org/v1/)

通过 X-API-Key 标头进行身份验证。完整文档请参阅 developers.sentimentfx.org。

端点返回内容费用
GET /v1/sentiment/{ticker}?limit=1-100&sources=news|social|all最新的已评分标题,每条都包含 source_kind每返回 25 行消耗 1 个额度
GET /v1/summary/{ticker}?days=1-365&sources=news|social每日平均情绪每返回 1 天消耗 1 个额度
GET /v1/prices/{ticker}?days=1-365每日收盘价,包含 currency 字段每返回 1 天消耗 1 个额度
GET /v1/correlation/{ticker}180 天的 Pearson r、p 值、95% 置信区间、强度1 个额度
GET /v1/usage计划、用量、额度、重置日期、速率限制免费

社交帖子(Reddit、StockTwits、X)会被收集,但单独存放。默认情况下,所有情绪数值都只基于新闻;sources=social 则仅返回社交帖子。查询完成后,系统会根据实际返回的行数计费。每次调用不单独计费:额度用尽的密钥会收到 402 insufficient_quota,直到额度补充;也可以申请更高额度。404 不收费,超出范围的参数会在任何处理开始前被拒绝,并返回 422。每个响应都包含 X-Quota-* 和 X-RateLimit-* 标头。错误采用统一封装:{"error": {"type": "...", "message": "..."}}。

# Get a free key (1,000 calls every 30 days, no card)
curl -X POST https://api.sentimentfx.org/api/keys/generate \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'

# Use it
curl https://api.sentimentfx.org/v1/summary/BTC?days=7 \
  -H "X-API-Key: sfx_your_key_here"

Sentiment Index 是公开的,无需密钥:GET https://api.sentimentfx.org/sentiment-index。与其他所有情绪数值一样,它仅基于新闻构建。

MCP 服务(api.sentimentfx.org/mcp)

同一数据通过六个 Model Context Protocol 工具提供:list_tickers 和 get_usage(均免费),以及 get_sentiment、get_summary、get_prices 和 get_correlation,其计费方式与对应的 /v1 端点完全相同。它使用可流式传输的 HTTP,并支持相同的 X-API-Key 标头;无法设置自定义标头的客户端(例如 Claude API 的 MCP 连接器)可使用 Authorization: Bearer <key>。注册表清单位于 server.json,发布步骤见 docs/publishing-mcp-registry.md。

{
  "mcpServers": {
    "sentimentfx": {
      "type": "http",
      "url": "https://api.sentimentfx.org/mcp",
      "headers": { "X-API-Key": "sfx_your_key_here" }
    }
  }
}

架构

RSS feeds (15 min) ─┐
ScraperAI replay ───┼→ scraper.py / ai_sources.py → dedup by URL → FinBERT → headlines
HN Algolia (admin) ─┘

yfinance (hourly) → prices.py / candles.py → prices, candles

headlines + prices → /dashboard, /candles, /correlation, /backtest …  → React dashboard
                   → /v1/*  and  /mcp                                → API and MCP clients
                   → /sentiment-index                                → public index page

定时任务(在 API 进程中运行的 APScheduler):

任务时间内容
scrape_rss_only每 15 分钟抓取全部 42 个代码的 RSS 和 ScraperAI 标题
scrape_all每小时整点(:00)刷新所有代码的每日价格,并检查情绪提醒(仅在启用时使用 GNews)
scrape_intraday_prices每小时第 5 分钟(:05)获取日内蜡烛图
Signal-quality refresh每日 05:00 UTC重新运行用于决定是否触发提醒的回测
Alert outcome settlement每日 06:15 UTC为过往提醒评分,以记录跟踪结果
Morning brief每日伦敦时间 07:00向订阅者发送 Claude 撰写的简报
API usage reset每月 1 日重置每月调用次数。免费密钥按生命周期调用次数计量,因此不会因重置而补充额度。

FinBERT 仅处理此前未见过的标题。模型(约 400 MB)会在首次评分调用时下载并加载,而不是在导入时加载。

未启用的数据源。 GNews、StockTwits 和 X/Twitter 抓取器仍保留在代码中,但已关闭。将 GNEWS_ENABLED、STOCKTWITS_ENABLED 或 X_ENABLED 设为 true,即可重新启用对应数据源。StockTwits 之所以关闭,是因为 Cloudflare 会屏蔽服务器 IP,而且针对新闻调优的模型对散户聊天内容的评分效果较差。

仓库布局
路径说明
backend/app/main.py所有 FastAPI 路由、调度器、Stripe webhook 和计费
backend/app/scraper.py, ai_sources.py标题抓取器。ScraperAI 配置位于 app/scraperai_configs/。
backend/app/sentiment.pyFinBERT 流水线
backend/app/prices.py, candles.pyyfinance 日线和日内价格
backend/app/sentiment_index.py跨资产指数(5 个类别等权)
backend/app/mcp_server.pyMCP 工具,挂载于 /mcp
backend/app/brief.pyClaude 撰写的晨报
backend/app/trend_signal.py, funding_monitor.py个人用途工具,并非产品功能
backend/build_scraper_config.py用于生成 ScraperAI 配置的离线工具。需要单独的 venv;运行时不会使用。
frontend/React + Vite 仪表盘
landing/营销网站、排行榜、指数页面和各股票代码的 SEO 页面
developers/开发者门户和 API 文档
status/状态页面

开始使用

后端
cd backend
python -m venv venv
source venv/Scripts/activate        # Windows (Git Bash); venv/bin/activate on macOS/Linux
pip install -r requirements.txt
python -m uvicorn app.main:app --reload   # http://localhost:8000

项目没有 .env.example。请创建 backend/.env,并填写以下变量。

变量用途
DATABASE_URLPostgreSQL。必需:应用导入时会创建表,因此没有可连接的数据库,应用就无法启动。
ANTHROPIC_API_KEY晨报。导入时读取,因此任意值都能让应用启动。
SUPABASE_URL, SUPABASE_SERVICE_KEY用户账户和等级
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET结账和 webhook
RESEND_API_KEY等待名单、提醒和 API 密钥邮件
ADMIN_SECRET管理、回填和清理端点使用的 ?token=
MCP_ALLOWED_HOSTS可选。MCP 端点接受的主机。默认包含端口 8000 上的 localhost 和 127.0.0.1;其他端口会返回 421。
GNEWS_ENABLED, GNEWS_API_KEY, STOCKTWITS_ENABLED, X_ENABLED, X_NITTER_BASE可选。未启用的数据源。
前端
cd frontend
npm install
npm run dev      # http://localhost:5173

在 frontend/.env 中设置 VITE_SUPABASE_ANON_KEY 以启用登录(VITE_GA_ID 为可选项)。API 基础 URL 硬编码在 src/lib/constants.js 中,值为 https://api.sentimentfx.org,因此本地前端默认会连接生产环境,除非你修改该值。

测试
cd backend
pip install -r requirements-dev.txt
python -m pytest tests/ -v

请使用 python -m pytest,不要直接运行 pytest:tests/ 中没有 __init__.py,因此直接运行 pytest 无法导入 app。测试仅用于基本检查,会验证应用能否启动以及核心路由是否正常响应,并且需要可连接的 DATABASE_URL。每次向 main 推送以及每个 PR,CI 都会使用一次性 Postgres 运行这些测试。项目没有前端测试套件。

情绪评分

score = positive_probability - negative_probability

取值范围为 -1(最负面)到 +1(最正面),UI 会将其显示为 0–100。中性标题的得分会接近 0,而不是被强制设为恰好 0;旧的“标签 × 置信度”方法正是存在这个问题。FinBERT 仅对标题评分,即使系统存储了完整的文章正文也是如此。

部署

  • **后端:**通过 Procfile + nixpacks.toml 部署到 Railway,域名为 api.sentimentfx.org。启动命令为 uvicorn app.main:app --host 0.0.0.0 --port $PORT。仅使用 CPU 运行。
  • **仪表盘、营销网站、开发者门户:**分别对应独立的 Vercel 项目(frontend/、landing/、developers/),每个项目都会从 main 自动部署。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。