siftingio-mcp
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
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
You'll need an API key, which you can grab at :
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:
HTTP (Streamable HTTP) transport
If you're running this somewhere remote or hosted, use MCP's Streamable HTTP transport
instead of stdio:
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 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:
Then just point any HTTP-capable MCP client at 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:
Tools (36)
| Namespace | Tools |
| --- | --- |
| Live (snapshot) | last_trade, last_quote, last_tvl |
| Stocks | 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 / Forex | crypto_bars, forex_bars |
| DEX | dex_wallet |
| Markets | markets_list, markets_status_all, markets_status, markets_hours, markets_calendar |