Skip to content

docs(wallet-mcp): document Solana reads, send, and swap - #18

Open
bruno-barbieri-cb wants to merge 4 commits into
coinbase:mainfrom
bruno-barbieri-cb:docs/wallet-mcp-solana
Open

bruno-barbieri-cb wants to merge 4 commits into
coinbase:mainfrom
bruno-barbieri-cb:docs/wallet-mcp-solana

Conversation

@bruno-barbieri-cb

@bruno-barbieri-cb bruno-barbieri-cb commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Description

Document Solana in the wallet-mcp skill, matching Wallet MCP's per-tool chain gates (account-mcp internal/mcp/tool_chains.go, solana_tx.go):

  • get_portfolio, get_transaction_history, search_tokens, chain_rpc_request (read-only methods), fund (Solana Pay), send and swap accept chain: solana.
  • Solana send / swap: approval mode on mainnet, from the session's Solana address. Assets are SOL, USDC, or a base58 SPL mint (with decimals). Recipients must be base58 addresses, since names aren't resolved on Solana. The user's Base Account prepares the transaction when they open the link, so the quote and fees show there, not in the tool response.
  • get_request_status returns signed for Solana (a declined request stays pending until it expires). Agents match the transaction in get_transaction_history on chain: solana by type, asset, amount, recipient and time, treat solanaState as wallet-wide, and never re-initiate while the outcome is unknown.
  • references/approval-mode.md: in CLI harnesses agents auto-open only the Wallet MCP approvalUrl (one quoted argument), then poll get_request_status on a backoff (5s, then 15s) without waiting for the user. It names the real statuses (pending, signed, completed, failed; 10-minute expiry), keeps polling EVM signed, and reports a signature for sign. tone.md and the plugins that said to poll only after the user acts now match.
  • Not on Solana yet: sign, send_calls, and x402. Headless sessions get Solana reads for their agent wallet, not send/swap. fund/send/swap on Solana are gated by server switches, and SOL/USDC need no decimals.
  • Docs PR: https://coinbase.ghe.com/c3/cdp-docs/pull/738
  • Only sessions approved from a Base auth keys.coinbase.com session carry baseAccount.solana. Reconnect once, then stop asking.
  • solana stays out of the plugin-spec chain targets, because plugins route transactions through send_calls.

The disclaimer and existing style are unchanged.

Solana send and swap are live in prod and verified end to end on 11/4 (see Validation).

Change type

  • Harness integration or metadata
  • Skill workflow
  • Bug fix
  • Documentation
  • Breaking change (describe migration)

Validation

  • python3 -m unittest discover -s tests: 38 tests pass.

  • python3 scripts/build-distributions.py <dir>: builds cleanly. wallet-mcp is still source-only and not in any distribution.

  • Wording checked against account-mcp master tool descriptions and handlers, read-only.

  • Prod smoke test on 11/4 against wallet-mcp.coinbase.com, following the updated approval flow (link auto-opened, status and history polled without user prompting): 0.001 SOL send (5B4Rwq4F…) and 0.005 SOL → USDC swap (2B3GjufF…), both confirmed.

  • Not run: native harness loading.

  • Generated portable manifest and MCP config validate against the vendored Agent Plugins schemas

  • Package paths and skill references remain inside each generated plugin root

  • Marketplace, skills, MCP, and icon paths are valid

  • Exactly one canonical skill library; generated copies are not committed

  • Claude compatibility metadata/endpoint and marketplace sources agree with the portable package

  • Tool schemas, authorization, and retry behavior reviewed

  • README and changelog updated; versions consistent

  • No unapproved disclosures or sensitive data

  • Signed commits

Release considerations

The skill isn't published in any distribution yet.

bruno-barbieri-cb and others added 2 commits November 4, 2026 13:47
Add Solana to the wallet-mcp skill to match Wallet MCP's per-tool chain
gates: get_portfolio, get_transaction_history, search_tokens,
chain_rpc_request, fund (Solana Pay), send and swap accept chain=solana.
Send and swap take SOL, USDC or a base58 SPL mint, need a base58
recipient (no name resolution on Solana), and are approved in the user's
Base Account, which prepares the transaction and shows the quote and fees.
get_request_status returns signed with solanaState, so agents confirm the
outcome with get_transaction_history on chain solana. sign, send_calls,
x402 and headless sessions don't support Solana yet. Note that only
sessions approved from a Base auth keys.coinbase.com session carry
baseAccount.solana. Keep solana out of the plugin-spec chain targets since
plugins route transactions through send_calls.

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
…ules

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
@cb-heimdall

Copy link
Copy Markdown

🟡 Heimdall Review Status

Requirement Status More Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot 0
1 if user is external 0
2 if repo is sensitive 0
From .codeflow.yml 1
Additional review requirements
Show calculation
Max 0
0
From CODEOWNERS 0
Global minimum 0
Max 1
1
1 if commit is unverified 0
1 if authored by an app that is not allowlisted and lacks verified human attribution 0
Sum 1

@bruno-barbieri-cb
bruno-barbieri-cb marked this pull request as ready for review November 4, 2026 22:03
Agents waited for the user to say "done" before checking status, and
treated opening the link as optional. Approval mode now says to open the
link right away in CLI harnesses and poll get_request_status about every
5s until a final status or expiry. For Solana, poll get_transaction_history
until the transaction shows up, then report its status and hash.

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
@bruno-barbieri-cb
bruno-barbieri-cb marked this pull request as draft November 4, 2026 22:04
Review findings checked against account-mcp master:
- Name the real get_request_status statuses (pending, signed, completed,
  failed). EVM signed with a txHash keeps polling; sign completes with a
  signature, not a hash. Approval links expire after 10 minutes.
- Poll on a backoff (5s for a minute, then 15s) instead of a fixed 5s.
- Solana: alternate status and history, match the history entry by type,
  asset, amount, recipient and time, treat solanaState as wallet-wide and
  possibly missing, give a stop rule, and check history on failed/unknown.
- Auto-open only the Wallet MCP approvalUrl, passed as one quoted argument.
- tone.md and plugins no longer say to wait for the user before polling.
- Headless sessions get Solana reads; agent wallets have their own Solana
  address; SOL/USDC need no decimals; Solana fund/send/swap are gated.

Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
@bruno-barbieri-cb
bruno-barbieri-cb marked this pull request as ready for review November 4, 2026 22:20

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants