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).
ParameterTypeRequiredDescription
derivationIndexnumberNoDerivation index for the addresses (default: 0)
Example response:
{
  "walletId": "05307b6d-2d5a-43d6-8d11-08db650a169b",
  "addresses": [
    { "addressType": "Solana", "address": "H8FpYTgx4Uy9aF9Nk9fCTqKKFLYQ9KfC6UJhMkMDzCBh" },
    { "addressType": "Ethereum", "address": "0x8d8b06e017944f5951418b1182d119a376efb39d" },
    { "addressType": "BitcoinSegwit", "address": "bc1qkce5fvaxe759yu5xle5axlh8c7durjsx2wfhr9" },
    { "addressType": "Sui", "address": "0x039039cf69a336cb84e4c1dbcb3fa0c3f133d11b8146c6f7ed0d9f6817529a62" }
  ]
}

get_token_balances

Returns token holdings for the authenticated wallet with live USD pricing via the Phantom portfolio API.
ParameterTypeRequiredDescription
networksstring[]NoFilter by network names (e.g., ["solana", "ethereum", "base", "polygon", "arbitrum", "bitcoin", "sui", "monad"]). Omit to return balances across all supported networks.
derivationIndexnumberNoDerivation index for the account (default: 0)

send_solana_transaction

Simulates, signs, and broadcasts a Solana transaction.
ParameterTypeRequiredDescription
transactionstringYesBase64-encoded transaction (standard base64 with A-Za-z0-9+/=)
networkIdstringNoSolana network identifier (e.g., solana:mainnet). Defaults to solana:mainnet.
derivationIndexnumberNoDerivation index for the account (default: 0)
walletIdstringNoWallet ID to use for signing (defaults to authenticated wallet)
confirmedbooleanNoOmit to simulate first. Set to true only after the user approves the preview.
Example request:
{
  "transaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQABAgMEBQYH...",
  "networkId": "solana:mainnet"
}

send_evm_transaction

Simulates, signs, and broadcasts an EVM transaction with automatic gas estimation.
ParameterTypeRequiredDescription
chainIdnumber | stringYesEVM chain ID (e.g., 1, "8453", or "0x2105")
tostringNoDestination address (0x-prefixed)
valuestringNoValue in wei as a hex string (e.g., "0x0")
datastringNoCalldata as a hex string
gasstringNoGas limit as a hex string. Auto-estimated with a 20% buffer if omitted.
gasLimitstringNoAlias for gas — accepted directly from DeFi aggregator responses (e.g. LI.FI). If both gas and gasLimit are provided, gas takes precedence.
gasPricestringNoLegacy gas price in wei
maxFeePerGasstringNoEIP-1559 max fee per gas
maxPriorityFeePerGasstringNoEIP-1559 priority fee
noncestringNoTransaction nonce. Auto-fetched if omitted.
typestringNoTransaction type such as "0x2"
derivationIndexnumberNoDerivation index for the account (default: 0)
walletIdstringNoWallet ID to use for signing (defaults to authenticated wallet)
rpcUrlstringNoCustom EVM RPC URL override
confirmedbooleanNoOmit to simulate first. Set to true only after the user approves the preview.
Example request:
{
  "chainId": 8453,
  "to": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
  "value": "0x2386F26FC10000",
  "data": "0x"
}

sign_solana_message

Signs a UTF-8 message on Solana.
ParameterTypeRequiredDescription
messagestringYesThe UTF-8 message to sign
networkIdstringYesSolana network identifier (e.g., solana:mainnet)
derivationIndexnumberNoDerivation index for the account (default: 0)

sign_evm_personal_message

Signs a UTF-8 message using EIP-191 personal signing for EVM chains.
ParameterTypeRequiredDescription
messagestringYesThe UTF-8 message to sign
chainIdnumberYesEVM chain ID (e.g., 1 for Ethereum, 8453 for Base)
derivationIndexnumberNoDerivation index for the account (default: 0)

sign_evm_typed_data

