Sifting

io.sifting由 sifting.io 發布v1.0.2更新於 Oct 24, 2026

Live crypto/forex/metals prices, OHLCV bars, SEC fundamentals, 13F holdings and econ calendar.

已驗證STDIO僅桌面資料庫金融資料與分析

概覽

AI 產生的概覽

Sifting 讓助理接上 SiftingIO 市場資料:加密貨幣、外匯與金屬的即時價格、OHLCV K 線、SEC 基本面、13F 持股與經濟行事曆。

可以做什麼
取得即時快照:加密貨幣、外匯與金屬市場的最後成交價、最新報價與 TVL,以及市場清單、開收市狀態、交易時段與宏觀經濟行事曆。研究股票:搜尋公司,讀取簡介、比率、盈餘、財務資料與 XBRL 科目,瀏覽 SEC 申報文件及章節,比對風險因素,並依基本面篩選。查看持股與人員:內部人交易、機構持股、申報方的 13F 持股、高階主管薪酬與公司事件。取得加密貨幣與外匯的歷史 OHLCV K 線,查詢 DEX 錢包活動。透過常駐 WebSocket 訂閱 cex、dex、fx、us、tvl 頻道並輪詢緩衝的即時資料流。
適用情境
當助理需要目前或歷史市場資料——報價、K 線、SEC 申報與基本面、13F 持股或宏觀事件——來回答研究或簡報類問題時使用。適合希望以一個伺服器涵蓋加密貨幣、外匯、金屬與美股的金融工作流程。
執行需求
以 Node.js 本機程序執行,從 npm 套件 siftingio-mcp 安裝(先建置再啟動,或直接從原始碼執行)。需要以 SIFTING_API_KEY 環境變數提供 SiftingIO API 金鑰;SIFTING_BASE_URL 與 SIFTING_WS_URL 可覆寫後端位址。需要連線至 SiftingIO API 與 WebSocket 的網路。另有 HTTP 傳輸模式,可用 MCP_AUTH_TOKEN 保護。
安裝前請注意
API 金鑰屬敏感資訊,透過 SIFTING_API_KEY 傳入,應放在用戶端的 env 設定而非提交進儲存庫的檔案。所有資料工具都會連外部 API,查詢與股票代號會傳送給 SiftingIO。HTTP 傳輸具狀態性,未設定 MCP_AUTH_TOKEN 時沒有驗證;README 建議只綁定回環位址並搭配 TLS 反向代理後再對外開放。結果約在 6 萬字元處截斷,串流緩衝會丟棄舊訊框。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Sifting,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

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

其他 MCP 客戶端

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

README

siftingio-mcp

[siftingio-mcp MCP server]

This is a Model Context Protocol (MCP) server that puts the SiftingIO market-data SDK (@siftingio/sdk) in reach of your AI assistant. Once it's running, the model can pull live prices, dig through SEC/EDGAR fundamentals, fetch OHLCV bars, look up 13F holdings, check market status, and scan the macro economic calendar — all as tools.

Setup

bash
npm installnpm run build

You'll need an API key, which you can grab at https://sifting.io:

bash
export SIFTING_API_KEY=sft_...

If you need to point at a different backend, SIFTING_BASE_URL and SIFTING_WS_URL are there to override the defaults.

Working locally? Copy .env.example to .env instead — npm run dev and npm start pick it up automatically (Node does the loading via --env-file-if-exists). When you wire this into an actual MCP client, though, pass the key through the server's env block rather than a file (there's an example further down).

Run

Here's the toolbox:

  • npm run build — compile TypeScript into dist/.
  • npm start — run the compiled server (node dist/index.js) over stdio.
  • npm run start:http — run it over Streamable HTTP (node dist/http.js).
  • npm run dev / npm run dev:http — run straight from source with tsx, no build step.
  • npm test — run the vitest suite (add npm run test:watch to keep it running).
  • npm run lint / npm run format — ESLint (typescript-eslint) and Prettier.
  • npm run typecheck — tsc --noEmit.

On every push and PR, CI (.github/workflows/ci.yml) walks through the same gauntlet: format check → lint → typecheck → build → test.

One thing worth knowing: the server talks JSON-RPC over stdio, so stdout belongs entirely to the protocol. Anything diagnostic goes to stderr to stay out of the way.

Inspect interactively

Want to poke at it by hand? The MCP inspector is the easiest way:

bash
SIFTING_API_KEY=sft_... npx @modelcontextprotocol/inspector node dist/index.js

HTTP (Streamable HTTP) transport

If you're running this somewhere remote or hosted, use MCP's Streamable HTTP transport instead of stdio:

