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.
Monad support will be deprecated on August 26, 2026. Do not start new Monad tool integrations with Phantom.

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), Sui, and Bitcoin. Monad simulation support will be deprecated on August 26, 2026. 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