array_statistics
Calculate statistical measures on arrays, including mean, median, std, min, max, and sum across columns, rows, or entire datasets.
Instructions
Calculate statistical measures on arrays using Polars.
Supports computation across entire array, rows, or columns.
Examples:
COLUMN-WISE MEANS: data=[[1,2,3],[4,5,6]], operations=["mean"], axis=0 Result: [2.5, 3.5, 4.5] (average of each column)
ROW-WISE MEANS: data=[[1,2,3],[4,5,6]], operations=["mean"], axis=1 Result: [2.0, 5.0] (average of each row)
OVERALL STATISTICS: data=[[1,2,3],[4,5,6]], operations=["mean","std"], axis=None Result: {mean: 3.5, std: 1.71}
MULTIPLE STATISTICS: data=[[1,2,3],[4,5,6]], operations=["min","max","mean"], axis=0 Result: {min: [1,2,3], max: [4,5,6], mean: [2.5,3.5,4.5]}
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Optional annotation to label this calculation (e.g., 'Bond A PV', 'Q2 revenue'). Appears in results for easy identification. | |
| output_mode | No | Output format: full (default), compact, minimal, value, or final. See batch_execute tool for details. | full |
| data | Yes | 2D array (e.g., [[1,2,3],[4,5,6]]) | |
| operations | Yes | Statistics to compute (e.g., ['mean','std']) | |
| axis | No | Axis: 0=column-wise, 1=row-wise, None=overall |
Input Schema (JSON Schema)
Implementation Reference
- src/vibe_math_mcp/tools/array.py:97-190 (handler)Primary handler implementation for array_statistics tool. Includes @mcp.tool decorator with description and annotations (schema), parameter definitions with Pydantic Field descriptions, and core logic using Polars DataFrame and NumPy for computing statistics (mean, median, std, min, max, sum) across entire array, columns (axis=0), or rows (axis=1). Formats result with shape and axis info.@mcp.tool( name="array_statistics", description="""Calculate statistical measures on arrays using Polars. Supports computation across entire array, rows, or columns. Examples: COLUMN-WISE MEANS: data=[[1,2,3],[4,5,6]], operations=["mean"], axis=0 Result: [2.5, 3.5, 4.5] (average of each column) ROW-WISE MEANS: data=[[1,2,3],[4,5,6]], operations=["mean"], axis=1 Result: [2.0, 5.0] (average of each row) OVERALL STATISTICS: data=[[1,2,3],[4,5,6]], operations=["mean","std"], axis=None Result: {mean: 3.5, std: 1.71} MULTIPLE STATISTICS: data=[[1,2,3],[4,5,6]], operations=["min","max","mean"], axis=0 Result: {min: [1,2,3], max: [4,5,6], mean: [2.5,3.5,4.5]}""", annotations=ToolAnnotations( title="Array Statistics", readOnlyHint=True, idempotentHint=True, ), ) async def array_statistics( data: Annotated[List[List[float]], Field(description="2D array (e.g., [[1,2,3],[4,5,6]])")], operations: Annotated[ List[Literal["mean", "median", "std", "min", "max", "sum"]], Field(description="Statistics to compute (e.g., ['mean','std'])"), ], axis: Annotated[ int | None, Field(description="Axis: 0=column-wise, 1=row-wise, None=overall") ] = None, ) -> str: """Calculate array statistics.""" try: df = list_to_polars(data) results = {} for op in operations: if axis is None: # Overall statistics across all values all_values = df.to_numpy().flatten() if op == "mean": results[op] = float(np.mean(all_values)) elif op == "median": results[op] = float(np.median(all_values)) elif op == "std": results[op] = float(np.std(all_values, ddof=1)) elif op == "min": results[op] = float(np.min(all_values)) elif op == "max": results[op] = float(np.max(all_values)) elif op == "sum": results[op] = float(np.sum(all_values)) elif axis == 0: # Column-wise statistics if op == "mean": results[op] = df.mean().to_numpy()[0].tolist() elif op == "median": results[op] = df.median().to_numpy()[0].tolist() elif op == "std": results[op] = df.std().to_numpy()[0].tolist() elif op == "min": results[op] = df.min().to_numpy()[0].tolist() elif op == "max": results[op] = df.max().to_numpy()[0].tolist() elif op == "sum": results[op] = df.sum().to_numpy()[0].tolist() elif axis == 1: # Row-wise statistics arr = df.to_numpy() if op == "mean": results[op] = np.mean(arr, axis=1).tolist() elif op == "median": results[op] = np.median(arr, axis=1).tolist() elif op == "std": results[op] = np.std(arr, axis=1, ddof=1).tolist() elif op == "min": results[op] = np.min(arr, axis=1).tolist() elif op == "max": results[op] = np.max(arr, axis=1).tolist() elif op == "sum": results[op] = np.sum(arr, axis=1).tolist() return format_result(results, {"shape": f"{len(data)}×{len(data[0])}", "axis": axis}) except Exception as e: raise ValueError(f"Statistics calculation failed: {str(e)}")
- src/vibe_math_mcp/tools/__init__.py:6-6 (registration)Import of array.py module in tools/__init__.py, which triggers registration of tools via @mcp.tool decorators.from . import array
- Input schema defined via Annotated types and Pydantic Field for data (2D list of floats), operations (list of specific stats), and optional axis.data: Annotated[List[List[float]], Field(description="2D array (e.g., [[1,2,3],[4,5,6]])")], operations: Annotated[ List[Literal["mean", "median", "std", "min", "max", "sum"]], Field(description="Statistics to compute (e.g., ['mean','std'])"), ], axis: Annotated[ int | None, Field(description="Axis: 0=column-wise, 1=row-wise, None=overall") ] = None, ) -> str: