Skip to main content
Glama

get_trades

Retrieve recent trading activity for cryptocurrency pairs on supported exchanges like MEXC, Gate.io, Bitget, and Kraken to analyze market movements and execution data.

Instructions

Get recent trades for a trading pair on a supported exchange

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
exchangeYesExchange to query. Supported: mexc, gateio, bitget, kraken
symbolYesTrading pair symbol (e.g., BTC/USDT, INDY/USDT)
limitNoNumber of results to return (default: 20, max: 100)

Implementation Reference

  • Main MCP tool registration and handler implementation for get_trades. Defines the tool with parameters (exchange, symbol, limit), validates inputs, retrieves trades from the exchange connector, and returns formatted trade data with summary statistics.
    server.tool(
      'get_trades',
      'Get recent trades for a trading pair on a supported exchange',
      {
        exchange: ExchangeParam,
        symbol: SymbolParam,
        limit: LimitParam(20, 100),
      },
      async ({ exchange, symbol, limit }) => {
        const validExchange = validateExchange(exchange);
        const validSymbol = validateSymbol(symbol);
    
        const connector = await getConnectorSafe(exchange);
        const trades = await connector.getRecentTrades(validSymbol);
    
        const limitedTrades = trades.slice(0, limit);
    
        const buyTrades = limitedTrades.filter((t) => t.side === 'buy');
        const sellTrades = limitedTrades.filter((t) => t.side === 'sell');
        const totalVolume = limitedTrades.reduce((sum, trade) => sum + trade.price * trade.amount, 0);
    
        return {
          content: [
            {
              type: 'text' as const,
              text: JSON.stringify(
                {
                  symbol: validSymbol,
                  trades: limitedTrades,
                  summary: {
                    totalTrades: limitedTrades.length,
                    buyTrades: buyTrades.length,
                    sellTrades: sellTrades.length,
                    totalVolume,
                  },
                  exchange: validExchange,
                },
                null,
                2
              ),
            },
          ],
        };
      }
    );
  • Schema definitions for the get_trades tool parameters: ExchangeParam (validates exchange string), SymbolParam (validates trading pair symbol), and LimitParam (numeric limit with min/max constraints and default value).
    export const ExchangeParam = z
      .string()
      .describe('Exchange to query. Supported: mexc, gateio, bitget, kraken');
    
    export const SymbolParam = z.string().describe('Trading pair symbol (e.g., BTC/USDT, INDY/USDT)');
    
    export const OptionalSymbolParam = z
      .string()
      .optional()
      .describe('Optional trading pair to filter by (e.g., BTC/USDT). Returns all if omitted.');
    
    export function LimitParam(defaultValue: number, max: number) {
      return z
        .number()
        .min(1)
        .max(max)
        .default(defaultValue)
        .describe(`Number of results to return (default: ${defaultValue}, max: ${max})`);
    }
  • Helper function validateSymbol that validates and normalizes trading pair symbols (converts to uppercase, checks format like BTC/USDT or BTCUSDT).
    export function validateSymbol(symbol: string): string {
      if (!symbol) {
        throw new Error('Symbol is required');
      }
      const upper = symbol.toUpperCase();
      if (!/^[A-Z]+\/[A-Z]+$/.test(upper) && !/^[A-Z]+[A-Z]+$/.test(upper)) {
        throw new Error(`Invalid symbol format: ${symbol}. Expected: BTC/USDT or BTCUSDT`);
      }
      return upper;
    }
  • Helper functions for exchange management: validateExchange (checks against supported exchanges list) and getConnectorSafe (retrieves the exchange connector with error handling).
    export function validateExchange(exchange: string): SupportedExchange {
      const lower = exchange.toLowerCase();
      if (!(SUPPORTED_EXCHANGES as readonly string[]).includes(lower)) {
        throw new Error(
          `Unsupported exchange: ${exchange}. Supported: ${SUPPORTED_EXCHANGES.join(', ')}`
        );
      }
      return lower as SupportedExchange;
    }
    
    export async function getConnectorSafe(exchange: string): Promise<BaseExchangeConnector> {
      const validExchange = validateExchange(exchange);
      const { ExchangeFactory } = await import('@3rd-eye-labs/openmm');
      try {
        return await ExchangeFactory.getExchange(validExchange as any);
      } catch (error) {
        const message = error instanceof Error ? error.message : String(error);
        throw new Error(`Failed to connect to ${validExchange}: ${message}`);
      }
    }
  • src/tools/index.ts:9-9 (registration)
    Registration call that registers all market data tools (including get_trades) with the MCP server.
    registerMarketDataTools(server);

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/QBT-Labs/openmm-mcp'

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