MCP server for Jupiter DEX swap operations on Solana, providing tools to get swap orders and execute transactions
Jupiter MCP has 2 tools with schemas visible in source code. Tool definitions are explicit in index.js using zod schemas. However, critical quality issues limit the score: (1) get-ultra-order has vague description lacking context on when/why to use it vs alternatives; (2) execute-ultra-order description lacks irreversible operation warning despite modifying blockchain state; (3) parameter descriptions are present but minimal (under 50 chars); (4) no output schema documentation, responses are JSON strings, not structured objects; (5) error handling returns raw error messages without recovery guidance; (6) no pagination, limits, or result structure definition; (7) execute-ultra-order references parameters (inputMint, outputMint, amount) in handler that don't exist in the input schema, indicating incomplete/inconsistent definition. Both tools exist in source with explicit registration via server.tool(), so no inference penalty applies.
Request Jupiter to execute the swap transaction on behalf of the wallet owner. This includes handling of slippage, priority fees, transaction landing and more.
Get a swap order from both Jupiter DEX Routing Engine and Jupiter Z (RFQ).
Irreversible operation (execute-ultra-order) lacks destructive operation warning and confirmation mechanism. Description does not state that this modifies blockchain state or that failures could result in lost funds.
No output schemas documented. Tools return JSON-wrapped text responses, not structured objects. LLM must parse text to extract requestId, transactionId, etc., increasing error likelihood and token waste.
Error handling returns raw error messages without recovery guidance. E.g., 'Error fetching order: ...' gives LLM no actionable next step. Should classify as retryable or user-fixable and suggest alternatives.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 37 | - | v1 |
execute-ultra-order handler references parameters (inputMint, outputMint, amount) that do not exist in the input schema. Schema only defines requestId and transaction. This is a consistency bug that will cause runtime failures if LLM passes those parameters.
Parameter descriptions are minimal (10 - 25 chars) and lack usage context. E.g., 'Input token mint address' does not explain format validation, acceptable ranges, or how to obtain valid mint addresses. Should be 50 - 150 chars with examples or constraints.
No pagination, limits, or result caps defined. While these tools return small responses, no documentation of max response size or guidance on handling large results.
Private key (PRIVATE_KEY env var) is loaded at server startup, not per-request. This couples the server instance to a single wallet. Multi-tenant or multi-user scenarios require refactoring. Consider accepting wallet/payer as a parameter or using a more flexible auth model.