advanced-math-mcp

advanced-math-mcp — Serveur MCP pour l'algèbre linéaire, le calcul infinitésimal et les mathématiques symboliques. 17 outils avec un moteur d'expression unifié evaluate(). Prend en charge les matrices, les valeurs propres, la SVD, les intégrales, les limites, les dérivées, et plus encore.

Documentation

advanced-math-mcp

MCP (Model Context Protocol) server for advanced mathematics — linear algebra, vector math, symbolic computation, and calculus. Designed for use with Claude and other MCP-compatible LLMs.

Quick Start

npm install -g advanced-math-mcp

Then add to your MCP client configuration (e.g., mcp_settings.json):

{
  "mcpServers": {
    "advanced-math-mcp": {
      "command": "advanced-math-mcp",
      "args": [],
      "alwaysAllow": [
        "evaluate",
        "set_variable",
        "get_variable",
        "list_variables",
        "clear_variables",
        "matrix_create",
        "matrix_identity",
        "matrix_zeros",
        "matrix_diagonal",
        "symbolic_simplify",
        "symbolic_substitute",
        "symbolic_derivative",
        "symbolic_expand",
        "symbolic_integrate",
        "symbolic_definite_integral",
        "symbolic_limit",
        "symbolic_partial_derivative"
      ]
    }
  }
}

Tools (17 total)

Unified Expression Evaluator

ToolDescription
evaluateUniversal expression evaluator with natural math syntax. Supports matrices, vectors, scalars, decompositions, and custom functions.
set_variableDefine a named variable (matrix, vector, or scalar) for use in evaluate
get_variableRetrieve a variable's value
list_variablesList all defined variables and their types
clear_variablesReset all variables

Matrix Creation

ToolDescription
matrix_createCreate a matrix from a 2D array of strings
matrix_identityCreate an n×n identity matrix
matrix_zerosCreate an m×n matrix of zeros
matrix_diagonalCreate a diagonal matrix from a vector of values

Symbolic Math

ToolDescription
symbolic_simplifySimplify algebraic expressions
symbolic_expandExpand factored expressions
symbolic_substituteSubstitute variables with values or expressions
symbolic_derivativeCompute ordinary derivatives (single-variable)
symbolic_partial_derivativeCompute partial derivatives (multivariable)
symbolic_integrateCompute indefinite integrals (antiderivatives)
symbolic_definite_integralCompute definite integrals with bounds
symbolic_limitCompute limits of expressions

evaluate — The Universal Evaluator

All matrix/vector operations use a single evaluate tool with natural expression syntax:

Matrix Operations

// Arithmetic
evaluate("A + B")           // addition
evaluate("A - B")           // subtraction
evaluate("A * B")           // matrix multiplication
evaluate("A ^ 3")           // matrix power

// Properties
evaluate("det(A)")          // determinant
evaluate("trace(A)")        // trace
evaluate("rank(A)")         // rank
evaluate("inv(A)")          // inverse
evaluate("transpose(A)")    // transpose

// Decompositions
evaluate("eig(A)")          // eigenvalues & eigenvectors
evaluate("charpoly(A)")     // characteristic polynomial (2×2, 3×3)
evaluate("lu(A)")           // LU decomposition
evaluate("qr(A)")           // QR decomposition
evaluate("svd(A)")          // singular value decomposition

// Linear systems
evaluate("solve(A, b)")     // solve Ax = b

Vector Operations

evaluate("dot([1,2,3], [4,5,6])")       // dot product → 32
evaluate("cross([1,2,3], [4,5,6])")     // cross product → [-3, 6, -3]
evaluate("norm([3,4])")                  // L2 norm → 5
evaluate("norm([3,4], \"1\")")           // L1 norm → 7
evaluate("project([3,4], [1,0])")        // vector projection → [3, 0]

Inline Literals

evaluate("[[1,2],[3,4]] * [[5,6],[7,8]]")  // → [[19,22],[43,50]]
evaluate("det([[4,1],[2,3]])")              // → 10
evaluate("inv([[4,7],[2,6]])")             // → [[0.6,-0.7],[-0.2,0.4]]

