Documentation Index
Fetch the complete documentation index at: https://mintlify.com/backtest-kit/ai-trading-mcp/llms.txt
Use this file to discover all available pages before exploring further.
CC_SYMBOL_LIST is a comma-separated list of Binance spot symbols that AI Trading MCP is permitted to trade. At startup, the engine spawns one Live.background() loop per symbol in the list — each loop maintains a live candle subscription, feeds price data into the strategy, and wires the symbol into the three MCP tools. A symbol that is not on the list cannot be opened, regardless of what the Telegram feed says or what the agent requests. The rejection happens engine-side, not through prompt engineering.
Default Symbol List
The default whitelist contains 13 pairs:How the List Is Parsed
CC_SYMBOL_LIST is read and split at startup in packages/main/src/config/params.ts:
BTCUSDT, ETHUSDT and BTCUSDT,ETHUSDT are equivalent.
How the List Is Used at Startup
Once the strategy and exchange schemas are registered, both the paper and live entrypoints iterateCC_SYMBOL_LIST and call Live.background() for each symbol:
Live.background() is the engine’s non-blocking loop primitive. It subscribes to live candles for the symbol, starts the strategy callbacks, and wires the symbol into the MCP tool handlers. Symbols that are not started this way are unknown to the engine and will be rejected if the agent attempts to trade them.
Engine-Side Enforcement
The whitelist enforcement is architectural, not advisory. When the agent callsopen_position(symbol, position, note):
- The MCP HTTP bridge forwards the call to the trading process.
- The engine checks whether
symbolhas an activeLive.background()loop. - If the symbol was not started at boot (i.e., it was not in
CC_SYMBOL_LIST), the call is rejected with an error that travels back to the agent as anisErrortool result.
How to Override
SetCC_SYMBOL_LIST in your environment before starting the trading process:
.env:
Naming Convention
Symbols must use the Binance spot format: base asset followed immediately by the quote asset, all uppercase, no separator.| ✅ Correct | ❌ Incorrect |
|---|---|
BTCUSDT | BTC/USDT |
ETHUSDT | ETH-USDT |
SOLUSDT | sol_usdt |
Live.background() call to fail at market-data subscription time, usually surfacing as a ccxt BadSymbol error on startup.
Performance Considerations
Each symbol inCC_SYMBOL_LIST creates a persistent candle subscription to Binance’s WebSocket feed. The cost is additive:
Memory
Each
Live.background() loop holds a rolling candle buffer plus strategy and signal state in memory. Larger lists push heap usage higher, and with the Redis/Mongo backends, persistence write volume scales proportionally.API rate usage
Each symbol opens a WebSocket connection and makes periodic REST calls for order state. Binance enforces per-IP and per-key rate limits — a large list brings you closer to them, especially during the initial candle history fetch at startup.
Reducing
CC_SYMBOL_LIST is the primary lever for lowering API load and narrowing the agent’s trading universe. If you are running on a resource-constrained host, or if you want to limit the agent to a specific market segment, trimming the list to three to five symbols is a good starting point. The default 13-symbol list was chosen to cover the demo strategy’s range; there is nothing special about the number.