solana-mcp
The solana-mcp server provides read-only tools to query Solana blockchain data without signing or sending transactions. It includes:
get_sol_price– Fetches the current SOL price in USD via CoinGecko.get_wallet_balance– Retrieves the native SOL balance of a given wallet address on mainnet.get_token_balances– Lists all non-zero SPL token (including Token-2022) balances held by a wallet address.get_recent_transactions– Returns the most recent transactions for a wallet (newest first), with details like slot, timestamp, and success/failure status. Accepts a limit between 1 and 50 (default 10).
Provides read-only Solana blockchain superpowers, including SOL price lookups, wallet balance checks, SPL token balance queries, and recent transaction history for any Solana wallet address.
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., "@solana-mcpWhat's the balance of wallet 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM?"
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.
solana-mcp
A Model Context Protocol server that lets an AI assistant query Solana without signing anything. Four read-only tools over stdio: current SOL price, native wallet balance, SPL and Token-2022 balances, and recent transactions. Addresses are validated before any RPC call, and transient failures (429, 5xx, timeouts) retry with exponential backoff.
14 tests, all passing. Typecheck clean. CI runs on Node 18, 20, and 22. MIT. Built for Claude Desktop and any MCP client.
Published on npm as
solana-execution-mcp. The plainsolana-mcpname was already taken by an unrelated package.
npx solana-execution-mcpTools
Tool | Input | Returns |
| none | Current SOL price in USD (via CoinGecko). |
|
| Native SOL balance of the wallet (mainnet). |
|
| Non-zero SPL token balances held by the wallet (Token + Token-2022). |
|
| Most recent transactions for the wallet, newest first, with slot, timestamp, and success/failure. |
Wallet addresses are validated before any RPC call, and every tool returns a clean error message instead of crashing on bad input or upstream failures. Network calls (RPC and price API) retry automatically with exponential backoff on transient failures — rate limits (HTTP 429), 5xx, and timeouts — and surface a clean error if the endpoint stays unavailable.
Related MCP server: Corvus
Requirements
Node.js 18+ (uses the built-in
fetch)
Install
npx solana-execution-mcpThat is the whole install. npx fetches the package and runs the server on stdio, so there is nothing to clone and no build directory to point at.
From source
Only needed if you want to modify it:
git clone https://github.com/Tobiinsaurralde/solana-mcp.git
cd solana-mcp
npm install
npm run buildScripts
Script | Description |
| Compile TypeScript to |
| Run the compiled server ( |
| Recompile on change ( |
| Run the unit tests ( |
| Type-check without emitting. |
| Remove |
Tests
npm testUnit tests cover address validation, the price tool (success, bad shape, and the rate-limit retry path with a mocked fetch), and the retry/backoff logic. They run directly against the TypeScript sources and make no network calls.
Configuration
Optional, read from the environment:
Variable | Default | Purpose |
|
| RPC endpoint for balance lookups. The public endpoint is rate-limited — use your own (Helius, QuickNode, Triton, …) for anything beyond light use. |
Connect to Claude Desktop
Open your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the server under
mcpServers:{ "mcpServers": { "solana": { "command": "npx", "args": ["-y", "solana-execution-mcp"], "env": { "SOLANA_RPC_URL": "https://api.mainnet-beta.solana.com" } } } }Restart Claude Desktop. The four tools appear under the 🔌 (tools) menu.
Build first (npm run build), then point at the compiled entrypoint with an absolute path:
{
"mcpServers": {
"solana": {
"command": "node",
"args": ["/absolute/path/to/solana-mcp/dist/index.js"]
}
}
}Then ask things like:
"What's the price of SOL right now?"
"What's the SOL balance of
9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM?""List the token balances for that wallet."
Project structure
src/
index.ts # MCP server: registers the 4 tools, wires stdio transport
config.ts # Endpoints, program ids, and env-overridable settings
price.ts # SOL/USD price lookup
solana.ts # Address validation + SOL/SPL balance + recent-tx logic
http.ts # fetch() with timeout, JSON parsing, clean errors
retry.ts # Transient-error detection + exponential-backoff retry
errors.ts # ToolError type + error description helper
test/
validation.test.ts # Address validation
price.test.ts # Price tool (incl. rate-limit retry)
retry.test.ts # Retry / backoff logicNotes
This server is read-only — it never signs or sends transactions.
Logs are written to
stderrso they never corrupt the stdio JSON-RPC stream.
License
MIT
Available Tools
4 toolsget_recent_transactionsGet Recent TransactionsA
List the most recent transactions for a Solana wallet address, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many transactions to return (1-50, default 10). | |
| address | Yes | A Solana wallet address (base58 public key). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is responsible for behavioral disclosures. It reveals only the sort order ('newest first') but omits default limit, pagination behavior, return format, or error cases, leaving the agent with limited knowledge about how the tool executes.
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 a single, clear sentence with no filler. It front-loads the action and resource, making it instantly scannable.
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 tool is simple and both parameters are fully documented in the schema, but absent an output schema, the description does not explain return values or edge cases. It is minimally adequate but leaves room for interpretation.
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 description coverage is 100%, so the schema already documents both parameters. The description adds no significant meaning beyond restating the purpose, so it meets the baseline for parameter understanding without enhancing it.
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 identifies the action ('List') and the resource ('most recent transactions for a Solana wallet address'), which distinguishes it from sibling tools like get_wallet_balance and get_token_balances. The phrase 'newest first' adds useful specificity.
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?
No explicit when-to-use guidance or alternatives are mentioned. The description implies usage for fetching transaction history, but does not contrast with balance or price tools, so the agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sol_priceGet SOL PriceA
Get the current price of SOL in USD.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It states the result is 'current' and in USD, implying a real-time fetch. However, it does not mention potential issues like network errors, rate limits, or the exact return format (e.g., number vs. object).
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 a single sentence with no filler words. It is front-loaded and every word earns its place, conveying both the purpose and the unit of measurement.
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 tool is simple with no parameters and no output schema, so the description explains what it returns (price in USD) sufficiently. It does not specify data types or error conditions, but those are likely unnecessary for a trivial price getter. The context is complete for an agent to use it 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 tool has zero parameters, so the input schema is fully covered (vacuously). The description adds no parameter information because none is needed. Per the rubric, 0 parameters gets a baseline score of 4.
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 the verb 'Get' and the resource 'current price of SOL in USD'. It is specific and unambiguous, and it distinguishes itself from sibling tools like get_wallet_balance and get_recent_transactions by focusing solely on price.
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: use this tool when you need the current SOL price in USD. It does not explicitly mention alternatives, but the sibling tools are so obviously different (balances, transactions) that no exclusion is necessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_balancesGet SPL Token BalancesA
List the non-zero SPL token balances held by a Solana wallet address.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | A Solana wallet address (base58 public key). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It adds value by explicitly stating 'non-zero' balances, which filters out zero holdings. However, it does not mention return format, error handling, or validation behavior, leaving some gaps for a read-only list tool.
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 a single, concise sentence that is front-loaded with the primary action and resource. Every word adds value, and there is no redundant or extraneous 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?
For a simple tool with one parameter and no output schema, the description is sufficiently complete. It explains the core function and the notable 'non-zero' filter. Missing details about return structure are minor given the straightforward nature of the operation, though a brief note on output format would enhance completeness.
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 already provides 100% coverage for the 'address' parameter with a clear description ('A Solana wallet address (base58 public key)'). The tool description adds no additional parameter semantics, so the baseline score of 3 is appropriate.
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 uses a specific verb 'List' with a clear resource 'SPL token balances' and scope 'held by a Solana wallet address'. It effectively distinguishes itself from sibling tools like get_sol_price (price), get_wallet_balance (likely SOL balance), and get_recent_transactions (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?
The description clearly states the use case: to list non-zero SPL token balances for a given wallet. However, it does not explicitly mention alternatives or when not to use it, though the specificity to SPL tokens implies it should not be used for SOL balance or price queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wallet_balanceGet Wallet SOL BalanceA
Get the native SOL balance of a Solana wallet address (mainnet).
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | A Solana wallet address (base58 public key). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It conveys that this is a read-only operation ('Get') and specifies the network (mainnet), but it omits details such as return format (e.g., SOL amount vs lamports) and how invalid addresses are handled. This is a significant gap, but the core read-only nature and network context are present, so a 3 is appropriate.
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 a single, clear sentence with no redundant information. Every word contributes meaning, making it highly efficient and well-structured.
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 tool is simple with one parameter and no output schema, but the description does not specify the units of the returned balance (SOL vs lamports) or any error behavior. Given the lack of an output schema, this missing detail leaves an agent uncertain about how to interpret the result, making the description minimally sufficient but not 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 already provides 100% coverage for the single 'address' parameter with a clear description. The tool description adds no additional semantic detail beyond the schema, so the baseline of 3 for high schema coverage is used.
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 the tool's function: getting the native SOL balance for a Solana wallet address, explicitly specifying mainnet. This distinguishes it from sibling tools like get_token_balances (non-native tokens) and get_sol_price (price), making the 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 clear context for when to use the tool (when you need a wallet's SOL balance on mainnet), but it does not explicitly mention alternatives or exclusions. Since the purpose is self-evident and distinct from siblings, this earns a 4 rather than a 5.
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.
4 tool updates
v1.0.0- First observed
get_recent_transactions - First observed
get_sol_price - First observed
get_token_balances - First observed
get_wallet_balance
TDQS
Scored across 4 tools
Each tool targets a distinct data type: price, native balance, token balances, and transaction history. There is no overlap in purpose, making tool selection unambiguous.
All tool names follow a consistent get_ prefix with snake_case, clearly indicating read-only operations. The pattern is uniform across the entire set.
With 4 tools, the server is tightly scoped for its purpose of providing Solana blockchain data lookups. Each tool covers a distinct useful query without unnecessary bloat.
The set covers core Solana data retrieval needs: price, native balance, token balances, and transactions. Minor gaps like transaction details or token metadata are not covered, but the essential surface is present.
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.
Native Solana staking for AI agents. 26 MCP tools, one-shot signing, webhooks.
Solana tools over MCP: Jupiter swaps, SPL tokens, Metaplex NFTs, SNS domains, network stats.
Solana MCP: Jupiter swaps, SPL transfers, Metaplex NFTs, Bonfida SNS, slot/TPS, staking.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA simple MCP server implementation that provides AI models with basic Solana RPC methods and helpful development prompts.443MIT
- AlicenseAqualityDmaintenanceSolana DeFi Intelligence MCP server enabling natural language queries for wallet analytics, DeFi positions, protocol metrics, and token prices.81MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that connects Hermes Agent to the Solana blockchain, enabling natural language queries for wallets, tokens, NFTs, transactions, whale movements, and network health.6MIT
- AlicenseAqualityDmaintenanceProvides read-only access to Solana on-chain data, enabling natural language queries for wallet balances, token holdings, prices, transactions, and more via MCP-compatible clients.8MIT