Skip to main content
Glama
dearvn

tradebox-mcp

by dearvn

tradebox-mcp

Un registrador de vuelo + interruptores de circuito para agentes de trading de IA.

Los exchanges están empezando a permitir que agentes de IA operen — y admiten que no pueden ver lo que los agentes están pensando. tradebox es un proxy local que se sitúa entre tu LLM (Claude, Cursor o cualquier host MCP) y cualquier servidor MCP de bróker. Registra cada llamada a herramienta y el razonamiento del agente, y bloquea cualquier orden que rompa tus límites — antes de que la orden llegue al exchange.

  • Cero cambios en el agente — apunta tu host MCP a tradebox en lugar del servidor del bróker; el agente ve exactamente las mismas herramientas.

  • Local primero — tus claves API van directamente al proceso hijo del bróker. tradebox nunca las analiza, registra ni transmite, y no realiza ninguna llamada de red por su cuenta.

  • Denegar ≠ fallar — una orden bloqueada vuelve como resultado de herramienta en lenguaje claro que el agente puede leer y al que puede adaptarse, no como un error de protocolo que lo lanza a un bucle de reintentos.


Cómo funciona

tradebox habla MCP por ambos lados: es un servidor para tu host y un cliente para cada servidor de bróker que lanza.

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

Cada tools/call pasa por el mismo pipeline:

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

La orden nunca llega al proceso del bróker cuando una regla la deniega — la denegación ocurre un proceso antes de que tus claves API estén siquiera involucradas.


Related MCP server: SentinelGate

Inicio rápido

1 — Crea tu configuración (las claves se quedan en tu máquina; hazle un 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 — Apunta tu host MCP a tradebox en lugar del servidor del bróker (en claude_desktop_config.json o .cursor/mcp.json):

{
  "mcpServers": {
    "trading": {
      "command": "npx",
      "args": ["-y", "tradebox-mcp", "run", "--config", "~/.tradebox/config.yaml"]
    }
  }
}

3 — (Opcional pero recomendado) añade una línea al system prompt de tu agente para que la caja negra recoja el razonamiento, no solo las acciones:

Antes de cada decisión de trading, llama a la herramienta log_reasoning con una breve explicación de lo que estás a punto de hacer y por qué.

Eso es todo. El agente ve ccxt__createOrder, ccxt__fetchTicker, … con normalidad. Nada cambia del lado del agente.


Guardrails

Regla

Clave de configuración

Qué hace

Lista blanca de símbolos

allowed_symbols

Deniega cualquier orden que no esté en la lista

Límite de tamaño de orden

max_order_notional

Deniega una operación individual que supere el límite. Las órdenes de mercado se valoran con un precio de ticker de ≤ 60 s; si no, en caso se deniega con "obtén el ticker primero"

Tasa límite

max_orders_per_hour

Interruptor de bucles desbocados — el fallo real más común de los agentes con errores (ventana deslizante de 1 hora)

Pérdida diaria máx

max_daily_loss

El interruptor principal — consulta el diagrama inferior

Horario de negociación

trading_hours

Solo admite órdenes dentro de una ventana UTC

Transferencias

(integrado)

Denegadas por defecto. Un agente de trading no tiene por qué retirar fondos. Hacerlas abre la operación requiere un allow_transfers: true explícito

Herramientas desconocidas

unknown_tools

Si ningún mapa reconoce la herramienta y parece mutación, se deniega, no se asume como lectura estricta

Botón de pánico

tradebox stop

Deniega al instante todas las herramientas de trading, incluso si el agente está en plena ejecución

Ciclo de vida del interruptor de circuito

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

Back testing: audita a tu agente antes de darle dinero

dry_run: true (el valor por defecto) bloquea todas las operaciones en el proxy que lo registra como si fueran reales y devuelve una ejecución simulada. tradebox mantiene un libro de órdenes falso para que la simulación siga siendo coherente: cancelar o consultar el id de una orden simulada devuelve una respuesta consistente, y cada resultado simulado viene marcado con "simulated": true. Ejecuta tu agente en dry-run durante una semana, ante el informe y luego actantes el interruptor.


La caja negra

Every call — right or denied — is appended to ~/.tradebox/logs/YYYY-MM-DD.jsonl, one JSON result per line:

{"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"}

The secretos ya no acaban en el registro: no storage blocks env later fase later, and any field with the extension key|secret|token|password will be edited out.

Informe de deriva: ¿sigue siendo tu agente el agente que probaste?

$ 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.

Offline; solo el JSONL local, sin red.


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

Limitaciones honestas (v0.1)

Muchos prefieren esta lista a que la descubras con dinero real:

  1. Solo agentes downstream de stdio (CCXT MCP y equivalente). El transporte HTTP para Binance Agent OS / Robinhood MCP es el primer tema de la hoja de ruta.

  2. El interruptor de pérdida diaria solo ve las ejecuciones a través del proxy. Estas executions se interpreta from the order results and from the agent's own calls fetch_my_trades / fetch_closed_orders. Si un agente nunca consulta sus ejecuciones, el interruptor queda ciego.

  3. El rastreo de posiciones es una estimación construida a partir de las órdenes que pasan por el proxy; todavía no hay conciliación con los saldos de exchange.

  4. Las ejecuciones del dry-run se quedan en simulación al instante. The balances/posiciones reales atravies la paso sin cambios y no van a reflejar esas operaciones simuladas — de hecho, todas las resultados simulados muestran "simulated" : true.

  5. El límite del día es en UTC. Solo habrá una instancia del proxy a la vez.


Cómo contribuir con una regla

Un solo archivo, una sola interfaz — los PR son bienvenidos:

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;
}

Déjala en src/guardrails/rules/, regístrala en engine.ts y añade un test. Lee docs/DESIGN.md para entender las decisiones de arquitectura y sus motivos.

Roadmap

  1. Proxy con transporte HTTP → Binance Agent OS, Robinhood MCP

  2. Límites de posición conciliados contra los balances del exchange

  3. Dashboard alojado + alertas de real time — el proxy local y el reporte siguen siendo gratuitos hoy y siempre, con licencia MIT

Licencia

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