SiftingIO MCP Server について
SiftingIO MCP Serverは、市場データを必要とするAIアシスタント向けのPython製MCPサーバーです。株式、暗号資産、外国為替、DEXのスナップショット、財務資料、WebSocketストリームを扱います。
主な機能
- 01リアルタイム価格と気配値
- 02株式の提出書類とファンダメンタルズ
- 03複数市場のOHLCVデータ
- 04市場時間と経済カレンダー
- 05WebSocketの購読と収集
- 06企業・市場向けプロンプト
活用シーン
- 01企業概要、比率、提出書類を使った企業調査
- 02リアルタイム価格や市場状況の確認
- 03暗号資産、外国為替、株式のストリーム収集
MCP 対応
stdioまたはStreamable HTTP経由で、SiftingIOの市場データツールとガイド付きプロンプトをMCPクライアントに公開します。SiftingIO APIキーが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
siftingio-mcp (Python)
Model Context Protocol(MCP)サーバーです。
SiftingIO market-data SDK(siftingio)を
AI アシスタントに公開します。実行すると、モデルはリアルタイムの価格を取得し、SEC/EDGAR の
ファンダメンタルズを読み込み、OHLCV バーを取得し、13F 保有銘柄を検索し、市場の状況を確認して、
マクロ経済カレンダーをスキャンできます。
これは、FastMCP を基盤に構築された、
siftingio-mcp(TypeScript サーバー)の
Python 移植版です。
セットアップ
Python 3.13 以降が必要です。
python -m venv .venv && source .venv/bin/activate
pip install -e .
https://sifting.io から API キーを取得してください。
export SIFTING_API_KEY=sft_...
別のバックエンドを指定するには、SIFTING_BASE_URL と
SIFTING_WS_URL でデフォルト値を上書きします。
ローカルで開発する場合は、.env.example を .env にコピーし、お好みの方法で読み込んでください(例:
set -a; . ./.env; set +a、または direnv)。実際の MCP クライアントに接続する場合は、
ファイルではなくサーバーの env ブロックでキーを渡してください。例は以下にあります。
実行
コマンド:
siftingio-mcp— stdio(デフォルトのトランスポート)でサーバーを実行します。siftingio-mcp-http— Streamable HTTP で実行します。python -m siftingio_mcp— コンソールスクリプトを使わずにsiftingio-mcpと同じ処理を実行します。pytest— テストを実行します。ruff check/ruff format— リントとフォーマットを行います。mypy— 型チェックを行います。
CI(.github/workflows/ci.yml)では、すべての push と PR で同じ手順を実行します。フォーマットチェック、
リント、型チェック、テストです。
このサーバーは stdio 経由で JSON-RPC をやり取りするため、stdout はプロトコル専用です。 診断メッセージは stderr に出力されます。
対話形式での確認
MCP インスペクターを使うと、サーバーを手動で簡単に試せます。
SIFTING_API_KEY=sft_... npx @modelcontextprotocol/inspector siftingio-mcp
HTTP(Streamable HTTP)トランスポート
リモート環境またはホスト環境にデプロイする場合は、stdio の代わりに MCP の Streamable HTTP トランスポートを使用します。
SIFTING_API_KEY=sft_... PORT=3000 siftingio-mcp-http
# → MCP endpoint at http://127.0.0.1:3000/mcp (POST messages, GET SSE, DELETE session)
これはステートフルです。各クライアントは独自のセッションを持ち(mcp-session-id
ヘッダーで追跡されます)、上流の SiftingIO 接続はプロセス全体で共有されます。バインド先は
ループバックに限定され、DNS リバインディング対策として、ローカル以外のブラウザーの Origin は拒否されます。
ポートは PORT(または MCP_HTTP_PORT)で設定します。デフォルトは 3000 です。
認証を設定するには、MCP_AUTH_TOKEN を設定します。サーバーはすべてのリクエストで
Authorization: Bearer <token> を必須とします(トークンがないか、誤っている場合は 401 が返されます)。TLS とトークンの処理を
リバースプロキシに任せれば、サーバーを localhost の外部に公開できます。
MCP_AUTH_TOKEN=s3cret SIFTING_API_KEY=sft_... siftingio-mcp-http
その後、HTTP に対応した任意の MCP クライアントを http://127.0.0.1:3000/mcp に接続します。
claude mcp add --transport http siftingio http://127.0.0.1:3000/mcp
MCP クライアントでの使用
クライアント設定に次の内容を追加します。たとえば Claude Desktop の
claude_desktop_config.json に追加するか、Claude Code で claude mcp add を使用します。
{
"mcpServers": {
"siftingio": {
"command": "siftingio-mcp",
"env": { "SIFTING_API_KEY": "sft_..." }
}
}
}
siftingio-mcp がクライアントの PATH にない場合は、コンソールスクリプトの絶対パス
(/path/to/.venv/bin/siftingio-mcp)を指定するか、python -m siftingio_mcp を使用してください。
ツール
サーバーは36個のツールを公開しています:
| 名前空間 | ツール |
|---|---|
| ライブ(スナップショット) | last_trade、last_quote、last_tvl |
| 株式 | stocks_search、stocks_profile、stocks_filings、stocks_filing、stocks_sections、stocks_section、stocks_risk_factors_diff、stocks_ratios、stocks_earnings、stocks_financials、stocks_financial_concept、stocks_insiders、stocks_ownership、stocks_events、stocks_compensation、stocks_screener、stocks_bars |
| 暗号資産/外国為替 | crypto_bars、forex_bars |
| DEX | dex_wallet |
| 市場 | markets_list、markets_status_all、markets_status、markets_hours、markets_calendar |
| 報告者 | filers_holdings |
| マクロ | economic_calendar_list |
| ライブ(ストリーム) | ws_subscribe、ws_unsubscribe、ws_poll、ws_collect、ws_status、ws_disconnect |
知っておくと便利なパターンをいくつか紹介します。
ページネーションに対応するツールはcursor/limitを受け取り、次のページを取得するためのmeta.next_cursorを返します。stocks_filings、stocks_earnings、stocks_insiders、stocks_ownership、stocks_events、stocks_compensationなどのstocks_*リストツールは、**max_items**も受け付けます。これを設定すると自動でページネーションを行い、1回の呼び出しでページをまたいで指定数までの項目を収集します。
利用頻度の高いツール(last_trade、last_quote、last_tvl、stocks_profile、stocks_search)には出力スキーマがあり、人が読めるテキストに加えてstructuredContentも返すため、クライアントは機械処理用のデータも読み取れます。
すべてのツールにはMCPのアノテーションも付与されています。データツールはreadOnlyHint: true(外部APIに接続するため、openWorldHint: trueでもあります)です。一方、接続状態を変更するWebSocketツールはreadOnlyHint: false、destructiveHint: falseです。
結果のサイズは約60k文字に制限されています(siftingio_mcp/util.pyのMAX_RESULT_CHARSを参照)。完全なXBRL財務データ、スクリーナー、OHLCVバーなど、サイズの大きいエンドポイントがこの上限を超えるデータを返した場合、サーバーは最大の配列を切り詰め、クエリを絞り込む方法を説明する_truncatedメモを追加します。
from/toに関する注意:fromはPythonの予約語であるため、日付の下限を指定する入力フィールド名は**from_**です(SiftingIO SDK独自の規則に合わせています)。toは変更ありません。
ライブWebSocketストリーミング
ストリーミングは単一のリクエスト/レスポンスには収まらないため、サーバーは1つの永続的なWebSocket接続を維持し、届いたフレームをバッファーに格納します。ツールはそのバッファーからデータを読み取ります。チャネル(productフィールド)はcex(暗号資産)、dex(DEX取引)、fx(外国為替)、us(米国株)、tvl(DEXプールのTVL)です。
使い方は2通りあります:
- 購読してポーリング:ストリームを継続的に取得する方法です。
ws_subscribeを1回呼び出してから、ws_pollを繰り返し呼び出します。最初のポーリングでは直近のデータが返されます。返されたnext_seqをafter_seqとして渡すと、それ以降の新しいフレームだけを取得できます。ws_statusでは接続と現在の購読状況を確認でき、ws_disconnectで接続を終了できます。 - 収集:手軽に一度だけ取得する方法です。
ws_collectは購読を開始し、duration_msで指定した時間(またはmaxで指定した数のフレームを受信するまで)待機した後、受信したデータを返し、自身が作成した購読をすべて解除します。BTCUSDの数秒分のデータを取得するのに便利です。
接続が切れても自動で再接続し、その際に購読を再開します。バッファーはローリングウィンドウのため、古いフレームは時間とともに破棄されます。破棄が発生すると、dropped/gapを通じて通知されます。
プロンプト
クライアントがスラッシュコマンドとして表示できる、複数のツールを使ったガイド付きワークフローです:
company_snapshot(ticker)—stocks_profile、stocks_ratios、最新のstocks_filings、last_tradeを取得し、1つのブリーフィングにまとめます。compare_companies(tickers)— 複数のティッカーを主要な比率で横並びに比較します。market_now— 現在取引中の市場と休場中の市場、および今後予定されている影響の大きいマクロイベントを表示します。
ログ記録とシャットダウン
サーバーは、接続(WebSocket のオープン/クローズ/再接続/エラー)とシャットダウンに関する構造化ログを stderr に出力します(stdout は stdio トランスポートのプロトコル用に予約されています)。
SIGINT または SIGTERM を受信すると、アクティブな WebSocket を閉じて正常にシャットダウンしてから終了します。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。