Skip to main content
Glama

solana-mcp

npm

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 plain solana-mcp name was already taken by an unrelated package.

npx solana-execution-mcp

Tools

Tool

Input

Returns

get_sol_price

none

Current SOL price in USD (via CoinGecko).

get_wallet_balance

address (string)

Native SOL balance of the wallet (mainnet).

get_token_balances

address (string)

Non-zero SPL token balances held by the wallet (Token + Token-2022).

get_recent_transactions

address (string), limit (number, optional, 1–50, default 10)

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-mcp

That 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 build

Scripts

Script

Description

npm run build

Compile TypeScript to dist/.

npm start

Run the compiled server (dist/index.js).

npm run dev

Recompile on change (tsc --watch).

npm test

Run the unit tests (node --test via tsx).

npm run typecheck

Type-check without emitting.

npm run clean

Remove dist/.

Tests

npm test

Unit 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

SOLANA_RPC_URL

https://api.mainnet-beta.solana.com

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

  1. Open your Claude Desktop config file:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

  2. Add the server under mcpServers:

    {
      "mcpServers": {
        "solana": {
          "command": "npx",
          "args": ["-y", "solana-execution-mcp"],
          "env": {
            "SOLANA_RPC_URL": "https://api.mainnet-beta.solana.com"
          }
        }
      }
    }
  3. 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 logic

Notes

  • This server is read-only — it never signs or sends transactions.

  • Logs are written to stderr so they never corrupt the stdio JSON-RPC stream.

License

MIT

Available Tools

4 tools
get_recent_transactionsGet Recent TransactionsA

List the most recent transactions for a Solana wallet address, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many transactions to return (1-50, default 10).
addressYesA Solana wallet address (base58 public key).

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesA Solana wallet address (base58 public key).

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesA Solana wallet address (base58 public key).

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 4 tool updatesv1.0.0
    • First observedget_recent_transactions
    • First observedget_sol_price
    • First observedget_token_balances
    • First observedget_wallet_balance

TDQS

A4/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency5/5

All tool names follow a consistent get_ prefix with snake_case, clearly indicating read-only operations. The pattern is uniform across the entire set.

Tool Count5/5

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.

Completeness4/5

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

ActivitySlowing
ResponsivenessNo issues

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

Related MCP Servers