solana-mcp
README.md
# solana-mcp
[](https://www.npmjs.com/package/solana-execution-mcp)
A [Model Context Protocol](https://modelcontextprotocol.io) 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.
```bash
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.
## Requirements
- Node.js 18+ (uses the built-in `fetch`)
## Install
```bash
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:
```bash
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
```bash
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`:
```json
{
"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.
<details>
<summary>Running from a local clone instead</summary>
Build first (`npm run build`), then point at the compiled entrypoint with an absolute path:
```json
{
"mcpServers": {
"solana": {
"command": "node",
"args": ["/absolute/path/to/solana-mcp/dist/index.js"]
}
}
}
```
</details>
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
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
ActivityStale
ResponsivenessNo issues