Trade Router MCP
Servidor MCP de intercambio y órdenes limitadas no custodial en Solana. 21 herramientas en Raydium, PumpSwap, Orca, Meteora. Protegido contra MEV por Jito. La clave privada nunca sale del agente.
Documentación
@traderouter/trade-router-mcp
Un servidor de Model Context Protocol para TradeRouter.ai — motor de swaps, órdenes limitadas, trailing, DCA, TWAP y órdenes combinadas no custodiado en Solana para agentes de IA.
¿Es seguro?
Sí, y aquí está exactamente el porqué. La clave privada se lee una sola vez desde TRADEROUTER_PRIVATE_KEY, se usa para firmar localmente con @solana/web3.js + tweetnacl, y nunca se transmite, registra ni persiste. Solo las transacciones firmadas salen de tu máquina. Los mensajes del servidor se verifican con Ed25519 contra un ancla de confianza codificada. Consulta SECURITY.md para ver el modelo de amenazas completo, el diagrama de flujo de datos y el manifiesto de permisos.
Flujo de firma:
- El agente llama a
build_swap→ el MCP envía la dirección de la cartera (clave pública) a api.traderouter.ai - La API devuelve una transacción sin firmar
- El MCP firma la transacción localmente usando
TRADEROUTER_PRIVATE_KEY - La transacción firmada se envía a
/protect(paquete protegido contra MEV de Jito) - El servidor confirma y devuelve los cambios de saldo. La clave privada nunca cruza la red.
Requisitos
- Node.js ≥ 18
- Una clave privada de cartera Solana en formato base58 (usa una cartera de trading dedicada, no tus fondos principales)
Instalación
npx -y @traderouter/trade-router-mcp
O conéctalo a un cliente MCP (Claude Desktop, Cursor, Cline, etc.):
{
"mcpServers": {
"traderouter": {
"command": "npx",
"args": ["-y", "@traderouter/trade-router-mcp"],
"env": {
"TRADEROUTER_PRIVATE_KEY": "your_base58_private_key"
}
}
}
}
| SO | Ruta de configuración de Claude Desktop |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
Variables de entorno
| Variable | Requerida | Predeterminado | Propósito |
|---|---|---|---|
TRADEROUTER_PRIVATE_KEY | ✅ | — | Clave privada de cartera Solana (base58). Solo uso local. |
SOLANA_RPC_URL | ❌ | https://api.mainnet-beta.solana.com | RPC personalizado para lecturas |
TRADEROUTER_SERVER_PUBKEY | ❌ | ancla de confianza integrada | Anula el ancla de confianza Ed25519 del servidor |
TRADEROUTER_SERVER_PUBKEY_NEXT | ❌ | (sin definir) | Acepta mensajes firmados por esta clave además de la principal (rotación de claves) |
TRADEROUTER_REQUIRE_SERVER_SIGNATURE | ❌ | true | Verifica las firmas del servidor en order_filled / twap_execution |
TRADEROUTER_REQUIRE_ORDER_CREATED_SIGNATURE | ❌ | true | Verifica las firmas del servidor en order_created |
TRADEROUTER_DRY_RUN | ❌ | false | Cuando true, cada herramienta de acción de escritura (submit_signed_swap, auto_swap, place_*_order, cancel_order, extend_order) devuelve { dry_run: true, tool, args } en lugar de llamar a la API. Las herramientas de solo lectura se ejecutan normalmente. Añadido en 1.0.9. |
Herramientas
| Herramienta | Propósito |
|---|---|
get_wallet_address | Obtiene la dirección pública de la cartera configurada |
build_swap | Construye una transacción de swap sin firmar |
submit_signed_swap | Envía una transacción firmada manualmente |
auto_swap | Construye + firma + envía en una sola llamada |
get_holdings | Obtiene los saldos de tokens de una cartera |
get_mcap | Capitalización de mercado y precio de un token |
get_flex_card | URL PNG de la tarjeta de trading para cartera + token |
place_limit_order | Compra/venta limitada por precio o capitalización de mercado |
place_trailing_order | Compra/venta con stop trailing |
place_twap_order | Compra/venta TWAP (ponderada en el tiempo) |
place_limit_twap_order | Disparador limitado → ejecución TWAP |
place_trailing_twap_order | Disparador trailing → ejecución TWAP |
place_limit_trailing_order | Disparador limitado → ejecución trailing (swap único al dispararse) |
place_limit_trailing_twap_order | Disparador limitado → disparador trailing → ejecución TWAP |
list_orders | Lista las órdenes activas de una cartera |
check_order | Obtiene el estado de una orden específica |
cancel_order | Cancela una orden activa |
extend_order | Extiende la expiración de una orden |
connect_websocket | Registra una cartera a través del WebSocket persistente |
connection_status | Estado actual de la conexión WebSocket |
get_fill_log | Registro de órdenes ejecutadas |
Endpoints REST (bajo el capó)
| Endpoint | Propósito |
|---|---|
POST /swap | Construye swap sin firmar (multi-DEX: Raydium, PumpSwap, Orca, Meteora) |
POST /protect | Envía transacción firmada mediante paquete Jito — protegido contra MEV |
POST /holdings | Escaneo de cartera — detecta tokens que el RPC estándar no ve |
GET /mcap | Capitalización de mercado + precio |
GET /flex | Generación de tarjeta de trading PNG |
wss://api.traderouter.ai/ws | WebSocket persistente para órdenes limitadas / trailing / DCA / TWAP / combinadas |
Ancla de confianza
La clave pública del servidor integrada es EXX3nRzfDUvbjZSmxFzHDdiSYeGVP1EGr77iziFZ4Jd4. Cada mensaje order_filled, order_created y twap_execution del servidor se verifica con Ed25519 antes de tratarse como autoritativo. Consulta SECURITY.md para más detalles y el mecanismo de rotación (TRADEROUTER_SERVER_PUBKEY_NEXT).
Uso con LangChain
Cualquier servidor MCP funciona en LangChain mediante el adaptador oficial:
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({
"traderouter": {
"command": "npx",
"args": ["-y", "@traderouter/trade-router-mcp"],
"transport": "stdio",
"env": {"TRADEROUTER_PRIVATE_KEY": "<base58>"},
},
})
tools = await client.get_tools()
Comisiones
Comisión fija del 1% sobre el volumen de swaps, integrada en el enrutamiento en /protect. Sin suscripción, sin clave API, sin mínimos mensuales. Los endpoints de solo lectura (/holdings, /mcap) son gratuitos.
Especificaciones legibles por máquina (en vivo en traderouter.ai)
| URL | Formato | Propósito |
|---|---|---|
| https://traderouter.ai/openapi.json | OpenAPI 3.1 (JSON) | Contrato API canónico — genera SDKs en cualquier idioma |
| https://traderouter.ai/openapi.yaml | OpenAPI 3.1 (YAML) | Misma especificación, formato YAML (regenerada desde el JSON) |
| https://traderouter.ai/llms.txt | text | Guía API legible por LLM (según llmstxt.org) |
| https://traderouter.ai/SKILL.md | markdown | Formato Anthropic Agent Skills — guía de implementación completa |
| https://traderouter.ai/SECURITY.md | markdown | Modelo de amenazas + diagrama de flujo de datos + manifiesto de permisos (refleja ./SECURITY.md aquí) |
| https://traderouter.ai/CHANGELOG.md | markdown | Registro de cambios unificado en las pistas de versiones de API / servidor MCP / Sitio |
Generación rápida de SDK:
# TypeScript
openapi-generator-cli generate -i https://traderouter.ai/openapi.yaml -g typescript-axios -o ./sdk-ts
# Python
openapi-generator-cli generate -i https://traderouter.ai/openapi.yaml -g python -o ./sdk-py
Divulgación de seguridad
Envía un correo a security@traderouter.ai o usa GitHub Security Advisories en este repositorio. Acuse de recibo en 48 horas. Consulta SECURITY.md (o la versión alojada si prefieres enlazar a una URL estable).
Licencia
MIT. Consulta LICENSE.
Registro de cambios
Consulta CHANGELOG.md.