Skip to main content
Glama
apetta

Vibe Math MCP

by apetta

array_aggregate

Calculate sumproduct, weighted average, or dot product operations on 1D arrays for mathematical analysis and data processing.

Instructions

Perform aggregation operations on 1D arrays.

Examples:

SUMPRODUCT: operation="sumproduct", array1=[1,2,3], array2=[4,5,6] Result: 32 (1×4 + 2×5 + 3×6)

WEIGHTED AVERAGE: operation="weighted_average", array1=[10,20,30], weights=[1,2,3] Result: 23.33... ((10×1 + 20×2 + 30×3) / (1+2+3))

DOT PRODUCT: operation="dot_product", array1=[1,2], array2=[3,4] Result: 11 (1×3 + 2×4)

GRADE CALCULATION: operation="weighted_average", array1=[85,92,78], weights=[0.3,0.5,0.2] Result: 86.5

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
contextNoOptional annotation to label this calculation (e.g., 'Bond A PV', 'Q2 revenue'). Appears in results for easy identification.
output_modeNoOutput format: full (default), compact, minimal, value, or final. See batch_execute tool for details.full
operationYesAggregation operation
array1YesFirst 1D array (e.g., [1,2,3])
array2NoSecond 1D array for sumproduct/dot_product
weightsNoWeights for weighted_average (e.g., [1,2,3])

Implementation Reference

  • The main handler function that executes the array_aggregate tool. It parses inputs, performs NumPy-based aggregations (sumproduct/dot_product via np.dot, weighted_average via np.average), handles errors, and formats the result.
    async def array_aggregate(
        operation: Annotated[
            Literal["sumproduct", "weighted_average", "dot_product"],
            Field(description="Aggregation operation"),
        ],
        array1: Annotated[List[float], Field(description="First 1D array (e.g., [1,2,3])")],
        array2: Annotated[
            Union[str, List[float], None],
            Field(description="Second 1D array for sumproduct/dot_product"),
        ] = None,
        weights: Annotated[
            Union[str, List[float], None],
            Field(description="Weights for weighted_average (e.g., [1,2,3])"),
        ] = None,
    ) -> str:
        """Aggregate 1D arrays."""
        try:
            # Parse stringified JSON from XML serialization
            if isinstance(array2, str):
                array2 = cast(List[float], json.loads(array2))
            if isinstance(weights, str):
                weights = cast(List[float], json.loads(weights))
    
            arr1 = np.array(array1, dtype=float)
    
            if operation == "sumproduct" or operation == "dot_product":
                if array2 is None:
                    raise ValueError(f"{operation} requires array2")
                arr2 = np.array(array2, dtype=float)
                if len(arr1) != len(arr2):
                    raise ValueError(f"Arrays must have same length. Got {len(arr1)} and {len(arr2)}")
                result = float(np.dot(arr1, arr2))
    
            elif operation == "weighted_average":
                if weights is None:
                    raise ValueError("weighted_average requires weights")
                w = np.array(weights, dtype=float)
                if len(arr1) != len(w):
                    raise ValueError(
                        f"Array and weights must have same length. Got {len(arr1)} and {len(w)}"
                    )
                result = float(np.average(arr1, weights=w))
    
            else:
                raise ValueError(f"Unknown operation: {operation}")
    
            return format_result(result, {"operation": operation})
        except Exception as e:
            raise ValueError(f"Aggregation failed: {str(e)}")
  • Input schema defined using Pydantic Annotated types for the tool parameters: operation (enum), array1 (required list), array2 (optional for sumproduct/dot), weights (optional for weighted_avg).
        operation: Annotated[
            Literal["sumproduct", "weighted_average", "dot_product"],
            Field(description="Aggregation operation"),
        ],
        array1: Annotated[List[float], Field(description="First 1D array (e.g., [1,2,3])")],
        array2: Annotated[
            Union[str, List[float], None],
            Field(description="Second 1D array for sumproduct/dot_product"),
        ] = None,
        weights: Annotated[
            Union[str, List[float], None],
            Field(description="Weights for weighted_average (e.g., [1,2,3])"),
        ] = None,
    ) -> str:
  • Tool registration using @mcp.tool decorator, specifying name, description with examples, and annotations for read-only and idempotent hints.
    @mcp.tool(
        name="array_aggregate",
        description="""Perform aggregation operations on 1D arrays.
    
    Examples:
    
    SUMPRODUCT:
        operation="sumproduct", array1=[1,2,3], array2=[4,5,6]
        Result: 32 (1×4 + 2×5 + 3×6)
    
    WEIGHTED AVERAGE:
        operation="weighted_average", array1=[10,20,30], weights=[1,2,3]
        Result: 23.33... ((10×1 + 20×2 + 30×3) / (1+2+3))
    
    DOT PRODUCT:
        operation="dot_product", array1=[1,2], array2=[3,4]
        Result: 11 (1×3 + 2×4)
    
    GRADE CALCULATION:
        operation="weighted_average", array1=[85,92,78], weights=[0.3,0.5,0.2]
        Result: 86.5""",
        annotations=ToolAnnotations(
            title="Array Aggregation",
            readOnlyHint=True,
            idempotentHint=True,
        ),
    )

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/apetta/vibe-math-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server