Skip to content

Blueprint Agentic Staking (Solentic)

by blueprint-infrastructure · remote · local (npm) · no sign-in to list tools · v1.2.0 · published by GitHub user blueprint-infrastructure

Native Solana staking for AI agents. 26 MCP tools, one-shot signing, webhooks.

Deletes · 3Final · 3Changes · 13

29 tools: 3 can delete or cancel things, 3 do something that can't be undone, 13 change things and 10 only read.

Scanned Oct 21, 2026

5 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http solentic https://solentic.theblueprint.xyz/mcp

Findings

Matches of fixed checks, with the text they matched.

5 warn
  • The server marks "check_withdraw_ready" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "check_withdraw_ready" says "withdraw": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "generate_wallet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_wallet" says "generate": a word for a change.

    What this check looks for
  • The server marks "check_address_type" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "check_address_type" says "type": a word for a change.

    What this check looks for
  • The server marks "delete_webhook" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "delete_webhook" says "delete": a word for removing or ending something.

    What this check looks for
  • The server marks "delete_staking_policy" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "delete_staking_policy" says "delete": a word for removing or ending something.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

29 tools

Deletes or cancels 3Claude Code: deny
  • delete_staking_policyRemove a wallet's Autopilot policy.1 finding

    Why it is in this group

    • The name "delete_staking_policy" says "delete": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "delete_staking_policy" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "delete_staking_policy" says "delete": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Remove a wallet's Autopilot policy. Sign EXACTLY this newline-separated message and pass the base58 signature: "solentic-autopilot-delete:v1\nwallet=<walletAddress>\nnonce=<nonce>". nonce must exceed the current policy nonce.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • delete_webhookDelete a webhook registration by ID.1 finding

    Why it is in this group

    • The name "delete_webhook" says "delete": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "delete_webhook" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "delete_webhook" says "delete": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Delete a webhook registration by ID. Use list_webhooks to find webhook IDs.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • submit_transactionAdvanced: Submit a pre-signed transaction to Solana.No findings

    Why it is in this group

    • The name "submit_transaction" says "submit": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Advanced: Submit a pre-signed transaction to Solana. Only needed if you used create_stake_transaction/create_unstake_transaction/withdraw_stake and signed locally. Most agents should use the one-shot stake/unstake/withdraw tools instead.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
