Math MCP Server
The Math MCP server exposes 7 mathematical tools for use in Claude integrations, with security, caching, and optional observability built in.
Evaluate (
evaluate): Compute arithmetic/algebraic expressions with optional variable bindings (e.g.,x^2 + 2*xwith{x: 5}).Simplify (
simplify): Symbolically simplify algebraic expressions (e.g.,2*x + x→3*x), with optional custom rules.Derivative (
derivative): Compute symbolic derivatives with respect to a variable (e.g.,x^2→2*x).Solve (
solve): Find exact roots for polynomials up to degree 3, or numeric roots for higher-degree/transcendental equations.Matrix Operations (
matrix_operations): Multiply, add, subtract, inverse, determinant, transpose, and eigenvalues on JSON-encoded matrices.Statistics (
statistics): Compute mean, median, mode, std, variance, min, max, sum, and product over a dataset.Unit Conversion (
unit_conversion): Convert between units of length, temperature, speed, and more (e.g.,100 fahrenheit→celsius).
Security: Expression sandboxing, input/size limits (max matrix dimension, array length, nesting depth), and token-bucket rate limiting.
Performance: LRU cache for parsed/evaluated expressions, Prometheus metrics, and Kubernetes-style health probes.
Exports metrics in Prometheus format for monitoring operations, performance, and health of the math MCP server.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Math MCP Servercalculate the derivative of x^2 + 3x - 5"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Math MCP Server
A secure, production-ready MCP (Model Context Protocol) server exposing seven mathematical tools — expression evaluation, symbolic calculus (derivative, simplify), equation solving, matrix algebra, statistics, and unit conversion.
Computation is powered by MathTS
(@danielsimonjr/mathts-*), a TypeScript computer-algebra engine with a
mathjs-compatible API. The server layers input validation, expression
sandboxing, rate limiting, and Prometheus/health observability on top of it.
Engine note (v4): As of v4.0.0 the compute engine is MathTS, not mathjs. The tool I/O contracts are unchanged; only the internals differ. The earlier multi-tier acceleration stack (WASM / WebWorkers / WebGPU) was removed in the v4 cutover — MathTS handles its own internal dispatch, and large-input safety is enforced by size limits rather than a fallback chain. See CHANGELOG.md.
Companion skill
The plugin also ships a math skill (math-mcp:math, /math) — a playbook
that steers Claude to offload computation to these tools instead of doing
mental math, with composed workflows for solving, calculus, matrices,
statistics, and units. See skills/math/SKILL.md.
Related MCP server: SymPy Sandbox MCP
✨ Features
7 mathematical tools
evaluate — evaluate expressions, with optional variables (
scope)simplify — symbolic simplification of algebraic expressions
derivative — symbolic differentiation
solve — solve equations for a variable
matrix_operations — multiply, inverse, determinant, transpose, eigenvalues, add, subtract
statistics — mean, median, mode, std, variance, min, max, sum, product
unit_conversion — convert a value between units
Security
Expression sandboxing: AST validation blocks code injection, dangerous functions, and assignments (
src/validation.ts).Input & size limits: length, nesting-depth, matrix-dimension, and array-length caps prevent resource exhaustion. Oversized inputs are rejected up front (synchronous JS can't be interrupted, so protection is by size limit, not timeout).
Rate limiting: token-bucket limiter with configurable per-window, concurrency, and queue limits (
src/rate-limiter.ts).
Performance & reliability
Expression cache: LRU cache for parsed/evaluated expressions (
src/expression-cache.ts).Observability (optional): set
ENABLE_TELEMETRY=trueto start an HTTP endpoint (default port 9090,src/telemetry/) exposing Prometheus metrics and Kubernetes-style health probes:GET /metrics,GET /health,GET /health/live,GET /health/ready.
Example usage
// Matrix operations — matrices are JSON strings
matrix_operations("determinant", "[[1,2],[3,4]]") // -2
matrix_operations("multiply", "[[1,2],[3,4]]", "[[5,6],[7,8]]") // [[19,22],[43,50]]
// Statistics — data is a JSON string; mode returns an array
statistics("mean", "[1,2,3,4,5]") // 3
statistics("mode", "[1,2,2,3,4]") // [2]
// Symbolic math
derivative("x^2", "x") // "2 * x"
simplify("2 * x + x") // "3 * x"
// Unit conversion (use compound forms like mi/h — not mph)
unit_conversion("5 inches", "cm") // "12.7 cm"📦 Installation
Requirements
Node.js ≥ 18.0.0
npm ≥ 8.0.0
Platform: Windows, macOS, or Linux
Quick start
git clone https://github.com/danielsimonjr/math-mcp.git
cd math-mcp
npm install
npm run build # tsc — the only build step
npm test # integration testsVerify installation
node --version # v18.0.0 or higher
npm run type-check # completes without errors
npm test # integration tests passIntegration with Claude Desktop
Add to your Claude Desktop config (%APPDATA%\Claude\claude_desktop_config.json
on Windows; ~/Library/Application Support/Claude/claude_desktop_config.json on
macOS; ~/.config/Claude/claude_desktop_config.json on Linux):
{
"mcpServers": {
"math-mcp": {
"command": "node",
"args": ["/path/to/math-mcp/dist/index.js"]
}
}
}Integration with Claude CLI
claude mcp add --transport stdio math-mcp node /path/to/math-mcp/dist/index.js🧮 Tools documentation
1. evaluate
Evaluate a mathematical expression, optionally with variables.
expression(string) — the expressionscope(object, optional) — variable values, e.g.{x: 5}
evaluate("2 + 2") // 4
evaluate("sqrt(16)") // 4
evaluate("x^2 + 2*x", {x: 5}) // 35
evaluate("derivative(x^2, x)") // "2 * x"2. simplify
Simplify an expression.
expression(string)
simplify("2 * x + x") // "3 * x"
simplify("(x + 2)^2") // "x^2 + 4*x + 4"3. derivative
Differentiate symbolically.
expression(string),variable(string)
derivative("x^2", "x") // "2 * x"
derivative("sin(x)", "x") // "cos(x)"4. solve
Solve an equation for a variable. Returns exact roots (including complex) for polynomials of degree ≤ 3; for degree ≥ 4 or transcendental equations it falls back to numeric, real roots only.
equation(string),variable(string)
solve("x^2 - 4 = 0", "x") // roots of x
solve("2*x + 3 = 7", "x") // x = 25. matrix_operations
Matrix algebra. Matrices are passed as JSON strings.
operation(string) —multiply,inverse,determinant,transpose,eigenvalues,add,subtractmatrix_a(string) — e.g."[[1,2],[3,4]]"matrix_b(string, optional) — for binary operations
matrix_operations("determinant", "[[1,2],[3,4]]") // -2
matrix_operations("multiply", "[[1,2],[3,4]]", "[[5,6],[7,8]]") // [[19,22],[43,50]]
matrix_operations("transpose", "[[1,2,3],[4,5,6]]") // [[1,4],[2,5],[3,6]]6. statistics
Dataset statistics. Data is passed as a JSON string. Note: mode returns an
array (single mode [value], multiple modes [v1, v2]).
operation(string) —mean,median,mode,std,variance,min,max,sum,productdata(string) — e.g."[1,2,3,4,5]"
statistics("mean", "[1,2,3,4,5]") // 3
statistics("std", "[2,4,4,4,5,5,7,9]") // 2
statistics("mode", "[1,2,2,3,4,4,4,5]") // [4]7. unit_conversion
Convert a value between units.
value(string) — value with unit, e.g."5 inches"target_unit(string) — e.g."cm"
Use compound forms for speeds (mi/h, km/h, m/s); the shorthands mph /
kph / knot are not recognized units. Some astronomical/nautical units
(lightyear, parsec, AU, nauticalMile, …) are not in the unit set.
unit_conversion("5 inches", "cm") // "12.7 cm"
unit_conversion("100 fahrenheit", "celsius") // "37.78 celsius"
unit_conversion("50 mi/h", "km/h") // "80.47 km/h"🏗️ Architecture
MCP client (stdio)
↓
src/index.ts — MCP server + 7 tool definitions (→ dist/index.js, the bin)
↓
src/tool-handlers.ts — validate → compute → format, per tool
↓
src/math-engine.ts — MathTS instance (create(all), mathjs-compatible)Compute: MathTS (
@danielsimonjr/mathts-compat,@danielsimonjr/mathts-matrix). No acceleration router / WASM / worker / GPU tier — those were removed in v4; MathTS does its own internal dispatch.Safety: input validation and size limits (
src/validation.ts), token-bucket rate limiting (src/rate-limiter.ts), expression cache (src/expression-cache.ts).Observability: Prometheus metrics + health probes on port 9090 (
src/telemetry/).
Project structure
math-mcp/
├── src/
│ ├── index.ts # MCP server + 7 tool definitions (→ dist/index.js, bin)
│ ├── math-engine.ts # Builds the MathTS instance (create(all))
│ ├── tool-handlers.ts # Business logic for the 7 tools
│ ├── handler-utils.ts # Shared handler helpers
│ ├── validation.ts # Input validation, sandboxing, size limits
│ ├── rate-limiter.ts # Token-bucket rate limiting
│ ├── expression-cache.ts # LRU cache for parsed/evaluated expressions
│ ├── health.ts # Health-check system
│ ├── errors.ts / types.ts
│ ├── shared/ # constants.ts, logger.ts
│ └── telemetry/ # metrics.ts (Prometheus), server.ts (HTTP :9090)
├── test/
│ ├── integration-test.js # Integration tests
│ ├── correctness-tests.js
│ ├── unit/ # Vitest unit tests
│ └── security/ # Security tests (injection, DoS, fuzzing, bounds)
├── dist/ # Compiled JavaScript (dist/index.js is the entry)
├── skills/math/ # Companion `math` skill (math-mcp:math, /math)
├── docs/ # Documentation
├── CHANGELOG.md · CONTRIBUTING.md · SECURITY.md · LICENSE · package.json🧪 Development
npm run build # tsc
npm start # node dist/index.js
npm run dev # tsc && node dist/index.js
npm test # integration tests
npm run test:correctness
npm run test:unit # Vitest
npm run test:security # Vitest security suite
npm run test:coverage
npm run type-check # tsc --noEmit
npm run lint # ESLint
npm run lint:fix
npm run format # Prettier
npm run format:check🔧 Configuration
Environment variables read by the server:
# Logging
LOG_LEVEL=debug|info|warn|error # verbosity (default: debug; info when NODE_ENV=production)
ENABLE_PERF_LOGGING=true # per-call performance logging (default: off)
DISABLE_PERF_TRACKING=true # disable internal perf tracking (default: tracking on)
# Rate limiting
MAX_REQUESTS_PER_WINDOW=100 # requests per window (default: 100)
RATE_LIMIT_WINDOW_MS=60000 # window length, ms (default: 60000)
MAX_CONCURRENT_REQUESTS=10 # max in-flight operations (default: 10)
MAX_QUEUE_SIZE=50 # max queued requests (default: 50)
OPERATION_TIMEOUT=30000 # per-operation timeout, ms (default: 30000)
# Cache & telemetry
EXPRESSION_CACHE_SIZE=1000 # LRU expression-cache entries (default: 1000)
ENABLE_TELEMETRY=true # start the metrics/health HTTP server (default: off)
TELEMETRY_PORT=9090 # metrics/health port (default: 9090)Input size limits are fixed constants in src/validation.ts (not
environment-configurable): max matrix dimension 1000×1000, max array length
100000, max expression length 10000, max nesting depth 50.
🐛 Troubleshooting
Unit "X" not found.— the unit isn't in MathTS's set. Use compound speed forms (mi/h, notmph); some astronomical/nautical units aren't available.Undefined symbol x— an expression left a free variable (e.g. mixing a symbolic term with a numeric one inevaluate). Supplyscope, or keep symbolic and numeric parts separate.Input rejected as too large — inputs above the size limits (matrix 1000×1000, array 100000, expression 10000 chars, nesting depth 50) are refused by design. These limits are fixed constants in
src/validation.ts.Build/test issues — ensure Node ≥ 18, then
npm install && npm run build && npm test.
📚 Documentation
CHANGELOG.md — version history
CONTRIBUTING.md — contribution guidelines
SECURITY.md — security policy
skills/math/SKILL.md — the
mathcompanion skill playbook
🤝 Contributing
Contributions welcome — see CONTRIBUTING.md. Fork, branch,
make changes, npm test, commit with a conventional-commit message, and open a
pull request.
📄 License
ISC License — see LICENSE.
🙏 Acknowledgments
MathTS — the TypeScript compute engine (mathjs-compatible API)
MCP SDK — Model Context Protocol implementation
Made with ❤️ by the math-mcp contributors
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides 21 mathematical tools across 6 domains including basic calculations, array operations, statistics, financial mathematics, linear algebra, and calculus. Supports batch execution for complex multi-step workflows with intelligent dependency resolution.Last updated216MIT
- AlicenseAqualityCmaintenanceA secure mathematical computation sandbox that enables LLMs to perform symbolic math operations like algebra, calculus, and equation solving via SymPy. It features low-latency execution through pre-warmed process pools and provides standardized JSON outputs for reliable agent integration.Last updated12MIT
- AlicenseCqualityCmaintenanceA comprehensive MCP server that turns any AI assistant into a powerful mathematical computation engine, providing 52 advanced functions, 158 unit conversions, financial calculations, and secure AST-based evaluation.Last updated1810MIT
- AlicenseBqualityDmaintenanceProvides mathematical calculation capabilities using MathJS, enabling expression evaluation and derivative calculation.Last updated232MIT
Related MCP Connectors
Precision math engine for AI agents. 203 exact methods. Zero hallucination.
This MCP server enables users to perform scientific computations regarding linear algebra and vect…
Evaluate, simplify, and differentiate mathematical expressions.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/danielsimonjr/math-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server