BlackForge MCP Server
OfficialThis MCP server exposes BlackForge spot-market data and quota information through read-only tools.
Discover covered exchanges, metric definitions/units/families, live metric count, and plan requirements with
blackforge_catalog(no API key needed).List the trading pairs a venue trades with
blackforge_symbols.Get the latest completed 5-minute bucket for one exchange/symbol, optionally narrowed to selected columns, with quality flags/notes when present (
blackforge_latest).Fetch a time series for one metric over an ISO-8601 range at
5m,1h, or1d, capped at 50,000 points and with a quality summary when flagged (blackforge_series).Check recent request counts and remaining monthly row quota (
blackforge_usage).Plan-gated columns are reported via
columnsOmitted, and venue/plan restrictions surface as tool errors.
Provides real-time crypto market data including order-book depth, spreads, volumes, and liquidity metrics for trading pairs on Binance.
Provides real-time crypto market data including order-book depth, spreads, volumes, and liquidity metrics for trading pairs on Coinbase.
Provides real-time crypto market data including order-book depth, spreads, volumes, and liquidity metrics for trading pairs on KuCoin.
Provides real-time crypto market data including order-book depth, spreads, volumes, and liquidity metrics for trading pairs on OKX.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@BlackForge MCP Server get latest BTCUSDT on binance"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@blackforge-so/mcp
A Model Context Protocol stdio server that puts BlackForge market data in your agent's hands: real time crypto market data from the major exchanges (binance, bitget, bybit, coinbase, gate, kraken, kucoin, mexc, okx), 150+ metrics for 14,000+ pairs, per pair per closed minute (1m on Ultra and PAYG; 5m, 1h and 1d rollups for every plan). It also reads the linear futures contracts on the major futures venues: funding, open interest, prices, taker flow and liquidations (Futures).
Every column is a measurement with a definition: order book depth and shape, resting
liquidity lifetimes, trade-explained vs book-implied volume, spreads and market-wide context,
returned in context so an agent can read the raw microstructure directly. It is a thin client
over the public BlackForge /v1 API; it stores nothing and re-shapes nothing.
Quickstart
Add the server to your MCP client and paste an API key. Claude Desktop
(claude_desktop_config.json) or Claude Code (.mcp.json):
{
"mcpServers": {
"blackforge": {
"command": "npx",
"args": ["-y", "@blackforge-so/mcp"],
"env": { "BLACKFORGE_API_KEY": "bf_live_your_key" }
}
}
}No install step: npx -y @blackforge-so/mcp fetches and runs the server on demand.
Where to get a key
Mint a key at app.blackforge.so → API. The server never
creates keys; it reads BLACKFORGE_API_KEY from its environment. The blackforge_catalog
tool works without a key, so you can verify the install before pasting one.
Related MCP server: iturri
Tools
Tool | Returns |
| Every venue and every column definition, with |
| The trading pairs a venue lists, e.g. |
| The latest completed bucket for one |
| A time series for one column over a range: ascending |
| The key's recent request counts and remaining monthly row quota. |
Plan entitlements (which venues, columns, and intervals a key may read) are enforced by the
API. When a column is dropped because your plan does not include it, the tool result reports
it in columnsOmitted so the agent understands why a key is absent. Venue- or interval-level
restrictions come back as a clear tool error carrying the HTTP status and the server's message
(including the upgrade URL, verbatim).
Futures
The same key reads the linear futures contracts (perpetual and dated) on the major
futures venues, in real time: mark, index, last and best bid and ask prices, the funding rate
and next funding time, open interest in coins and in quote currency, taker buy and total
volume, and liquidations. History is kept like spot, from 7 November 2026: each plan reads
futures through its usual history window. The futures block of blackforge_catalog lists
the futures venues (with whether each publishes a liquidation feed), every futures column, its
own quality-flag table and when the history starts.
Tool | Returns | Plan |
| The contracts a futures venue lists, spelled the way the venue spells them ( | Every plan |
| The latest complete bucket for one contract at the plan's interval: a | Every plan |
| One futures column over a range at | Every plan |
| Contracts ranked by one column on the latest bucket, on one venue or across all of them; | Every plan |
| Liquidation events, newest first ( | Max, Ultra, PAYG |
Plans follow the spot ladder: Free reads binance, gate and mexc futures as daily bars over the
last 14 days; Pro adds every futures venue at 1h; Max goes down to 5m and adds the
liquidation columns and the event feed; Ultra and PAYG go down to 1m. A funding rate is per
the venue's own funding interval, which differs between venues. Liquidations come from each
venue's public feed: some venues throttle it (a lower bound in a cascade) and some publish
none (null); the catalog says which.
Live formulas and the live order book
Beyond the stored history, the server reaches BlackForge's realtime host. Write your own measure from order book and trade data across the major venues, stream it every second, and get notified when it crosses a value you choose.
Tool | Does | Plan |
| Checks a formula without saving it. Free. A refusal comes back as data: a stable | Ultra |
| Saves a formula ( | Ultra |
| Saved formulas, your limits and current usage. | Ultra |
| Deletes a formula and the notifications on it. | Ultra |
| Streams a saved formula ( | Ultra |
| Notifies you when a formula crosses a value you set ( | Ultra |
| List or delete notifications. | Ultra |
| The live order book for one pair, up to 200 levels a side. | Max, Ultra |
| Prices a market order against the live book ( | Max, Ultra |
| Best bid and ask for one base/quote on every venue that lists it, read in the same moment. | Max, Ultra |
A formula looks like mid(binance:BTCUSDT) - mid(okx:BTC-USDT) or
buyVol(binance:SOLUSDT, 60s) / max(sellVol(binance:SOLUSDT, 60s), 1). Pairs are spelled
exactly as blackforge_symbols lists them. The full function list is in the
blackforge_formula_validate tool description. Streaming and notifications are charged one
row per referenced pair per evaluation; live book reads by levels returned or walked, against
the same monthly quota as everything else. Every streamed value carries flags (for example
WARMING while a windowed term has not filled its window yet) and null means there was no
number, never zero.
The stream uses Node's built-in WebSocket, so blackforge_formula_watch needs Node 22 or
newer; every other tool runs on Node 20. Your key travels in the x-api-key header, never
in a URL.
Charts
blackforge_series and blackforge_futures_series also ship an interactive chart. A host that implements the
MCP Apps extension
(io.modelcontextprotocol/ui) renders the result as a line chart with flagged buckets drawn
in the same convention the BlackForge console uses; every other host sees exactly the JSON it
saw before.
Nothing about the tool contract changes. The chart payload travels in the result's _meta,
which is protocol metadata and reaches no model, so content[0].text is byte-identical
whether or not your host renders widgets, so the token cost of a series is the same either way.
That is deliberate: structuredContent would have been the obvious home for it, but core MCP
treats that field as server-produced result data, and a host without Apps support may hand it
to the model, doubling the cost of a large series.
The chart is one self-contained HTML file with uPlot and all CSS inlined, because MCP Apps
render under a deny-by-default CSP where an external <script> would simply never load. It is
read-only and never calls back into the server: it draws the points it was given and cannot
spend your row quota behind your back. Series longer than 2,000 points are decimated for the
chart only (the tool still returns every point), and the payload says so rather than
quietly thinning the line.
Data quality
When the API reports a row's measurement quality, blackforge_latest carries it through as a
quality object (flags naming what went wrong in the window, contaminates listing which
figures it flags) plus a plain-English qualityNote. blackforge_series
aggregates it into one qualitySummary ({ flaggedBuckets, of, flags }) rather than repeating
it on every point. Both keys are omitted entirely when nothing is flagged, and a
quality.raw of 32768 means the row predates the quality rail and was never assessed:
unknown, not bad. The flag decode table lives on the qualityFlags metric in
blackforge_catalog, as a bits array; this server reads it from there and never carries a
copy of its own.
Configuration
Env var | Default | Purpose |
| (none) | Your key. Required for every tool except |
|
| API base. Paths are appended as |
|
| Realtime host for the live formula stream and the live order book reads. |
Local development
npm install
npm run build # → dist/index.js (ESM, executable) + dist/widget/chart.html
npm test # client unit tests + a stdio integration testbuild runs tsup first and the widget's vite build second, and the order is load-bearing:
tsup's clean wipes the whole of dist/, so reversing them deletes the widget and leaves the
server serving a resource that is not there.
The integration test spawns the built server over stdio and drives it with the MCP client.
Its data assertions need a local BlackForge API at http://localhost:3001/api; without one,
those assertions are skipped and the tool-listing checks still run.
License
MIT
Available Tools
5 toolsblackforge_catalogBlackForge catalogA
List every venue BlackForge covers (9 spot exchanges) and every column it measures (one wide row per (exchange, symbol) per 5-minute window: order-book depth and shape, resting-liquidity lifetimes, trade-explained vs book-implied volume, spreads, and market-wide context). metricCount is the exact number of columns available now. Each metric carries a precise measurement definition, unit, family, and the minimum plan that includes it; the qualityFlags metric also carries the bits table that decodes the per-row quality mask. This route needs no API key. CALL THIS FIRST to learn the exact exchange and metric identifiers the other tools accept.
Inputs: no named parameters.
blackforge_latestBlackForge latest bucketA
Return the latest completed 5-minute window for one (exchange, symbol): a values object mapping each column key to its measured number (or null when not observed), plus the window timestamp ts in epoch milliseconds. Omit columns to get every column your plan includes; pass a subset of column keys (from blackforge_catalog) to narrow the payload. Columns your plan does not cover are dropped and reported in columnsOmitted so you can see why a key is absent. WHEN PRESENT, a quality object reports the row's measurement quality — flags names what went wrong during the window and contaminates lists which figures it flags, with a plain-English qualityNote beside it. Read it before trusting an unusual value. A quality.raw of 32768 means the row predates the quality rail and was never assessed — that is unknown, not bad. When the key is absent, the row carries no quality assessment at all.
Inputs: symbol (required), exchange (required), columns.
blackforge_seriesBlackForge time seriesA
Return a time series for one column of one (exchange, symbol): points is an ascending array of { ts, value } where ts is epoch milliseconds and value is the measured number (or null). from/to are ISO-8601 datetimes; interval is one of 5m, 1h, 1d (higher intervals may be plan-gated). The server caps a response at 50,000 points. If the requested metric is above your plan, points comes back empty and the column is listed in columnsOmitted — that is why it is empty. WHEN ANY BUCKET IS FLAGGED, a qualitySummary object reports how many of the buckets carry a quality flag and which flags they are ({ flaggedBuckets, of, flags }); per-bucket quality is deliberately not repeated on every point. No qualitySummary means no bucket in the range was flagged.
Inputs: to (required), from (required), metric (required), symbol (required), +2 more.
blackforge_symbolsBlackForge symbolsA
List the trading pairs (symbols) a given venue trades, as an array of symbol strings. Use these values as the symbol argument to blackforge_latest and blackforge_series. Valid exchange values come from blackforge_catalog (e.g. binance, bybit, coinbase, kraken, okx). A venue outside the caller's plan returns HTTP 403 with the plan and an upgrade URL.
Inputs: exchange (required).
blackforge_usageBlackForge usageA
Report the calling key's recent usage: days is a per-day breakdown of request counts and the last request time, and rowsRemaining is the monthly row quota still available (omitted for usage-based plans that have no monthly ceiling). Use this to check headroom before a large pull.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool has a distinct purpose: blackforge_catalog lists venues and metrics, blackforge_symbols lists trading pairs for an exchange, blackforge_latest returns the latest 5-minute window, blackforge_series returns historical data, and blackforge_usage reports API usage. No two tools overlap in functionality.
All tools follow a consistent pattern with the 'blackforge_' prefix and snake_case naming. The names are descriptive nouns or adjectives (catalog, symbols, latest, usage, series), maintaining uniform style.
Five tools effectively cover the essential operations for a financial data server: discovery, symbol listing, latest data, historical data, and usage tracking. The count is well-scoped and not excessive.
The tool surface provides comprehensive coverage: discover available metrics/exchanges, list symbols, retrieve latest window data, fetch time series, and monitor usage. No obvious gaps exist for the server's purpose.
Maintenance
Related MCP Connectors
Crypto market data for AI agents: live prices, OHLCV, sentiment, indicators and exchanges.
Aligned market data for AI agents: crypto, stocks, FX and macro on one clock. Local or hosted.
Market intelligence for AI agents. Real-time data, cross-market analysis, and regime detection.
Agent-native crypto market-data over MCP+REST: order flow, whales, liquidations, calibrated scores
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides live cryptocurrency market data from over 100 exchanges, enabling AI agents to fetch prices, order books, funding rates, and more for trading analysis and arbitrage opportunities.132MIT
- AlicenseNot gradedqualityDmaintenanceAccess verified historical market data with quality flags, funding rates, and more, supporting micropayments for AI agents and trading bots.27 npmMIT
- AlicenseNot gradedqualityCmaintenanceProvides real-time crypto market data for AI agents, including derivatives, liquidations, options, macro, and market regime detection, with pay-per-call via x402 micropayments on Base.119 npmMIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to access real-time crypto market data, volatility alerts, sentiment analysis, risk scores, and market reports through micropayment-gated MCP tools with on-chain settlement.-