Jupiter MCP
Provides tools for swapping tokens and managing limit orders on the Solana blockchain using Jupiter DEX aggregator.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Jupiter MCPSwap 1 SOL for USDC"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Jupiter MCP
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.
๐ฆ Pre-built Desktop Extension (DXT)
Prerequisites
Before installing the extension, ensure you have:
Node.js and npx (for envmcp support)
Download from: https://nodejs.org/
Verify with:
npx --version
uv/uvx (Python package manager)
Install from: https://docs.astral.sh/uv/getting-started/installation/
macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | shWindows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"Verify with:
uvx --version
Once you have prereqs 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.
Related MCP server: jupiter-mcp
๐ Quick Installation Options
Option 1: Claude Desktop DXT (Recommended) ๐ฑ๏ธ
Download the DXT file and double-click to install. See dxt/README.md for detailed instructions.
Option 2: Quick Install with Cursor ๐ฏ
Instructions:
Copy the link below (click the copy button in the code block)
Paste it into your browser address bar or Cursor's command palette
Follow the prompts to complete installation
You'll be prompted to replace
REPLACE_THISwith your actual solana private key!
๐ Install with Direct Input:
cursor://anysphere.cursor-deeplink/mcp/install?name=jupiter-mcp&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyItLWZyb20iLCJnaXQraHR0cHM6Ly9naXRodWIuY29tL2FyYWE0Ny9qdXBpdGVyLW1jcCIsImp1cGl0ZXItbWNwIl0sImVudiI6eyJQUklWQVRFX0tFWSI6IlJFUExBQ0VfVEhJUyIsIlNPTEFOQV9SUENfVVJMIjoiaHR0cHM6Ly9hcGkubWFpbm5ldC1iZXRhLnNvbGFuYS5jb20iLCJTT0xBTkFfTkVUV09SSyI6Im1haW5uZXQtYmV0YSIsIlJFUVVFU1RfVElNRU9VVCI6IjMwIn19Note: These links only work in Cursor
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)
Pre-configured values:
SOLANA_RPC_URL: https://api.mainnet-beta.solana.comSOLANA_NETWORK: mainnet-betaREQUEST_TIMEOUT: 30 secondsPRIVATE_KEY: You'll need to replaceREPLACE_THISwith your base58 encoded private key
โก Quick Start (MCP Configuration)
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"
}
}
}
}Alternative Configuration (Using .env file)
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).
Environment Variables Required:
PRIVATE_KEY: Your base58 encoded Solana private key (from Phantom wallet export)Optional: Override
SOLANA_RPC_URLif you have a custom RPC endpoint
๐ Available Tools
๐ฑ Ultra API (Immediate Swaps)
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 |
๐ Trigger API (Limit Orders)
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 |
Key Differences: Swaps vs Limit Orders
Swaps (Ultra API): Execute immediately at current market price
Limit Orders (Trigger API): Execute automatically when your target price is reached
๐ ๏ธ Development & CI/CD
Automated DXT Building
This project includes automated DXT building integrated with pre-commit hooks:
Pre-commit Hook: Automatically builds DXT files when changes are made to
dxt/folderSimple Naming: Always creates
jupiter-mcp-latest.dxtfor easy downloadsAuto-update: The latest DXT file is always current with the main branch
Manual DXT Build
# Build DXT
./scripts/build-dxt.sh
# Output: jupiter-mcp-latest.dxtPre-commit Setup
# 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๐ง Alternative Installation (Development)
For local development or testing:
Prerequisites
Python 3.12+
uv for dependency management
direnv
Setup
git clone https://github.com/araa47/jupiter-mcp
cd jupiter-mcp
direnv allow
cp .env.example .env
# Edit .env with your configurationEnvironment Variables (.env file)
SOLANA_RPC_URL=https://api.mainnet-beta.solana.com
PRIVATE_KEY=your_base58_encoded_private_key_here
SOLANA_NETWORK=mainnet-beta
REQUEST_TIMEOUT=30Local Development Usage
# Start the server locally
uv run python run_server.py๐งช Testing
The project includes comprehensive testing with safety features:
Test Types
๐ 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
Running Tests
# 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 -sTest Safety Features
Paid tests clearly marked with
@pytest.mark.paidMinimal 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
๐ก Important Notes
Free vs Paid Operations
๐ 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
Automatic Referral System
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
Security
๐ Private keys never leave your machine
๐ก๏ธ All API calls use HTTPS
โ ๏ธ Never commit
.envfiles to version control
๐ Troubleshooting
Common Issues
"PRIVATE_KEY environment variable is required"
Copy
env.exampleto.envand set your private key
"Invalid PRIVATE_KEY format"
Use base58 encoded private key (from Phantom wallet export)
Connection timeouts
Try different RPC URL or increase
REQUEST_TIMEOUT
๐ Ready to Trade!
Your Jupiter MCP server is ready for Solana DeFi interactions! ๐
Available Tools
10 toolscancel_limit_orderA
Cancel a single active limit order.
This function is FREE to call and does not execute any transactions. It returns an unsigned transaction that must be signed and executed.
Args: order: Order account address to cancel
Returns: Dictionary containing: - success: Boolean indicating if the request was successful - data: Contains 'transaction' (unsigned) and 'requestId' - error: Error message if request failed
Note: - Returns unsigned transaction that needs to be executed - Uses configured wallet as maker
Example: >>> # Cancel a specific order >>> result = await api.cancel_limit_order( ... order="your_order_account_address_here" ... ) >>> if result["success"]: ... # Execute the cancellation ... exec_result = await api.execute_limit_order( ... transaction=result["data"]["transaction"], ... request_id=result["data"]["requestId"] ... )
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly discloses that the function does not execute transactions, returns an unsigned transaction, and uses the configured wallet as maker. This goes beyond the name and schema, making the behavior transparent. It could be slightly more detailed about potential error scenarios, but the core traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a main sentence, an explanation, an Args section, a Returns section, and a Note, followed by a complete example. It is front-loaded with the core purpose. The example is useful but somewhat lengthy, yet every part adds context. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully explains the return format (success, data with transaction and requestId, error) and the necessary follow-up action (executing the unsigned transaction). It also covers the 'uses configured wallet as maker' aspect. Given the modest complexity and the availability of an output schema (as indicated by context), the description is nearly complete. It might include edge-case handling or alternative tools, but those are not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for the 'order' parameter (0% coverage), so the description must compensate. It does: 'Args: order: Order account address to cancel' clearly explains what the parameter is and what it identifies. The example reinforces this with 'your_order_account_address_here'. This is sufficient for a single-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Cancel a single active limit order' with a specific verb and resource. It explicitly differentiates from the sibling 'cancel_limit_orders' by saying 'single', and from 'execute_limit_order' by noting it only returns an unsigned transaction versus executing it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for use: it says the call is free, does not execute transactions, and returns an unsigned transaction that must be signed and executed. It gives an example showing the follow-up use of 'execute_limit_order'. However, it does not explicitly mention when to prefer this over 'cancel_limit_orders' or other alternatives, so it misses the explicit exclusion criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_limit_ordersA
Cancel multiple limit orders (batched in groups of 5).
This function is FREE to call and does not execute any transactions. It returns unsigned transactions that must be signed and executed.
Args: orders: Array of order account addresses. If None/empty, cancels ALL orders
Returns: Dictionary containing: - success: Boolean indicating if the request was successful - data: Contains 'transactions' (array of unsigned) and 'requestId' - error: Error message if request failed
Note: - Returns multiple transactions if >5 orders - Each transaction needs to be signed and executed separately - Uses configured wallet as maker
Example: >>> # Cancel specific orders >>> result = await api.cancel_limit_orders( ... orders=["order1_address", "order2_address", "order3_address"] ... ) >>> >>> # Cancel ALL orders >>> result = await api.cancel_limit_orders() >>> if result["success"]: ... # Execute each cancellation transaction ... for tx in result["data"]["transactions"]: ... exec_result = await api.execute_limit_order( ... transaction=tx, ... request_id=result["data"]["requestId"] ... )
| Name | Required | Description | Default |
|---|---|---|---|
| orders | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: it is free, performs no transactions, returns unsigned transactions, and requires each to be signed and executed separately. It also documents the 'success' and 'requestId' response fields, covering safety and workflow expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with intro, Args, Returns, Note, and Example sections. It is concise for the tool's complexity, with the main purpose stated upfront and no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (batching, unsigned transactions, optional input, separate execution), the description covers all necessary aspects, including multi-transaction behavior and example usage. The presence of an output schema does not reduce the completeness since the description still explains critical workflow details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines 'orders' as an array/null with no description. The description adds essential meaning: 'Array of order account addresses' and the special case that None/empty cancels ALL orders. Since schema description coverage is 0%, this fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Cancel multiple limit orders (batched in groups of 5)' with a clear verb and resource. It also clarifies the empty-input behavior (cancels ALL orders), which distinguishes it from the sibling tool 'cancel_limit_order'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear when-to-use context, including 'FREE to call', 'does not execute any transactions', and that it returns unsigned transactions requiring separate signing/execution. However, it does not explicitly reference alternative tools or state 'when not to use', though the batching vs. singular nature is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_limit_orderA
Create a limit order that executes when target price is reached.
This function is FREE to call and does not execute any transactions. It returns an unsigned transaction that must be signed and executed.
โ ๏ธ IMPORTANT WARNINGS:
MINIMUM ORDER SIZE: Jupiter frontend enforces $5 USD minimum to ensure keeper profitability. Programmatically, smaller orders are accepted but may never execute!
PRICE VALIDATION: The program does NOT check if your price makes sense!
Buying above market price? Order executes immediately at a LOSS
Setting wrong rate (e.g., 1000 USDC for 1 SOL)? You LOSE the difference!
Jupiter frontend warns/blocks orders >5% above market - API does NOT!
TRANSFER TAX: Tokens with transfer tax extensions are disabled on frontend but API will accept them - be careful!
SLIPPAGE: By default, trigger orders execute with 0 slippage (exact price). Add slippage for better fill probability but at worse price.
Args: input_mint: Input token mint address (token to sell) output_mint: Output token mint address (token to buy) making_amount: Amount of input token to sell in smallest unit taking_amount: Amount of output token to receive in smallest unit (sets the price) slippage_bps: Slippage in basis points (0 = exact price, >0 = accept worse price) expired_at: Unix timestamp when order expires (optional)
Returns: Dictionary containing: - success: Boolean indicating if the request was successful - data: Contains 'order' (account address), 'transaction' (unsigned), and 'requestId' - error: Error message if request failed
Note: - Uses configured wallet as maker/payer - Includes automatic referral (2.55%) - Order executes when market price reaches your target
Example: >>> # SAFE: Create limit order to sell 0.1 SOL when price reaches $200 >>> # Current market: 1 SOL = $180, so this waits for price to rise >>> result = await api.create_limit_order( ... input_mint="So11111111111111111111111111111111111111112", # SOL ... output_mint="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC ... making_amount="100000000", # 0.1 SOL (9 decimals) ... taking_amount="20000000", # 20 USDC (6 decimals) = $200/SOL rate ... slippage_bps=50 # 0.5% slippage for better fills ... ) >>> >>> # DANGEROUS: Wrong price - selling 1 SOL for only 1 USDC! >>> # This executes immediately and you LOSE ~$179! >>> # DON'T DO THIS: >>> # result = await api.create_limit_order( >>> # input_mint="So11...112", >>> # output_mint="EPj...t1v", >>> # making_amount="1000000000", # 1 SOL >>> # taking_amount="1000000" # 1 USDC - HUGE LOSS! >>> # )
| Name | Required | Description | Default |
|---|---|---|---|
| expired_at | No | ||
| input_mint | Yes | ||
| output_mint | Yes | ||
| slippage_bps | No | ||
| making_amount | Yes | ||
| taking_amount | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and delivers: it states the function is free, does not execute transactions, returns an unsigned transaction, discloses price validation gaps, min order size, transfer tax, slippage behavior, and referral inclusion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though lengthy, the structure uses headings, numbered warnings, and an example. The content is dense with essential warnings rather than filler; every section serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, parameters, return structure, warnings, and includes a realistic example with both safe and dangerous cases. Given the tool's complexity and dangerous failure modes, it is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions are absent (0% coverage), but the 'Args' section explains each parameter including units (smallest unit, basis points, Unix timestamp) and provides concrete examples showing decimals.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific statement: 'Create a limit order that executes when target price is reached.' It further clarifies it returns an unsigned transaction, distinguishing it from execution/cancellation siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides extensive context on when to use this tool (to create a limit order without executing) and warns against misuse (price validation, transfer tax, minimum size). However, it does not explicitly name alternative tools like execute_limit_order or get_swap_quote, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_limit_orderA
๐จ WARNING: THIS WILL CREATE A REAL LIMIT ORDER ON-CHAIN! ๐จ
Sign and execute a limit order transaction.
This is a PAID operation that creates a limit order on the Solana blockchain. The order will execute automatically when market conditions are met.
Args: transaction: Base64 encoded unsigned transaction from create_limit_order request_id: Request ID from create_limit_order response
Returns: Dictionary containing: - success: Boolean indicating if the execution was successful - data: Contains 'signature' and status if successful - error: Error message if execution failed
Note: - This creates a limit order that may execute later - Orders have fees: 0.03% (stable pairs) or 0.1% (other pairs) - Plus automatic referral fees (2.55%) - Minimum order size is $5 USD
Example: >>> # First create the order >>> order = await api.create_limit_order(...) >>> if order["success"]: ... # Then execute it ... result = await api.execute_limit_order( ... transaction=order["data"]["transaction"], ... request_id=order["data"]["requestId"] ... ) ... if result["success"]: ... print(f"Limit order created! Signature: {result['data']['signature']}")
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | ||
| transaction | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the paid nature, on-chain execution, automatic order matching, fees, minimum order size, and return structure. It also warns about creating a real order, giving the agent a clear safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a warning, summary, args, returns, notes, and example. It is longer than minimal but every section adds value; the example is practical. The attention-grabbing warning is slightly theatrical but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, inputs, outputs, fees, execution behavior, and workflow, making it complete for a two-parameter tool. The presence of an output schema is supplemented by the detailed return description, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly explains both parameters: transaction is 'Base64 encoded unsigned transaction from create_limit_order' and request_id is 'Request ID from create_limit_order response'. This adds meaning far beyond the schema's bare string definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Sign and execute a limit order transaction' and specifies it creates a limit order on Solana. It distinguishes from siblings like execute_swap_transaction by emphasizing limit order and by referencing create_limit_order as the source of inputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is a paid operation used after create_limit_order, with an example illustrating the create-then-execute workflow. It does not explicitly mention alternatives or when not to use, but the context is sufficient for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_swap_transactionA
๐จ WARNING: THIS WILL EXECUTE A REAL TRADE AND SPEND ACTUAL SOL! ๐จ
Sign and execute a swap transaction via Jupiter Ultra API.
This is a PAID operation that executes real trades on the Solana blockchain. Only call this function when you want to actually execute a trade.
This method will:
Sign the provided unsigned transaction with your configured private key
Execute the signed transaction on the Solana blockchain
SPEND REAL SOL/TOKENS - THIS IS NOT REVERSIBLE!
Args: transaction: The base64 encoded UNSIGNED transaction from get_swap_quote request_id: The request ID from the swap quote response
Returns: Dictionary containing: - success: Boolean indicating if the execution was successful - data: Contains 'signature' and transaction details if successful - error: Error message if execution failed
Example: >>> # First get a quote >>> quote = await api.get_swap_quote(input_mint, output_mint, amount) >>> if quote["success"]: ... # Then execute the trade ... result = await api.execute_swap_transaction( ... transaction=quote["data"]["transaction"], ... request_id=quote["data"]["requestId"] ... ) ... if result["success"]: ... print(f"Trade executed! Signature: {result['data']['signature']}")
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | ||
| transaction | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels: it warns about irreversible spending, mentions signing with a configured private key, and outlines the execution steps. It also discloses the non-reversible nature and actual cost, going well beyond basic read/write hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although long, the description is efficiently structured with a clear warning, numbered steps, args, returns, and an example. Every section adds critical information and none is redundant or filler, making it appropriate for a high-stakes operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, irreversible transaction tool, the description covers the execution pipeline, prerequisites (quote retrieval), parameter meanings, return format, and an example. It is fully self-contained even without an output schema shown, addressing all necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only type and title, but the description explains 'transaction' is a base64 encoded UNSIGNED transaction from get_swap_quote and 'request_id' is from the swap quote response. This contextualizes both parameters and even includes an example showing exactly how to pass them, compensating fully for zero schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Sign and execute a swap transaction via Jupiter Ultra API' and emphasizes it executes a REAL trade spending actual SOL. This distinguishes it from sibling tools like execute_limit_order while specifying the exact resource (swap transaction) and action (execute).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Only call this function when you want to actually execute a trade' and provides a clear pre-requisite flow via get_swap_quote. The example shows the sequence of obtaining a quote then executing, making when-to-use unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balancesA
Get token balances for a wallet address via Jupiter Ultra API.
This function is FREE to call and does not execute any transactions. Use this to check wallet holdings before making trades.
Args: wallet_address: The wallet address to get balances for (optional, will use configured wallet if not provided)
Returns: Dictionary containing: - success: Boolean indicating if the request was successful - wallet_address: The wallet address that was queried - data: Array of token balances with mint addresses, amounts, and decimals - error: Error message if request failed
Example: >>> # Get balances for configured wallet >>> result = await api.get_balances() >>> if result["success"]: ... balances = result["data"] ... for balance in balances: ... print(f"Token: {balance['mint']}, Amount: {balance['amount']}") >>> >>> # Get balances for specific wallet >>> result = await api.get_balances(wallet_address="11111111111111111111111111111112")
| Name | Required | Description | Default |
|---|---|---|---|
| wallet_address | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses key behaviors: the call is free, does not execute transactions, uses a configured wallet if none is provided, and returns a structured dictionary with success/error handling. This goes beyond what the schema indicates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args, Returns, and an Example. It is appropriately sized โ every section contributes to understanding, including code snippets illustrating both usage patterns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's behavior, parameter, return format, and example usage. Given the tool's simplicity and the presence of a detailed return outline, no critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides the parameter name and default, with no description. The description explains the parameter's meaning and optional fallback, adding semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get token balances for a wallet address via Jupiter Ultra API.' It distinguishes itself from sibling tools like execute_swap_transaction by explicitly noting it does not execute transactions, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context: 'Use this to check wallet holdings before making trades.' It does not explicitly state when not to use it or list alternative tools, but the context is sufficient for an AI agent to select it for read-only balance checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_limit_ordersA
Get active or historical limit orders for a wallet.
This function is FREE to call and does not execute any transactions.
Args: order_status: "active" or "history" (default: "active") wallet_address: Wallet to check (optional, defaults to configured wallet) input_mint: Filter by input token (optional) output_mint: Filter by output token (optional) page: Page number for pagination, 10 orders per page (optional)
Returns: Dictionary containing: - success: Boolean indicating if the request was successful - wallet_address: The wallet address that was queried - data: Array of order objects with details - hasMoreData: Boolean indicating if there are more pages - error: Error message if request failed
Example: >>> # Get active orders for configured wallet >>> result = await api.get_limit_orders(order_status="active") >>> if result["success"]: ... for order in result["data"]: ... print(f"Order {order['orderAccount']}: {order['makingAmount']} โ {order['takingAmount']}") >>> >>> # Get order history with pagination >>> result = await api.get_limit_orders(order_status="history", page=1)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| input_mint | No | ||
| output_mint | No | ||
| order_status | No | active | |
| wallet_address | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses the critical non-mutating behavior ('does not execute any transactions') and free cost. It also explains return fields including error handling. It does not cover rate limits or auth prerequisites in depth, but the 'configured wallet' implication touches on context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, Args bullet list, Returns list, and a helpful example. It is slightly verbose (the example could be trimmed), but every section serves a purpose and the information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no annotations, and no explicit output schema, the description provides complete coverage: purpose, parameter details, return value structure, pagination behavior, and a usage example. It leaves little ambiguity for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the Args section explains each of the 5 parameters with defaults, semantics, and optionality (e.g., order_status default active, wallet defaults to configured wallet). This fully compensates for the bare schema and adds meaning well beyond field titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Get active or historical limit orders for a wallet', using a specific verb ('Get') and resource ('limit orders') with clear scope. It distinguishes itself from sibling tools like create_limit_order and cancel_limit_order by explicitly framing this as a read-only query operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The statement 'This function is FREE to call and does not execute any transactions' provides clear context that it is safe to use for checking orders. However, it does not explicitly contrast with alternatives or state when not to use it (e.g., when needing to create or cancel an order), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shieldA
Get token security information via Jupiter Ultra Shield API.
This function is FREE to call and does not execute any transactions.
Use this to check token security before making trades. Essential for avoiding scam tokens.
IMPORTANT: You can check MULTIPLE tokens in a single request by comma-separating mints!
This is much more efficient than making multiple individual requests.
Args:
mints: Comma-separated list of token mint addresses to check
Example: "mint1,mint2,mint3" (no spaces between commas)
No specific limit mentioned in API docs
Returns:
Dictionary containing:
- success: Boolean indicating if the request was successful
- data: A "warnings" object with mint addresses as keys, each containing an array of warnings
- error: Error message if request failed
Warning Types and Severities:
Info level warnings:
- NOT_VERIFIED: Token is not verified, double-check mint address
- LOW_ORGANIC_ACTIVITY: Token has low organic trading activity
- NEW_LISTING: Token is newly listed
- HAS_MINT_AUTHORITY: Owner can mint more tokens (dilution risk)
Warning level warnings:
- HAS_FREEZE_AUTHORITY: Owner can freeze your tokens (high risk!)
- Transfer tax tokens are disabled on Jupiter frontend
Example:
>>> # Check security for multiple tokens at once
>>> mints = "So11111111111111111111111111111111111111112,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v,someTokenMint"
>>> result = await api.get_shield(mints=mints)
>>> if result["success"]:
... warnings = result["data"]["warnings"]
... for mint, mint_warnings in warnings.items():
... if mint_warnings:
... print(f"
โ ๏ธ Warnings for {mint}:") ... for warning in mint_warnings: ... severity_icon = "๐ด" if warning["severity"] == "warning" else "๐ก" ... print(f" {severity_icon} {warning['type']}: {warning['message']}") ... else: ... print(f"โ {mint}: No warnings found")
| Name | Required | Description | Default |
|---|---|---|---|
| mints | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite having no annotations, the description fully discloses behavior: it is free, performs no transactions, and returns a dictionary with success/warnings/error keys. It details the specific warning types and their severity levels, warning about risks like mint and freeze authorities. This goes well beyond a minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-organized into purpose, parameter explanation, return format, warning types, and example. Every section adds value; the length is justified given the tool's complexity. However, it could be slightly tightened by condensing the warning descriptions without losing critical detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is self-contained for an agent: it explains how to call the tool, what the response looks like, how to interpret warnings, and provides a complete usage example. The output schema exists, but the description's return format details and warning semantics are more informative, making it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a string parameter named 'mints' with no description, and schema coverage is 0%. The description compensates exceptionally: explains comma-separated format, provides an explicit example, notes no spaces, and mentions no specific limit. This is essential guidance for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Get token security information') and clearly identifies the resource (Jupiter Ultra Shield API). It adds important context that the call is free and transactional, distinguishing it from trade-related siblings like get_swap_quote and execute_swap_transaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it: 'Use this to check token security before making trades' and 'Essential for avoiding scam tokens.' It also provides an efficiency guideline (comma-separated mints in one request) and notes it does not execute transactions, which implies safe usage. Though no alternatives are named, the tool's unique purpose is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_swap_quoteA
Get a swap quote and unsigned transaction from Jupiter Ultra API.
This function is FREE to call and does not execute any transactions. Use this to get price quotes and prepare transactions for execution.
Args: input_mint: The input token mint address (e.g., SOL: "So11111111111111111111111111111111111111112") output_mint: The output token mint address (e.g., USDC: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v") amount: The amount of input token to swap in smallest unit (e.g., "1000000" = 0.001 SOL)
Returns: Dictionary containing: - success: Boolean indicating if the request was successful - data: Contains 'transaction' (unsigned) and 'requestId' for execution - error: Error message if request failed
Example: >>> result = await api.get_swap_quote( ... input_mint="So11111111111111111111111111111111111111112", # SOL ... output_mint="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC ... amount="1000000" # 0.001 SOL ... ) >>> if result["success"]: ... transaction = result["data"]["transaction"] ... request_id = result["data"]["requestId"]
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | ||
| input_mint | Yes | ||
| output_mint | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that the call is free, does not execute transactions, and returns an unsigned transaction with a requestId for later execution. It could add more detail about the transaction format or API key requirements, but the essential behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an overview, Args, Returns, and a concrete example. Every section adds value, and the length is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, parameters, return structure, and a usage example. Given the tool's simple nature and the absence of annotations, this description is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero description coverage, but the description fully compensates. Each parameter is explained with examples, including the meaning of 'amount' in smallest units and concrete mint addresses for SOL and USDC. This significantly exceeds the schema's bare property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Get a swap quote and unsigned transaction from Jupiter Ultra API.' It clearly identifies the resource and outcome, and explicitly distinguishes from execution tools by noting it 'does not execute any transactions.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context: 'Use this to get price quotes and prepare transactions for execution.' It also gives an implicit exclusion ('does not execute any transactions') that separates it from execution-oriented siblings, though it does not name specific alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tokenA
Search for tokens via Jupiter Ultra API.
This function is FREE to call and does not execute any transactions. Use this to find token mint addresses when you only know the symbol or name.
IMPORTANT: You can search for MULTIPLE tokens in a single request by comma-separating queries! This is much more efficient than making multiple individual requests.
Args: query: Search query - can be: - Single token: symbol ("SOL"), name ("Solana"), or mint address - Multiple tokens: comma-separated queries (e.g., "SOL,USDC,RAY") - Limit: Up to 100 mint addresses when searching by address - Response limit: Returns up to 20 tokens per symbol/name search
Returns: Dictionary containing: - success: Boolean indicating if the request was successful - query: The original search query - data: Array of ALL matching tokens from ALL queries combined - error: Error message if request failed
Example: >>> # Search for a single token >>> result = await api.search_token(query="SOL") >>> if result["success"]: ... for token in result["data"]: ... print(f"Symbol: {token['symbol']}, Mint: {token['mint']}") >>> >>> # Search for MULTIPLE tokens at once (RECOMMENDED for efficiency!) >>> result = await api.search_token(query="SOL,USDC,RAY,BONK") >>> if result["success"]: ... # Returns all matching tokens for all queries in one response ... for token in result["data"]: ... print(f"{token['symbol']}: {token['mint']}") >>> >>> # Search by multiple mint addresses >>> mints = "So11111111111111111111111111111111111111112,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" >>> result = await api.search_token(query=mints) >>> if result["success"]: ... # Returns detailed info for all specified mints ... for token in result["data"]: ... print(f"{token['symbol']}: ${token.get('usdPrice', 'N/A')}")
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility. It discloses that the function is free, does not execute transactions, includes response limits (20 tokens per symbol/name search, up to 100 mint addresses), and describes the return dictionary structure (success, query, data, error). These are key behavioral traits beyond what annotations would provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured with headings, an Args section, Returns section, and multiple examples. Some examples are redundant, and trimming could shorten it, but it remains clear and front-loaded with the key purpose and safety note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, no annotations, and existing output schema not shown, the description is complete. It covers purpose, usage, parameter semantics, return format, and limitations, and provides examples. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter 'query' with no description (0% coverage). The description fully compensates by explaining valid input types: symbol, name, mint address, comma-separated multi-queries, and limits. This is exemplary parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches for tokens via the Jupiter Ultra API, specifically to find mint addresses when only symbol or name is known. This specific verb+resource+scope distinguishes it from sibling tools that handle swaps, orders, and balances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('Use this to find token mint addresses when you only know the symbol or name') and emphasizes that it is free and does not execute transactions, making it safe for lookups. It also recommends multi-token searches for efficiency, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
10 tool updates
v0.1.0- First observed
cancel_limit_order - First observed
cancel_limit_orders - First observed
create_limit_order - First observed
execute_limit_order - First observed
execute_swap_transaction - First observed
get_balances - First observed
get_limit_orders - First observed
get_shield - First observed
get_swap_quote - First observed
search_token
TDQS
Tools are mostly distinct: create, quote, execute, cancel, list, search, balance, and shield have clear boundaries. However, execute_limit_order is also used to execute cancellation transactions (as shown in examples), which creates ambiguity about its role.
All tools follow a consistent verb_noun snake_case pattern (create_limit_order, get_swap_quote, execute_swap_transaction, cancel_limit_orders). The naming is predictable and clear, with no mixing of conventions.
10 tools is well-scoped for a trading/swap server. Each tool covers a core need (quotes, execution, limit order lifecycle, balance, token search, and security checks) without excessive overlap or redundancy.
The swap and limit order lifecycles are well covered: quote/execute for swaps, create/execute/cancel/list for orders. However, cancellation returns unsigned transactions that must be executed via execute_limit_order, which is a confusing workaround; there is no dedicated execute_cancel tool.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Solana MCP for wallets, trades, markets, PnL, transfers, onchain data, signable swaps and API tools.
Solana MCP: Jupiter swaps, SPL transfers, Metaplex NFTs, Bonfida SNS, slot/TPS, staking.
Jupiter - 4 tools for swap quotes, liquidity pools, and trading data
Solana tools over MCP: Jupiter swaps, SPL tokens, Metaplex NFTs, SNS domains, network stats.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceAn MCP server for executing token swaps on the Solana blockchain using Jupiter's Ultra API, enabling users to fetch optimal swap orders and execute transactions with slippage control.829MIT
- FlicenseAqualityBmaintenanceMCP server providing AI agents with native access to Jupiter's full DeFi stack on Solana. It offers 17 tools covering swaps, tokens, lending, limit orders, DCA, prediction markets, perpetuals, and portfolio management.16-
- AlicenseAqualityCmaintenanceA simple MCP server for interacting with Marinade Finance on Solana, providing real-time updates and secure transactions.2MIT
- AlicenseBqualityCmaintenanceAn MCP server that enables AI agents to interact with the Solana blockchain through 20 tools for wallet management, SPL token operations, blockchain exploration, and DeFi integration via Jupiter.21MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/araa47/jupiter-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server