hyperd.balance.get
Retrieve on-chain balance for any EVM wallet address across multiple chains (Base, Ethereum, Polygon, Arbitrum). Supports ERC-20 tokens by symbol or contract address. Use chain='all' for parallel multi-chain lookup.
Instructions
Get the on-chain balance for an EVM wallet address. Multi-chain (Base, Ethereum, Polygon, Arbitrum). Supports ERC-20 by symbol or contract address. Pass chain='all' for parallel multi-chain lookup. Costs $0.01 in USDC on Base.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | 0x EVM wallet address | |
| token | No | Token symbol (e.g., USDC, WETH) or contract address. Default USDC. | |
| chain | No | Chain. Default 'base'. Use 'all' for parallel multi-chain. |
Implementation Reference
- src/server.ts:197-209 (registration)Registration of the 'hyperd.balance.get' tool via server.tool() — defines tool name, description, Zod input schema (address, optional token, optional chain), and handler.
server.tool( "hyperd.balance.get", "Get the on-chain balance for an EVM wallet address. Multi-chain (Base, Ethereum, Polygon, Arbitrum). Supports ERC-20 by symbol or contract address. Pass chain='all' for parallel multi-chain lookup. Costs $0.01 in USDC on Base.", { address: z.string().describe("0x EVM wallet address"), token: z.string().optional().describe("Token symbol (e.g., USDC, WETH) or contract address. Default USDC."), chain: z .enum(["base", "ethereum", "polygon", "arbitrum", "optimism", "avalanche", "bnb", "base-sepolia", "all"]) .optional() .describe("Chain. Default 'base'. Use 'all' for parallel multi-chain."), }, async (args) => asText(await paidGet("/api/balance", args)), ); - src/server.ts:208-209 (handler)Handler for 'hyperd.balance.get' — a thin inline lambda that calls paidGet('/api/balance', args) and formats the result as text.
async (args) => asText(await paidGet("/api/balance", args)), ); - src/server.ts:200-207 (schema)Zod input schema for hyperd.balance.get: address (required string), token (optional string, default USDC), chain (optional enum: base, ethereum, polygon, arbitrum, optimism, avalanche, bnb, base-sepolia, all; default base).
{ address: z.string().describe("0x EVM wallet address"), token: z.string().optional().describe("Token symbol (e.g., USDC, WETH) or contract address. Default USDC."), chain: z .enum(["base", "ethereum", "polygon", "arbitrum", "optimism", "avalanche", "bnb", "base-sepolia", "all"]) .optional() .describe("Chain. Default 'base'. Use 'all' for parallel multi-chain."), }, - src/server.ts:79-92 (helper)paidGet helper function — constructs request URL with query params, delegates to paidRequest() which performs the x402 payment dance.
async function paidGet( path: string, query: Record<string, string | number | boolean | undefined>, ): Promise<unknown> { if (!httpClient) { throw new Error(WALLET_NOT_CONFIGURED_MSG); } const url = new URL(`${API_BASE}${path}`); for (const [k, v] of Object.entries(query)) { if (v !== undefined && v !== "" && v !== null) url.searchParams.set(k, String(v)); } return paidRequest("GET", url, undefined); } - src/server.ts:155-157 (helper)asText helper — wraps response data into the MCP content format {content: [{type: 'text', text: ...}]}.
function asText(data: unknown) { return { content: [{ type: "text" as const, text: JSON.stringify(data, null, 2) }] }; }