solana-mcp-server
solana mcp sever to enable solana rpc methods
Links
README
From the repo.
Solana MCP Server
A Model Context Protocol (MCP) server that provides comprehensive access to Solana blockchain data through Cline. This server implements a wide range of Solana RPC methods, making it easy to query blockchain information directly through natural language conversations.
🚀 Usage Modes
The Solana MCP Server supports two modes of operation:
📡 Stdio Mode (Default)
For integration with Claude Desktop and other MCP clients:
solana-mcp-server stdio # or just: solana-mcp-server
🌐 Web Service Mode
For HTTP API access and integration with web applications:
# Run on default port 3000
solana-mcp-server web
# Run on custom port
solana-mcp-server web --port 8080
Web Service Endpoints:
POST /api/mcp- MCP JSON-RPC APIGET /health- Health checkGET /metrics- Prometheus metrics
📖 Complete Web Service Documentation
Quick Installation (One-liner)
🚀 Install Solana MCP Server for Claude Desktop in one command:
curl -fsSL https://raw.githubusercontent.com/opensvm/solana-mcp-server/main/scripts/install.sh | bash
This will:
- Download pre-built binaries (if available) or build from source
- Configure Claude Desktop automatically
- Set up proper environment variables
- Back up existing configurations
Alternative install methods:
# Using wget
wget -qO- https://raw.githubusercontent.com/opensvm/solana-mcp-server/main/scripts/install.sh | bash
# Manual download and run
curl -fsSL https://raw.githubusercontent.com/opensvm/solana-mcp-server/main/scripts/install.sh -o install.sh
chmod +x install.sh
./install.sh
After installation, restart Claude Desktop and start querying Solana data directly!
Manual Installation (Advanced)
Using Pre-built Binaries
- Go to the Releases page
- Download the appropriate binary for your system:
- Linux:
solana-mcp-server-linux-amd64 - macOS Intel:
solana-mcp-server-macos-amd64 - macOS Apple Silicon:
solana-mcp-server-macos-arm64 - Windows:
solana-mcp-server-windows-amd64.exe
- Linux:
- Make the binary executable (Linux/macOS):
chmod +x solana-mcp-server-* - Configure Claude Desktop:
CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/claude" mkdir -p "$CONFIG_DIR" echo "{\"mcpServers\":{\"solana\":{\"command\":\"$PWD/solana-mcp-server-*\",\"env\":{\"SOLANA_RPC_URL\":\"https://api.mainnet-beta.solana.com\"}}}}" > "$CONFIG_DIR/config.json"
Building from Source
git clone https://github.com/opensvm/solana-mcp-server.git
cd solana-mcp-server
cargo build --release
Then configure Claude Desktop with the path to target/release/solana-mcp-server.
Quick Deployment
🚀 One-liner deployment scripts for all platforms:
# Local development
./scripts/deploy-local.sh
# Docker container
./scripts/deploy-docker.sh
# Kubernetes with autoscaling
./scripts/deploy-k8s.sh
# AWS Lambda
./scripts/deploy-lambda.sh
# Google Cloud Functions
./scripts/deploy-gcf.sh
# Vercel Edge Functions
./scripts/deploy-vercel.sh
# Netlify (Documentation Site)
./scripts/deploy-netlify.sh
See scripts/README.md for detailed usage and requirements for each deployment option.
📚 Netlify Deployment Guide - Complete guide for deploying documentation to Netlify
⚡ Autoscaling and Monitoring
The Solana MCP Server supports dynamic scaling to handle variable load efficiently:
Features
- Prometheus metrics exposed at
/metricsendpoint - Kubernetes HPA with CPU, memory, and custom metrics
- Docker scaling guidelines and automation scripts
- Health checks at
/healthendpoint - MCP JSON-RPC API for web service integration
- Automated RPC caching with configurable TTL for improved performance
RPC Caching
The server includes an intelligent caching layer for RPC responses to reduce latency and improve performance:
- TTL-based caching: Configurable time-to-live per method
- Method-specific TTLs: Different cache durations for different data types
- Prometheus metrics: Track cache hit/miss rates
- Thread-safe: Concurrent access using DashMap
- Size limits: Automatic eviction when capacity is reached
See Caching Documentation for configuration and usage details.
Web Service API
The server now supports both traditional stdio transport and HTTP JSON-RPC mode:
# Run as stdio transport (default)
solana-mcp-server stdio
# Run as web service
solana-mcp-server web --port 3000
API Endpoints:
POST /api/mcp- Full MCP JSON-RPC 2.0 APIGET /health- Health check with capability informationGET /metrics- Prometheus metrics
📚 Complete MCP JSON-RPC API Documentation
Metrics Exposed
solana_mcp_rpc_requests_total- Total RPC requests by method and networksolana_mcp_rpc_request_duration_seconds- Request latency histogramsolana_mcp_rpc_requests_failed_total- Failed requests by error typesolana_mcp_cache_hits_total- Cache hits by methodsolana_mcp_cache_misses_total- Cache misses by methodsolana_mcp_cache_size- Current cache size- Standard resource metrics (CPU, memory)
Quick Start with Autoscaling
# Deploy with Kubernetes autoscaling
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/hpa.yaml
# Check autoscaling status
kubectl get hpa solana-mcp-server-hpa --watch
# Access metrics
kubectl port-forward svc/solana-mcp-service 8080:8080
curl http://localhost:8080/metrics
📊 Complete Autoscaling Documentation | 🐳 Docker Scaling Guide
Available RPC Methods
Account Methods
-
getAccountInfo: Returns all information associated with the account of provided Pubkey- Input:
pubkey(string) - Pubkey of account to query, as base-58 encoded string - Returns: Account data, balance, owner, and other metadata
- Input:
-
getMultipleAccounts: Returns account information for a list of Pubkeys- Input:
pubkeys(array of strings) - List of Pubkeys to query - Returns: Array of account information
- Input:
-
getProgramAccounts: Returns all accounts owned by the provided program Pubkey- Input:
programId(string) - Program Pubkey to query - Returns: Array of owned accounts with their data
- Input:
-
getBalance: Returns the SOL balance of an account- Input:
pubkey(string) - Account Pubkey to query - Returns: Balance in lamports (1 SOL = 1,000,000,000 lamports)
- Input:
-
getLargestAccounts: Returns the 20 largest accounts by lamport balance- Input: Optional
filter(string) - Filter by account type (circulating|nonCirculating) - Returns: Array of accounts with their balances
- Input: Optional
-
getMinimumBalanceForRentExemption: Returns minimum balance for rent exemption- Input:
dataSize(integer) - Size of account data in bytes - Returns: Minimum lamports required for rent exemption
- Input:
Block Methods
-
getBlock: Returns identity and transaction information about a confirmed block- Input:
slot(integer) - Slot number to query - Returns: Block data including hash, parent, and transactions
- Input:
-
getBlocks: Returns a list of confirmed blocks between two slots- Input:
start_slot(integer),end_slot(integer) - Returns: Array of block slots
- Input:
-
getBlocksWithLimit: Returns a list of confirmed blocks starting at given slot- Input:
start_slot(integer),limit(integer) - Returns: Array of block slots up to limit
- Input:
-
getBlockTime: Returns estimated production time of a block- Input:
slot(integer) - Returns: Unix timestamp (seconds since epoch)
- Input:
-
getBlockHeight: Returns current block height- Input: None
- Returns: Current block height
-
getBlockCommitment: Returns commitment for particular block- Input:
slot(integer) - Returns: Block commitment information
- Input:
-
getBlockProduction: Returns recent block production information- Input: Optional
identity(string) - Validator identity,range(object) - Returns: Block production stats
- Input: Optional
-
getSlot: Returns the current slot the node is processing- Input: Optional
commitment(string) - Commitment level - Returns: Current slot
- Input: Optional
-
getSlotLeaders: Returns slot leaders for a given slot range- Input:
startSlot(integer),limit(integer) - Returns: Array of validator identity pubkeys
- Input:
-
getFirstAvailableBlock: Returns the lowest confirmed block still available- Input: None
- Returns: First available block slot
-
getGenesisHash: Returns the genesis hash of the ledger- Input: None
- Returns: Genesis hash as string
System Methods
-
getHealth: Returns current health status of the node- Input: None
- Returns: "ok" if healthy, error otherwise
-
getVersion: Returns current Solana version running on the node- Input: None
- Returns: Version info including feature set
-
getIdentity: Returns identity pubkey for the current node- Input: None
- Returns: Node identity pubkey
-
getClusterNodes: Returns information about all cluster nodes- Input: None
- Returns: Array of node information
-
getLeaderSchedule: Returns the leader schedule for an epoch- Input: Optional
slot(integer),identity(string) - Returns: Leader schedule by validator identity
- Input: Optional
-
getVoteAccounts: Returns account info and stake for all voting accounts- Input: Optional
votePubkey(string), configuration parameters - Returns: Current and delinquent vote accounts
- Input: Optional
Epoch and Inflation Methods
-
getEpochInfo: Returns information about the current epoch- Input: None
- Returns: Epoch info including slot and block height
-
getEpochSchedule: Returns epoch schedule information- Input: None
- Returns: Epoch schedule parameters
-
getInflationGovernor: Returns current inflation governor- Input: None
- Returns: Inflation parameters
-
getInflationRate: Returns specific inflation values for current epoch- Input: None
- Returns: Inflation rates
-
getInflationReward: Returns inflation reward for list of addresses- Input:
addresses(array of strings), optionalepoch(integer) - Returns: Array of inflation rewards
- Input:
Token Methods
-
getTokenAccountBalance: Returns token balance of an SPL Token account- Input:
accountAddress(string) - Token account to query - Returns: Token amount with decimals
- Input:
-
getTokenAccountsByDelegate: Returns all token accounts by approved delegate- Input:
delegateAddress(string) - Returns: Array of token accounts
- Input:
-
getTokenAccountsByOwner: Returns all token accounts by token owner- Input:
ownerAddress(string) - Returns: Array of token accounts
- Input:
-
getTokenLargestAccounts: Returns 20 largest accounts of a token type- Input:
mint(string) - Token mint to query - Returns: Array of largest token accounts
- Input:
-
getTokenSupply: Returns total supply of an SPL Token type- Input:
mint(string) - Token mint to query - Returns: Total supply with decimals
- Input:
Transaction Methods
-
getTransaction: Returns transaction details for confirmed transaction- Input:
signature(string) - Transaction signature - Returns: Transaction info and status
- Input:
-
getSignaturesForAddress: Returns signatures for address's transactions- Input:
address(string), optionallimit(integer) - Returns: Array of transaction signatures
- Input:
-
getSignatureStatuses: Returns statuses of a list of signatures- Input:
signatures(array of strings) - Returns: Array of transaction statuses
- Input:
-
getTransactionCount: Returns current Transaction count from ledger- Input: None
- Returns: Transaction count
-
simulateTransaction: Simulate sending a transaction- Input:
transaction(string) - Encoded transaction - Returns: Simulation results
- Input:
-
sendTransaction: Send a transaction- Input:
transaction(string) - Signed encoded transaction - Returns: Transaction signature
- Input:
Other Methods
-
getFeeForMessage: Get the fee for a message- Input:
message(string) - Encoded message - Returns: Fee in lamports
- Input:
-
getLatestBlockhash: Returns the latest blockhash- Input: None
- Returns: Blockhash and last valid slot
-
isBlockhashValid: Returns whether a blockhash is still valid- Input:
blockhash(string) - Returns: Validity status
- Input:
-
getStakeMinimumDelegation: Returns stake minimum delegation- Input: None
- Returns: Minimum stake delegation in lamports
-
getSupply: Returns information about current supply- Input: None
- Returns: Supply info including total and circulating
-
requestAirdrop: Request an airdrop of lamports to a Pubkey- Input:
pubkey(string),lamports(integer) - Returns: Transaction signature
- Input:
Usage Examples
Once configured, you can interact with the Solana blockchain through natural language in Cline. Here are some example queries:
Basic Queries
- "What's the SOL balance of address Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr?"
- "Show me the current slot number"
- "Get information about the latest block"
- "What's the current inflation rate?"
- "Show me the token accounts owned by address ..."
Multi-Network Queries
- "List all available SVM networks"
- "Enable Eclipse mainnet for queries"
- "Check SOL balance on all enabled networks"
- "Compare transaction counts across networks"
Advanced Operations
- "Show me the largest USDC token accounts"
- "Get the leader schedule for the current epoch"
- "Find all accounts owned by the SPL Token program"
- "Check the block production stats for a validator"
Security
This project undergoes regular security audits using cargo audit. Our CI/CD pipeline automatically scans for vulnerabilities and generates reports.
Current Security Status
- ✅ Active monitoring: Weekly automated security scans
- ✅ Dependency updates: Regular updates to latest secure versions
- ⚠️ Known acceptable risks: Some vulnerabilities exist in deep Solana ecosystem dependencies
- 📋 Full audit reports: Available as CI artifacts and in
docs/security-audit.md
For detailed security information, vulnerability assessments, and risk analysis, see:
📋 Security Audit Documentation
Documentation
For comprehensive documentation including architecture, deployment guides, and complete API reference, see:
🚀 Developer Onboarding Guide - Start here if you're new to the project!
- 🏗️ Architecture Overview - Server internals and design
- 🚀 Deployment Guide - Local, serverless, and endpoint deployment
- 📖 API Reference - Complete method documentation
- ⚙️ Configuration Guide - Configuration options and management
- 💾 Caching Guide - RPC response caching configuration and usage
- 💰 x402 Payment Protocol - Monetize MCP tool calls (optional)
- 📘 x402 Integration Tutorial - Step-by-step integration guide
Environment Variables
SOLANA_RPC_URL: (Optional) The Solana RPC endpoint to use. Defaults to "https://api.mainnet-beta.solana.com" if not specified.SOLANA_COMMITMENT: (Optional) Commitment level (processed|confirmed|finalized). Defaults to "confirmed".SOLANA_PROTOCOL_VERSION: (Optional) MCP protocol version. Defaults to latest.
For cache configuration, see config.json or the Caching Documentation.
For x402 payment protocol (optional, feature-gated), see:
- x402 Integration Guide - Complete reference documentation
- x402 Integration Tutorial - Step-by-step tutorial with code examples
Development
Prerequisites
- Rust and Cargo
- Solana CLI tools (optional, for testing)
Building
cargo build
Running
cargo run
License
MIT License
Collected info
- ★ 65 stars
- ⎇ 14 forks
- Language: Rust
- Source updated: 6/13/2026
Config for your environment
Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "{MCP_ENDPOINT_URL}"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.