Polymarket Smart Money Signals
pm_signalsAggregate whale wallet activity to get directional trading signals for Polymarket markets. Shows where top traders are positioning.
Instructions
Get smart money flow signals showing where top traders are positioning. Aggregates whale wallet activity into directional signals per market. Cost: $0.02 per query. Source: Polymarket on-chain data.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| market_id | No | Filter by market ID | |
| min_confidence | No | Minimum signal confidence (0-1, default 0.5) | |
| limit | No | Maximum results (default 25) |
Implementation Reference
- src/tools/pm.ts:118-146 (handler)The handler/executor function for 'pm_signals'. Calls apiGet to /api/v1/pm/signals with market_id, min_confidence, and limit parameters, then formats the response with count and data.
async ({ market_id, min_confidence, limit }) => { const res = await apiGet<PmQueryResponse>("/api/v1/pm/signals", { market_id, min_confidence: min_confidence ?? 0.5, limit: limit ?? 25, }); if (!res.ok) { return { content: [ { type: "text" as const, text: `API error (${res.status}): ${JSON.stringify(res.data)}`, }, ], isError: true, }; } const { count, data } = res.data; const warn = stalenessWarning(res); const summary = `${warn}Found ${count} smart money signal(s).`; const json = JSON.stringify(data, null, 2); return { content: [{ type: "text" as const, text: `${summary}\n\n${json}` }], }; }, ); - src/tools/pm.ts:92-117 (schema)The inputSchema for 'pm_signals' defines three optional parameters: market_id (string), min_confidence (number 0-1, default 0.5), and limit (int 1-100, default 25).
{ title: "Polymarket Smart Money Signals", description: "Get smart money flow signals showing where top traders are positioning. " + "Aggregates whale wallet activity into directional signals per market. " + "Cost: $0.02 per query. Source: Polymarket on-chain data.", inputSchema: { market_id: z .string() .optional() .describe("Filter by market ID"), min_confidence: z .number() .min(0) .max(1) .optional() .describe("Minimum signal confidence (0-1, default 0.5)"), limit: z .number() .int() .min(1) .max(100) .optional() .describe("Maximum results (default 25)"), }, }, - src/tools/pm.ts:90-91 (registration)The tool is registered with the MCP server via server.registerTool('pm_signals', ...) in the registerPmTools function.
server.registerTool( "pm_signals", - src/index.ts:54-58 (registration)The registerPmTools function is invoked during MCP server setup in src/index.ts, which registers all PM tools including pm_signals.
registerPmTools(server); registerPmArbTools(server); registerPmResolutionTools(server); registerEconTools(server); registerPmMicroTools(server); - src/client.ts:35-41 (helper)The stalenessWarning helper function used by the pm_signals handler to append a staleness warning to the output if the data is stale.
export function stalenessWarning(res: ApiResponse): string { if (!res.stale) return ""; const parts = ["[STALE DATA]"]; if (res.lastUpdated) parts.push(`Last updated: ${res.lastUpdated}`); if (res.ageSeconds != null) parts.push(`Age: ${res.ageSeconds}s`); return parts.join(" ") + "\n\n"; }