Variable Workflow

set_variable("A", "[[1,2],[3,4]]")
set_variable("B", "[[5,6],[7,8]]")
evaluate("A * B")          // uses stored variables
list_variables()           // see all defined variables
clear_variables()          // reset

Symbolic Math

Simplification & Expansion

symbolic_simplify("x^2 + 2*x + 1 - (x+1)^2")  // → 0
symbolic_expand("(x+1)*(x-1)*(x+2)")           // → x^3 + 2x^2 - x - 2

Substitution

// Single variable
symbolic_substitute("x^2 + 2*x", { x: "3" })      // → 15

// Multi-variable
symbolic_substitute("x^2 + y*x + z", { x: "3", y: "2", z: "1" })  // → 16

Calculus

// Derivatives
symbolic_derivative("x^3 + 2*x^2", "x")              // → 3x^2 + 4x
symbolic_partial_derivative("x^2*y + sin(z)", "x", 2) // → 2y (second partial)

// Integration
symbolic_integrate("x^2 + sin(x)", "x")               // → 0.333x^3 - cos(x) + C
symbolic_definite_integral("x^2", "x", "0", "2")      // → 2.667 (∫₀² x² dx)

// Limits
symbolic_limit("sin(x)/x", "x", "0")                  // → 1

Architecture

src/
├── index.ts              # Entry point, loads nerdamer plugins
├── server.ts             # MCP server setup, tool routing
├── types.ts              # Shared types and Zod schemas
├── engine/
│   ├── evaluator.ts      # Unified expression evaluator (mathjs + custom functions)
│   ├── symbolic.ts        # Symbolic engine (nerdamer + mathjs)
│   ├── math-engine.ts     # Low-level matrix operations
│   └── format.ts          # Output formatting utilities
└── tools/
    ├── evaluate.ts        # evaluate + variable management tools
    ├── matrix-create.ts   # matrix_create, identity, zeros, diagonal
    ├── symbolic.ts        # symbolic_simplify, substitute, derivative, expand
    └── calculus.ts        # symbolic_integrate, definite_integral, limit, partial_derivative

Dependencies

PackagePurpose
@modelcontextprotocol/sdkMCP protocol implementation
mathjs v13Numeric matrix operations, expression parsing
nerdamerSymbolic algebra, calculus (integrals, limits)
zodRuntime input validation

Custom Functions in evaluate

The evaluator extends mathjs with these custom functions:

FunctionImplementation
rank(A)Via eigenvalue count of AᵀA
solve(A, b)Wraps math.lusolve()
eig(A) / eigs(A)Wraps math.eigs() with formatted output
svd(A)Via eigenvalue decomposition of AᵀA
charpoly(A)Formula-based for 2×2 and 3×3
lu(A)Alias for math.lup()
qr(A)Alias for math.qr()
project(u, v)Vector projection formula
norm(v, type)L1, L2 (default), L∞

Development

git clone https://github.com/PsyWhat/advanced-math-mcp.git
cd advanced-math-mcp
npm install
npm run build        # compile TypeScript
npm run dev          # watch mode
npm link             # install globally for local testing

Testing

npm test             # run all tests (vitest)
npm run test:watch   # watch mode
npm run typecheck    # TypeScript validation only
SuiteTestsCoverage
evaluator.test.ts36Matrix ops, vector ops, decompositions, eigenvalues, variable scope, error handling
symbolic.test.ts15Simplify, expand, substitute, ordinary derivatives
calculus.test.ts17Indefinite/definite integrals, limits, partial derivatives

All 68 tests pass.

Known Limitations

  • SVD: The rank-deficient SVD gives zero vectors for nullspace columns (computed via AᵀA eigen-decomposition, not full Golub-Reinsch)
  • Cholesky: Not available in mathjs v13; use lu() for general decomposition
  • norm(v, inf): Must use quoted "inf" (not bare inf) due to mathjs parsing
  • charpoly: Numeric only, supports 2×2 and 3×3 matrices
  • symbolic_limit: Some advanced limits (e.g., (1+1/x)^x as x→∞) may not fully resolve

License

MIT