npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@yasogan/math-mcp

v0.1.1

Published

A comprehensive math MCP server for AI agents

Downloads

341

Readme

@yasogan/math-mcp

npm version License: MIT Node.js >=18

A comprehensive Model Context Protocol server that exposes 8 mathematical tools to any MCP-compatible AI agent. Provides arithmetic, symbolic algebra, calculus, matrix operations, statistics, probability distributions, and unit conversions — no code required from the agent side.

Contents


Installation

Using npx (recommended)

No installation required — run directly:

{
  "mcpServers": {
    "math": {
      "command": "npx",
      "args": ["-y", "@yasogan/math-mcp"]
    }
  }
}

Local installation

npm install -g @yasogan/math-mcp
# or
pnpm add -g @yasogan/math-mcp

Then use directly:

{
  "mcpServers": {
    "math": {
      "command": "@yasogan/math-mcp"
    }
  }
}

Client configuration

| Client | Config Location | | -------------- | ----------------------------------------------------------------- | | Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json | | OpenCode | ~/.opencode/settings.json | | Zed | ~/.config/zed/settings.json | | Cursor | ~/.cursor/settings.json |


Quick Start

Example prompt to an AI agent:

"What's the determinant of a 3x3 matrix [[1,2,3],[4,5,6],[7,8,9]]?"

The agent will call:

matrix({ op: "determinant", a: [[1,2,3],[4,5,6],[7,8,9]] })

→ Returns 0


Tool Reference

evaluate

Purpose: Evaluate mathematical expressions using either numeric (mathjs) or symbolic (Algebrite) computation.

| Parameter | Type | Required | Description | | ------------ | --------------------------- | -------- | -------------------------------------------------------------------------------------------------------- | | expression | string | Yes | The mathematical expression to evaluate | | mode | 'numeric' | 'symbolic' | No | Default: 'numeric' — numeric uses mathjs for floating-point, symbolic uses Algebrite for exact results |

Numeric mode examples:

// Arithmetic
evaluate({ expression: "2^10 + sqrt(144)" }); // → 1036
evaluate({ expression: "factorial(10)" }); // → 3628800
evaluate({ expression: "gcd(48, 18)" }); // → 6

// Trigonometry
evaluate({ expression: "sin(pi/6)" }); // → 0.5
evaluate({ expression: "cos(45 deg)" }); // → 0.70710678
evaluate({ expression: "atan2(1, 1)" }); // → 0.78539816

// Complex numbers
evaluate({ expression: "(2+3i)*(1-i)" }); // → 5+i
evaluate({ expression: "abs(3+4i)" }); // → 5

// Matrices
evaluate({ expression: "det([[1,2],[3,4]])" }); // → -2
evaluate({ expression: "inv([[2,0],[0,4]])" }); // → [[0.5,0],[0,0.25]]

// BigNumber precision
evaluate({ expression: "bignumber(2)^100" }); // → 1.2676506002282294e30 (exact)

// Units
evaluate({ expression: "180 km/h to m/s" }); // → 50 m/s

Symbolic mode examples:

// Derivatives (symbolic)
evaluate({ expression: "diff(x^3 + 2*x, x)", mode: "symbolic" }); // → 3*x^2+2

// Integrals (symbolic)
evaluate({ expression: "integrate(x^2, x)", mode: "symbolic" }); // → 1/3*x^3

// Simplification
evaluate({ expression: "expand((x+1)*(x-1))", mode: "symbolic" }); // → x^2-1

solve

Purpose: Solve algebraic equations for a specified variable. Returns all roots including complex ones.

| Parameter | Type | Required | Description | | ---------- | ------ | -------- | ---------------------------------------------------------------- | | equation | string | Yes | Equation containing exactly one = (e.g., "x^2 - 5x + 6 = 0") | | variable | string | Yes | Variable to solve for (e.g., "x") |

Examples:

// Quadratic equation — returns both roots
solve({ equation: "x^2 - 5x + 6 = 0", variable: "x" });
// → { result: "2, 3", numeric: 2, latex: "x = 2, x = 3" }

// Cubic with complex roots
solve({ equation: "x^3 - 1 = 0", variable: "x" });
// → { result: "1, (-0.5)+(-0.8660254037844386*i), (-0.5)+(0.8660254037844386*i)", ... }

// Find specific root
solve({ equation: "x^2 - 4 = 0", variable: "x" });
// → { result: "2, -2", numeric: 2, latex: "x = 2, x = -2" }

Constraints:

  • Only polynomial equations supported
  • Exactly one = required
  • No inequalities (<, >, <=, >=)

simplify

Purpose: Simplify algebraic expressions using mathematical rules (combine like terms, evaluate constants, apply trig identities).

| Parameter | Type | Required | Description | | ------------ | ------ | -------- | ---------------------- | | expression | string | Yes | Expression to simplify |

Examples:

