Unclaimed Sol

io.github.nedim1511由 GitHub 帳號 nedim1511 發布v2.0.0更新於 Nov 6, 2026

The first Vibe Claiming MCP: AI agents scan and reclaim dormant SOL on Solana. Signs locally.

已驗證STDIO僅桌面金融開發者工具

概覽

AI 產生的概覽

針對 Solana 錢包的 MCP 伺服器,讓助理掃描可回收的 SOL,並在設定本機金鑰對後以先試跑再執行的方式領取。

可以做什麼
  • 掃描錢包中鎖在閒置代幣帳戶、Token-2022 帳戶與程式緩衝區裡的 SOL,唯讀且不需金鑰對
  • 關閉空代幣帳戶與程式緩衝區以回收租金,執行前先試跑,預覽帳戶、預估回收金額、費用與交易筆數
  • 領取尚未收取的 DeFi 獎勵,僅支援 Pump/PumpSwap,同樣採試跑加執行權杖的流程
  • 從已停用的質押帳戶領取 SOL,可指定特定質押帳戶位址
適用情境
適合想讓助理檢查某個 Solana 錢包是否有被租金鎖住的可回收 SOL,並在同一段對話中完成清理、獎勵或質押領取的情況。只想先看唯讀估算的人可以使用僅掃描模式。
執行需求
以 npx 啟動的本機程序,需要 Node.js 20 以上與 npm。領取功能需要金鑰對,透過 SOLANA_KEYPAIR_PATH(建議)或 SOLANA_PRIVATE_KEY 提供。選用:SOLANA_RPC_URL(預設為公用 mainnet-beta 節點)、UNCLAIMED_SOL_API_URL、UNCLAIMED_SOL_API_KEY、SOLANA_PRIORITY_FEE。領取時建議使用專用 RPC。
安裝前請注意
領取類工具會用錢包簽署並廣播真實的 Solana 交易,金鑰對或私鑰會交給本機程序。會收取服務費:代幣清理每個關閉帳戶最多保留 0.002 SOL,緩衝區 5%,Pump/PumpSwap 獎勵 3% 且上限為 1 SOL 或 100 USDC,質押 3%。領取項目由第三方後端提供,預覽僅為估算,執行前帳戶狀態可能改變。試跑權杖 60 秒後失效,失敗後需重新試跑。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Unclaimed Sol,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Unclaimed SOL MCP

The first Vibe Claiming MCP server — let your AI agent scan and reclaim dormant SOL on Solana.

[npm version] [npm downloads] [Node >=20] [License: MIT] [CI]

Unclaimed SOL MCP — the first Vibe Claiming MCP server. Reclaim categories: dormant token accounts (incl. Token-2022), program buffers, deactivated stakes, DeFi rewards. Read-only scanning with zero config; claiming with dry-run previews, 60-second single-use execution tokens, and local signing. Your keypair never leaves your machine. No seed phrases, ever.

MCP server for UnclaimedSOL — works with AI agents and assistants (Claude, Cursor, Windsurf, Codex CLI, and any Model Context Protocol client).

See also:

Why agents use this

  • Earn, don't just spend — Solana agents pay network fees, but wallets can also hold reclaimable SOL in old accounts, buffers, stakes, and rewards.
  • Safe by default — read-only scan mode works with zero config; claiming requires a dry run and a 60-second single-use execution token.
  • Local signing — no seed phrases, program allowlist validation, and fee caps before transactions are signed.
  • Agent-ready — works in Claude Desktop/Code, Cursor, Windsurf, Codex CLI, and other MCP clients.

Coverage

Coverage as of July 2026:

CapabilityTypical token-account cleanersUnclaimed SOL MCP
Dormant token accountsYesYes, including Token-2022
Program buffersRareYes
Deactivated stakesRareYes
Pump/PumpSwap rewardsRareYes
Read-only scan mode zero configSometimesYes
Keypair-file optionSometimesYes, via SOLANA_KEYPAIR_PATH

What it does

