Skip to main content
Glama

get_wallet_balance

Query cryptocurrency wallet balances across EVM and Solana blockchains by providing a valid wallet address. Returns token amounts and USD values in a formatted table.

Instructions

Query the balance of a specified wallet address across supported EVM and Solana blockchains. Parameters: wallet_address (str): The wallet address to query (e.g., '0x123...' for EVM chains like Ethereum, Polygon, BSC, or 'DYw8jCT...' for Solana). Must be a valid address for the target chain. Returns: str: Formatted table with balance information (chain, token amount, USD value) for supported chains or an error message.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
wallet_addressYes

Implementation Reference

  • main.py:112-178 (handler)
    The core handler function for the 'get_wallet_balance' tool. It validates the wallet address, determines if it's EVM or Solana, calls helper functions to query Dune SIM API, processes the balance data, and returns a formatted ASCII table with chain, token amount, and USD value.
    @mcp.tool() async def get_wallet_balance(wallet_address: str) -> str: """ Query the balance of a specified wallet address across supported EVM and Solana blockchains. Parameters: wallet_address (str): The wallet address to query (e.g., '0x123...' for EVM chains like Ethereum, Polygon, BSC, or 'DYw8jCT...' for Solana). Must be a valid address for the target chain. Returns: str: Formatted table with balance information (chain, token amount, USD value) for supported chains or an error message. """ if not wallet_address: return "Error: Wallet address is required." balance_data = [] supported_evm_chains = ["ethereum", "polygon", "bsc"] if is_evm_address(wallet_address): result = await query_evm_balance(wallet_address) if "error" in result: return f"Error querying EVM balance: {result['error']}" balances = result.get("balances", []) if not balances: return f"No balance data found for wallet {wallet_address}." for balance in balances: chain = balance.get("chain", "").lower() if chain not in supported_evm_chains: continue amount = int(balance.get("amount", "0")) decimals = balance.get("decimals", 18) symbol = balance.get("symbol", "Unknown") value_usd = float(balance.get("value_usd", 0)) # Convert amount to human-readable token quantity token_amount = amount / (10 ** decimals) balance_data.append([chain, f"{token_amount:.6f} {symbol}", f"${value_usd:.2f}"]) elif is_solana_address(wallet_address): result = await query_svm_balance(wallet_address) if "error" in result: return f"Error querying Solana balance: {result['error']}" balances = result.get("balances", []) if not balances: return f"No balance data found for wallet {wallet_address}." for balance in balances: chain = balance.get("chain", "").lower() if chain != "solana": continue token_amount = float(balance.get("balance", "0")) symbol = balance.get("symbol", "Unknown") value_usd = float(balance.get("value_usd", 0)) balance_data.append([chain, f"{token_amount:.6f} {symbol}", f"${value_usd:.2f}"]) else: return "Error: Invalid wallet address format. Use EVM (0x...) or Solana (Base58) address." if not balance_data: return f"No supported chain balances found for wallet {wallet_address}." # Generate ASCII table headers = ["Chain", "Token Amount", "USD Value"] table = tabulate(balance_data, headers=headers, tablefmt="grid") return f"Wallet {wallet_address} balances:\n\n{table}"
  • main.py:25-39 (helper)
    Helper function to fetch EVM chain balances from Dune SIM API, used by get_wallet_balance for EVM addresses.
    async def query_evm_balance(wallet_address: str) -> Dict[str, Any]: """Query Dune SIM Balance API for wallet balance on EVM chains.""" headers = {"X-Sim-Api-Key": DUNE_SIM_API_KEY} url = f"{DUNE_SIM_API_URL}/v1/evm/balances/{wallet_address}" async with httpx.AsyncClient() as client: try: response = await client.get(url, headers=headers) response.raise_for_status() return response.json() except httpx.HTTPStatusError as e: return {"error": f"HTTP error: {str(e)}"} except httpx.RequestError as e: return {"error": f"Request error: {str(e)}"}
  • main.py:41-55 (helper)
    Helper function to fetch Solana (SVM) balances from Dune SIM API, used by get_wallet_balance for Solana addresses.
    async def query_svm_balance(wallet_address: str) -> Dict[str, Any]: """Query Dune SIM Balance API for wallet balance on Solana chain.""" headers = {"X-Sim-Api-Key": DUNE_SIM_API_KEY} url = f"{DUNE_SIM_API_URL}/beta/svm/balances/{wallet_address}" async with httpx.AsyncClient() as client: try: response = await client.get(url, headers=headers) response.raise_for_status() return response.json() except httpx.HTTPStatusError as e: return {"error": f"HTTP error: {str(e)}"} except httpx.RequestError as e: return {"error": f"Request error: {str(e)}"}
  • Helper function to validate if a wallet address is EVM-compatible (0x followed by 40 hex chars), used to route queries in get_wallet_balance.
    def is_evm_address(address: str) -> bool: """Check if the address is an EVM-compatible address.""" return bool(re.match(r"^0x[a-fA-F0-9]{40}$", address))
  • Helper function to validate if a wallet address is Solana-compatible (Base58, 32-44 chars), used to route queries in get_wallet_balance.
    def is_solana_address(address: str) -> bool: """Check if the address is a Solana-compatible address (Base58, 32-44 characters).""" return bool(re.match(r"^[1-9A-HJ-NP-Za-km-z]{32,44}$", address))
  • main.py:112-112 (registration)
    The @mcp.tool() decorator registers the get_wallet_balance function as an MCP tool with the FastMCP server.
    @mcp.tool()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kukapay/wallet-inspector-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server