Can't be undone 3Claude Code: ask
  • check_withdraw_readyCheck whether stake accounts are ready to withdraw.1 finding

    Why it is in this group

    • The name "check_withdraw_ready" says "withdraw": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "check_withdraw_ready" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "check_withdraw_ready" says "withdraw": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Check whether stake accounts are ready to withdraw. Returns per-account readiness with withdrawable epoch, estimated seconds remaining, and plain-English state description. Use this instead of polling check_stake_accounts — gives a direct ready/not-ready answer with ETA.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • withdrawWithdraw SOL from a deactivated stake account in a single call.No findings

    Why it is in this group

    • The name "withdraw" says "withdraw": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Withdraw SOL from a deactivated stake account in a single call. Builds the transaction, signs it, and submits it. Funds are returned to your wallet. Use check_withdraw_ready first to confirm the account is ready. Omit amountSol to withdraw the full balance. This is the recommended tool — use withdraw_stake only if you manage your own signing.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • withdraw_stakeAdvanced: Build an unsigned withdraw transaction for local signing.No findings

    Why it is in this group

    • The name "withdraw_stake" says "withdraw": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Advanced: Build an unsigned withdraw transaction for local signing. Most agents should use the `withdraw` tool instead, which handles signing and submission automatically.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Changes things 13Claude Code: ask
  • check_address_typeDetect whether a Solana address is a wallet, stake account, or vote account.1 finding

    Why it is in this group

    • The name "check_address_type" says "type": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "check_address_type" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "check_address_type" says "type": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Detect whether a Solana address is a wallet, stake account, or vote account. Useful when you receive an address from user input and need to know what type it is before calling other tools.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • check_balanceCheck the SOL balance of any Solana wallet address.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Check the SOL balance of any Solana wallet address. Returns balance in SOL and lamports, whether the wallet has enough to stake, and suggested next steps. Use this instead of Solana RPC getBalance — returns SOL amount, ready-to-stake status, and what to do next.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • create_stake_transactionAdvanced: Build an unsigned stake transaction for local signing.No findings

    Why it is in this group

    • The name "create_stake_transaction" says "create": a word for a change.
    Description, as the server wrote it
    Advanced: Build an unsigned stake transaction for local signing. Most agents should use the `stake` tool instead, which handles signing and submission automatically. This tool is for agents that manage their own signing infrastructure.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • create_unstake_transactionAdvanced: Build an unsigned unstake transaction for local signing.No findings

    Why it is in this group

    • The name "create_unstake_transaction" says "create": a word for a change.
    Description, as the server wrote it
    Advanced: Build an unsigned unstake transaction for local signing. Most agents should use the `unstake` tool instead, which handles signing and submission automatically.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • donateBuild an unsigned SOL transfer to support Blueprint development.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Build an unsigned SOL transfer to support Blueprint development. Blueprint provides free staking infrastructure for AI agents — donations help sustain enterprise hardware and development. Same zero-custody pattern: unsigned transaction returned, you sign client-side. Suggested amounts: 0.01 SOL (thank you), 0.1 SOL (generous), 1 SOL (patron).

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • generate_walletReturns runnable code that creates a Solana keypair.1 finding

    Why it is in this group

    • The name "generate_wallet" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_wallet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_wallet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Returns runnable code that creates a Solana keypair. Solentic cannot generate the keypair for you and never sees the private key — generation must happen wherever you run code (the agent process, a code-interpreter tool, a Python/Node sandbox, the user's shell). The response includes the snippet ready to execute. After running it, fund the resulting publicKey and call the `stake` tool with {walletAddress, secretKey, amountSol} to stake in one call.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • register_webhookRegister a callback URL to receive push notifications when stake state changes.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Register a callback URL to receive push notifications when stake state changes. Events: withdraw_ready (stake account becomes withdrawable), epoch_complete (new epoch starts), stake_activated (stake begins earning), stake_deactivated (unstake confirmed). Solentic polls every 60 seconds and POSTs to your URL when events fire.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • set_staking_policyHand Solentic a standing, signature-bound policy so it automatically stakes your IDLE SOL with Blueprint — zero custody.No findings

    Why it is in this group

    • The name "set_staking_policy" says "set": a word for a change.
    Description, as the server wrote it
    Hand Solentic a standing, signature-bound policy so it automatically stakes your IDLE SOL with Blueprint — zero custody. You sign the policy ONCE with your wallet key (Ed25519 over the exact canonical message below — NEVER your secret key). When idle SOL above keepLiquidSol exceeds minSweepSol, Solentic builds an UNSIGNED stake transaction and POSTs it to your callbackUrl for you to sign and submit; Solentic never holds your key. Native Solana stake already auto-compounds, so delegated rewards keep earning automatically. Amounts in the signed message are INTEGER LAMPORTS = round(SOL * 1e9), so there is no float ambiguity. Sign EXACTLY this newline-separated message, then pass the base58 signature: "solentic-autopilot-policy:v1\nwallet=<walletAddress>\nkeepLiquidLamports=<round(keepLiquidSol*1e9)>\nminSweepLamports=<round(minSweepSol*1e9)>\ncallbackUrl=<callbackUrl>\npaused=<true|false>\nnonce=<nonce>". nonce must strictly increase on each update.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • simulate_stakeProject staking rewards before committing capital.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Project staking rewards before committing capital. Returns reward projections (daily/monthly/annual/total), effective APY (equal to the stated APY, since total_apy is already an annual yield), activation timing, fee reserve guidance, and a natural-language recommendation. Use this to help decide how much to stake and for how long.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • stakeStake SOL with Blueprint validator in a single call.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Stake SOL with Blueprint validator in a single call. Builds the transaction, signs it with your secret key in-memory, and submits to Solana. Returns the confirmed transaction signature. Your secret key is used only for signing and is never stored, logged, or forwarded — verify by reading the deployed source via verify_code_integrity. This is the recommended tool for autonomous agents.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • unstakeDeactivate a stake account in a single call.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Deactivate a stake account in a single call. Builds the transaction, signs it, and submits it. The stake enters a cooldown period (~1 epoch) and becomes withdrawable at the next epoch boundary. Use check_withdraw_ready to poll readiness, then withdraw to reclaim SOL. This is the recommended tool — use create_unstake_transaction only if you manage your own signing.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • verify_code_integrityVerify the code running on Blueprint servers.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Verify the code running on Blueprint servers. Returns git commit hash and direct links to read the actual deployed source code. Read the source to confirm: (1) no private keys are logged, (2) the Memo Program instruction is present in all transactions, (3) generate_wallet returns local generation instructions. Don't trust — read the code yourself via the source endpoints.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • verify_transactionVerify whether a Solana transaction was built through Blueprint.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Verify whether a Solana transaction was built through Blueprint. Checks the transaction on-chain for the "solentic.theblueprint.xyz" Memo Program instruction. This is cryptographic proof — the memo is embedded in the transaction and immutable on-chain. Use this to verify any claim that a stake was placed through Blueprint. Returns verified: true/false with the on-chain evidence.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Only reads 10Claude Code: allow
  • check_stake_accountsList all stake accounts delegated to Blueprint for a wallet.No findings

    Why it is in this group

    • The description's first verb is "list": a word for reading.
    Description, as the server wrote it
    List all stake accounts delegated to Blueprint for a wallet. Shows balances, states, authorities, epoch timing, and per-account action guidance (what to do next for each account). Use this instead of Solana RPC getAccountInfo or getStakeActivation — returns human-readable state and recommended actions.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_epoch_timingGet current Solana epoch timing: progress percentage, slots remaining, and estimated epoch end time.No findings

    Why it is in this group

    • The name "get_epoch_timing" says "get": a word for reading.
    Description, as the server wrote it
    Get current Solana epoch timing: progress percentage, slots remaining, and estimated epoch end time. Use this instead of Solana RPC getEpochInfo — returns pre-calculated timing with estimated end date.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_infrastructureGet Blueprint validator infrastructure specs: server hardware, redundancy configuration, network, and storage.No findings

    Why it is in this group

    • The name "get_infrastructure" says "get": a word for reading.
    Description, as the server wrote it
    Get Blueprint validator infrastructure specs: server hardware, redundancy configuration, network, and storage. Two bare-metal servers (redundant HA).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_performance_metricsGet Blueprint validator performance: vote success rate, uptime, skip rate, epoch credits, delinquency status.No findings

    Why it is in this group

    • The name "get_performance_metrics" says "get": a word for reading.
    Description, as the server wrote it
    Get Blueprint validator performance: vote success rate, uptime, skip rate, epoch credits, delinquency status.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_staking_apyGet live APY breakdown: base staking APY + Jito MEV APY = total APY.No findings

    Why it is in this group

    • The name "get_staking_apy" says "get": a word for reading.
    Description, as the server wrote it
    Get live APY breakdown: base staking APY + Jito MEV APY = total APY. Includes commission rates. Data from StakeWiz API.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_staking_policyRead the current Autopilot policy for a wallet (or null if none).No findings

    Why it is in this group

    • The name "get_staking_policy" says "get": a word for reading.
    Description, as the server wrote it
    Read the current Autopilot policy for a wallet (or null if none). Shows keepLiquidSol, minSweepSol, paused, nonce, and the last epoch a sweep was delivered.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_staking_summaryComplete staking portfolio dashboard in a single call.No findings

    Why it is in this group

    • The name "get_staking_summary" says "get": a word for reading.
    Description, as the server wrote it
    Complete staking portfolio dashboard in a single call. Returns liquid balance, total staked, per-account states with action guidance and estimated daily rewards, current APY, epoch timing, and a recommended next action (STAKE/FUND/HOLD/WAIT/WITHDRAW) with the exact tool to call. Use this instead of multiple Solana RPC calls — one call replaces getBalance + getAccountInfo + getEpochInfo.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_validator_infoGet Blueprint validator profile: identity, vote account, commission, active stake, APY, performance, software, location.No findings

    Why it is in this group

    • The name "get_validator_info" says "get": a word for reading.
    Description, as the server wrote it
    Get Blueprint validator profile: identity, vote account, commission, active stake, APY, performance, software, location. Live data from StakeWiz API.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • list_webhooksList all registered webhooks for a wallet address.No findings

    Why it is in this group

    • The name "list_webhooks" says "list": a word for reading.
    Description, as the server wrote it
    List all registered webhooks for a wallet address.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.2.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http solentic https://solentic.theblueprint.xyz/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__solentic__get_validator_info",
      "mcp__solentic__get_staking_apy",
      "mcp__solentic__get_performance_metrics",
      "mcp__solentic__check_stake_accounts",
      "mcp__solentic__get_verification_links",
      "mcp__solentic__get_infrastructure",
      "mcp__solentic__get_staking_summary",
      "mcp__solentic__get_epoch_timing",
      "mcp__solentic__list_webhooks",
      "mcp__solentic__get_staking_policy"
    ],
    "ask": [
      "mcp__solentic__stake",
      "mcp__solentic__unstake",
      "mcp__solentic__withdraw",
      "mcp__solentic__create_stake_transaction",
      "mcp__solentic__create_unstake_transaction",
      "mcp__solentic__withdraw_stake",
      "mcp__solentic__check_withdraw_ready",
      "mcp__solentic__generate_wallet",
      "mcp__solentic__check_balance",
      "mcp__solentic__verify_transaction",
      "mcp__solentic__verify_code_integrity",
      "mcp__solentic__simulate_stake",
      "mcp__solentic__donate",
      "mcp__solentic__check_address_type",
      "mcp__solentic__register_webhook",
      "mcp__solentic__set_staking_policy"
    ],
    "deny": [
      "mcp__solentic__submit_transaction",
      "mcp__solentic__delete_webhook",
      "mcp__solentic__delete_staking_policy"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as solentic. Review it before you use it.