tradebox-mcp
tradebox-mcp
Бортовой самописец + предохранители для ИИ-торговых агентов.
Биржи начинают пускать ИИ-агентов к торговле — и сами признают, что не видят, о чём те думают. tradebox — это локальный прокси, который сидит между вашей LLM (Claude, Cursor или любой другой MCP-хост) и любым брокерским MCP-сервером. Он записывает каждый вызов инструмента и рассуждения агента, а также блокирует любой ордер, нарушающий ваши лимиты, — до того, как ордер достигнет биржи.
Ноль изменений для агента — направьте ваш MCP-хост на tradebox вместо брокерского сервера; агент видит те же самые инструменты.
Локальность прежде всего — ваши API-ключи идут напрямую в дочерний процесс брокера. tradebox их не разбирает, не логирует и не передаёт, и сам совершает ноль сетевых вызовов.
Отказ ≠ сбой — заблокированный ордер возвращается как понятный результат вызова инструмента, который агент может прочитать и приспособиться к нему, а не как ошибка протокола, отправляющая его в цикл повторов.
Как это работает
tradebox работает с MCP с обеих сторон: он сервер для вашего хоста и клиент для каждого брокерского сервера, который он запускает.
flowchart LR
subgraph HOST["Your machine"]
A["MCP host<br/>(Claude Desktop / Cursor)"]
subgraph TB["tradebox-mcp"]
G["Guardrail engine<br/>(allow / deny)"]
R["Recorder<br/>(JSONL blackbox)"]
end
C["CCXT MCP server<br/>(child process)"]
L[("~/.tradebox/logs/<br/>YYYY-MM-DD.jsonl")]
end
X["Exchange<br/>(Binance, …)"]
A -- "stdio (JSON-RPC / MCP)" --> G
G -- "allowed calls only" --> C
G -.-> R
R -.-> L
C -- "HTTPS (your API keys<br/>never leave this hop)" --> XКаждый tools/call проходит через один и тот же конвейер:
sequenceDiagram
participant Agent as Agent (LLM)
participant TB as tradebox
participant Broker as CCXT MCP
participant Ex as Exchange
Note over Agent,Ex: ✅ order within limits
Agent->>TB: createOrder BTC/USDT, $150
TB->>TB: classify → trade.place<br/>guardrails → ALLOW
TB->>Broker: forward
Broker->>Ex: place order
Ex-->>Broker: filled
Broker-->>TB: result
TB->>TB: log call + result (JSONL)
TB-->>Agent: result
Note over Agent,Ex: ⛔ order over the limit
Agent->>TB: createOrder DOGE/USDT, $520
TB->>TB: classify → trade.place<br/>guardrails → DENY (allowed_symbols)
TB->>TB: log the denial
TB-->>Agent: "Order denied: DOGE/USDT is not<br/>in allowed_symbols (BTC/USDT, ETH/USDT)."
Note over Agent: agent reads the reason<br/>and adjusts — no crash loopОрдер никогда не попадает в брокерский процесс, когда правило его отклоняет: это происходит на один процесс раньше, чем в дело вообще вступают ваши API-ключи.
Related MCP server: PitBridge
Быстрый старт
1 — Создайте конфигурацию (ключи остаются на вашей машине; выполните chmod 600 для неё):
mkdir -p ~/.tradebox
cp config.example.yaml ~/.tradebox/config.yaml
chmod 600 ~/.tradebox/config.yaml# ~/.tradebox/config.yaml (minimal)
downstreams:
ccxt:
command: npx
args: ["-y", "@lazydino/ccxt-mcp", "--config", "~/.tradebox/ccxt-accounts.json"]
# ccxt-accounts.json holds your exchange keys (see config.example.yaml).
# Use a read + trade key. NEVER enable withdrawals on it.
guardrails:
allowed_symbols: ["BTC/USDT", "ETH/USDT"]
max_order_notional: 200 # $ per single order
max_orders_per_hour: 6
max_daily_loss: 100 # trips the circuit breaker (UTC day)
dry_run: true # ON by default — flip to false to go live2 — Направьте ваш MCP-хост на tradebox вместо брокерского сервера (claude_desktop_config.json или .cursor/mcp.json):
{
"mcpServers": {
"trading": {
"command": "npx",
"args": ["-y", "tradebox-mcp", "run", "--config", "~/.tradebox/config.yaml"]
}
}
}3 — (Необязательно, но рекомендуется) добавьте одну строку в системный промпт агента, чтобы бортовой самописец записывал не только действия, но и рассуждения:
Перед каждым торговым решением вызывайте инструмент
log_reasoningс кратким объяснением того, что вы собираетесь сделать и почему.
Вот и всё. Агент видит ccxt__createOrder, ccxt__fetchTicker, … как обычно. На стороне агента ничего не меняется.
Защитные механизмы
Правило | Ключ конфигурации | Что делает |
Белый список символов |
| Отклоняет любой ордер вне вашего списка |
Ограничение размера ордера |
| Отклоняет ордер выше этого размера (рыночные ордера оцениваются по цене тикера давностью не более 60 секунд — иначе отказ с сообщением "fetch the ticket first") |
Частотное ограничение |
| Предохранитель от зацикленного цикла — самый частый реальный сбой проблемных агентов (скользящее часовое торговое окно) |
Лимит дневного убытка |
| Главный предохранитель — см. диаграмму ниже |
Торговые часы |
| Разрешает ордера только в заданном временно́м окне в UTC |
Трансферы | (встроено) | Отклоняются по умолчанию. Торговый агент не должен выводить средства. Открытие требует явного |
Неизвестные инструменты |
| Инструмент, который не распознаёт ни одна карта и который выглядит мутирующим, отклоняется, а не считается read-only |
Паническая кнопка |
| Мгновенно отклоняет все торговые инструменты, даже если агент уже используется в запущенной сессии |
Жизненный цикл предохранителя
stateDiagram-v2
[*] --> Trading
Trading --> Locked : realized daily PnL ≤ −max_daily_loss
Trading --> Locked : operator runs "tradebox stop"
Locked --> Trading : operator runs "tradebox resume"
Locked --> Locked : every trade.* call → denied<br/>(reads still pass through)
note right of Locked
The lock survives restarts —
state is a projection of the log,
so a crash never resets the breaker.
end noteПробный прогон: проверьте агента до того, как дадите ему деньги
dry_run: true (по умолчанию) блокирует каждую сделку на прокси, записывает её так, будто она реальная, и возвращает симулированное исполнение. tradebox хранит поддельный стакан заявок, чтобы симуляция оставалась непротиворечивой: отмена или получение симулированного идентификатора даёт устойчивый ответ, а каждый симулированный результат помечен "мятун": true. Прогоните агента в dry-run неделю, изучите отчёт, потом переключите тумблер.
Чёрный ящик
Каждый вызов — разрешённый или отклонённый — дописывается в ~/.tradebox/logs/YYYY-MM-DD.jsonl, по одному JSON-событию на строку:
{"ts":"2026-08-25T12:00:00.123Z","event":"tool_call","server":"ccxt","tool":"createOrder","category":"trade.place","args":{"symbol":"BTC/USDT","side":"buy","type":"limit","amount":0.02,"price":58900},"decision":"allow","latency_ms":840,"result":{"order_id":"123","filled":0.02,"avg_price":58895}}
{"ts":"2026-08-25T12:05:01.000Z","event":"tool_call","server":"ccxt","tool":"createOrder","category":"trade.place","args":{"symbol":"DOGE/USDT","side":"buy","amount":50000},"decision":"deny","rule":"allowed_symbols","latency_ms":2}
{"ts":"2026-08-25T12:05:04.500Z","event":"reasoning","text":"DOGE blocked. Holding BTC, waiting for the 58K retest."}
{"ts":"2026-08-25T13:00:00.000Z","event":"guardrail_trip","rule":"max_daily_loss","value":-102.5,"limit":-100,"action":"trading_locked"}Секреты никогда не попадают в лог: нижестоящие блоки env не видны получателю, а любое поле с именем вида key|secret|token|password маскируется.
Отчёт по дрейфу — ваш агент всё тот же агент, которого вы тестировали?
$ tradebox report --window 7d
AGENT BEHAVIOR REPORT 2026-08-18 → 2026-08-25
──────────────────────────────────────────────────────────
baseline (7d) last 24h Δ
orders/day 4.2 11 ×2.6 ⚠
avg order notional $145 $410 ×2.8 ⚠
symbols traded BTC 82% · ETH 18% +SOL 37% ⚠ new symbol
avg hold time 3.1 h 22 min ÷8.5 ⚠
denied calls 0 7 max_order_notional ×5
realized PnL +$83 −$61
──────────────────────────────────────────────────────────
⚠ BEHAVIORAL DRIFT: the agent is behaving differently than
it did 7 days ago. Model update? Prompt change? Check
before it costs you.Работает офлайн: читает только локальный PLN, без сети.
CLI
tradebox run --config <path> start the proxy (spawned by your MCP host)
tradebox report [--window 7d] behavior + drift report from local logs
tradebox stop PANIC — deny all trading immediately
tradebox resume clear the panic / daily-loss lockЧестные ограничения (v0.1)
Мы предпочитаем перечислить их здесь, чем вы найдёте их на реальных деньгах:
Подключаемые серверы только через stdio (CCXT MCP и аналоги). HTTP-транспорт для Binance Agent OS / Robinhood MCP — главный пункт в списке приоритетов.
Дневной предохранитель просыпает заполнения только через прокси. Заполенения извлекаются из результатов ордеров и из собственных вызовов агента
fetch_my_trades/fetch_closed_orders. Если агент никогда не запрашивает свои заполнения, дневной предохранитель остаётся слепым.Сочленения позиций — это примерная оценка, основанная на ордерах, проходивших через прокси. Сверки с бизаном на бирже пока нет.
Исполнения в dry-run симулируются мгновенно. Реальные запросы баланса/позиций по прежнему не отражают симулированные сделки (каждый симулированный результат содержит
"simulated": true).Все границы суток в UTC. Одн временный только один экземпляр прокси.
Добавление правила
Один файл, один интерфейс — заподняжные предложения приветствуются:
export interface GuardrailRule {
name: string;
// return null to pass; return a string to deny (the reason is sent to the LLM)
check(call: ClassifiedToolCall, state: SessionState, cfg: Config): string | null;
}Положите его в src/guardrails/rules/, зарегистрируйте в engine.ts, добавьте тест. Архитектурные решения и их причины см. в docs/DESIGN.md.
Дорожная карта
HTTP-transport proxy → Binance Agent OS, Robinhood MCP
Пересчёт лимитов позиций по биржевым балансам
Веб-панель + оповещения в реальном времени — локальный прокси и отчёт навсегда остаются бесплатными и подходятся к MIT-лицензией
Лицензия
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
- FensoryOAuthcom.fensory
Trading MCP server for AI agents, with live market data, account reads and controlled execution.
AgentGuard — 20-tool AI safety MCP: policy preflight, risk scoring, audit logging, rate limits.
Free, read-only directory of 114 AI trading tools: broker MCP servers, market data APIs, bots and backtesters. Sourced facts on who can place orders and what safeguards exist; search, compare and check order gating for every broker MCP.
Real-time MCP & A2A prompt-injection, jailbreak, and tool-schema poisoning firewall for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceSits in front of any MCP server to enforce allow/ask/block policies on tool calls, paths, shell commands, and network domains, with local approval prompts and an audit log.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with a NinjaTrader 8 futures account through MCP, with deterministic guardrails and hard risk limits enforced locally that the agent cannot bypass.1Apache 2.0
- AlicenseAqualityBmaintenanceEnables AI agents to place and manage Hyperliquid trades through MCP with position, leverage, daily-loss, market, and stop-loss limits enforced outside the model, plus paper trading and an auditable decision log.9176 npmMIT
- AlicenseNot gradedqualityCmaintenanceA transparent MCP stdio proxy that sits between an agent client and a real MCP server, intercepting tools/call requests to enforce runtime guardrails derived from the same YAML rules used for CI regression testing. It blocks forbidden, out-of-whitelist, looping, or non-idempotent tool invocations with JSON-RPC errors and writes every decision to an audit log.1MIT