@pipeworx/solana-rpc
Connect: https://gateway.pipeworx.io/solana-rpc/mcp · Install: one-click buttons
Tools: 5
SPL token holdings, SOL balance and transaction history for any Solana address, read live from public Solana JSON-RPC endpoints — no API key.
Tools
solana_wallet_tokens(wallet, limit?, offset?, min_amount?, include_zero?, program?)— every SPL token position a wallet holds: mint address, balance, decimals, token-account address, across both the SPL Token and Token-2022 programs. Zero balances dropped, sorted largest first, paginated.solana_wallet_balance(wallet)— native SOL balance in lamports and SOL, with the slot it was read at.solana_wallet_transactions(wallet, limit?, before?, until?)— recent signatures with block time, slot, success/failure and memo, newest first;next_beforepages further back.solana_transaction(signature)— one transaction summarised: fee, status, signers, programs and instruction types invoked, SOL balance changes, SPL token balances before and after, first log lines.solana_rpc_health()— live per-endpoint, per-method reachability probe. Use it when a lookup comes back empty and you need to tell an endpoint block apart from an idle wallet.
Auth
Keyless.
Data sources
- https://solana-rpc.publicnode.com — Solana mainnet JSON-RPC operated by PublicNode/Allnodes.
- https://solana.leorpc.com/?api_key=FREE — Solana mainnet JSON-RPC operated by LeoRPC (free shared key).
Things worth knowing before you touch this
The endpoint that works on your laptop is not the endpoint that works in production.
api.mainnet-beta.solana.com returns 200 locally and HTTP 403 “Your IP or provider is blocked from this
endpoint” from a Cloudflare Worker. Twelve free RPC endpoints were probed from a deployed Worker; ankr,
rpcpool and mainnet-beta 403, drpc 400s for a paid plan, blockeden 402, onfinality and omniatech 429, grove
1016, public-rpc 526, shyft 401. Two survived, and neither serves everything:
| Endpoint | From Cloudflare |
|---|---|
solana-rpc.publicnode.com | 200 for getSignaturesForAddress, getBalance, getTransaction, getSlot; -32602 "Request blocked" for getTokenAccountsByOwner (method allowlist) |
solana.leorpc.com/?api_key=FREE | 200 for getTokenAccountsByOwner (2.37 MB for a 4,513-account wallet); intermittent -32603 on signature queries |
So failover is the architecture, not a safety net. Calls walk PROVIDERS in order, retry once on a transient
failure, and skip a provider that refuses the method outright (-32601/-32602/-32000/403). A refusal is
remembered per isolate so later calls go straight to the endpoint that serves it; a flake is not remembered,
because flakes recover. Every response carries providers_tried with the outcome and latency of each hop, so a
caller can see exactly where the answer came from.
Response size is the other constraint. One wallet returned 4,513 token accounts / 2,376,758 bytes from a
single getTokenAccountsByOwner. Returning that unfiltered would blow both the response budget and the Worker
CPU limit, so solana_wallet_tokens drops zero balances (2,605 of 4,513 survived on that wallet), sorts by
balance and returns a page, reporting total_token_accounts, holdings_with_balance and upstream_bytes so
the caller knows what was left behind.
Public nodes prune history. An empty solana_wallet_transactions result means “outside this node’s
retention window” as often as “no activity” — the tool says so in its note rather than implying the wallet
is idle. Full history needs an archival endpoint (the helius or solscan packs, with your own key).
Entity attribution is a different product. “Which wallets belong to <person/company/exchange>” cannot be
answered from RPC — it is addressed by public key alone. A name passed as wallet fails base58 validation and
returns {found: false, reason: 'not_an_address'} with a hint naming Arkham/Nansen-class labelling, rather
than quietly returning something adjacent.
Mints come back bare. Solana RPC carries no token names, symbols or prices; birdeye, solscan and
helius cover token metadata with a key.
Tools
- solana_wallet_tokens — SPL token holdings of a Solana wallet: mint address, token balance, decimals and token-account address for
- solana_wallet_balance — Native SOL balance of a Solana address, in lamports and SOL, with the slot it was read at. Answers “how
- solana_wallet_transactions — Recent transaction history for a Solana address: signature, slot, block time, success or failure, and memo
- solana_transaction — Details of one Solana transaction by signature: block time, slot, fee, success or failure, signers, the
- solana_rpc_health — Live reachability of each public Solana JSON-RPC endpoint this pack uses, per method: current slot,
Tools
-
solana_rpc_health— Live reachability of each public Solana JSON-RPC endpoint this pack uses, per method: current slot, -
solana_transaction— Details of one Solana transaction by signature: block time, slot, fee, success or failure, signers, the -
solana_wallet_balance— Native SOL balance of a Solana address, in lamports and SOL, with the slot it was read at. Answers how -
solana_wallet_tokens— SPL token holdings of a Solana wallet: mint address, token balance, decimals and token-account address for -
solana_wallet_transactions— Recent transaction history for a Solana address: signature, slot, block time, success or failure, and memo