SentimentFX について
SentimentFXは、FinBERTで評価した金融ニュース見出しを、暗号資産・FX・株式・ETF・コモディティの42銘柄について日足・日中価格とともに提供します。投資家や開発者向けに、ダッシュボード、REST API、MCPツールでセンチメントと相関分析を扱い、価格予測は行いません。
主な機能
- 01FinBERTによる金融ニュース評価
- 02日足・日中価格データ
- 03センチメントと価格の相関分析
- 04クロスアセットセンチメント指数
- 05REST APIとCSVエクスポート
活用シーン
- 01ニュースセンチメントと市場価格の比較
- 02アプリ向けの銘柄センチメント取得
- 03過去の相関とバックテストの確認
MCP 対応
MCPサーバーは、銘柄一覧、利用状況、センチメント、集計、価格、相関を取得する6つのツールを公開します。ストリーミング可能なHTTPを使い、X-API-KeyヘッダーまたはBearerトークンを受け付けます。データ取得はREST APIと同じ条件で課金されます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.sentimentfx.org/mcpclaude mcp add --transport http org-sentimentfx-market-sentiment https://api.sentimentfx.org/mcp{"mcpServers":{"org-sentimentfx-market-sentiment":{"type":"http","url":"https://api.sentimentfx.org/mcp"}}}Cursor で開く{"servers":{"org-sentimentfx-market-sentiment":{"type":"http","url":"https://api.sentimentfx.org/mcp"}}}VS Code で開く{"mcpServers":{"org-sentimentfx-market-sentiment":{"type":"http","url":"https://api.sentimentfx.org/mcp"}}}{"mcpServers":{"org-sentimentfx-market-sentiment":{"serverUrl":"https://api.sentimentfx.org/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://api.sentimentfx.org/mcp認証が必要ツール
6このツールにパラメーターはありません。
詳細
SentimentFX
暗号資産、FX、株式、ETF、コモディティの42市場を対象としたニュースセンチメントデータセットです。SentimentFXは金融関連の見出しをスクレイピングし、それぞれをFinBERT(金融向けに調整されたトランスフォーマーモデル)でスコアリングして、日次およびイントラデイの価格とともに保存します。ダッシュボード、従量制のREST API、またはClaudeやその他のAIクライアント向けのMCPツールからデータを利用できます。
提供するのは、スコア付きのアーカイブとライブフィードです。価格予測ではありません。ダッシュボードでは相関とバックテストの結果を確認できるため、シグナルを自分で評価できます。また、センチメントがリターンを予測するという主張はしていません。
公開中: sentimentfx.org · app.sentimentfx.org · developers.sentimentfx.org · status.sentimentfx.org
機能
- 15分ごとにRSSフィード(CoinDesk、CoinTelegraph、Yahoo Finance、r/CryptoCurrencyなど)から見出しを取得し、RSSのないニュースサイトについては、保存済みのScraperAI設定を通じて取得します
- 新しい見出しをそれぞれ一度だけFinBERTでスコアリングします。
positive_prob - negative_probで算出し、-1から+1の値をUIでは0~100で表示します - yfinanceを通じて、42銘柄すべての価格を毎時更新します(日次OHLCおよびイントラデイのローソク足)
- 180日間にわたり、日次センチメントの変化と翌日リターンの相関を、95%信頼区間および強度ラベルとともに算出します
- スコアリング済みのニューステキストから構成される、無料の複数資産対応センチメント指数(0~100、恐怖 → 強欲)を公開します。トレーダーのポジション状況に基づくものではありません
- Stripe経由でアクセスを販売します。Proダッシュボードプラン、API向けのDataプラン、およびリクエストに応じて提供する全アーカイブがあります
対象範囲
| カテゴリ | 銘柄 |
|---|---|
| 暗号資産(5) | BTC, ETH, SOL, XRP, DOGE |
| FX(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)。FXペアは為替レートそのものです。株式、ETF、コモディティ先物は現地通貨のUSD建てで、GBPへの換算は行われません。
製品
ダッシュボード(app.sentimentfx.org)
- センチメントと価格のチャート、センチメント表示欄付きローソク足チャート、0~100のセンチメントゲージ
- 相関シグナル、乖離カード、インタラクティブなバックテストシミュレーター、見出しの影響パネル
- 記事ごとのスコアを表示する見出しフィード。編集部選定のニュースがデフォルトで、ソーシャルソースにはバッジが付きます。
- ランキング、実績、朝のブリーフの各ページ
- CSVエクスポート、メールでのセンチメントアラート、朝のブリーフメール(Pro)
アラートは、バックテストが品質基準を満たした銘柄に対してのみ発報されます。基準は、アウト・オブ・サンプルの純リターンがプラスであること、およびウォークフォワード分割の少なくとも70%でプラスとなることです。この基準は毎日更新されます。
プラン
| プラン | 価格 | 内容 |
|---|---|---|
| Free | £0 | 上位15銘柄(各カテゴリ3銘柄)、過去30日分の履歴、ローソク足、バックテスト、相関 |
| Pro | £11.99/mo or £99.99/yr | 全42銘柄、全期間の履歴、CSVエクスポート、アラート、朝のブリーフ、月15,000回のAPI呼び出し |
| Data | £49.99/mo or £499.99/yr | Proの全機能、月200,000回のAPI呼び出し |
| 無料APIキー | £0 | 30日間で1,000回の呼び出し、カード登録不要、上限到達時に停止 |
一括アーカイブ(スコアリング済みの全見出しと価格データをCSVまたはJSONL形式で収録)は別売りです。開発者ポータルのデータセットフォームからお問い合わせください。
Developer 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クレジット |
GET /v1/prices/{ticker}?days=1-365 | 日ごとの終値と currency フィールド | 返された日ごとに1クレジット |
GET /v1/correlation/{ticker} | 180日間のピアソンの 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)
同じデータを6つの Model Context Protocol ツールとして提供しています:list_tickers と get_usage(どちらも無料)、および /v1 の同等のエンドポイントとまったく同じ料金が適用される get_sentiment、get_summary、get_prices、get_correlation です。同じ X-API-Key ヘッダーを使うストリーム可能な HTTP を使用します。カスタムヘッダーを設定できないクライアント(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 | 毎時 :05 | 日中のローソク足を取得 |
| シグナル品質の更新 | 毎日 05:00 UTC | アラートの判定に使われるバックテストを再実行 |
| アラート結果の確定 | 毎日 06:15 UTC | 実績記録用に過去のアラートを評価 |
| モーニングブリーフ | 毎日 07:00 London | Claude が作成したブリーフを購読者にメール送信 |
| API 使用状況のリセット | 毎月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.py | FinBERT パイプライン |
backend/app/prices.py, candles.py | yfinance による日足および分足の価格 |
backend/app/sentiment_index.py | 複数資産のインデックス(5 カテゴリの等ウェイト平均) |
backend/app/mcp_server.py | MCP ツール。/mcp にマウントされています |
backend/app/brief.py | Claude が作成する朝のブリーフィング |
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_URL | PostgreSQL。必須です。インポート時にテーブルが作成されるため、接続可能なデータベースがないとアプリは起動しません。 |
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
pytest 単体ではなく、python -m pytest を使用してください。tests/ に __init__.py がないため、pytest 単体では app をインポートできません。テストはスモークテスト相当です。アプリが起動し、主要なルートが応答することを確認します。また、接続可能な DATABASE_URL が必要です。CI では、main へのプッシュごと、および PR ごとに、一時的な Postgres を使用してテストを実行します。フロントエンドのテストスイートはありません。
センチメントスコアリング
score = positive_probability - negative_probability
範囲は -1(最もネガティブ)から +1(最もポジティブ)で、UI では 0〜100 として表示されます。中立的なヘッドラインは 0 付近の値になり、ちょうど 0 に固定されません。これは、以前のラベル × 信頼度方式での問題点でした。FinBERT がスコアを付けるのはタイトルのみで、記事本文全体が保存されている場合も同様です。
デプロイ
- バックエンド:
Procfileとnixpacks.tomlを使用し、api.sentimentfx.orgで Railway 経由でデプロイします。uvicorn app.main:app --host 0.0.0.0 --port $PORTで起動します。CPU のみで動作します。 - ダッシュボード、ランディングページ、開発者ポータル: それぞれ別個の Vercel プロジェクト(
frontend/、landing/、developers/)で、各プロジェクトはmainから自動デプロイされます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。