Solana wallets accumulate rent-locked SOL in dormant token accounts (including Token-2022), program buffer accounts, deactivated stakes, DeFi rewards. This MCP server lets AI agents and assistants:

  • Scan any wallet to check for reclaimable SOL in dormant token accounts and program buffers.
  • Claim (Vibe Claiming) — preview backend-selected token and buffer accounts, then sign and submit locally using a single-use execution token. Token cleanup lets users keep up to 0.002 SOL per closed account; buffers use a 5% fee.
  • Claim rewards — claim uncollected DeFi rewards (cashback, creator fees, etc.). Only Pump/PumpSwap reward execution is supported, at 3% capped at 1 SOL or 100 USDC.
  • Claim stakes — claim SOL from deactivated stake accounts. 3% fee.

Fees

CategoryFee
ScanningFree
Token cleanupUser keeps up to 0.002 SOL per closed account
Program buffers5%
Pump/PumpSwap accumulator rent close5%
Pump/PumpSwap rewards3%, capped at 1 SOL / 100 USDC
Deactivated stakes3%

No funds pass through the MCP server.

Tools

scan_claimable_sol

Annotation title: Scan Wallet for Claimable SOL

Scan a wallet for SOL locked in dormant token accounts (incl. Token-2022) and program buffer accounts. Read-only — no transactions, no keypair needed. DeFi rewards and deactivated stakes are discovered through the claim_rewards and claim_stakes dry runs.

Inputs: wallet_address (base58 public key; optional in claim-enabled mode, defaults to configured keypair wallet)

claim_sol

Annotation title: Claim Dormant SOL (Vibe Claiming)

Closes empty token accounts and program buffers to reclaim rent. A dry run checks backend safe-mode candidates through the configured RPC and shows eligible accounts, estimated recovery, fees and transaction count. It returns a 60-second single-use execution_token. Call with dry_run: false and that token to sign and submit locally.

Inputs: wallet_address (defaults to configured keypair wallet), dry_run (default true), execution_token, max_transactions (default 10, maximum 25), exclude (optional symbols/names to skip during execution).

Cleanup targets are revalidated via RPC before signing. Token cleanup uses SDK 1.4.0's close-empty instruction (selector 2), which checks eligibility during execution and never burns tokens. Accounts receiving new token deposits or newly funded wrapped SOL are skipped at execution. Empty wrapped SOL is accepted only when its lamports equal its recorded native reserve; funded and unsynchronized WSOL are skipped. There is no fallback to legacy burning.

Token-2022 support follows the program's conservative extension set: token accounts may have ImmutableOwner and/or TransferFeeAmount; mints may have TransferFeeConfig. Transfer-fee extensions must match. Other extensions, including metadata extensions, are skipped before the 256-eligible-account preview limit. The execution simulation must provide a complete, attributable cleanup summary; an all-skipped transaction is not submitted. Accounts can still change after simulation, so a confirmed transaction does not guarantee every target closed. Previews are estimates, and reported wallet balance changes include network fees and concurrent activity. Buffers retain their existing close instruction and authority checks.

claim_rewards

Annotation title: Claim DeFi Rewards

Claim uncollected DeFi rewards (cashback, creator fees, and more). Requires a configured keypair. A dry run returns a 60-second single-use execution_token; dry_run: false with that token executes the claim. Only Pump/PumpSwap reward execution is supported, at 3% capped at 1 SOL or 100 USDC.

Inputs: wallet_address (optional in claim-enabled mode, defaults to configured keypair wallet), dry_run (default true), execution_token

claim_stakes

Annotation title: Claim Deactivated Stakes

Claim SOL from deactivated stake accounts. Requires a configured keypair. Uses the same two-step dry-run/execute flow. Optionally pass specific stake account addresses to claim.

Inputs: wallet_address (optional in claim-enabled mode, defaults to configured keypair wallet), dry_run (default true), execution_token, stake_accounts (optional array)

When stake_accounts is supplied for a dry run, the backend must build exactly that set or the preview fails. Leave out accounts that are still deactivating or otherwise cannot be withdrawn. Execution uses the set saved with the execution token; changing stake_accounts requires a new dry run.

