Skip to main content
Glama
dearvn

tradebox-mcp

by dearvn

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 live

2 — Направьте ваш 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, … как обычно. На стороне агента ничего не меняется.


Защитные механизмы

Правило

Ключ конфигурации

Что делает

Белый список символов

allowed_symbols

Отклоняет любой ордер вне вашего списка

Ограничение размера ордера

max_order_notional

Отклоняет ордер выше этого размера (рыночные ордера оцениваются по цене тикера давностью не более 60 секунд — иначе отказ с сообщением "fetch the ticket first")

Частотное ограничение

max_orders_per_hour

Предохранитель от зацикленного цикла — самый частый реальный сбой проблемных агентов (скользящее часовое торговое окно)

Лимит дневного убытка

max_daily_loss

Главный предохранитель — см. диаграмму ниже

Торговые часы

trading_hours

Разрешает ордера только в заданном временно́м окне в UTC

Трансферы

(встроено)

Отклоняются по умолчанию. Торговый агент не должен выводить средства. Открытие требует явного allow_transfers: true

Неизвестные инструменты

unknown_tools

Инструмент, который не распознаёт ни одна карта и который выглядит мутирующим, отклоняется, а не считается read-only

Паническая кнопка

tradebox stop

Мгновенно отклоняет все торговые инструменты, даже если агент уже используется в запущенной сессии

Жизненный цикл предохранителя

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)

Мы предпочитаем перечислить их здесь, чем вы найдёте их на реальных деньгах:

  1. Подключаемые серверы только через stdio (CCXT MCP и аналоги). HTTP-транспорт для Binance Agent OS / Robinhood MCP — главный пункт в списке приоритетов.

  2. Дневной предохранитель просыпает заполнения только через прокси. Заполенения извлекаются из результатов ордеров и из собственных вызовов агента fetch_my_trades / fetch_closed_orders. Если агент никогда не запрашивает свои заполнения, дневной предохранитель остаётся слепым.

  3. Сочленения позиций — это примерная оценка, основанная на ордерах, проходивших через прокси. Сверки с бизаном на бирже пока нет.

  4. Исполнения в dry-run симулируются мгновенно. Реальные запросы баланса/позиций по прежнему не отражают симулированные сделки (каждый симулированный результат содержит "simulated": true).

  5. Все границы суток в 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.

Дорожная карта

  1. HTTP-transport proxy → Binance Agent OS, Robinhood MCP

  2. Пересчёт лимитов позиций по биржевым балансам

  3. Веб-панель + оповещения в реальном временилокальный прокси и отчёт навсегда остаются бесплатными и подходятся к MIT-лицензией

Лицензия

MIT

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    A 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.
  • A
    license
    Not graded
    quality
    A
    maintenance
    Open-source MCP proxy that enforces security policies, content scanning, and audit logging between AI agents and tool servers
    25
    AGPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Security 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.
    2
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to operate a local financial terminal, including market data, backtesting, paper portfolio management, and news digest, through safe, gated tools over MCP.
    6
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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