Skip to main content
Glama

get_spot_trades

Read-onlyIdempotent

Retrieve Hyperliquid spot trade history for any pair, including price, size, side, timestamps, and user addresses. Filter by time range and wallet, with cursor pagination.

Instructions

Get Hyperliquid Spot trade/fill history for a pair over a time range. Symbols are dashed canonical (e.g. 'HYPE-USDC'). Returns price, size, side, timestamps, and user addresses. S3 backfill from 2025-03-22 (the earliest published date); live since. Supports cursor pagination and optional user wallet filter.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
coinYesHyperliquid Spot dashed canonical pair symbol (e.g. 'HYPE-USDC', 'PURR-USDC'). 294 pairs available. The server resolves the dashed form to Hyperliquid's wire format ('PURR/USDC', '@107') internally. Use get_spot_pairs to list all.
startNoStart timestamp (Unix ms or ISO). Defaults to 24h ago.
endNoEnd timestamp (Unix ms or ISO). Defaults to now.
limitNoMax records to return (default 100, max 1000)
cursorNoPagination cursor from previous response's nextCursor
userNoUser wallet address filter (e.g., '0x1234...')

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
recordsYesArray of result records
countYesTotal number of records in the full result set
nextCursorNoCursor for next page, if more results available

Implementation Reference

  • src/index.ts:1351-1360 (registration)
    Registration of the 'get_spot_trades' tool using registerHistoryTool pattern. It registers the tool with name 'get_spot_trades', accepts a SpotCoinParam (dashed canonical pair symbol), time range params (start/end/limit/cursor), and an optional user wallet filter. The handler calls api().spot.trades.list(coin, params) which invokes the SDK's Hyperliquid Spot trades list endpoint.
    // Spot Trades
    registerHistoryTool(
      "get_spot_trades",
      "Get Hyperliquid Spot trade/fill history for a pair over a time range. Symbols are dashed canonical (e.g. 'HYPE-USDC'). Returns price, size, side, timestamps, and user addresses. S3 backfill from 2025-03-22 (the earliest published date); live since. Supports cursor pagination and optional user wallet filter.",
      (coin, params) =>
        api().spot.trades.list(coin, params as any),
      SpotCoinParam,
      normalizeSpotCoin,
      { user: UserParam }
    );
  • The generic handler logic from registerHistoryTool. This is the actual handler function that executes when 'get_spot_trades' is invoked. It extracts coin, start, end, limit, cursor, and extra params (including optional 'user' filter), resolves the time range, builds SDK params, calls the SDK function (api().spot.trades.list), and formats the cursor-paginated response.
    const schema: ZodRawShape = { coin: coinSchema, ...HistoryParams };
    if (extraSchema) Object.assign(schema, extraSchema);
    
    registerTool(name, description, schema, ListOutputSchema, async (params) => {
      const { coin, start, end, limit, cursor, ...extra } = params;
    
      const timeRange = resolveTimeRange(start, end);
      const sdkParams: Record<string, unknown> = {
        ...timeRange,
        limit: resolveLimit(limit),
      };
    
      if (cursor) sdkParams.cursor = cursor;
    
      // Pass through extra params (interval, side, etc.)
      for (const [k, v] of Object.entries(extra)) {
        if (v !== undefined) sdkParams[k] = v;
      }
    
      const result = await sdkCall(normFn(coin), sdkParams);
      return formatCursorResponse(result);
    });
  • Input schema for the 'coin' parameter used by get_spot_trades. Expects a string in dashed canonical pair format (e.g. 'HYPE-USDC').
    const SpotCoinParam = z
      .string()
      .describe(
        "Hyperliquid Spot dashed canonical pair symbol (e.g. 'HYPE-USDC', 'PURR-USDC'). 294 pairs available. The server resolves the dashed form to Hyperliquid's wire format ('PURR/USDC', '@107') internally. Use get_spot_pairs to list all."
      );
  • Optional 'user' parameter schema used as extra param in get_spot_trades for filtering by wallet address.
    const UserParam = z
      .string()
      .optional()
      .describe("User wallet address filter (e.g., '0x1234...')");
  • Normalization helper for spot coin symbols (uppercases them) passed to the SDK call.
    function normalizeSpotCoin(coin: string): string {
      return coin.toUpperCase();
    }
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, idempotent, non-destructive. Description adds valuable context: S3 backfill from 2025-03-22, live since, cursor pagination. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five concise sentences, each adding value: purpose, symbol format, returned fields, data source, pagination/filtering. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists and parameters are fully described, the description covers all important aspects: purpose, data source, returned fields, pagination, optional filter. Very complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. Description adds some detail on coin parameter format and default start/end, but largely repeats schema info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description specifies 'Get Hyperliquid Spot trade/fill history for a pair over a time range', clearly stating verb, resource, and scope. It distinguishes from siblings like get_spot_trades_recent by mentioning time range and history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage for historical spot trades with filtering and pagination, but does not explicitly state when to use vs. alternatives like get_spot_trades_recent or other trade tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/0xArchiveIO/0xarchive-mcp'

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