pulse_leaderboard
Retrieve ranked trader leaderboard from Hyperliquid. Sort by PnL, win rate, volume, score, or risk-adjusted returns, and filter by time period and minimum trade count.
Instructions
Get ranked trader leaderboard. Sort by PnL, win rate, volume, score, or risk-adjusted returns. Filter by time period (day/week/month/allTime) and minimum trade count. Use this to find the best traders on Hyperliquid.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| useToonFormat | No | Return data in compact toon format (default: true). Set to false for standard JSON. | |
| sort | No | Sort criteria | pnl |
| period | No | Time period | allTime |
| limit | No | Number of traders to return | |
| minTrades | No | Minimum trade count filter |
Implementation Reference
- src/index.ts:345-362 (registration)Registration of the pulse_leaderboard tool with MCP server. It registers the tool name, description, input schema (sort, period, limit, minTrades), and handler that calls the /pulse/leaderboard API endpoint.
// ══════════════════════════════════════════════════════════ // TOOL 3: Leaderboard // ══════════════════════════════════════════════════════════ if (shouldRegister("pulse_leaderboard")) server.registerTool( "pulse_leaderboard", { description: "Get ranked trader leaderboard. Sort by PnL, win rate, volume, score, or risk-adjusted returns. Filter by time period (day/week/month/allTime) and minimum trade count. Use this to find the best traders on Hyperliquid.", inputSchema: { useToonFormat: useToonFormatSchema, sort: z.enum(["pnl", "winrate", "volume", "score", "risk-adjusted", "losers"]).default("pnl").describe("Sort criteria"), period: z.enum(["day", "week", "month", "allTime"]).default("allTime").describe("Time period"), limit: z.number().min(1).max(100).default(20).describe("Number of traders to return"), minTrades: z.number().default(100).describe("Minimum trade count filter"), }, }, async ({ useToonFormat, sort, period, limit, minTrades }) => toolResult(await callAPI(useToonFormat, "/pulse/leaderboard", { sort, period, limit: String(limit), minTrades: String(minTrades) })) ); - src/index.ts:360-362 (handler)Handler function: calls the remote API at /pulse/leaderboard with query parameters (sort, period, limit, minTrades) and returns the result formatted via toolResult(), optionally encoding in toon format.
async ({ useToonFormat, sort, period, limit, minTrades }) => toolResult(await callAPI(useToonFormat, "/pulse/leaderboard", { sort, period, limit: String(limit), minTrades: String(minTrades) })) ); - src/index.ts:352-359 (schema)Input schema for pulse_leaderboard: defines 5 parameters — useToonFormat (bool), sort (enum: pnl/winrate/volume/score/risk-adjusted/losers), period (enum: day/week/month/allTime), limit (1-100), minTrades (number).
inputSchema: { useToonFormat: useToonFormatSchema, sort: z.enum(["pnl", "winrate", "volume", "score", "risk-adjusted", "losers"]).default("pnl").describe("Sort criteria"), period: z.enum(["day", "week", "month", "allTime"]).default("allTime").describe("Time period"), limit: z.number().min(1).max(100).default(20).describe("Number of traders to return"), minTrades: z.number().default(100).describe("Minimum trade count filter"), }, },