get_signal_analytics
Analyze aggregated product feedback signals over time to identify trends and patterns in customer insights from multiple communication platforms.
Instructions
Get aggregated analytics about signals over a time period.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | Yes | Start date (YYYY-MM-DD format) | |
| endDate | Yes | End date (YYYY-MM-DD format) | |
| groupBy | No | How to group the analytics | day |
Implementation Reference
- src/mcp/tools/proxyTools.ts:212-231 (schema)Definition of the 'get_signal_analytics' tool, including its input schema and metadata.
{ name: 'get_signal_analytics', description: 'Get aggregated analytics about signals over a time period.', inputSchema: { type: 'object' as const, properties: { startDate: { type: 'string', description: 'Start date (YYYY-MM-DD format)' }, endDate: { type: 'string', description: 'End date (YYYY-MM-DD format)' }, groupBy: { type: 'string', enum: ['day', 'week', 'month', 'source', 'sentiment', 'category'], description: 'How to group the analytics', default: 'day', }, }, required: ['startDate', 'endDate'], }, annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, _meta: { 'openai/visibility': 'public' }, }, - src/mcp/tools/proxyTools.ts:369-410 (handler)The handleProxyTool function, which routes calls for this tool to the main IdeaLift app's MCP handler via the idealiftClient.
export async function handleProxyTool( toolName: string, args: Record<string, unknown>, chatgptSubjectId: string ): Promise<{ content: Array<{ type: string; text: string }>; isError: boolean }> { try { const response = await idealiftClient.mcpProxy( chatgptSubjectId, 'tools/call', { name: toolName, arguments: args } ); if (response.error) { return { content: [{ type: 'text', text: `Error: ${response.error.message}` }], isError: true, }; } // The result from handleJsonRpcRequest for tools/call is { content: [...], isError?: boolean } const result = response.result as { content?: Array<{ type: string; text: string }>; isError?: boolean } | undefined; if (result?.content) { return { content: result.content, isError: result.isError || false, }; } // Fallback: wrap the result as text return { content: [{ type: 'text', text: JSON.stringify(response.result, null, 2) }], isError: false, }; } catch (error) { console.error(`[ProxyTool] Error calling ${toolName}:`, error); return { content: [{ type: 'text', text: `Proxy error: ${(error as Error).message}` }], isError: true, }; } }