Signs structured data using EIP-712 for EVM chains. Used for DeFi permits and other typed data flows.
ParameterTypeRequiredDescription
typedDataobjectYesEIP-712 typed data object
chainIdnumberYesEVM chain ID (e.g., 1 for Ethereum, 8453 for Base)
derivationIndexnumberNoDerivation index for the account (default: 0)

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.
ParameterTypeRequiredDescription
chainIdstringYesCAIP-2 chain ID (e.g., solana:mainnet, eip155:1, eip155:8453, sui:mainnet)
typestringYestransaction or message
paramsobjectYesChain-specific transaction parameters (see below)
urlstringNodApp origin URL where the transaction originates (e.g., https://jup.ag)
contextstringNoTransaction context hint: swap, bridge, send, or gaslessSwap
userAccountstringNoWallet address to simulate for. Auto-derived for Solana and EVM chains.
languagestringNoResponse language code (e.g., en, es, ja). Defaults to en.
derivationIndexnumberNoDerivation index for address lookup (default: 0)
walletIdstringNoWallet ID override (defaults to authenticated wallet)
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..." }
Example response:
{
  "type": "transaction",
  "expectedChanges": [
    {
      "type": "transfer",
      "changeSign": "MINUS",
      "changeText": "-0.001 ETH",
      "asset": { "type": "native", "symbol": "ETH", "decimals": 18, "usdValue": "2.19" }
    }
  ],
  "warnings": [],
  "advancedDetails": {
    "chainId": "eip155:8453",
    "gas": [21000],
    "gasLimit": 21000
  }
}

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.
ParameterTypeRequiredDescription
chainIdnumber | stringYesEVM chain ID (e.g., 8453 for Base, 1 for Ethereum). Accepts a number, decimal string, or hex string (e.g., "0x2105").
tokenAddressstringYesERC-20 token contract address (0x-prefixed)
spenderAddressstringYesAddress of the spender to check allowance for (e.g., a swap router)
ownerAddressstringNoAddress of the token owner. Defaults to the authenticated wallet address.
walletIdstringNoWallet ID (defaults to authenticated wallet). Only used when ownerAddress is omitted.
derivationIndexnumberNoDerivation index for the account (default: 0). Only used when ownerAddress is omitted.
rpcUrlstringNoCustom EVM RPC URL override
Example response:
{
  "chainId": 1,
  "tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  "ownerAddress": "0xf81ea875f910eaf8e9b27167f018d0e1b696963a",
  "spenderAddress": "0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD",
  "allowance": "0",
  "allowanceHex": "0x0"
}

transfer_tokens

Transfers native tokens or SPL/ERC-20 tokens across Solana and EVM chains using a simulation-first flow.
ParameterTypeRequiredDescription
networkIdstringYesNetwork identifier (e.g., solana:mainnet, eip155:1)
tostringYesRecipient address
amountstringYesTransfer amount as a string (e.g., "0.5")
amountUnitstringNoui for token units, base for atomic units (default: ui)
tokenMintstringNoSPL mint or ERC-20 contract address. Omit for native token transfers
decimalsnumberNoToken decimals. Required for ERC-20 transfers when amountUnit is ui
derivationIndexnumberNoDerivation index for the account (default: 0)
walletIdstringNoWallet ID to use (defaults to authenticated wallet)
rpcUrlstringNoCustom Solana or EVM RPC URL override
createAssociatedTokenAccountbooleanNoSolana only. Create destination ATA if missing (default: true)
confirmedbooleanNoOmit to simulate first. Set to true only after the user approves the preview.
Example (SOL transfer):
{
  "networkId": "solana:mainnet",
  "to": "H8FpYTgx4Uy9aF9Nk9fCTqKKFLYQ9KfC6UJhMkMDzCBh",
  "amount": "0.1"
}

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.
ParameterTypeRequiredDescription
amountstringYesSell amount (e.g., "0.5")
sellChainIdstringNoCAIP-2 chain ID for the sell token (default: solana:mainnet)
buyChainIdstringNoCAIP-2 chain ID for the buy token (defaults to sellChainId; set a different value for cross-chain swaps)
buyTokenMintstringNoToken to buy. Solana mint address or EVM 0x contract address (omit for native token)
buyTokenIsNativebooleanNotrue to buy the native token of the destination chain
sellTokenMintstringNoToken to sell. Solana mint address or EVM 0x contract address (omit for native token)
sellTokenIsNativebooleanNotrue to sell the native token (default when sellTokenMint is omitted)
amountUnitstringNoui for token units, base for atomic units (default: base)
sellTokenDecimalsnumberNoDecimals for the sell token. Required for EVM tokens when amountUnit is ui
buyTokenDecimalsnumberNoDecimals for the buy token. Required for EVM tokens when amountUnit is ui and exactOut is true
slippageTolerancenumberNoSlippage tolerance in percent (0–100)
autoSlippagebooleanNoEnable automatic slippage calculation
exactOutbooleanNoIf true, treat amount as the buy amount rather than the sell amount
executebooleanNoIf true, sign and send the initiation transaction immediately
takerstringNoOverride the taker address
derivationIndexnumberNoDerivation index for the taker address (default: 0)
rpcUrlstringNoSolana RPC URL override for token decimal lookup
quoteApiUrlstringNoPhantom-compatible quotes API URL override
Example (Solana swap: sell SOL for USDC):
{
  "amount": "0.1",
  "sellChainId": "solana:mainnet",
  "sellTokenIsNative": true,
  "buyTokenMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
  "amountUnit": "ui",
  "execute": true
}
Example (cross-chain swap: sell SOL for ETH on Base):
{
  "amount": "0.5",
  "sellChainId": "solana:mainnet",
  "sellTokenIsNative": true,
  "buyChainId": "eip155:8453",
  "buyTokenIsNative": true,
  "amountUnit": "ui",
  "execute": true
}

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.
ParameterTypeRequiredDescription
phasestringYesanalyze to view current allocations, execute to rebalance
targetAllocationsarrayNoRequired for execute phase. Array of {caip19, targetPercent, symbol?} objects. Percentages must sum to 100.
dryRunbooleanNoIf true during execute phase, returns the swap plan without executing (default: false)
slippageTolerancenumberNoSlippage tolerance in percent for each swap (default: 1)
minTradeUsdnumberNoMinimum USD value for a trade to execute (default: 1.0)
networkstringNoNetwork to rebalance on. Currently only solana is supported (default: solana).

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.
ParameterTypeRequiredDescription
preparedTxstringYesBase64-encoded unsigned Solana transaction returned by the API payment error
derivationIndexnumberNoDerivation index for the account (default: 0)

Perpetuals

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

Read-only

ToolDescription
get_perp_marketsReturns available perp markets with price, funding, open interest, 24h volume, and max leverage
get_perp_accountReturns perp account balance and available trading margin
get_perp_positionsReturns open positions with size, direction, leverage, unrealized PnL, and liquidation price
get_perp_ordersReturns open perp orders such as limit, TP, and SL orders
get_perp_trade_historyReturns historical fills with fees and closed PnL

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.
ParameterTypeRequiredDescription
sourceChainIdstringYesSource chain CAIP-2 ID (e.g. "solana:mainnet", "eip155:42161", "eip155:8453", "eip155:1", "eip155:137")
amountstringYesAmount to send in human-readable units (e.g. "100" for 100 USDC, "0.5" for 0.5 SOL)
sellTokenMintstringNoToken contract/mint address to sell. Omit for native token (SOL, ETH, etc.)
executebooleanNoIf false (default), returns the quote only. If true, signs and broadcasts immediately.
walletIdstringNoWallet ID (defaults to authenticated wallet)
derivationIndexnumberNoDerivation index for the account (default: 0)
Example (deposit SOL into Hyperliquid as USDC):
{
  "sourceChainId": "solana:mainnet",
  "amount": "10",
  "execute": true
}

open_perp_position

Opens a market or limit long/short perpetual position.
ParameterTypeRequiredDescription
marketstringYesMarket symbol (e.g. "BTC", "ETH", "SOL")
directionstringYes"long" or "short"
sizeUsdstringYesPosition size in USD (e.g. "100" for $100 notional value)
leveragenumberYesLeverage multiplier (e.g. 1 for 1x, 10 for 10x)
orderTypestringNo"market" (default) or "limit"
limitPricestringNoRequired for limit orders: the limit price as a string (e.g. "50000")
marginTypestringNo"cross" or "isolated"
walletIdstringNoWallet ID (defaults to authenticated wallet)
derivationIndexnumberNoDerivation index for the account (default: 0)
Example (market long):
{
  "market": "ETH",
  "direction": "long",
  "sizeUsd": "100",
  "leverage": 5
}

close_perp_position

Closes a perpetual position fully or partially.
ParameterTypeRequiredDescription
marketstringYesMarket symbol of the position to close (e.g. "BTC")
sizePercentnumberNoPercentage of position to close (0–100, default: 100 for full close)
walletIdstringNoWallet ID (defaults to authenticated wallet)
derivationIndexnumberNoDerivation index for the account (default: 0)

cancel_perp_order

Cancels an open perpetual order by ID.
ParameterTypeRequiredDescription
marketstringYesMarket symbol (e.g. "BTC")
orderIdintegerYesThe numeric order ID to cancel (from get_perp_orders)
walletIdstringNoWallet ID (defaults to authenticated wallet)
derivationIndexnumberNoDerivation index for the account (default: 0)

update_perp_leverage

Updates leverage and margin mode for a market.
ParameterTypeRequiredDescription
marketstringYesMarket symbol (e.g. "BTC")
leveragenumberYesLeverage multiplier (e.g. 1 for 1x, 10 for 10x)
marginTypestringNo"cross" or "isolated"
walletIdstringNoWallet ID (defaults to authenticated wallet)
derivationIndexnumberNoDerivation index for the account (default: 0)

transfer_spot_to_perps

Moves USDC from Hypercore spot into the perps margin account.
ParameterTypeRequiredDescription
amountUsdcstringYesAmount of USDC to move from spot to perps (e.g. "100" for 100 USDC)
walletIdstringNoWallet ID (defaults to authenticated wallet)
derivationIndexnumberNoDerivation index for the account (default: 0)

withdraw_from_perps

Moves USDC from perps margin back to Hyperliquid spot.
ParameterTypeRequiredDescription
amountUsdcstringYesAmount of USDC to withdraw (e.g. "50" for 50 USDC)
walletIdstringNoWallet ID (defaults to authenticated wallet)
derivationIndexnumberNoDerivation index for the account (default: 0)
All perp write tools submit signed actions immediately (except deposit_to_hyperliquid and withdraw_from_hyperliquid_spot which use 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 multi-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 — moves USDC from perps margin back to Hyperliquid spot.
  2. withdraw_from_hyperliquid_spot — withdraws USDC from Hyperliquid spot to an external chain (Solana, Arbitrum, or Base).

withdraw_from_hyperliquid_spot

Bridges USDC from Hyperliquid spot to an external chain (Solana, Base, Ethereum, Arbitrum, Polygon) via the Relay bridge. This is the final step in the perps withdrawal flow, after withdraw_from_perps has moved funds from perps to spot. Uses a quote-first flow by default.
ParameterTypeRequiredDescription
amountUsdcstringYesAmount of USDC to bridge out (e.g. "8.0" for 8 USDC)
destinationChainIdstringYesDestination chain CAIP-2 ID (e.g. "solana:mainnet", "eip155:8453", "eip155:1", "eip155:42161", "eip155:137")
buyTokenstringNoCAIP-19 token to receive on the destination chain (e.g. "solana:101/address:EPjFWdd5..."). Defaults to USDC on the destination chain if omitted.
executebooleanNoIf false (default), returns the quote only. If true, signs and broadcasts immediately.
walletIdstringNoWallet ID for signing. Auto-derived if omitted.
derivationIndexnumberNoDerivation index for the account (default: 0)
Example request (quote only):
{
  "amountUsdc": "8.0",
  "destinationChainId": "eip155:42161"
}
Example request (execute immediately):
{
  "amountUsdc": "8.0",
  "destinationChainId": "solana:mainnet",
  "execute": true
}

Supported networks

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

Solana

NetworkIdentifier
Mainnetsolana:mainnet
Devnetsolana:devnet
Testnetsolana:testnet

Ethereum and EVM networks

NetworkIdentifier
Ethereum Mainneteip155:1
Ethereum Sepoliaeip155:11155111
Polygon Mainneteip155:137
Polygon Amoyeip155:80002
Base Mainneteip155:8453
Base Sepoliaeip155:84532
Arbitrum Oneeip155:42161
Arbitrum Sepoliaeip155:421614
Monadeip155:143
Monad Testneteip155:10143

Bitcoin

NetworkIdentifier
Mainnetbip122:000000000019d6689c085ae165831e93

Sui

NetworkIdentifier
Mainnetsui:mainnet
Testnetsui:testnet