
CCXT
io.github.ccxtPublished by GitHub account ccxtv0.1.3Updated Oct 24, 2026
Official CCXT MCP server - Market data and trading across 100+ exchanges and prediction markets
Overview
Official CCXT MCP server that gives an assistant public market data across 100+ crypto exchanges and prediction markets, plus opt-in account reads and trading.
- What you can do
- Explore exchanges and methods, search markets and prediction events, and read tickers, order books, OHLCV and trades, including raw read-only GET endpoints and safety status checks. Stream live data over WebSocket: subscribe to tickers, order books, balances, positions and trade or order events, then read fresh updates or wait for the next change. Read account data such as balances, open orders, own trades and positions once an account is configured. When enabled per account in the config file, place, edit and cancel orders, set leverage and margin mode, and run allowlisted write methods. When separately enabled, withdraw, transfer funds and fetch deposit addresses, or call raw write-style (
- When to use it
- Worth adding when you want an assistant to research crypto markets, compare exchanges, or monitor live prices and order books without leaving the chat. Also useful for checking balances and positions, or for sandbox trading and, if you deliberately enable it, live order management.
- Requirements
- Local process over stdio; requires Node.js 18 or newer and runs via npx. No configuration is needed for public market data. Private reads need an account in a config file (default path per OS, or set by CCXT_MCP_CONFIG) or per-exchange environment variables such as BINANCE_APIKEY and BINANCE_SECRET. Network access to the exchanges is required; some are geo-blocked.
Installation
In SourceWeft
- Open CCXT in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
ccxt-mcp — official CCXT MCP server
Connect AI agents (Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, and any MCP host) to 100+ cryptocurrency exchanges and prediction markets through the unified ccxt API: market data, account balances, order management, and — when you explicitly enable it — trading.
Security model (read this first)
Your API keys stay on your machine, and the AI model never sees them:
- The server runs locally over stdio. Nothing is hosted; keys never transit any third-party service.
- Credentials are never tool parameters: no tool schema accepts a key, so neither the model nor a prompt-injected page can supply, request, or change them. Tools reference accounts by name ("binance-main").
- Keys leave the process only inside signed HTTPS requests to the exchange itself — the same as any trading bot.
- Every tool result, error, and log line passes a redaction filter holding your loaded secret values (some exchanges echo signed URLs in error bodies — that path is closed). Raw request URLs/headers/bodies are never emitted.
verboseis force-disabled. - Capability tiers are opt-in and file-owned. Out of the box the server does public market data only. Configuring an account enables private reads.
trading,funds(withdraw/transfer), andimplicitWrites(raw endpoints) must each be enabled per account in the config file — there is no tool that edits config, so a conversation can never grant itself permissions. Unregistered tiers do not even appear in the tool list. - Writes are previewed and confirmed (native confirmation form where the host supports elicitation, otherwise an explicit preview + confirm-token round-trip), validated against market limits and your notional caps, and journaled to an append-only audit log.
Recommended exchange-side backstops (they hold even if your machine is compromised): create API keys with withdrawal permission disabled and an IP allowlist.
One honest caveat: any local agent with filesystem access could read the config file with its own tools — that is governed by your MCP host's permission model, not by this server. Prefer your host's secret storage where available (see below), keep the file chmod 600, and consider a deny rule for the path in your host's settings.
Install
Requires Node.js ≥ 18. The npm package is ccxt-mcp; the server binary is npx -y ccxt-mcp.
Claude Code
Or per-project via .mcp.json (safe to commit — no secrets):
Claude Desktop
Add to claude_desktop_config.json (Settings → Developer → Edit Config):
Cursor
~/.cursor/mcp.json (or .cursor/mcp.json per project):
VS Code
.vscode/mcp.json — VS Code's inputs mechanism stores values in encrypted secret storage, the best option for keys among the JSON-config hosts:
Windsurf
~/.codeium/windsurf/mcp_config.json — same mcpServers shape as Claude Desktop; ${env:VAR} interpolation is supported.
Configuration
With no configuration the server serves public market data on all exchanges — that alone is a useful install.
To add accounts, create the config file (path shown by the get_safety_status tool):
- macOS:
~/Library/Application Support/ccxt-mcp/config.json - Linux:
~/.config/ccxt-mcp/config.json - Windows:
%APPDATA%\ccxt-mcp\config.json - Or point
CCXT_MCP_CONFIGat any path (a legacy per-exchangekeys.local.jsonshape also loads).
Account fields: any credential from the exchange's requiredCredentials (apiKey, secret, password, uid, walletAddress, privateKey, …), sandbox/demo, defaultType, options (ccxt constructor options), prediction: true (for exchanges that exist in both the crypto and prediction namespaces, e.g. hyperliquid), and the safety switches below. chmod 600 the file; the server warns otherwise (or refuses with "settings": {"strictPermissions": true}).
Environment variables work too: <EXCHANGEID>_<CREDENTIAL> (e.g. BINANCE_APIKEY, OKX_PASSWORD) fill missing credentials, and the CCXT_MCP_EXCHANGE/CCXT_MCP_APIKEY/CCXT_MCP_SECRET/CCXT_MCP_SANDBOX/CCXT_MCP_TRADING set defines a single account named default.
Claude Desktop (.mcpb bundle): the install form configures one exchange. To use several exchanges (or enable live trading/withdrawals), set the Config file field to a config.json with an accounts map like the one above — or just create it at the default path and leave the form fields blank.
Capability tiers
"trading": true deliberately works only on sandbox/demo accounts; live trading requires typing "trading": "live" and deciding a maxOrderValue (a number, or explicitly null to opt out). The same pattern applies to funds with maxTransferValue. Activating a tier is your responsibility — the server's job is honest gates, confirmation, and the audit journal (<cache-dir>/ccxt-mcp/journal/).
Tools
market — list_exchanges, describe_exchange, describe_method (search/signatures/per-exchange params + docs links), search_markets, get_tickers, get_orderbook, get_ohlcv, get_trades, search_events (prediction markets), call_read_method (any unified fetch*/load* — structurally read-only), call_implicit_get (raw GET endpoints), get_safety_status, fetch_route (best execution route for converting an asset at a given size across ~50 exchanges, via the CCXT order router — a quote, no keys needed).
live (WebSocket) — watch_subscribe opens a background ccxt.pro stream; watch_read returns fresh data. State streams are snapshots of "what is X right now" — watchTicker(s), watchOrderBook(ForSymbols), watchOHLCV, watchBalance, watchPositions, watchBidsAsks, watchMarkPrice(s): the server merges live updates into the full current set, so watch_read always returns every subscribed symbol in latest (a multi-symbol stream never shows just the one that last ticked). Event streams are logs — watchTrades and the private watchOrders/watchMyTrades/watch(My)Liquidations (private need an account): watch_read returns new items oldest-first in events with a cursor. Pass waitForChange: true to watch_read to block until the next update (or timeout) instead of polling — the efficient way to wait for a fill or position change. watch_unsubscribe stops it; watch_list shows active streams. The long-lived server holds the socket so the agent always has fresh data; idle streams auto-stop after 10 minutes.
read — list_accounts, get_balance, get_orders, get_my_trades, get_positions.
trading — create_order, edit_order, cancel_order, cancel_all_orders, set_leverage, set_margin_mode, call_write_method (allowlisted long tail: margin/position/batch-cancel ops), execute_route (executes a fetch_route result with ccxt's OrderRouter across your accounts — every order still bound by that account's caps, symbol lists and confirmation).
funds — withdraw, transfer, get_deposit_address. implicitWrites — call_implicit_write.
Every list result is capped and paginated to fit host context limits (with in-band truncation notices); the raw info payload is stripped by default. Prediction exchanges use the same tools with outcome handles (from search_events) in the symbol position.
Troubleshooting
- "Trading is not enabled for account …" — edit the config file (see tiers above); this is not something the conversation can change.
- AUTH_FAILED on a sandbox account — testnet keys come from the exchange's testnet portal, not your live account (and vice versa).
- HTTP 451 / geo-blocks — some exchanges block cloud/VPN/US IPs; set a proxy via account
optionsif needed. - Slow first call on a big exchange — the initial
loadMarkets()can take seconds; it is cached on disk for 24h afterwards. npx @modelcontextprotocol/inspector npx -y ccxt-mcpopens an interactive tool console.
Development (inside the ccxt monorepo)
See DESIGN.md for the architecture, the prior-art analysis this server is built on, and the decision log.
Source: mcp/README.md at commit fb16540
Tools
0Version history
1- v0.1.3LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts