tradebox-mcp
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)" --> XCada 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 loopLa 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 live2 — 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_reasoningcon 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 |
| Deniega cualquier orden que no esté en la lista |
Límite de tamaño de orden |
| 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 |
| 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 |
| El interruptor principal — consulta el diagrama inferior |
Horario de negociación |
| 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 |
Herramientas desconocidas |
| Si ningún mapa reconoce la herramienta y parece mutación, se deniega, no se asume como lectura estricta |
Botón de pánico |
| 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 noteBack 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 lockLimitaciones honestas (v0.1)
Muchos prefieren esta lista a que la descubras con dinero real:
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.
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.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.
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.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
Proxy con transporte HTTP → Binance Agent OS, Robinhood MCP
Límites de posición conciliados contra los balances del exchange
Dashboard alojado + alertas de real time — el proxy local y el reporte siguen siendo gratuitos hoy y siempre, con licencia MIT
Licencia
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