Exposes TradeRouter's Solana swap and order engine to AI agents through MCP. You get tools for building and submitting swaps across multiple DEXs (Raydium, Orca, Meteora), placing limit and trailing orders, running TWAP strategies, and checking wallet holdings. The server handles local transaction signing with your base58 private key and routes signed transactions through Jito bundles for MEV protection. All server messages are Ed25519 verified against a baked-in trust anchor. Runs over stdio, takes one required environment variable for your wallet key, and charges a flat 1% fee on swap volume. Useful when you need an agent to execute Solana trades without giving up custody or building routing logic yourself.
A Model Context Protocol server for TradeRouter.ai — non-custodial Solana swap, limit, trailing, DCA, TWAP, and combo-order engine for AI agents.
Yes, and here's exactly why. The private key is read once from TRADEROUTER_PRIVATE_KEY, used for local signing with @solana/web3.js + tweetnacl, and never transmitted, logged, or persisted. Only signed transactions leave your machine. Server messages are Ed25519-verified against a hard-coded trust anchor. See SECURITY.md for the full threat model, data-flow diagram, and permissions manifest.
Signing flow:
build_swap → MCP sends wallet address (public key) to api.traderouter.aiTRADEROUTER_PRIVATE_KEY/protect (Jito MEV-protected bundle)npx -y @traderouter/trade-router-mcp
Or wire it into an MCP client (Claude Desktop, Cursor, Cline, etc.):
{
"mcpServers": {
"traderouter": {
"command": "npx",
"args": ["-y", "@traderouter/trade-router-mcp"],
"env": {
"TRADEROUTER_PRIVATE_KEY": "your_base58_private_key"
}
}
}
}
| OS | Claude Desktop config path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
| Variable | Required | Default | Purpose |
|---|---|---|---|
TRADEROUTER_PRIVATE_KEY | ✅ | — | Solana wallet private key (base58). Local use only. |
SOLANA_RPC_URL | ❌ | https://api.mainnet-beta.solana.com | Custom RPC for reads |
TRADEROUTER_SERVER_PUBKEY | ❌ | baked-in trust anchor | Override the server's Ed25519 trust anchor |
TRADEROUTER_SERVER_PUBKEY_NEXT | ❌ | (unset) | Accept messages signed by this key in addition to the primary (key rotation) |
TRADEROUTER_REQUIRE_SERVER_SIGNATURE | ❌ | true | Verify server signatures on order_filled / twap_execution |
TRADEROUTER_REQUIRE_ORDER_CREATED_SIGNATURE | ❌ | true | Verify server signatures on order_created |
TRADEROUTER_DRY_RUN | ❌ | false | When true, every write-action tool (submit_signed_swap, auto_swap, place_*_order, cancel_order, extend_order) returns { dry_run: true, tool, args } instead of calling the API. Read-only tools execute normally. Added in 1.0.9. |
| Tool | Purpose |
|---|---|
get_wallet_address | Get the configured wallet's public address |
build_swap | Build an unsigned swap transaction |
submit_signed_swap | Submit a manually signed transaction |
auto_swap | Build + sign + submit in one call |
get_holdings | Get token holdings for a wallet |
get_mcap | Market cap and price for a token |
get_flex_card | Trade card PNG URL for wallet + token |
place_limit_order | Limit buy/sell by price or market cap |
place_trailing_order | Trailing stop buy/sell |
place_twap_order | TWAP (time-weighted) buy/sell |
place_limit_twap_order | Limit trigger → TWAP execution |
place_trailing_twap_order | Trailing trigger → TWAP execution |
place_limit_trailing_order | Limit trigger → trailing execution (single swap on trigger) |
place_limit_trailing_twap_order | Limit trigger → trailing trigger → TWAP execution |
list_orders | List active orders for a wallet |
check_order | Get status of a specific order |
cancel_order | Cancel an active order |
extend_order | Extend an order's expiry |
connect_websocket | Register a wallet over the persistent WebSocket |
connection_status | Current WebSocket connection state |
get_fill_log | Log of filled orders |
| Endpoint | Purpose |
|---|---|
POST /swap | Build unsigned swap (multi-DEX: Raydium, PumpSwap, Orca, Meteora) |
POST /protect | Submit signed tx via Jito bundle — MEV-protected |
POST /holdings | Wallet scan — catches tokens standard RPC misses |
GET /mcap | Market cap + price |
GET /flex | Trade card PNG generation |
wss://api.traderouter.ai/ws | Persistent WebSocket for limits / trailing / DCA / TWAP / combo orders |
The baked-in server public key is EXX3nRzfDUvbjZSmxFzHDdiSYeGVP1EGr77iziFZ4Jd4. Every order_filled, order_created, and twap_execution message from the server is verified with Ed25519 before being treated as authoritative. See SECURITY.md for details and the rotation mechanism (TRADEROUTER_SERVER_PUBKEY_NEXT).
Any MCP server works in LangChain via the official adapter:
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()
Flat 1% fee on swap volume, embedded in routing at /protect. No subscription, no API key, no monthly minimums. Read-only endpoints (/holdings, /mcap) are free.
| URL | Format | Purpose |
|---|---|---|
| https://traderouter.ai/openapi.json | OpenAPI 3.1 (JSON) | Canonical API contract — generate SDKs in any language |
| https://traderouter.ai/openapi.yaml | OpenAPI 3.1 (YAML) | Same spec, YAML format (regenerated from the JSON) |
| https://traderouter.ai/llms.txt | text | LLM-readable API guide (per llmstxt.org) |
| https://traderouter.ai/SKILL.md | markdown | Anthropic Agent Skills format — full implementation guide |
| https://traderouter.ai/SECURITY.md | markdown | Threat model + data-flow diagram + permissions manifest (mirrors ./SECURITY.md here) |
| https://traderouter.ai/CHANGELOG.md | markdown | Unified changelog across the API / MCP server / Site version tracks |
Quick SDK generation:
# 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
Email security@traderouter.ai or use GitHub Security Advisories on this repo. 48-hour acknowledgement. See SECURITY.md (or the hosted version if you'd rather link to a stable URL).
MIT. See LICENSE.
See CHANGELOG.md.
TRADEROUTER_PRIVATE_KEY*secretSolana base58-encoded private key. Local signing only, never transmitted. See SECURITY.md.
SOLANA_RPC_URLOptional RPC endpoint override (default https://api.mainnet-beta.solana.com).
TRADEROUTER_SERVER_PUBKEYOptional override for the server public key used to verify order_filled ed25519 signatures.
TRADEROUTER_SERVER_PUBKEY_NEXTOptional second server public key accepted during key rotation.
TRADEROUTER_REQUIRE_SERVER_SIGNATUREDefault 'true'. Verify server signatures on order_filled / twap_execution.
TRADEROUTER_REQUIRE_ORDER_CREATED_SIGNATUREDefault 'true'. Verify server signatures on order_created.
TRADEROUTER_DRY_RUNDefault 'false'. When 'true', write-action tools (submit_signed_swap, auto_swap, place_*_order, cancel_order, extend_order) short-circuit and return { dry_run: true, ... } instead of calling the API. Read-only tools execute normally.
io.github.shelvick/shopify-subscription-reconciliation
zleventer/google-ads-mcp
csoai-org/meok-stripe-acp-checkout-mcp
io.github.mharnett/google-ads
csoai-org/stripe-billing-mcp
co.pipeboard/google-ads-mcp