TradingAgent
TradingAgent
Agente conversacional de trading en papel nativo de MCP con análisis de sentimiento FinBERT.
"Compra 10 AAPL si hoy baja de 200 $" — escríbelo, el agente se encarga del resto.
Tabla de contenidos
Related MCP server: Alpaca API MCP Server
Arquitectura
┌──────────────────────┐ ┌──────────────────────────────────────┐
│ CLI Agent (REPL) │ │ Web UI (FastAPI) │
│ claude-sonnet-4-6 │ │ Dark chat · WebSocket · marked.js │
│ agentic loop │ │ ngrok → shareable demo URL │
└──────────┬───────────┘ └──────────────────┬───────────────────┘
│ MCP (stdio) │ MCP (stdio, per session)
└──────────────────┬──────────────────┘
│
┌──────────────────▼──────────────────┐
│ FastMCP Server │
│ 20 tools · 4 modules │
└────┬──────────┬──────────┬──────────┘
│ │ │ │
trading market-data sentiment watchlist
8 tools 5 tools FinBERT 4 tools
│ │ │ │
└──────────┴──────────┴──────────┘
│
┌─────────────▼──────────────┐
│ 5-Layer Guardrail │
│ input·llm·tool·exec·output │
└─────────────┬──────────────┘
│
┌─────────────▼──────────────┐
│ Alpaca Paper API │
│ real quotes · fake money │
└─────────────┬──────────────┘
│
┌─────────────▼──────────────┐
│ Alert Daemon │
│ polls prices every 30s │
│ fires conditional orders │
└────────────────────────────┘Inicio rápido
No se necesita cuenta de Alpaca en el modo mock.
1 — Instala
# Clone and enter project
git clone https://github.com/cactus001/TRADE-AGENT.git
cd TRADE-AGENT
# Install dependencies (Apple Silicon — use Homebrew Python)
uv sync --python /opt/homebrew/bin/python3.12
# Install dev dependencies for tests
uv sync --extra dev2 — Configura
cp .env.example .envAbre .env y rellena los valores:
ANTHROPIC_API_KEY=sk-ant-... # required — get from console.anthropic.com
ALPACA_API_KEY= # optional — paper trading keys from alpaca.markets
ALPACA_SECRET_KEY= # optional — leave blank to use --mock modeNota: El modo mock funciona sin claves de Alpaca y ejecuta FinBERT sobre titulares reales de noticias falsas.
Ejecutar el agente
Opción A — REPL de CLI (chat de terminal)
# Mock mode (no Alpaca keys needed)
uv run python -m agent.cli_agent --mock
# Live paper trading (requires Alpaca keys in .env)
uv run python -m agent.cli_agentEscribe comandos en lenguaje natural. Pulsa Ctrl+C para salir — la transcripción de la sesión se guarda automáticamente en transcripts/.
Opción B — Interfaz web (chat compartible)
# Mock mode
uv run python -m src.webapp --mock
# Live paper trading
uv run python -m src.webappAbre http://localhost:8000 en tu navegador: verás una interfaz de chat con tema oscuro que incluye:
Chips de llamadas a herramientas en directo que muestran qué herramientas MCP se están ejecutando
Indicador animado de «pensando» durante la inferencia
Tablas Markdown para los datos de cartera/órdenes
Marca de agua
PAPER TRADING — NO REAL MONEYen todas las confirmaciones de órdenes
Opción C — Compartir vía ngrok (demo en vivo desde cualquier lugar)
Úsalo para entrevistas, demos o para compartir con cualquier persona a través de Internet.
Paso 1 — Instala ngrok
brew install ngrokPaso 2 — Autentícate
Copia tu authtoken personal
Ejecuta:
ngrok config add-authtoken YOUR_REAL_TOKEN_HEREPaso 3 — Inicia el servidor web
uv run python -m src.webapp --mockPaso 4 — Abre el túnel (en una segunda terminal)
ngrok http 8000ngrok imprimirá una URL pública como esta:
Forwarding https://oboe-routing-difficult.ngrok-free.app → http://localhost:8000Comparte esa URL — cualquier persona con el enlace puede abrir la interfaz de chat e interactuar con TradingAgent en tiempo real desde cualquier navegador, sin necesidad de que nada configure nada.
Opción D — Docker (Redis + interfaz web)
Docker Compose levanta dos servicios:
redis —
redis:7-alpine, persiste en un volumen con nombre y se le hace un chequeo de estado antes de que arranque el agentetrading-agent — se compila desde
Dockerfile, ejecuta la interfaz web en el puerto 8000 y se conecta a Redis automáticamente
# Copy env file and add your Anthropic key
cp .env.example .env
# edit .env — add ANTHROPIC_API_KEY (REDIS_URL is set automatically by compose)
# Build and start both services
docker-compose up --build
# Or run detached
docker-compose up --build -dAbre http://localhost:8000 — la interfaz de chat esté en funcionamiento.
# Tail logs
docker-compose logs -f trading-agent
# Stop everything
docker-compose down
# Stop and wipe all volumes (resets state + Redis cache)
docker-compose down -vEjecuta el agente CLI en lugar de la interfaz web:
docker-compose run --rm trading-agent uv run python -m agent.cli_agent --mockEjemplo de conversación
You: what's my portfolio looking like
Agent: Portfolio — $101,432.20 total (+1.4% today)
TSLA 15 shares $248.20 +$190.50 (+5.4%)
NVDA 5 shares $134.50 -$43.00 (-6.0%)
Cash $94,890.50 available
You: what's the sentiment on NVDA right now
Agent: NVDA Sentiment (last 4h): BEARISH — score -0.41
Top drivers:
• "Analyst cuts NVDA target to $125" (negative, -0.81)
• "Nvidia faces rising competition" (negative, -0.62)
Recommendation: Consider waiting for stabilisation before adding.
You: buy 10 AAPL if it drops below $200 today
Agent: Day Limit Buy Preview [PAPER TRADING — NO REAL MONEY]
10 shares AAPL · Limit @ $200.00
AAPL currently: $212.95
Expires: 4:00 PM ET today · Max cost: $2,000.00
Confirm? (yes/no)
You: yes
Agent: ✅ Order placed (ID: abc-12345)
Limit buy active — AAPL will be purchased automatically if price hits $200.
[PAPER TRADING — NO REAL MONEY]
You: alert me when TSLA drops below 240
Agent: ✅ Alert set — will notify when TSLA < $240.00
Current price: $248.20 (monitoring every 30s)Herramientas
20 herramientas divididas en 4 módulos:
Módulo | Herramientas |
trading |
|
market-data |
|
sentiment |
|
watchlist |
|
Seguridad
Una canalización de protección de 5 capas se aplica sobre cada orden:
Capa | Qué detecta |
Protección de entrada | Patrones de inyección de prompts en los mensajes del usuario |
Protección de LLM | Instrucciones inyectadas ocultas en titulares de noticias; refuerza el prompt del sistema |
Protección de herramientas | Formatos de ticker no válidos, cantidad negativa, precios requeridos ausentes, límites de cordura |
Protección de ejecución | Una sola orden > 20 % de la cartera, pérdida diaria > 5 %, > 10 órdenes/hora, operaciones de lavado (< 5 min), disyuntor (SPY cae > 5 %) |
Protección de salida | Rechazos del bróker, avisos de concentración posteriores a la operación |
place_order impone un flujo obligatorio de dos pasos: confirm=False (vista previa) debe llamarse antes de confirm=True (ejecutar). Ninguna orden llega al bróker sin una confirmación explícita del usuario en la conversación.
FinBERT como servicio de producción
src/models/finbert.py convierte FinBERT (ProsusAI/finbert) de un script independiente a un servicio MCP invocable de nivel de producción:
Patrón | Implementación |
Singleton |
|
Carga diferida | El modelo no se carga hasta la primera llamada a |
Candado de comprobación doble |
|
Detección automática de dispositivo | CUDA → Apple MPS → CPU, sin necesidad de configurar el entorno |
Inferencia por lotes | Agrupa listas de noticias en |
Puntuación normalizada | Devuelve |
Caché con Redis | Clave |
Patrón de aciertos parciales | Consulta de caché por lote, solo los fallos van a FinBERT, los aciertos se devuelven en |
Degradación elegante | Redis no disponible → la caché se convierte en un no-op y la inferencia se ejecuta con normalidad |
En Apple Silicon, la inferencia se ejecuta en la GPU MPS (confirmado: device: mps). Con una caché de Redis caliente, las llamadas repetidas a get_sentiment sobre el mismo ciclo de noticias devuelven resultados al instante.
Estructura del proyecto
TRADE-AGENT/
├── agent/
│ └── cli_agent.py # REPL — manual agentic loop, auto-saves transcripts
├── src/
│ ├── server.py # FastMCP entry point — registers all 4 tool modules
│ ├── webapp.py # FastAPI + WebSocket web interface
│ ├── config.py # Pydantic settings — env vars with defaults
│ ├── state_manager.py # Persistent state (~/.trading-agent/state.json)
│ ├── alert_daemon.py # Background thread — polls prices every 30s
│ ├── models/
│ │ └── finbert.py # FinBERT singleton service (production ML pattern)
│ ├── cache/
│ │ └── redis_cache.py # Redis sentiment cache — partial-hit, 1h TTL, graceful degradation
│ ├── clients/
│ │ └── alpaca_client.py # Thin wrapper around alpaca-py SDK
│ ├── guardrails/
│ │ ├── input_guard.py # Regex injection pattern detection
│ │ ├── llm_guard.py # News sanitisation + system prompt hardening
│ │ ├── tool_guard.py # Symbol/qty/price validation
│ │ ├── execution_guard.py # Size, loss, velocity, wash-trade, circuit-breaker
│ │ ├── output_guard.py # Broker rejection + concentration check
│ │ └── guard_registry.py # Wires all 5 layers into one object
│ ├── tools/
│ │ ├── trading.py # 8 trading tools (place_order confirm gate)
│ │ ├── market_data.py # 5 market data tools
│ │ ├── sentiment.py # 3 FinBERT sentiment tools
│ │ └── watchlist.py # 4 alert/history tools
│ └── static/
│ └── index.html # Dark chat UI (WebSocket, marked.js, tool chips)
├── mock/
│ └── mock_provider.py # MockAlpacaClient — full demo without API keys
├── tests/
│ ├── test_guardrails.py # 15 tests across all 5 guardrail layers
│ └── test_sentiment.py # 7 tests — singleton, batch, device detection
├── transcripts/ # Auto-saved session logs (git-ignored)
├── pyproject.toml
├── docker-compose.yml
├── Dockerfile
└── .env.examplePruebas
uv run pytest tests/ -v
# 22 passedVariables de entorno
Variable | Obligatoria | Valor por defecto | Descripción |
| Sí | — | Clave de API de Claude — console.anthropic.com |
| No | — | Clave de trading de papel de Alpaca — alpaca.markets |
| No | — | Secreto de trading de papel de Alpaca |
| No |
| Cadena de conexión de Redis — se define automáticamente en docker-compose |
| No |
| Máximo de una sola orden como fracción de la cartera |
| No |
| Detener compras si el P&L del día cae por debajo de este valor |
| No |
| Máximo de pedidos por hora |
Persistencia
El agente guarda en un archivo las alertas, el historial de órdenes y los contadores de velocidad/operaciones de lavado:
~/.trading-agent/state.jsonEste archivo vive fuera del directorio del proyecto y nunca se incluye en el repositorio. Bórralo para restablecer por completo el estado.
Stack tecnológico
Componente | Tecnología |
SDK del agente | SDK de Python de Anthropic (claude-sonnet-4-6) |
Protocolo de herramientas | MCP (Model Context Protocol) vía FastMCP |
API del broker | Alpaca Paper Trading (alpaca-py) |
Modelo de sentimiento | ProsusAI/FinBERT (Hugging Face) |
Motor ML | PyTorch 2.x — MPS / CUDA / CPU automático |
Caché de inferencia | Redis 7 — sha256-keyed, 1 h TTL, degradación elegante |
Servidor web | FastAPI + Uvicorn + WebSocket |
Frontend | Vanilla JS, marked.js, propiedades personalizadas de CSS |
Contenedores | Docker + docker-compose (dos servicios: redis + trading-agent) |
Túnel | ngrok (plan gratuito) |
Gestor de paquetes | uv |
Pruebas | pytest + pytest-asyncio |
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
- AlicenseNot gradedqualityDmaintenanceEnables large language models to interact with Alpaca's trading infrastructure using natural language, supporting stock/options trading, portfolio management, watchlist handling, and real-time market data access.MIT
- AlicenseNot gradedqualityDmaintenanceEnables trading and portfolio management through the Alpaca API, allowing users to place orders, manage positions and watchlists, access market data, and retrieve account information through natural language.543ISC
- AlicenseNot gradedqualityFmaintenanceEnables natural language trading operations through Alpaca's API, supporting stocks, options, crypto, portfolio management, and real-time market data with comprehensive order execution and account management capabilities.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to execute stock trading operations with built-in risk controls and human approval workflows. Supports paper trading simulation, real brokerage integration (Alpaca, Tradier), backtesting, sentiment analysis, and portfolio management while maintaining strict separation between AI intelligence and trade execution.MIT
Related MCP Connectors
Real-time news with bias scoring, live market data, and AI-powered options pricing
Build, backtest, and deploy quantitative trading strategies from your AI agent.
Real-time financial news for AI agents: search by ticker and source, with sentiment and entities.
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/cactus001/TRADE-AGENT'
If you have feedback or need assistance with the MCP directory API, please join our Discord server