Skip to main content
Glama
BlackForge MCP Server

BlackForge MCP Server

Official

@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

blackforge_catalog

Every venue and every column definition, with metricCount the live column count. Keyless. Call this first to learn valid exchange and metric identifiers.

blackforge_symbols

The trading pairs a venue lists, e.g. ["BTCUSDT", …].

blackforge_latest

The latest completed bucket for one (exchange, symbol) at the plan's interval (1 minute on Ultra and PAYG, 5 minutes otherwise): a values object of column → number, with epoch-ms ts. Pass columns to narrow it.

blackforge_series

A time series for one column over a range: ascending { ts, value } points at 1m (Ultra and PAYG), 5m, 1h, or 1d. Capped at 50,000 points, newest kept, truncated: true when cut. One-minute rows start at the switch to one-minute rows (availableFrom in the catalog); 5m covers all history.

blackforge_usage

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

blackforge_futures_symbols

The contracts a futures venue lists, spelled the way the venue spells them (BTCUSDT, BTC-USDT-SWAP, BTC_USDT, XBTUSDTM).

Every plan

blackforge_futures_latest

The latest complete bucket for one contract at the plan's interval: a values object (numbers, plus baseAsset, quoteAsset and contractType as text), ts, interval, and the row's quality when present.

Every plan

blackforge_futures_series

One futures column over a range at 1m, 5m, 1h or 1d, with the same chart widget as blackforge_series and a qualitySummary when a bucket is flagged.

Every plan

blackforge_futures_top

Contracts ranked by one column on the latest bucket, on one venue or across all of them; baseAsset: "BTC" puts one coin's funding or open interest on every venue side by side.

Every plan

blackforge_futures_liquidations

Liquidation events, newest first (side is the position liquidated), the last hour by default, with a feedNote when a venue in the result throttles its feed.

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

blackforge_formula_validate

Checks a formula without saving it. Free. A refusal comes back as data: a stable code, the location with a pointer under the source, and suggestions (e.g. the venue's real pair spelling), so an agent can fix it and check again.

Ultra

blackforge_formula_create

Saves a formula (name, expr, interval 1 to 60 s).

Ultra

blackforge_formula_list

Saved formulas, your limits and current usage.

Ultra

blackforge_formula_delete

Deletes a formula and the notifications on it.

Ultra

blackforge_formula_watch

Streams a saved formula (formulaId) or a one-off expr for up to 60 s (default 20) and returns first, last, min, max, the flags seen and the full series.

Ultra

blackforge_alert_create

Notifies you when a formula crosses a value you set (above, below, cross), by email and optionally a signed webhookUrl. The webhook secret is shown once.

Ultra

blackforge_alert_list / blackforge_alert_delete

List or delete notifications.

Ultra

blackforge_book

The live order book for one pair, up to 200 levels a side.

Max, Ultra

blackforge_fill

Prices a market order against the live book (usd or size); bps is null unless the visible book fills it all.

Max, Ultra

blackforge_spread_map

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

BLACKFORGE_API_KEY

(none)

Your key. Required for every tool except blackforge_catalog.

BLACKFORGE_BASE_URL

https://api.blackforge.so

API base. Paths are appended as /v1/.... Override for a self-hosted or local dev API (e.g. http://localhost:3001/api).

BLACKFORGE_REALTIME_URL

https://realtime.blackforge.so

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 test

build 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 tools
blackforge_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

    A4.4/5.0

    Scored across 5 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness5/5

    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

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Provides 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.
      13
      2
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Access verified historical market data with quality flags, funding rates, and more, supporting micropayments for AI agents and trading bots.
      27 npm
      MIT