Example prompts

  • "Scan my wallet for reclaimable SOL"
  • "How much SOL can I reclaim?"
  • "Do a dry run to see what I can claim"
  • "Claim my dormant token accounts"
  • "Claim rewards for my wallet"
  • "Claim my deactivated stakes"
  • "How much SOL can I reclaim from <wallet_address>?"
  • "Scan <wallet_address> for reclaimable SOL"
  • "Every morning, scan my wallet and tell me if there's more than 0.05 SOL to reclaim"
  • "Dry-run a full claim and show me the fee breakdown before executing"
  • "Claim everything except my BONK accounts"

Setup

Prerequisites

  • Node.js 20+
  • npm

Release status

Version 2.0.0 requires Node.js 20 or newer. The package commands below install the latest published release. To use a local checkout instead, run npm ci, npm run build, and point your MCP client at node dist/index.js.

Quick install (recommended)

No clone/build required if your MCP client supports package commands:

bash
npx -y @unclaimed-sol/mcp

Install and build (alternative)

bash
git clone https://github.com/unclaimed-sol/unclaimed-sol-mcp.git && cd unclaimed-sol-mcpnpm installnpm run build

Configuration

Vibe Claiming mode (recommended)

All tools are exposed (scan_claimable_sol, claim_sol, claim_rewards, claim_stakes). Transactions are signed locally with your keypair and broadcast to the Solana network.

For Claude Desktop / Cursor / Windsurf

Using npm package (recommended):

json
{  "mcpServers": {    "unclaimed-sol": {      "command": "npx",      "args": ["-y", "@unclaimed-sol/mcp"],      "env": {        "SOLANA_KEYPAIR_PATH": "~/.config/solana/id.json",        "SOLANA_RPC_URL": "https://your-rpc-provider.com"      }    }  }}

Using local build:

json
{  "mcpServers": {    "unclaimed-sol": {      "command": "node",      "args": ["/absolute/path/to/unclaimed-sol-mcp/dist/index.js"],      "env": {        "SOLANA_KEYPAIR_PATH": "~/.config/solana/id.json",        "SOLANA_RPC_URL": "https://your-rpc-provider.com"      }    }  }}

For Claude Code

Using npm package (recommended):

bash
claude mcp add unclaimed-sol \  -e SOLANA_KEYPAIR_PATH=~/.config/solana/id.json \  -e SOLANA_RPC_URL=https://your-rpc-provider.com \  -- npx -y @unclaimed-sol/mcp

Using local build:

bash
claude mcp add unclaimed-sol \  -e SOLANA_KEYPAIR_PATH=~/.config/solana/id.json \  -e SOLANA_RPC_URL=https://your-rpc-provider.com \  -- node /absolute/path/to/unclaimed-sol-mcp/dist/index.js

For Codex CLI

Using npm package (recommended):

bash
codex mcp add unclaimed-sol \  --env SOLANA_KEYPAIR_PATH=~/.config/solana/id.json \  --env SOLANA_RPC_URL=https://your-rpc-provider.com \  -- npx -y @unclaimed-sol/mcp

Using local build:

bash
codex mcp add unclaimed-sol \  --env SOLANA_KEYPAIR_PATH=~/.config/solana/id.json \  --env SOLANA_RPC_URL=https://your-rpc-provider.com \  -- node /absolute/path/to/unclaimed-sol-mcp/dist/index.js

Optional scan-only mode (no keypair)

Only the scan_claimable_sol tool is exposed. No transactions are signed or sent.

Using npm package:

json
{  "mcpServers": {    "unclaimed-sol": {      "command": "npx",      "args": ["-y", "@unclaimed-sol/mcp"]    }  }}

Using local build:

json
{  "mcpServers": {    "unclaimed-sol": {      "command": "node",      "args": ["/absolute/path/to/unclaimed-sol-mcp/dist/index.js"]    }  }}

Verify installation

  • Claude Code: claude mcp list and confirm unclaimed-sol is present.
  • Codex CLI: codex mcp list and confirm unclaimed-sol is present.
  • Smoke test: ask your assistant to run scan wallet <your_wallet> and confirm scan_claimable_sol executes.

