Skip to main content
Tool names on this page are the 30 names that @phantom/mcp-server@1.2.9 returns from tools/list.
wallet_status reports the session stored on this machine. It does not prove that Phantom still accepts that session. Call wallet_addresses when you need a server-backed check.
solana_send, evm_send, and transfer use a simulation-first flow by default. Omit confirmed on the first call to preview the action, then pass confirmed: true only after the user approves the simulation.
Monad support has been deprecated.
Sui support has been deprecated.
BNB Smart Chain (BSC, eip155:56; chain ID 56) is not supported by the released MCP/CLI transaction tools. Use a supported network for the intended operation. Balance visibility and quote availability do not prove signing or sending support.

Wallet operations

wallet_status

Reads the session stored on this machine. It does not authenticate and it does not call Phantom. connected: true means the local session has a wallet id and an organization id. Call wallet_addresses when the server must accept the session. No parameters. The first tool call that needs the wallet after the server starts loads the stored session and checks it with Phantom. If Phantom rejects it with HTTP 401 or 403, the server deletes the session and opens the device-code sign-in in the browser. That call waits for approval and then continues. wallet_status does not run this check. After that startup check, on HTTP 401, the shared CLI wrapper refreshes the session once and retries that call. If the refresh fails, it clears the local session and returns AUTH_EXPIRED. Call login, then retry the original tool yourself. That wrapper only runs when the original HTTP error reaches it. In @phantom/cli@3.0.0, wallet_addresses catches the client error and throws a new error that keeps only the message, so the wrapper never sees status 401. A rejected session on that call fails as Failed to get wallet addresses: ..., with no refresh and no AUTH_EXPIRED. Call login and retry. The sign, send, and transfer handlers in that release replace errors the same way. This is a defect in the published package, not a difference in which tools exist. A transaction submission failure is separate from an expired session. HTTP 403 responses with type submission-failed, and errors with code -32009, stay submission errors. A rejected submission is not a reason to rotate the session.

wallet_addresses

Gets all blockchain addresses for the authenticated embedded wallet (Solana, Ethereum, Bitcoin, Sui). Sui address output has been deprecated. Example response:

wallet_balances

Returns token holdings for the authenticated wallet with live USD pricing via the Phantom portfolio API.

solana_send

Simulates, signs, and broadcasts a Solana transaction. Example request:

evm_send

Simulates, signs, and broadcasts an EVM transaction with automatic gas estimation. Chain reads use the SDK endpoint for the selected network. rpcUrl is not an input. Arbitrum (chainId 42161) is rejected before signing. BNB Smart Chain (chainId 56, eip155:56) is unsupported and fails before signing. See the supported networks. Example request:

solana_sign

Signs a UTF-8 message on Solana.

evm_sign

Signs a UTF-8 message using EIP-191 personal signing for EVM chains.

evm_sign-typed

Signs structured data using EIP-712 for EVM chains. Used for DeFi permits and other typed data flows.

simulate

Simulates a transaction and returns expected asset changes, security warnings, and blocking conditions without submitting on-chain. Use this to preview what a transaction will do before signing or sending. Supports Solana, EVM (Ethereum, Base, Polygon), Bitcoin, and an Arbitrum preview. Sending on Arbitrum is rejected. Monad and Sui simulation support have been deprecated. The userAccount wallet address is auto-derived from the authenticated session for Solana and EVM chains. Supply it explicitly for Sui and Bitcoin. Chain-specific params shapes:
  • Solana: { transactions: ["<base58>"] }
  • EVM: { transactions: [{ from, to, value, data, chainId, type }] }
  • Sui: { rawTransaction: "<bytes>" }
  • Bitcoin: { transaction: "<raw>", userAddresses?: ["bc1q..."] }
  • EVM message: { message: "0x..." }

Response shape

The result is a discriminated union on type ("transaction" or "message") with a strongly typed schema. Treat any non-empty block as a blocking condition that should prevent signing or sending. Each expectedChanges[] entry is one of:
  • type: "AssetChange" - name, changeText, changeSign (PLUS | MINUS | EQUAL), asset ({ type: "fungible" | "collectible" | "native" | "unknown", symbol, decimals, amount, usdValue? }), changeType (approval | revokal | transfer | mint | unknown), and optional image, context, metadata.
  • type: "MessageOnly" - message, fallbackMessage, changeType, and optional image, context, metadata.
Each warning (block or warnings[]) has { message, severity, kind? }. severity is an integer where lower numbers are more severe: advancedDetails shape depends on the chain and request type:
  • EVM transaction: { chainId, advancedRows, gas, gasLimit, tokenChange?, contractAddresses }. Each contract address has a type of spender, contract, or unknown.
  • Solana transaction: { chainId, tokenChange, advancedRows, requestId, safeguard?, totalFee, feePayers }.
  • Sui transaction: { chainId, tokenChange, requestId, gas: { computationCost, storageCost, storageRebate, nonRefundableStorageFee, totalGasUsed } }.
  • Bitcoin transaction: { inputs, outputs } with amounts in satoshis.
  • EVM message: { contractAddress }.
  • Solana message: { errorSignInWithSolana }.
Example transaction response (EVM transfer):
Example blocking response (malicious approval):

