Skip to main content
Before using any tool, call get_connection_status or get_wallet_addresses to confirm the wallet is authenticated.
send_solana_transaction, send_evm_transaction, and transfer_tokens 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.

Wallet operations

get_connection_status

Lightweight check of the local wallet connection status. Use this before any operation to confirm authentication without fetching full wallet details. No parameters.

get_wallet_addresses

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

get_token_balances

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

send_solana_transaction

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

send_evm_transaction

Simulates, signs, and broadcasts an EVM transaction with automatic gas estimation. Example request:

sign_solana_message

Signs a UTF-8 message on Solana.

sign_evm_personal_message

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

sign_evm_typed_data

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

simulate_transaction

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, Arbitrum, Monad), Sui, and Bitcoin. 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):

get_token_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. Example response:

transfer_tokens

Transfers native tokens or SPL/ERC-20 tokens across Solana and EVM chains using a simulation-first flow. Example (SOL transfer):

Swaps and portfolio

buy_token

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, EVM, 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.
Example (Solana swap: sell SOL for USDC):
Example (cross-chain swap: sell SOL for ETH on Base):

portfolio_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_token. 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. Use dryRun: true to preview without executing.

Session and billing

phantom_login

Re-authenticates with Phantom. Use this to log in for the first time, switch accounts, or refresh an expired session. Opens the Phantom Connect browser flow. No parameters.

pay_api_access

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

deposit_to_hyperliquid

Bridges tokens from an external chain (Solana, Arbitrum, Base, Ethereum, Polygon) into Hyperliquid as USDC via cross-chain swap. Uses a quote-first flow by default. Example (deposit SOL into Hyperliquid as USDC):

open_perp_position

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

close_perp_position

Closes a perpetual position fully or partially.

cancel_perp_order

Cancels an open perpetual order by ID.

update_perp_leverage

Updates leverage and margin mode for a market.

transfer_spot_to_perps

Moves USDC from Hypercore spot into the perps margin account.

withdraw_from_perps

Bridges USDC from the Hyperliquid perpetuals account to an external chain (Solana, Base, Ethereum, Arbitrum, Polygon) via the Relay bridge. Example:
All perp write tools submit signed actions immediately (except deposit_to_hyperliquid which uses a quote-first flow). Use get_perp_markets, get_perp_account, and get_perp_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. deposit_to_hyperliquid — bridges tokens from Solana, Arbitrum, Base, Ethereum, or Polygon into Hyperliquid spot as USDC.
  2. transfer_spot_to_perps — moves USDC from Hyperliquid spot into the perps margin account.
Withdraw chain (perps → external):
  1. withdraw_from_perps — bridges USDC from perps directly to the destination chain in one step.
To withdraw USDC from Hyperliquid spot (not perps), use phantom perps withdraw-hl-spot in the CLI. This command replaces the withdraw_from_hyperliquid_spot MCP tool from earlier releases, which has been removed.

Supported networks

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

Solana

Ethereum and EVM networks

Bitcoin

Sui