simplify({ expression: "sin(x)^2 + cos(x)^2" }); // → 1
simplify({ expression: "2*x + 3*x" }); // → 5*x
simplify({ expression: "3 + 4 * 2" }); // → 11
simplify({ expression: "(x+1)^2 - (x^2 + 2*x + 1)" }); // → 0
simplify({ expression: "exp(ln(x))" }); // → x

factor

Purpose: Factor polynomial expressions into irreducible components.

| Parameter | Type | Required | Description | | ------------ | ------ | -------- | -------------------- | | expression | string | Yes | Expression to factor |

Examples:

factor({ expression: "x^2 - 4" }); // → (x+2)*(x-2)
factor({ expression: "x^3 - 6*x^2 + 11*x - 6" }); // → (x-1)*(x-2)*(x-3)
factor({ expression: "12" }); // → 2^2*3
factor({ expression: "x^2 + 5*x + 6" }); // → (x+2)*(x+3)
factor({ expression: "a^2 - b^2" }); // → (a+b)*(a-b)

expand

Purpose: Expand factored or compound expressions into polynomial form.

| Parameter | Type | Required | Description | | ------------ | ------ | -------- | -------------------- | | expression | string | Yes | Expression to expand |

Examples:

expand({ expression: "(x+1)^3" }); // → x^3+3*x^2+3*x+1
expand({ expression: "(a+b)*(a-b)" }); // → a^2-b^2
expand({ expression: "(x+2)*(x-2)" }); // → x^2-4
expand({ expression: "2*(x+y)" }); // → 2*x+2*y

matrix

Purpose: Perform matrix and vector operations.

| Parameter | Type | Required | Description | | --------- | ---------- | -------- | ---------------------------------------------- | | op | string | Yes | Operation name | | a | number[][] | Yes | First matrix/vector | | b | number[][] | No | Second matrix/vector (required for binary ops) |

Supported operations:

| Operation | Description | Requires b? | | -------------- | --------------------------- | ------------- | | multiply | Matrix multiplication A × B | Yes | | add | Matrix addition A + B | Yes | | subtract | Matrix subtraction A - B | Yes | | inverse | Matrix inverse A⁻¹ | No | | transpose | Matrix transpose Aᵀ | No | | determinant | Determinant |A| | No | | eigenvalues | Eigenvalues of A | No | | eigenvectors | Eigenvectors of A | No | | rank | Matrix rank | No | | norm | Frobenius norm ‖A‖ | No | | trace | Matrix trace | No | | dot | Dot product of vectors | Yes | | cross | Cross product of 3D vectors | Yes |

Examples:

// Determinant
matrix({
  op: "determinant",
  a: [
    [1, 2],
    [3, 4],
  ],
});
// → -2

// Inverse
matrix({
  op: "inverse",
  a: [
    [4, 7],
    [2, 6],
  ],
});
// → [[0.6,-0.7],[-0.2,0.4]]

// Eigenvalues
matrix({
  op: "eigenvalues",
  a: [
    [2, 1],
    [1, 2],
  ],
});
// → [3, 1]

// Matrix multiplication
matrix({
  op: "multiply",
  a: [
    [1, 2],
    [3, 4],
  ],
  b: [
    [5, 6],
    [7, 8],
  ],
});
// → [[19,22],[43,50]]

// Dot product
matrix({ op: "dot", a: [[1, 2, 3]], b: [[4, 5, 6]] });
// → 32

// Cross product (3D vectors)
matrix({ op: "cross", a: [[1, 0, 0]], b: [[0, 1, 0]] });
// → [0, 0, 1]

Note: SVD is not supported. Use eigenvalues for similar decomposition.


statistics

Purpose: Descriptive statistics, probability distributions, and linear regression.

| Parameter | Type | Required | Description | | --------- | -------- | ------------- | -------------------------------------------------------------- | | op | string | Yes | Operation name | | data | number[] | Conditional* | Array of numbers (required for descriptive stats & regression) | | args | object | Conditional* | Distribution parameters (required for distributions) |

Descriptive operations (use data):

| Operation | Description | Notes | | ---------- | ------------------------- | ---------------------------------- | | mean | Arithmetic mean | | | median | Median value | | | mode | Most frequent value | Returns first if multiple | | std | Sample standard deviation | Uses n-1 denominator | | variance | Sample variance | Uses n-1 denominator | | min | Minimum value | | | max | Maximum value | | | sum | Sum of all values | | | quantile | Quantile value | Requires args.prob (default 0.5) | | mad | Median absolute deviation | | | skewness | Sample skewness | Requires n ≥ 3 | | kurtosis | Sample kurtosis | Requires n ≥ 4 |

Distribution operations (use args):

