Math-MCP
# Math-MCP
A Model Context Protocol (MCP) server that provides basic mathematical, statistical and trigonometric functions to Large Language Models (LLMs). This server enables LLMs to perform accurate numerical calculations through a simple API.
<a href="https://glama.ai/mcp/servers/exa5lt8dgd">
<img width="380" height="200" src="https://glama.ai/mcp/servers/exa5lt8dgd/badge" alt="Math-MCP MCP server" />
</a>
## Features
- Basic arithmetic operations (addition, subtraction, multiplication, division, sum, modulo)
- Statistical functions (mean, median, mode, min, max)
- Advanced statistics (variance, standard deviation, percentile, correlation, linear regression)
- Rounding functions (floor, ceiling, round)
- Trigonometric functions (sin, cos, tan, and their inverses; degrees/radians conversions)
- Exact number theory and combinatorics (GCD, LCM, primes, factors, factorials, combinations, permutations)
- Exact fraction simplification and arithmetic using arbitrary-size integers
- Percentages, compound interest, and fixed-rate loan payments
- Quadratic equations and 2x2 linear systems, including complex or non-unique solutions
- 3D graphics transforms, bone hierarchies, camera matrices, and world-to-screen projection
- Bayes' theorem and normalized multi-hypothesis Bayesian updates
## Installation
> **Note:** Ensure you have [Node.js](https://nodejs.org/en/download) installed on your computer.
Just clone this repository and save it locally somewhere on your computer.
Then add this server to your MCP configuration file:
```json
"math": {
"command": "node",
"args": ["PATH\\TO\\PROJECT\\math-mcp\\build\\index.js"]
}
```
Here is an example for OpenCode
```json
{
"mcp": {
"math-mcp": {
"type": "local",
"command": [
"node",
"PATH\\TO\\PROJECT\\math-mcp\\build\\index.js"
]
}
}
}
```
Replace `PATH\\TO\\PROJECT` with the actual path to where you cloned the repository.
> **Note:** This project comes prebuilt, so installation is easy but if you change anything in the code, rebuild the project with `npm run build`.
## Available Functions
The Math-MCP server provides the following mathematical operations:
### Arithmetic Operations
| Function | Description | Parameters |
|----------|-------------|------------|
| `add` | Adds two numbers together | `firstNumber`: The first addend<br>`secondNumber`: The second addend |
| `subtract` | Subtracts the second number from the first number | `minuend`: The number to subtract from (minuend)<br>`subtrahend`: The number being subtracted (subtrahend) |
| `multiply` | Multiplies two numbers together | `firstNumber`: The first number<br>`secondNumber`: The second number |
| `division` | Divides the first number by the second number | `numerator`: The number being divided (numerator)<br>`denominator`: The number to divide by (denominator) |
| `sum` | Adds any number of numbers together | `numbers`: Array of numbers to sum |
| `modulo` | Divides two numbers and returns the remainder | `numerator`: The number being divided (numerator)<br>`denominator`: The number to divide by (denominator) |
| `floor` | Rounds a number down to the nearest integer | `number`: The number to round down |
| `ceiling` | Rounds a number up to the nearest integer | `number`: The number to round up |
| `round` | Rounds a number to the nearest integer | `number`: The number to round |
### Statistical Operations
| Function | Description | Parameters |
|----------|-------------|------------|
| `mean` | Calculates the arithmetic mean of a list of numbers | `numbers`: Array of numbers to find the mean of |
| `median` | Calculates the median of a list of numbers | `numbers`: Array of numbers to find the median of |
| `mode` | Finds the most common number in a list of numbers | `numbers`: Array of numbers to find the mode of |
| `min` | Finds the minimum value from a list of numbers | `numbers`: Array of numbers to find the minimum of |
| `max` | Finds the maximum value from a list of numbers | `numbers`: Array of numbers to find the maximum of |
| `variance` | Calculates population or sample variance | `numbers`: Values<br>`sample`: Optional; use `true` for n-1 |
| `standard_deviation` | Calculates population or sample standard deviation | `numbers`: Values<br>`sample`: Optional; use `true` for n-1 |
| `percentile` | Calculates an inclusive R-7/Excel-style percentile | `numbers`: Values<br>`percentile`: 0 through 100 |
| `correlation` | Calculates Pearson correlation for paired observations | `firstValues`: First series<br>`secondValues`: Second series |
| `linear_regression` | Fits `y = slope*x + intercept` and returns R-squared | `xValues`: X series<br>`yValues`: Y series |
### Exact and Number-Theory Operations
| Function | Description | Parameters |
|----------|-------------|------------|
| `greatest_common_divisor` | Finds the GCD of two safe integers | `first`, `second`: Integers |
| `least_common_multiple` | Finds the exact LCM as a decimal string | `first`, `second`: Integers |
| `is_prime` | Tests a safe integer for primality | `value`: Non-negative integer |
| `prime_factors` | Finds prime factors up to 1,000,000,000,000 | `value`: Integer |
| `factorial` | Calculates n! exactly through 1000! | `value`: Integer |
| `combinations` | Calculates n choose r exactly | `total`: n<br>`selected`: r |
| `permutations` | Calculates nPr exactly | `total`: n<br>`selected`: r |
| `simplify_fraction` | Reduces an arbitrary-size integer fraction exactly | `numerator`, `denominator`: Decimal integer strings |
| `fraction_arithmetic` | Adds, subtracts, multiplies, or divides fractions exactly | `operation`; two numerator/denominator pairs as strings |
### Applied Operations
| Function | Description | Parameters |
|----------|-------------|------------|
| `percentage_of` | Calculates a percentage of a value | `value`<br>`percentage`: Use 15 for 15% |
| `percentage_change` | Calculates percent increase or decrease | `originalValue`<br>`newValue` |
| `round_to` | Rounds to a requested number of decimal places | `value`<br>`decimalPlaces`: 0 through 15 |
| `compound_interest` | Calculates compound growth and optional end-of-period contributions | `principal`, `annualRatePercent`, `years`, `compoundsPerYear`, optional `contributionPerPeriod` |
| `loan_payment` | Calculates fixed-rate payment, total paid, and total interest | `principal`, `annualRatePercent`, `years`, `paymentsPerYear` |
### Algebra Operations
| Function | Description | Parameters |
|----------|-------------|------------|
| `solve_quadratic` | Solves `a*x^2 + b*x + c = 0`, including complex roots | `a`, `b`, `c` |
| `solve_linear_system_2x2` | Solves or classifies two linear equations | Coefficients `a1`, `b1`, `c1`, `a2`, `b2`, `c2` |
### 3D Graphics and Bone Projection
All matrices are flat, **row-major 4x4 arrays** used with **column vectors**. Transform
composition is `projection * view * world * point`. Quaternions use `{x, y, z, w}`;
Euler inputs are radians. Defaults are right-handed coordinates, OpenGL-style
NDC depth `-1..1`, and a top-left screen origin where Y points down.
| Function | Description |
|----------|-------------|
| `quaternion_from_euler` | Converts Euler radians and an explicit rotation order to a quaternion |
| `compose_transform_4x4` | Builds a `translation * rotation * scale` matrix |
| `multiply_matrices_4x4` | Multiplies two matrices as `first * second` |
| `transform_point_3d` | Applies a matrix to a 3D point with homogeneous `w=1` |
| `bone_local_to_world` | Combines one bone's local transform with its parent world matrix |
| `bone_hierarchy_to_world` | Resolves named parent/child local transforms into world-space bones |
| `look_at_view_matrix` | Creates a right- or left-handed world-to-view camera matrix |
| `perspective_projection_matrix` | Creates a projection matrix with selectable handedness and clip-depth range |
| `world_to_view` | Applies the view matrix to a world-space point |
| `view_to_clip` | Applies the projection matrix to produce a 4D clip-space point |
| `clip_to_ndc` | Performs perspective division: `(x/w, y/w, z/w)` |
| `ndc_to_screen` | Scales NDC to a requested pixel width and height |
| `world_to_screen` | Runs projection with a combined `projection * view` matrix and reports visibility |
| `project_bone_points` | Batch-projects named world-space bone positions to 2D screen coordinates |
The explicit projection pipeline is:
```text
world point -> view matrix -> view point
view point -> projection matrix -> clip point (x, y, z, w)
clip point -> divide by w -> NDC
NDC -> resolution scaling -> screen pixels
```
### Probability Operations
| Function | Description | Parameters |
|----------|-------------|------------|
| `bayes_theorem` | Calculates `P(H|E) = P(E|H)P(H)/P(E)` | `prior`, `likelihood`, `evidence` |
| `bayes_update_hypotheses` | Normalizes likelihood-weighted priors across hypotheses | Array of hypothesis labels, priors, and likelihoods |
### Trigonometric Operations
| Function | Description | Parameters |
|----------|-------------|------------|
| `sin` | Calculates the sine of a number in radians | `number`: The number in radians to find the sine of |
| `arcsin` | Calculates the arcsine (in radians) of a number | `number`: The number to find the arcsine of |
| `cos` | Calculates the cosine of a number in radians | `number`: The number in radians to find the cosine of |
| `arccos` | Calculates the arccosine (in radians) of a number | `number`: The number to find the arccosine of |
| `tan` | Calculates the tangent of a number in radians | `number`: The number in radians to find the tangent of |
| `arctan` | Calculates the arctangent (in radians) of a number | `number`: The number to find the arctangent of |
| `radiansToDegrees` | Converts a radian value to its equivalent in degrees | `number`: The number in radians to convert to degrees |
| `degreesToRadians` | Converts a degree value to its equivalent in radians | `number`: The number in degrees to convert to radians |
TDQS
Scored across 59 tools
Each tool has a distinct mathematical operation with clear descriptions. Overlaps are minimal (e.g., add vs. sum, round vs. round_to) but descriptions differentiate them. No two tools perform the same function.
The naming convention is inconsistent: single-word names (min, add), snake_case (percentage_of, compose_transform_4x4), and camelCase (radiansToDegrees) are mixed. Verbs like 'division' instead of 'divide' break patterns. While many tools follow verb_noun or noun_verb, the overall pattern is chaotic.
With 59 tools, the server is extremely heavy for an MCP server. While each tool is well-defined, the sheer number can overwhelm an agent's tool selection. A more focused scope (e.g., separating linear algebra from basic arithmetic) would improve usability.
The tool set covers a vast range of mathematical domains: arithmetic, trigonometry, statistics, number theory, finance, linear algebra, 3D graphics, and probability. Minor gaps exist (e.g., no general linear system solver beyond 2x2, no calculus operations), but overall it is very comprehensive for a general math server.