evm_allowance

Returns the ERC-20 token allowance granted by an owner address to a spender address on any supported EVM chain. Use this before a swap to check whether an approval transaction is needed. When ownerAddress is omitted, the authenticated wallet address is used automatically. Allowance reads use the SDK endpoint for chainId. rpcUrl is not an input. Example response:

transfer

Transfers native tokens or SPL/ERC-20 tokens across Solana and supported EVM networks using a simulation-first flow. Chain reads use the SDK endpoint for networkId. rpcUrl is not an input. Arbitrum (eip155:42161) is rejected before signing. BNB Smart Chain (eip155:56) is unsupported and fails before signing. See the supported networks. Example (SOL transfer):

Swaps and portfolio

buy

No fees on swaps. Phantom does not charge transaction fees, platform fees, or commission on swaps executed through the MCP server. Your users keep what they swap. Fetches a swap quote from the Phantom routing engine for Solana, supported EVM networks, and cross-chain swaps. Optionally signs and sends the initiation transaction when execute: true.
Cross-chain swaps work in both directions: Solana to EVM and EVM to Solana. Cross-chain swaps can also target Hypercore/Hyperliquid when supported.
Quotes use the SDK endpoint for the selected network. rpcUrl and quoteApiUrl are not inputs. Arbitrum is rejected as a sell or buy chain. BNB Smart Chain (eip155:56) is unsupported; do not use it as a sell or buy chain. Example (Solana swap: sell SOL for USDC):
Example (cross-chain swap: sell SOL for ETH on Base):

wallet_rebalance

Analyzes portfolio allocation and rebalances via token swaps. No fees on any swaps executed during rebalancing. Portfolio rebalancing uses the same zero-fee swap routing as buy. Analyzes portfolio allocation and rebalances to target percentages via token swaps. Currently supports Solana only. Uses a two-phase flow: call with phase: "analyze" to inspect current allocations, then phase: "execute" with targetAllocations to rebalance. Pass dryRun in the execute phase to preview without executing.

Session and billing

login

Re-authenticates with Phantom. Use this to log in for the first time, switch accounts, or refresh an expired session.

logout

Clears the stored session and credentials from disk. It does not call Phantom. The next tool call needs a new login. No parameters.

price

Returns the portfolio price for one token.

pay

Pays for daily API access when another tool returns API_PAYMENT_REQUIRED. Pass the preparedTx value from that error response, then retry the original tool call.

Perpetuals

Looking for a Hyperliquid-focused walkthrough instead of the full tool catalog? See the dedicated perps tools guide.

Read-only

All five accept an optional walletId. All except perps_markets also accept an optional derivationIndex (default: 0).

perps_deposit

Bridges tokens from an external chain (Solana, Base, Ethereum, Polygon) into Hyperliquid as USDC via cross-chain swap. Uses a quote-first flow by default. Arbitrum is rejected as a source chain. BNB Smart Chain (eip155:56) is unsupported; do not use it as a source chain. Example (deposit SOL into Hyperliquid as USDC):

perps_open

Opens a market or limit long/short perpetual position. Example (market long):

perps_close

Closes a perpetual position fully or partially.

perps_cancel

Cancels an open perpetual order by ID.

perps_leverage

Updates leverage and margin mode for a market.

perps_transfer

Moves USDC from Hypercore spot into the perps margin account.

perps_withdraw

Bridges USDC from the Hyperliquid perpetuals account to an external chain (Solana, Base, Ethereum, Arbitrum, Polygon) via the Relay bridge. Example:
perps_deposit and perps_withdraw-hl-spot return a quote until you pass execute: true. The other perp write tools submit the signed action on the call. Use perps_markets, perps_account, and perps_positions first to verify the intended trade.

Funding flow

Moving funds in and out of perps is a two-step process: Deposit chain (external → perps):
  1. perps_deposit — bridges tokens from Solana, Base, Ethereum, or Polygon into Hyperliquid as USDC. Arbitrum is rejected as a source chain. BNB Smart Chain (eip155:56) is unsupported; do not use it as a source chain.
  2. perps_transfer — moves USDC from Hyperliquid spot into the perps margin account.
Withdraw chain (perps → external):
  1. perps_withdraw — bridges USDC from perps directly to the destination chain in one step.

perps_withdraw-hl-spot

Bridges USDC from the Hyperliquid spot account to an external chain. Funds must already be in spot. Arbitrum is a valid destination here. The CLI command is phantom perps withdraw-hl-spot. Arbitrum remains a valid bridge destination for this withdrawal and for perps_withdraw.

Supported networks

Network identifiers follow the CAIP-2/CAIP-10 format.

Solana

Ethereum and EVM networks

Arbitrum One (eip155:42161) and Arbitrum Sepolia (eip155:421614) stay in the CLI for Hyperliquid EIP-712 signing, portfolio balance reads, and withdraw bridge destinations. transfer, evm_send, buy, and perps_deposit reject them. BNB Smart Chain (BSC, eip155:56; chain ID 56) is not supported by the released MCP/CLI transaction tools. The same EVM address can receive assets on BSC without the MCP being able to move them. Balance visibility and quote availability do not establish signing or sending support.

Bitcoin

Sui (deprecated)