get_markets
Retrieve and filter Polymarket prediction markets by volume, liquidity, dates, tags, and status to identify trading opportunities.
Instructions
List and filter Polymarket prediction markets. Supports rich filtering by volume, liquidity, dates, tags, and status. Sort by volume descending to find the most active markets.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results | |
| offset | No | Pagination offset | |
| order | No | Sort field: volume, liquidity, startDate, endDate, createdAt | |
| ascending | No | Sort ascending (default: false) | |
| slug | No | Filter by market slug | |
| tag | No | Filter by tag label (e.g. 'politics', 'crypto') | |
| closed | No | Filter by closed status | |
| active | No | Filter by active status | |
| liquidity_min | No | Minimum liquidity (USD) | |
| liquidity_max | No | Maximum liquidity (USD) | |
| volume_min | No | Minimum volume (USD) | |
| volume_max | No | Maximum volume (USD) | |
| start_date_min | No | Minimum start date (ISO format) | |
| start_date_max | No | Maximum start date (ISO format) | |
| end_date_min | No | Minimum end date (ISO format) | |
| end_date_max | No | Maximum end date (ISO format) |
Implementation Reference
- src/tools/gamma/markets.ts:30-40 (handler)The handler for the 'get_markets' tool which calls the Gamma API.
async (args) => { try { const data = await gamma.getMarkets(args); return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error: ${(error as Error).message}` }], isError: true, }; } }, - src/api/gamma.ts:57-97 (handler)The actual implementation of the getMarkets API method.
async getMarkets(params?: { limit?: number; offset?: number; order?: string; ascending?: boolean; slug?: string; tag?: string; closed?: boolean; active?: boolean; liquidity_min?: number; liquidity_max?: number; volume_min?: number; volume_max?: number; start_date_min?: string; start_date_max?: string; end_date_min?: string; end_date_max?: string; }): Promise<GammaMarket[]> { const query: Record<string, string | undefined> = {}; if (params?.limit !== undefined) query.limit = String(params.limit); if (params?.offset !== undefined) query.offset = String(params.offset); if (params?.order) query.order = params.order; if (params?.ascending !== undefined) query.ascending = String(params.ascending); if (params?.slug) query.slug = params.slug; if (params?.tag) query.tag = params.tag; if (params?.closed !== undefined) query.closed = String(params.closed); if (params?.active !== undefined) query.active = String(params.active); if (params?.liquidity_min !== undefined) query.liquidity_num_min = String(params.liquidity_min); if (params?.liquidity_max !== undefined) query.liquidity_num_max = String(params.liquidity_max); if (params?.volume_min !== undefined) query.volume_num_min = String(params.volume_min); if (params?.volume_max !== undefined) query.volume_num_max = String(params.volume_max); if (params?.start_date_min) query.start_date_min = params.start_date_min; if (params?.start_date_max) query.start_date_max = params.start_date_max; if (params?.end_date_min) query.end_date_min = params.end_date_min; if (params?.end_date_max) query.end_date_max = params.end_date_max; return this.client.gamma<GammaMarket[]>("/markets", query); } - src/tools/gamma/markets.ts:6-41 (registration)The MCP tool registration for 'get_markets'.
server.tool( "get_markets", "List and filter Polymarket prediction markets. Supports rich filtering by volume, liquidity, dates, tags, and status. Sort by volume descending to find the most active markets.", { limit: z.number().min(1).max(100).default(20).describe("Number of results"), offset: z.number().min(0).default(0).describe("Pagination offset"), order: z .string() .optional() .describe("Sort field: volume, liquidity, startDate, endDate, createdAt"), ascending: z.boolean().optional().describe("Sort ascending (default: false)"), slug: z.string().optional().describe("Filter by market slug"), tag: z.string().optional().describe("Filter by tag label (e.g. 'politics', 'crypto')"), closed: z.boolean().optional().describe("Filter by closed status"), active: z.boolean().optional().describe("Filter by active status"), liquidity_min: z.number().optional().describe("Minimum liquidity (USD)"), liquidity_max: z.number().optional().describe("Maximum liquidity (USD)"), volume_min: z.number().optional().describe("Minimum volume (USD)"), volume_max: z.number().optional().describe("Maximum volume (USD)"), start_date_min: z.string().optional().describe("Minimum start date (ISO format)"), start_date_max: z.string().optional().describe("Maximum start date (ISO format)"), end_date_min: z.string().optional().describe("Minimum end date (ISO format)"), end_date_max: z.string().optional().describe("Maximum end date (ISO format)"), }, async (args) => { try { const data = await gamma.getMarkets(args); return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Error: ${(error as Error).message}` }], isError: true, }; } }, );