hyperd.wallet.persona
Analyze a wallet's on-chain behavior to classify its persona — Trader, HODLer, MEV-bot, Whale, Smart-Money, Airdrop-Farmer, Compromised, or Inactive. Includes confidence and supporting signals.
Instructions
Classify a wallet's persona based on on-chain behavior. Returns one of: Trader, HODLer, MEV-bot, Whale, Smart-Money, Airdrop-Farmer, Compromised, Inactive — plus confidence and supporting signals. Costs $0.10 in USDC.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | 0x EVM wallet address | |
| chain | No | Chain to analyze. Default 'base'. |
Implementation Reference
- src/server.ts:309-320 (registration)Registration of the 'hyperd.wallet.persona' tool via server.tool(). Defines name, description, Zod schema (address, chain), and the async handler that calls paidGet('/api/wallet/persona', args).
server.tool( "hyperd.wallet.persona", "Classify a wallet's persona based on on-chain behavior. Returns one of: Trader, HODLer, MEV-bot, Whale, Smart-Money, Airdrop-Farmer, Compromised, Inactive — plus confidence and supporting signals. Costs $0.10 in USDC.", { address: z.string().describe("0x EVM wallet address"), chain: z .enum(["base", "ethereum", "polygon", "arbitrum", "optimism", "avalanche", "bnb"]) .optional() .describe("Chain to analyze. Default 'base'."), }, async (args) => asText(await paidGet("/api/wallet/persona", args)), ); - src/server.ts:319-320 (handler)The handler function for hyperd.wallet.persona — an inline async lambda that calls paidGet('/api/wallet/persona', args) and wraps the result via asText(). No separate handler file; it lives inline in the tool registration.
async (args) => asText(await paidGet("/api/wallet/persona", args)), ); - src/server.ts:312-318 (schema)Input schema for hyperd.wallet.persona: 'address' (required string) and 'chain' (optional enum of 7 EVM chains, default 'base'). Defined inline via Zod within the server.tool() call.
{ address: z.string().describe("0x EVM wallet address"), chain: z .enum(["base", "ethereum", "polygon", "arbitrum", "optimism", "avalanche", "bnb"]) .optional() .describe("Chain to analyze. Default 'base'."), }, - src/server.ts:79-92 (helper)The paidGet() helper function — performs an authenticated GET request using the x402 HTTP client. Used by the handler to call the remote API endpoint /api/wallet/persona.
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)The asText() helper — wraps a JSON response into the MCP text content format expected by the SDK.
function asText(data: unknown) { return { content: [{ type: "text" as const, text: JSON.stringify(data, null, 2) }] }; }