Troubleshooting

  • If tools do not appear, restart your MCP client after config changes.
  • If using local build, ensure dist/index.js exists (npm run build) and path is absolute.
  • If claim tools are missing, confirm SOLANA_KEYPAIR_PATH (or SOLANA_PRIVATE_KEY) is set.

Environment variables

VariableRequiredDescription
UNCLAIMED_SOL_API_URLNoBackend API URL. Defaults to https://unclaimedsol.com.
UNCLAIMED_SOL_API_KEYNoAPI key sent as Authorization: Bearer header.
SOLANA_KEYPAIR_PATHNoPath to Solana keypair JSON file. Enables Vibe Claiming.
SOLANA_PRIVATE_KEYNoPrivate key as base58 string or JSON byte array. Use SOLANA_KEYPAIR_PATH instead when possible.
SOLANA_RPC_URLNoSolana RPC endpoint. Defaults to https://api.mainnet-beta.solana.com. Claim dry runs read account state, including Token-2022 mints, and simulate stake withdrawals. Token cleanup is also simulated before submission, so a dedicated RPC is strongly recommended for claiming.
SOLANA_PRIORITY_FEENoPriority fee in microlamports per compute unit. Default: 1,000. Max: 200,000.

Security

  • HTTPS enforced — Signing or configuring an API key requires HTTPS and the production API host.
  • API URL allowlist — The production host is unclaimedsol.com. UNCLAIMED_SOL_ALLOW_DEV_API=true permits custom HTTPS hosts and local HTTP for development.
  • Pre-sign validation — Every transaction is validated before signing: program allowlist, exact instruction account layouts pinned to locally-derived PDAs, fee cap enforcement, and per-transaction claim requirement. For stakes, fee caps use bigint withdrawal amounts and the configured RPC verifies account state and full-withdrawal simulation. For Pump/PumpSwap rewards, fee caps also use locally derived accounts and live RPC balances with integer arithmetic.
  • Execution tokens — Claims require a dry run first. Tokens are consumed atomically before execution network calls, are single-wallet, and expire in 60 seconds. Failed or uncertain attempts require a fresh dry run.
  • Keypair stays local — Your private key never leaves your machine. Transactions are signed locally.
  • Safety filtering — Cleanup requests backend safe-mode candidates (maxClaimMode: false), independently checks their state and authority via RPC, and revalidates the previewed targets before signing. Ineligible targets are skipped and counted; RPC failures abort the request.
  • Request bounds — Scans time out after 15 seconds; builds after 30 seconds. Responses are limited to 1 MiB, and batches to 25 transactions of at most 1,232 serialized bytes. Cleanup previews validate candidates in order and stop at 256 eligible accounts per dry run. The scan cache retains at most 256 entries.

How claiming works

Program ID: UNCaXzXkR3vp8mbCJyxWUvwuRk5uHgzrwe6jcWPfiUR (from the pinned SDK).

Token/buffer claims (claim_sol)

  1. The MCP server calls the UnclaimedSOL backend to fetch reclaimable token and buffer accounts.
  2. Token instructions use buildCloseEmptyTokenAccountsInstruction from pinned @unclaimedsol/spl-burn-close-sdk 1.4.0. Buffer instructions are built locally using their existing selector 1.
  3. Execution atomically consumes the token before network calls, revalidates targets and instructions, simulates token cleanup, and signs each transaction immediately before its first send. A rejected or unverified simulation is not submitted; there is no legacy retry.
  4. The current program source charges the greater of 2% of recovered token-account lamports or the amount above 0.002 SOL, plus 5% for buffers. Verify the deployed binary before changing fee policy. No funds pass through the MCP server.

Rewards claims (claim_rewards)

  1. The backend builds unsigned transactions containing DeFi reward claim instructions and a fee transfer.
  2. The MCP validates instruction layouts, discriminators, and locally-derived PDAs. Builds explicitly request Pump/PumpSwap only. The configured RPC independently supplies source balances and rent reserves for native SOL and USDC fee caps. Backend totals are additional cross-checks.
  3. Transactions are signed locally and broadcast.

