A Model Context Protocol server for Jupiter API, Solana's premier DEX aggregator. Supports immediate swaps through Ultra API and limit orders through Trigger API.
For easy installation in Claude Desktop:
Download jupiter-mcp-latest.dxt π₯
The DXT includes:
- β One-click installation in Claude Desktop
- β Automatic dependency management with uvx
- β Secure environment variable configuration
- β Built-in error handling and debugging
Note: The DXT file is automatically updated on every commit for the latest features and fixes.
Download the DXT file and double-click to install. See dxt/README.md
for detailed instructions.
π Install with .env file β
π Install with Direct Input β
Note: These links only work in supported MCP clients.
Manual config for .env file approach:
{
"mcpServers": {
"jupiter-mcp": {
"command": "npx",
"args": [
"envmcp",
"--env-file",
"/path/to/your/.env",
"uvx",
"--from",
"git+https://github.com/araa47/jupiter-mcp",
"jupiter-mcp"
]
}
}
}
Replace /path/to/your/.env
with your actual env file path (e.g., /Users/yourname/.env
)
If you prefer to configure directly through Cursor prompts:
π Install with Direct Input β
Note: This link only works in the Cursor app. If viewing on web, copy the link below:
cursor://anysphere.cursor-deeplink/mcp/install?name=jupiter-mcp&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyItLWZyb20iLCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2FyYWE0Ny9qdXBpdGVyLW1jcCIsImp1cGl0ZXItbWNwIl0sImVudiI6eyJQUklWQVRFX0tFWSI6IlJFUExBQ0VfVEhJUyIsIlNPTEFOQV9SUENfVVJMIjoiaHR0cHM6Ly9hcGkubWFpbm5ldC1iZXRhLnNvbGFuYS5jb20iLCJTT0xBTkFfTkVUV09SSyI6Im1haW5uZXQtYmV0YSIsIlJFUVVFU1RfVElNRU9VVCI6IjMwIn19
You'll be prompted to replace REPLACE_THIS
with your actual private key.
Pre-configured values:
SOLANA_RPC_URL
: https://api.mainnet-beta.solana.comSOLANA_NETWORK
: mainnet-betaREQUEST_TIMEOUT
: 30 secondsPRIVATE_KEY
: You'll need to replaceREPLACE_THIS
with your base58 encoded private key
Add this to your MCP client configuration:
{
"mcpServers": {
"jupiter-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/araa47/jupiter-mcp",
"jupiter-mcp"
],
"env": {
"SOLANA_RPC_URL": "https://api.mainnet-beta.solana.com",
"PRIVATE_KEY": "${PRIVATE_KEY}",
"SOLANA_NETWORK": "mainnet-beta",
"REQUEST_TIMEOUT": "30"
}
}
}
}
If you prefer to load environment variables from a .env
file to avoid storing sensitive data in your MCP configuration:
{
"mcpServers": {
"jupiter-mcp": {
"command": "npx",
"args": [
"envmcp",
"--env-file",
"${ENV_FILE_PATH}",
"uvx",
"--from",
"git+https://github.com/araa47/jupiter-mcp",
"jupiter-mcp"
],
"env": {
"ENV_FILE_PATH": ".env"
}
}
}
}
This approach uses envmcp
to securely load your PRIVATE_KEY from a .env
file without exposing it in configuration files. Replace ENV_FILE_PATH
with the absolute path to your .env
file (e.g., /Users/yourname/.env
or /home/user/.env
).
PRIVATE_KEY
: Your base58 encoded Solana private key (from Phantom wallet export)- Optional: Override
SOLANA_RPC_URL
if you have a custom RPC endpoint
Tool | Description | Parameters | Cost |
---|---|---|---|
get_swap_quote | Get a swap quote and unsigned transaction | input_mint, output_mint, amount | FREE |
execute_swap_transaction | Execute a signed swap transaction | transaction, request_id | PAID |
get_balances | Get token balances for a wallet | wallet_address? | FREE |
get_shield | Get token security information | mints | FREE |
search_token | Search for tokens | query | FREE |
Tool | Description | Parameters | Cost |
---|---|---|---|
create_limit_order | Create a limit order transaction | input_mint, output_mint, making_amount, taking_amount, slippage_bps?, expired_at? | FREE |
execute_limit_order | Execute a limit order transaction | transaction, request_id | PAID |
cancel_limit_order | Cancel a single limit order | order | FREE |
cancel_limit_orders | Cancel multiple limit orders | orders? | FREE |
get_limit_orders | Get active/historical limit orders | order_status, wallet_address?, input_mint?, output_mint?, page? | FREE |
- Swaps (Ultra API): Execute immediately at current market price
- Limit Orders (Trigger API): Execute automatically when your target price is reached
This project includes automated DXT building integrated with pre-commit hooks:
- Pre-commit Hook: Automatically builds DXT files when changes are made to
dxt/
folder - Simple Naming: Always creates
jupiter-mcp-latest.dxt
for easy downloads - Auto-update: The latest DXT file is always current with the main branch
# Build DXT
./scripts/build-dxt.sh
# Output: jupiter-mcp-latest.dxt
# Install pre-commit hooks (includes DXT building)
pre-commit install
# The DXT will be automatically built when changes are detected in:
# - dxt/ directory
# - scripts/build-dxt.sh
For local development or testing:
- Python 3.12+
- uv for dependency management
- direnv
git clone https://github.com/araa47/jupiter-mcp
cd jupiter-mcp
direnv allow
cp .env.example .env
# Edit .env with your configuration
SOLANA_RPC_URL=https://api.mainnet-beta.solana.com
PRIVATE_KEY=your_base58_encoded_private_key_here
SOLANA_NETWORK=mainnet-beta
REQUEST_TIMEOUT=30
# Start the server locally
uv run python run_server.py
The project includes comprehensive testing with safety features:
π Free Tests (Default - No SOL spent):
- Mock execution tests
- API quote/balance checks
- Token searches and security checks
- Error handling validation
π° Paid Tests (Requires --run-paid-tests
flag):
- Real trade execution on mainnet
- Swap tests: Uses tiny amounts (0.0001 SOL β $0.015)
- Limit order tests: Creates orders 20% above market price
- Uses 0.04 SOL (β $6) to meet minimum requirements
- Orders won't execute at the high price
- Automatically cancelled after verification
- Full transaction signing and broadcasting
# Safe tests only (default)
uv run pytest tests/ -v
# Include real trade execution (spends tiny amounts)
uv run pytest tests/ -v --run-paid-tests
# Test with detailed output
uv run pytest tests/ -v --run-paid-tests -s
- Paid tests clearly marked with
@pytest.mark.paid
- Minimal trade amounts for real execution
- Limit orders use out-of-range prices that won't execute
- Clear warnings before spending real money
- Transaction confirmations with blockchain signatures
- π FREE:
get_swap_quote
,get_balances
,get_shield
,search_token
,create_limit_order
,cancel_limit_order
,cancel_limit_orders
,get_limit_orders
- API calls only - π° PAID:
execute_swap_transaction
,execute_limit_order
- Executes real trades and spends SOL
- All orders include a 255 basis point (2.55%) referral fee (maximum allowed)
- Referral wallet:
8cK8hCyRQCp52nVuPLnLL71afkRvRcFibSwHMjGFT8bm
(Referral Dashboard) - Note: Fees only collected for tokens with referral token accounts (currently SOL)
- Supports development and maintenance
- π Private keys never leave your machine
- π‘οΈ All API calls use HTTPS
β οΈ Never commit.env
files to version control
- "PRIVATE_KEY environment variable is required"
- Copy
env.example
to.env
and set your private key
- Copy
- "Invalid PRIVATE_KEY format"
- Use base58 encoded private key (from Phantom wallet export)
- Connection timeouts
- Try different RPC URL or increase
REQUEST_TIMEOUT
- Try different RPC URL or increase
Your Jupiter MCP server is ready for Solana DeFi interactions! π