import { z } from "zod";
import { fetchMarkets } from "../services/gamma.js";
const schema = z.object({
limit: z.number().optional().default(20).describe("Number of markets to return (default: 20)"),
offset: z.number().optional().default(0).describe("Pagination offset (default: 0)"),
order: z.string().optional().describe("Sort field (e.g., 'volume24hr', 'liquidity', 'startDate', 'endDate', 'createdAt')"),
ascending: z.boolean().optional().describe("Sort ascending (default: false)"),
active: z.boolean().optional().describe("Filter by active status"),
closed: z.boolean().optional().describe("Filter by closed status"),
tag_slug: z.string().optional().describe("Filter by tag slug"),
featured: z.boolean().optional().describe("Filter featured markets only"),
end_date_min: z.string().optional().describe("Minimum end date (ISO 8601)"),
end_date_max: z.string().optional().describe("Maximum end date (ISO 8601)"),
});
export const listMarketsTool = {
name: "list_markets",
description: "List markets with filters (active/closed/tag/date/sort). Use conditionId for Data API and clobTokenIds for CLOB tools. Example: active=true, limit=20.",
parameters: schema,
execute: async (args: z.infer<typeof schema>) => {
try {
const data = await fetchMarkets(args);
return JSON.stringify(data, null, 2);
} catch (error) {
return JSON.stringify({ error: error instanceof Error ? error.message : String(error) });
}
},
};