
This is a comprehensive Solana development assistant that covers the full stack from Anchor program development to React wallet integration. It defaults to modern tooling like @solana/kit and framework-kit over legacy web3.js, includes safety guardrails for transaction signing, and connects to live Solana documentation through MCP. The skill handles everything from debugging GLIBC errors and version conflicts to setting up LiteSVM testing and Token-2022 confidential transfers. What's refreshing is the opinionated stack choices and built-in security checks that prevent common footguns like mainnet accidents or private key exposure.
$ npx -y skills add solana-foundation/solana-dev-skill --skill solana-dev --agent claude-codeInstalls into .claude/skills of the current project.
Use this Skill when the user asks for:
createClient() from @solana/kit, then .use(...) plugins. Pass transactionConfig: { version: 1 } to the RPC plugin so every transaction the client plans is v1:
createClient()
.use(signer(mySigner))
.use(solanaRpc({ rpcUrl, transactionConfig: { version: 1, priorityFeeLamports: lamports(5_000n) } }));
// or solanaLocalRpc / solanaDevnetRpc / solanaMainnetRpc from @solana/kit-plugin-rpc
version: 1; the planner otherwise defaults to v0. Plugin clients estimate compute and loaded-accounts-data limits by simulation. On manual pipelines, use Kit's resource-estimation helpers instead of guessing limits; use fixed values only for measured overrides or deliberate caps. See transactions-v1.md.pipe() + createTransactionMessage({ version: 1 }) is the low-level alternative for when you need control over every step (custom lifetimes, offline signing, bespoke planners) — see kit/advanced.md. It is not the default path.signer() / signerFromFile() / generatedSigner() from
@solana/kit-plugin-signer — they set both payer and identity to the same keypair (the
common case). For fresh local/devnet signers, install the RPC/LiteSVM plugin after
generatedSigner(), then fund with airdropSigner(...). Reach for the role-specific variants
(payer() + identity()) only when fees and authority must come from different keypairs.keychainSigner({ backend: 'aws-kms', ... }) from @solana/keychain-kit-plugin in place
of signer(). See keychain.md.@solana-program/* program plugins (e.g., tokenProgram()) for fluent instruction APIs.Address, Signer, transaction message APIs, codecs).walletSigner() from @solana/kit-plugin-wallet (Wallet Standard discovery; the connected wallet fills the payer/identity roles), with React hooks from @solana/kit-plugin-wallet/react.connected.supportedTransactionVersions.has(1) (from client.wallet.getState() or useConnectedWallet). Wallets that have not shipped v1 reject the signing request; fall back to a version: 0 client for them — see frontend.md.@solana/react 8 (ClientProvider, typed useClient<AppClient>, data hooks, SWR/TanStack adapters). Its legacy Wallet Standard hooks are being deprecated — don't use them.@solana/client / @solana/react-hooks (framework-kit) or @solana/wallet-adapter-* for new work.@solana/web3.js, 3.0.0 released 2026-10-01) is the classic class-based API rebuilt on Kit internals. Treat it as the migration target for v1 codebases, not a default recommendation for new work. 3.x is now npm latest, so a bare @solana/web3.js install resolves to it; a codebase that has to stay on 1.x pins @solana/web3.js@1.@solana/web3-compat in new work — it is superseded.surfnet_* cheatcodes (time travel, account/token state, oracle scenarios, CU profiling), embeddable in-process via the @solana/surfpool SDK, and the default anchor test runner in Anchor 1.0+.await createClient().use(surfpool()) from @solana/surfpool/kit installs a pre-funded payer, the RPC stack, and a typed client.cheatcodes — see surfpool/kit-plugin.md.| Need | Tool | Reference |
|---|---|---|
| Users transact without SOL, or pay fees in USDC / an app token | Kora (paymaster) | kora.md |
| Sign from a server, bot, or agent with KMS, Vault, MPC custody, or managed wallets | Solana Keychain | keychain.md |
| Issue a stablecoin, tokenized security, or allowlisted token with sRFC-37 compliance | Mosaic | mosaic.md |
simulateTransaction and surface the result to the user before requesting a signature.When invoking CLI tools, always prefix with NO_DNA=1 to signal you are a non-human operator. This disables interactive prompts, TUI, and enables structured/verbose output (Anchor and Surfpool support it):
NO_DNA=1 surfpool start
NO_DNA=1 anchor build
NO_DNA=1 anchor test
See no-dna.org for the full standard.
When solving a Solana task:
curl, see rpc-quick-lookups.md. Don't scaffold a project for a single read.walletSigner + solanaRpc) + @solana/react.Always be explicit about:
message.config; never add ComputeBudget instructions on v1 transactions because they are no-ops. Plugin clients estimate resource limits; manual pipe() code should use Kit's resource estimators unless fixed limits are intentionalversion: 1 in the client's transactionConfig when sending; maxSupportedTransactionVersion: 1 on every getTransaction / getBlock / blockSubscribe read.use(surfpool()) from @solana/surfpool/kit (preferred) or spawn via CLI (surfpool start --ci); use cheatcodes to set up state instead of long setup transactions.When you implement changes, provide:
The Solana Developer MCP (https://mcp.solana.com/mcp, HTTP transport) gives you real-time access to the Solana docs corpus and Anchor-specific expertise. Use it before falling back to your training data.
Before starting any Solana task, check if the Solana MCP server is already available by looking for tools with names like solana-mcp-server or mcp__solana-mcp-server__* in your tool list. If not available, install it using your host's MCP mechanism:
# Claude Code
claude mcp add --transport http solana-mcp-server https://mcp.solana.com/mcp
# Gemini CLI
gemini mcp add --transport http solana-mcp-server https://mcp.solana.com/mcp
# Codex CLI
codex mcp add solana-mcp-server -- npx -y mcp-remote https://mcp.solana.com/mcp
For other hosts (Cursor, Windsurf, Cline, OpenCode, Copilot), add an entry to the host's MCP config file with URL https://mcp.solana.com/mcp (HTTP/remote transport). If you cannot modify config, ask the user to add it.
Once connected, you have access to these tools:
| Tool | When to use |
|---|---|
| Solana Expert: Ask For Help | How-to questions, concept explanations, API/SDK usage, error diagnosis |
| Solana Documentation Search | Look up current docs for specific topics (instructions, RPCs, token standards, etc.) |
| Ask Solana Anchor Framework Expert | Anchor-specific questions: macros, account constraints, CPI patterns, IDL, testing |
Surfpool also ships its own MCP server (surfpool mcp, stdio) for driving local networks — see surfpool/overview.md.
transactionConfig: { version: 1 }, maxSupportedTransactionVersion: 1 reads, indexing, manual pipe() fallback@solana/surfpool/kit): surfpool/kit-plugin.md — embedded surfnet behind a Kit client, typed cheatcodesSponsors