The library split is stated per tool rather than hidden — SymPy where an answer should stay symbolic, Polars where the data is columnar, NumPy BLAS and SciPy for linear algebra — so derivative returns 3*x^2 + 4*x rather than a float, and solve_linear_system takes an overdetermined system under method=least_squares instead of refusing it. The breadth is the trade: 21 tools that each carry context and output_mode on top of their own arguments is a wide surface to hold in front of a model, and batch_execute exists because walking a chained calculation one call at a time is the expensive path.
A calculation server that routes each kind of maths to an established library — SymPy for symbolic expressions, limits and series, Polars for array statistics, pivot tables and correlation, NumPy BLAS for matrix operations, SciPy for linear systems — across 21 tools that all take a context string and an output_mode.
- Expression evaluation that keeps the variables: calculate runs an expression through SymPy with arithmetic, trigonometry, logarithms, sqrt, abs and the constants pi and e, and takes a variables argument so x^2 + 2*x + 1 is evaluated rather than left symbolic.
- Everyday number work as named operations instead of formulas: percentage takes an operation of of, increase or decrease, or the change between values; round takes a method of round, floor, ceil or trunc with a decimals count; convert_units moves a value between degrees and radians.
- Array work through Polars: array_operations applies an operation element-wise between arrays or between an array and a scalar, array_aggregate covers sumproduct, weighted_average with a weights list and dot_product, array_statistics computes along an axis for row-wise or column-wise results, and array_transform offers normalize, standardize, minmax_scale and log_transform.
- Descriptive statistics and cross-tabulation: statistics runs describe for count, mean, std, min, max and median, quartiles for Q1 through Q3 and IQR, and outliers by IQR-based detection; correlation builds a pearson or spearman matrix; pivot_table reshapes records by index and columns with values aggregated by aggfunc.
- Time value of money in the terms the question is asked in: financial_calcs solves for present value, future value, payment, rate, IRR or NPV given the others, under a sign convention where cash out is negative; compound_interest takes a frequency for discrete or continuous compounding; perpetuity prices level and growing perpetuities from payment, rate and growth_rate.
- Linear algebra on NumPy BLAS and SciPy: matrix_operations covers multiply, inverse, transpose and determinant, solve_linear_system takes coefficients and constants with a method of direct or least_squares so an overdetermined system resolves to a best fit, and matrix_decomposition returns eigenvalues and eigenvectors, SVD, QR, Cholesky or LU.
- Symbolic calculus rather than numeric approximation: derivative takes an order for higher derivatives and a point to evaluate at, integral takes lower_bound and upper_bound for a definite integral or neither for the antiderivative, and limits_series computes limits including one-sided limits by direction and limits at infinity.
- Multi-step calculations as one call: batch_execute takes an operations list with automatic dependency chaining, so a step whose input is an earlier step's output runs in the same request, governed by execution_mode, max_concurrent and stop_on_error.
Nothing — no account, no key.
One command — uvx vibe-math-mcp