bash
SIFTING_API_KEY=sft_... PORT=3000 npm run start:http# → MCP endpoint at http://127.0.0.1:3000/mcp  (POST messages, GET SSE, DELETE session)

It's stateful: every client gets its own session (tracked by the mcp-session-id header) and its own McpServer, while the upstream SiftingIO connection is shared across the whole process. As a safety measure it only binds to loopback and turns away non-local browser Origins — that's the DNS-rebinding protection. Set the port with PORT (or MCP_HTTP_PORT); it defaults to 3000.

If you want auth, set MCP_AUTH_TOKEN and the server will demand Authorization: Bearer <token> on every request (anything missing or wrong gets a 401). Pair that with a reverse proxy handling TLS and the token, and you can safely expose the server past localhost:

bash
MCP_AUTH_TOKEN=s3cret SIFTING_API_KEY=sft_... npm run start:http

Then just point any HTTP-capable MCP client at http://127.0.0.1:3000/mcp:

bash
claude mcp add --transport http siftingio http://127.0.0.1:3000/mcp

Use with an MCP client

Drop this into your client config — Claude Desktop's claude_desktop_config.json, say, or use claude mcp add if you're on Claude Code:

json
{  "mcpServers": {    "siftingio": {      "command": "node",      "args": ["/absolute/path/to/siftingio-mcp/dist/index.js"],      "env": { "SIFTING_API_KEY": "sft_..." }    }  }}

Tools (36)

NamespaceTools
Live (snapshot)last_trade, last_quote, last_tvl
Stocksstocks_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 / Forexcrypto_bars, forex_bars
DEXdex_wallet
Marketsmarkets_list, markets_status_all, markets_status, markets_hours, markets_calendar
Filersfilers_holdings
Macroeconomic_calendar_list
Live (stream)ws_subscribe, ws_unsubscribe, ws_poll, ws_collect, ws_status, ws_disconnect

A few patterns are worth calling out:

Paginated tools take cursor/limit and hand back a meta.next_cursor to fetch the next page. The stocks_* list tools — stocks_filings, stocks_earnings, stocks_insiders, stocks_ownership, stocks_events, stocks_compensation — also understand max_items: set it and they'll auto-paginate, gathering up to that many items across pages in a single call.

The high-traffic tools (last_trade, last_quote, last_tvl, stocks_profile, stocks_search) come with an output schema and return structuredContent alongside the human-readable text, so clients can read them machine-side too.

Every tool also carries MCP annotations. The data tools are readOnlyHint: true (and openWorldHint: true, since they reach out to the external API), while the WebSocket tools that change connection state are readOnlyHint: false, destructiveHint: false.

Results are size-capped at roughly 60k characters (see MAX_RESULT_CHARS in src/util.ts). When a heavy endpoint — full XBRL financials, screeners, OHLCV bars — returns more than that, the server trims its largest array and tacks on a _truncated note explaining how to narrow the query.

Live WebSocket streaming

Streaming is the awkward case: it doesn't fit neatly into a single request/response. So the server holds one persistent WebSocket open, buffers the frames as they arrive, and the tools just read from that buffer. Channels (the product field) are cex (crypto), dex (DEX trades), fx (forex), us (US stocks), and tvl (DEX pool TVL).

There are two ways to work with it:

  • Subscribe + poll, for ongoing streams: call ws_subscribe once, then keep calling ws_poll. The first poll gives you a recent tail; feed the returned next_seq back in as after_seq and you'll only get newer frames from then on. ws_status shows you the connection and what's subscribed, and ws_disconnect tears the whole thing down.
  • Collect, for a quick one-shot: ws_collect subscribes, waits up to duration_ms (or until it's seen max frames), returns what it caught, and cleans up any subscription it had to create. Perfect for "grab me a few seconds of BTCUSD."

The connection reconnects on its own and replays your subscriptions when it does. The buffer is a rolling window, so the oldest frames eventually fall off — and when they do, you'll hear about it through dropped/gap.

Prompts

These are guided, multi-tool workflows your client can surface as slash-commands:

  • company_snapshot (ticker) — pulls stocks_profile, stocks_ratios, the latest stocks_filings, and last_trade together into one briefing.
  • compare_companies (tickers) — lines up several tickers side by side across the key ratios.
  • market_now — what's open and closed right now, plus the high-impact macro events coming up.

Logging & shutdown

The server advertises the MCP logging capability and pushes structured notifications/message to the client whenever something happens with the connection (WebSocket open/close/reconnect/error) or on shutdown — and it mirrors all of that to stderr too.

When it catches a SIGINT or SIGTERM, it closes the live WebSocket and shuts the server down cleanly before exiting.

來源:README.md,提交 40a31aa

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.0.2最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

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

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分