| Operation | Parameters | Description | | -------------- | ------------------ | ----------------------- | | normal_pdf | x, mean, std | Probability density | | normal_cdf | x, mean, std | Cumulative distribution | | normal_inv | p, mean, std | Inverse CDF (quantile) | | binomial_pmf | k, n, p | Probability mass | | binomial_cdf | k, n, p | Cumulative distribution | | poisson_pmf | k, lambda | Probability mass | | poisson_cdf | k, lambda | Cumulative distribution | | t_pdf | x, df | Student's t PDF | | t_cdf | x, df | Student's t CDF | | chi2_pdf | x, df | Chi-squared PDF | | chi2_cdf | x, df | Chi-squared CDF |

Regression operations (use data):

| Operation | Description | | ------------------- | -------------------------------------------------------------------- | | linear_regression | Simple linear regression (y = mx + b), x auto-indexed as [0,1,2,...] |

Examples:

// Descriptive statistics
statistics({ op: "mean", data: [4, 8, 15, 16, 23, 42] }); // → 18

// Standard deviation
statistics({ op: "std", data: [2, 4, 4, 4, 5, 5, 7, 9] });
// → 2.138

// Quantile (75th percentile)
statistics({ op: "quantile", data: [1, 2, 3, 4, 5], args: { prob: 0.75 } });
// → 4

// Normal PDF
statistics({
  op: "normal_pdf",
  args: { x: 0, mean: 0, std: 1 },
});
// → 0.398942

// Normal CDF (probability below z-score)
statistics({
  op: "normal_cdf",
  args: { x: 1.96, mean: 0, std: 1 },
});
// → 0.975

// Inverse normal (find z-score for 97.5th percentile)
statistics({
  op: "normal_inv",
  args: { p: 0.975, mean: 0, std: 1 },
});
// → 1.959964

// Binomial probability (exactly 3 heads in 10 flips)
statistics({
  op: "binomial_pmf",
  args: { k: 3, n: 10, p: 0.5 },
});
// → 0.117188

// Poisson (events in time interval)
statistics({
  op: "poisson_pmf",
  args: { k: 3, lambda: 2 },
});
// → 0.180447

// Linear regression
statistics({
  op: "linear_regression",
  data: [2, 4, 6, 8, 10],
});
// → { slope: 2, intercept: 0 }

units

Purpose: Convert between physical units of the same dimension.

| Parameter | Type | Required | Description | | ------------ | ------ | -------- | ------------------------------------ | | expression | string | Yes | Format: '<value> <unit> to <unit>' |

Supported unit categories:

| Category | Units | | ----------- | ------------------------------------------------------- | | Length | km, m, cm, mm, mi, yards, ft, in, nmi | | Mass | kg, g, mg, lb, oz, ton | | Temperature | degC, degF, K, rank | | Pressure | Pa, kPa, MPa, bar, atm, psi | | Energy | J, kJ, cal, kcal, Wh, kWh | | Speed | m/s, km/h, mph, knots, ft/s | | Area | m2, km2, ha, acre, ft2, mi2 | | Volume | L, mL, gal, qt, pt, cup, fl oz | | Time | s, min, h, day, week, year |

Examples:

units({ expression: "5 km to miles" }); // → 3.10686 miles
units({ expression: "100 degF to degC" }); // → 37.7778 degC
units({ expression: "1 atm to Pa" }); // → 101325 Pa
units({ expression: "60 mph to km/h" }); // → 96.5606 km/h
units({ expression: "1000 kg to lb" }); // → 2204.62 lb
units({ expression: "1 year to days" }); // → 365.242 days

Expression Syntax Guide

Arithmetic Operators

| Symbol | Operation | Example | | ------ | -------------- | ------------- | | + | Addition | 2 + 3 → 5 | | - | Subtraction | 7 - 4 → 3 | | * | Multiplication | 6 * 8 → 48 | | / | Division | 15 / 3 → 5 | | ^ | Exponentiation | 2^10 → 1024 | | % | Modulo | 17 % 5 → 2 |

Functions

sqrt(x); // Square root
abs(x); // Absolute value
log(x); // Natural logarithm
log10(x); // Base-10 logarithm
exp(x); // e^x
factorial(n); // n!
gcd(a, b); // Greatest common divisor
lcm(a, b); // Least common multiple
floor(x); // Round down
ceil(x); // Round up
round(x); // Round to nearest

Trigonometry

(sin(x), cos(x), tan(x)); // Standard functions
(asin(x), acos(x), atan(x)); // Inverses
atan2(y, x); // Two-argument atan
(sinh(x), cosh(x), tanh(x)); // Hyperbolic
(deg, rad); // Unit conversion

Constants

pi; // 3.14159...
e; // 2.71828...
i; // Imaginary unit

Special Values

(Infinity, -Infinity);
NaN;

Development

# Install dependencies
pnpm install

# Build TypeScript
pnpm build

# Run tests
pnpm test

# Run in development (no build required)
pnpm dev

# Run in development with watch
pnpm test:watch

Tech stack: TypeScript, MCP SDK, mathjs, Algebrite, Vitest


License

MIT