Yes. Non-custodial: 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 from api.traderouter.ai are Ed25519-verified against a baked-in trust anchor before the agent treats them as authoritative.
The source is a single ~85 KB .mjs file you can read end-to-end: trade-router-mcp.mjs. Full threat model in SECURITY.md.
No. The key never leaves your machine. The MCP server reads it from the env var at startup, uses it for local signing, and never transmits it. Trade Router servers see only the wallet's public address and signed transactions.
.mjsdist.signatures present on every release — check with npm view @traderouter/trade-router-mcp dist.signatures.mcpregistry_* and .env* filesmain (no force-push, required status checks)ai.traderouter/trade-router-mcp@1.0.12 (isLatest: true, DNS-auth published)The default Ed25519 public key is EXX3nRzfDUvbjZSmxFzHDdiSYeGVP1EGr77iziFZ4Jd4, baked into the source. Override via TRADEROUTER_SERVER_PUBKEY. Rotation is supported via TRADEROUTER_SERVER_PUBKEY_NEXT (accepts both keys during the rotation window). Every order_filled, order_created, and twap_execution message is verified before your agent is told about it.
Set TRADEROUTER_DRY_RUN=true. Every write tool short-circuits and returns { dry_run: true, tool, args } instead of submitting. Read-only tools (get_holdings, get_mcap, list_orders, etc.) execute normally so the agent can explore. Added in v1.0.9.
Not by a third-party firm. The source is small (~85 KB single file) and open for community review. We've published the threat model, data-flow diagram, and explicit "what we don't validate" notes in SECURITY.md so anyone can do their own audit. Security disclosures: security@traderouter.ai with 48-hour acknowledgement.
1% flat on swap volume, embedded in /protect routing. No subscription, no API key, no monthly minimum. Read-only endpoints (/holdings, /mcap, list_orders, check_order, etc.) are free.
Jupiter is free at the API level. On a single small swap, Jupiter is cheaper. On an agent running TWAP / limits / trailing stops with MEV protection, our 1% is usually below the engineering + infra cost of stitching together Jupiter + a separate Limit Order Program + a separate DCA Program + Jito wiring yourself. See /vs-jupiter for the honest side-by-side.
The Jito tip is included in the 1%. You don't wire priority fees separately. You don't run a Jito client. The bundle goes through our relay relationship.
Yes. /holdings, /mcap, all list_* and check_* tools are free indefinitely. Use Trade Router as a holdings or mcap source even if you never swap through us.
Raydium, PumpSwap, Orca, and Meteora. Routing selects the best available pool across these four for each swap, based on price impact and liquidity depth.
auto_swap (build + sign + submit-via-Jito in one call) or build_swap + submit_signed_swap (manual flow)place_limit_orderplace_trailing_order with trail_percent in bpsplace_twap_order with frequency + durationplace_limit_twap_order, place_trailing_twap_order, place_limit_trailing_order, place_limit_trailing_twap_orderA combo chains multiple conditions server-side. Example: place_limit_trailing_twap_order says "wait until X mcap, then start a trailing stop, when the trail fires TWAP-sell over Y minutes". Your agent fires one tool call and gets one order_id; the server orchestrates all four stages and signs each callback with Ed25519. See /use-cases#combo.
Spot only. For perps, use Drift, Mango, or Jupiter Perps.
Solana only. For bridging, use deBridge, Wormhole, or Squid Router.
We can't help before graduation — there's no DEX liquidity to route through yet. We're great at graduation: see cookbook/09-pumpfun-graduation-sniper.
npx -y @traderouter/trade-router-mcp
That's the whole install. Set TRADEROUTER_PRIVATE_KEY in env. Wire into Claude Desktop, Cursor, Cline, ElizaOS, LangChain, Solana Agent Kit, GOAT, or any MCP client. See /integrations for per-client config blocks.
Yes — pip install traderouter-mcp (also available via uv add traderouter-mcp). Same tools, same API, same trust model. Use whichever fits your agent's runtime.
Node 18+. CI is green on 18, 20, and 22.
Yes. The MCP server is a thin convenience layer over the REST + WebSocket API. Hit https://api.traderouter.ai/swap and /protect directly from any language. There is no API key, no bearer token, no auth header — your wallet address is the identity. Full spec: openapi.json.
Yes, two paths:
@fleek-platform/eliza-plugin-mcp with our config block. See cookbook/06-elizaos-agent.@traderouter/plugin-elizaos on the official ElizaOS plugin registry. Adds Trade Router tools as first-class actions.Yes. Use the official langchain-mcp-adapters (Python) or @langchain/mcp-adapters (TypeScript). 6 lines of code, full MultiServerMCPClient example. See cookbook/07-langchain-agent.
Yes via SAK's @solana-agent-kit/adapter-mcp. Trade Router registers as a community plugin; all 21 tools become SAK actions. See /integrations#solana-stacks for the config snippet.
Jupiter routes more DEXes (16+ vs our 4) and is older. We ship one MCP server with swap + limit + trailing + TWAP + DCA + combo orders in one wallet-keyed API, MEV-protected by default, with Ed25519-verified callbacks. Both are non-custodial and return unsigned transactions. Full breakdown: /vs-jupiter.
Helius is the gold-standard read side (RPC, DAS API, indexing, webhooks). Trade Router is the gold-standard write side (routing, orders, MEV protection). They pair cleanly — same non-custodial model, same wallet works in both. See cookbook/08-helius-trade-router-combo.
Phantom's embedded swap is for end users in the Phantom UI. Trade Router is for agents. Different audience.
You can do that. We did exactly that for our first agent stack and it took two engineers six weeks to make reliable. Order-state machines, server-side orchestration, signed callbacks, MEV protection, and retry logic are not the value-add of a trading agent — they're the cost of admission. We pay that cost so you don't.