analyze_results
Detect outliers and identify trends in Dune Analytics query results to support data-driven decision making.
Instructions
Detect outliers (Z-score > 3) and trends in query results.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Implementation Reference
- src/main.py:265-301 (handler)The core handler function for the 'analyze_results' MCP tool. It checks job status, fetches analysis from dune_service, and formats a summary of numeric columns including mean, std dev, outliers (Z-score >3), and trends. Registered via @mcp.tool() decorator.@mcp.tool() def analyze_results(job_id: str) -> str: """ Detect outliers (Z-score > 3) and trends in query results. """ try: # Check status first status_data = dune_service.get_status(job_id) state = status_data.get("state", "UNKNOWN") if state != "QUERY_STATE_COMPLETED" and state != "COMPLETED": return f"Job is not complete (Status: {state}). Cannot analyze." analysis = dune_service.analyze_result(job_id, data_processor) if "error" in analysis: return f"Analysis Failed: {analysis['error']}" summary = [f"Analysis for Job {job_id} ({analysis['row_count']} rows):"] for col, stats in analysis.get("numeric_analysis", {}).items(): summary.append(f"\nColumn: {col}") summary.append(f" Mean: {stats.get('mean'):.2f} | StdDev: {stats.get('std_dev'):.2f}") outliers = stats.get("outlier_count", 0) if outliers > 0: summary.append(f" Outliers detected: {outliers} values (>3 sigma)") summary.append(f" Sample outliers: {stats.get('top_outliers')}") else: summary.append(" No significant outliers.") if "trend_heuristic" in stats: summary.append(f" Trend: {stats['trend_heuristic']}") return "\n".join(summary) except Exception as e: return f"Error analyzing results: {str(e)}"
- src/main.py:265-265 (registration)The @mcp.tool() decorator registers the analyze_results function as an MCP tool.@mcp.tool()