Stake claims (claim_stakes)

  1. The backend builds unsigned transactions containing Stake Withdraw instructions and a fee transfer.
  2. The MCP validates every instruction: withdraw-only, exact account counts, and fee capped at 3% of proven withdraw amounts extracted from instruction data.
  3. Transactions are signed locally and broadcast.

Validator trust model

The pre-sign validator (validateTransactionPrograms) provides different levels of protection depending on the claim type:

  • claim_sol — Discovery and estimates use the backend safe-mode response. RPC checks require empty token accounts with the expected mint, program, wallet owner, close authority, native reserve and supported Token-2022 extensions, or loader-owned buffers with wallet authority. All previewed targets are revalidated before signing. Transactions are built locally; pre-sign validation rejects legacy token cleanup selector 0 and direct token burns. Selector 2 enforces token eligibility during execution. Buffers continue to use selector 1.
  • claim_stakes — Withdraw amounts are checked against live account balances, wallet withdrawal authority, lockup, sysvars, and full-withdrawal simulation during preview and execution. Fee arithmetic uses bigint.
  • claim_rewards — Pump/PumpSwap only. Discriminators and account addresses are checked against locally derived PDAs/ATAs. Native SOL and USDC service fees are capped using live source balances, rent reserves and integer arithmetic at preview and execution.

RPC reads and simulations are snapshots. Selector 2 prevents burning newly deposited tokens and closing funded WSOL, but does not guarantee exact proceeds, account counts or buffer-content approvals. Reward balances may change before execution; a fee bounded by the last observed reward is not a guarantee of realized proceeds. See SECURITY.md for the trust assumptions.

The configured cluster must have selector 2 deployed. Mainnet program bytes were verified on 2026-10-30 against Rust commit 1f2b10a and SBF SHA-256 40c9eb68c0a6e835d8789e87da2aa5f67b9cb18498814078b75e2129b44054aa. The deployment verification record and remaining release check preserve the evidence. This is a dated deployment check, not runtime attestation of future upgrades.

Local cleanup integration test

After npm ci, run npm run test:cleanup-runtime -- /path/to/unclaimed-sol-rust-program. This requires solana-test-validator and the reviewed Rust SBF artifact. It uses an isolated local ledger and generated test keys, exercises MCP preview/build/sign/send against both token programs, and checks late deposits, exact fees and all-skipped submissions. No production wallet or funds are used. Unit tests run with npm test.

Project structure

src/  index.ts              MCP server entry point (stdio transport)  constants.ts          Program IDs, fee vault, fee caps, batching limits  config.ts             Environment variable loading and validation  validation.ts         Wallet address validation  formatter.ts          SOL display formatting  cache.ts              In-memory scan cache (60s TTL)  execution-token-store.ts  Generic two-step dry-run/execute token management  tools/    scan.ts             scan_claimable_sol tool handler    claim.ts            claim_sol tool handler (tokens + buffers)    claim-rewards.ts    claim_rewards tool handler (DeFi rewards)    claim-stakes.ts     claim_stakes tool handler (deactivated stakes)  services/    scanner.ts          Backend API client (scan, tokens, buffers, rewards, stakes)    transaction.ts      Transaction building + pre-sign validation    cleanup-validation.ts  RPC eligibility and bounded candidate selection    cleanup-extensions.ts  Supported Token-2022 extension filter    cleanup-simulation.ts  Attributed close-empty simulation summaries    signer.ts           Simulate cleanup, sign, send once, and confirm

License

MIT

來源:README.md,提交 4cf586b

工具

1

scan_claimable_sol

Scan Wallet for Claimable SOL

Scan a Solana wallet for SOL locked in dormant token accounts (incl. Token-2022) and program buffer accounts. Read-only — no transactions, no keypair needed. DeFi rewards and deactivated stakes are discovered via the claim_rewards and claim_stakes dry runs. To claim, enable Vibe Claiming (SOLANA_KEYPAIR_PATH) or visit unclaimedsol.com.

輸入參數wallet_address必填

版本歷史

2
  1. v2.0.0最新Oct 30, 2026
  2. v1.3.1Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分