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: SentinelGate
Быстрый старт
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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceA transparent proxy and execution firewall that intercepts and audits AI agent tool calls against configurable security policies before forwarding them to downstream MCP servers. It provides safe execution environments with features like data redaction, anti-loop protection, and unified alert dispatching.

SentinelGateofficial
AlicenseNot gradedqualityAmaintenanceOpen-source MCP proxy that enforces security policies, content scanning, and audit logging between AI agents and tool servers25AGPL 3.0- AlicenseNot gradedqualityAmaintenanceSecurity gateway for MCP tool calls. Sits between your LLM client and MCP servers, enforcing per-tool policies (allow/block/approve/read-only), logging every call, and pausing dangerous operations for human approval in terminal or Slack.21MIT
- AlicenseAqualityAmaintenanceEnables AI agents to operate a local financial terminal, including market data, backtesting, paper portfolio management, and news digest, through safe, gated tools over MCP.6MIT
Related MCP Connectors
Security firewall for AI agents — scans MCP calls for injection, secrets, and risks.
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
MCP server exposing the Backtest360 engine API as tools for AI agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dearvn/tradebox-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server