get_market_trades
Retrieve on-chain trade data for specific markets, including price, volume, and fee details for BUY/SELL transactions.
Instructions
Get trades for a specific market. Returns trade details with maker/taker, price, volume, and fees from on-chain data.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| conditionId | Yes | Market conditionId | |
| first | No | Number of trades | |
| tradeType | No | Filter by trade type | |
| orderDirection | No | desc |
Implementation Reference
- mcp-server/src/index.ts:205-265 (handler)The implementation of the get_market_trades tool. It queries both simple and negrisk markets for trade data, combines the results, sorts them, and returns them along with market information.
server.registerTool( "get_market_trades", { description: "Get trades for a specific market. Returns trade details with maker/taker, price, volume, and fees from on-chain data.", inputSchema: { conditionId: z.string().describe("Market conditionId"), first: z.number().default(20).describe("Number of trades"), tradeType: z .enum(["BUY", "SELL"]) .optional() .describe("Filter by trade type"), orderDirection: z.enum(["asc", "desc"]).default("desc"), }, }, async ({ conditionId, first, tradeType, orderDirection }) => { try { const typeFilter = tradeType ? `, type: "${tradeType}"` : ""; const tradesQuery = `{ trades( where: { market: "${conditionId}"${typeFilter} } first: ${first} orderBy: timestamp orderDirection: ${orderDirection} ) { id type maker taker makerAmountFilled takerAmountFilled amountUSD fee feeUSD price venue timestamp blockNumber txHash } }`; const [simpleData, negriskData, name] = await Promise.all([ querySimple(tradesQuery).catch(() => ({ trades: [] })), queryNegRisk(tradesQuery).catch(() => ({ trades: [] })), getMarketName(conditionId), ]); const simpleTrades = (simpleData.trades || []).map((t: any) => ({ ...t, marketType: "simple", })); const negriskTrades = (negriskData.trades || []).map((t: any) => ({ ...t, marketType: "negrisk", })); const allTrades = [...simpleTrades, ...negriskTrades] .sort((a, b) => orderDirection === "desc" ? Number(b.timestamp) - Number(a.timestamp) : Number(a.timestamp) - Number(b.timestamp) ) .slice(0, first); return textResult({ market: name, conditionId, trades: allTrades }); } catch (e) { return errorResult(e); } } );