advanced-math-mcp

advanced-math-mcp — Servidor MCP para álgebra lineal, cálculo y matemática simbólica. 17 herramientas con un motor de expresiones unificado evaluate(). Soporta matrices, valores propios, SVD, integrales, límites, derivadas y más.

Documentación

advanced-math-mcp

Servidor MCP (Protocolo de Contexto de Modelo) para matemáticas avanzadas: álgebra lineal, matemática vectorial, cómputo simbólico y cálculo. Diseñado para uso con Claude y otros LLM compatibles con MCP.

Inicio rápido

npm install -g advanced-math-mcp

Luego añade a la configuración de tu cliente MCP (por ejemplo, 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"
      ]
    }
  }
}

Herramientas (17 en total)

Evaluador de expresiones unificado

HerramientaDescripción
evaluateEvaluador universal de expresiones con sintaxis matemática natural. Admite matrices, vectores, escalares, descomposiciones y funciones personalizadas.
set_variableDefine una variable con nombre (matriz, vector o escalar) para usar en evaluate
get_variableRecupera el valor de una variable
list_variablesLista todas las variables definidas y sus tipos
clear_variablesRestablece todas las variables

Creación de matrices

HerramientaDescripción
matrix_createCrea una matriz a partir de un arreglo 2D de cadenas
matrix_identityCrea una matriz identidad de n×n
matrix_zerosCrea una matriz de ceros de m×n
matrix_diagonalCrea una matriz diagonal a partir de un vector de valores

Matemática simbólica

HerramientaDescripción
symbolic_simplifySimplifica expresiones algebraicas
symbolic_expandExpande expresiones factorizadas
symbolic_substituteSustituye variables con valores o expresiones
symbolic_derivativeCalcula derivadas ordinarias (una variable)
symbolic_partial_derivativeCalcula derivadas parciales (multivariable)
symbolic_integrateCalcula integrales indefinidas (antiderivadas)
symbolic_definite_integralCalcula integrales definidas con límites
symbolic_limitCalcula límites de expresiones

evaluate — El evaluador universal

Todas las operaciones de matrices/vectores usan una única herramienta evaluate con sintaxis de expresión natural:

Operaciones con matrices

// 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

Operaciones con vectores

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]

Literales en línea

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]]

Flujo de trabajo con variables

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

Matemática simbólica

Simplificación y expansión

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

Sustitución

// 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

Cálculo

// 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

Arquitectura

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

Dependencias

PaquetePropósito
@modelcontextprotocol/sdkImplementación del protocolo MCP
mathjs v13Operaciones numéricas con matrices, análisis de expresiones
nerdamerÁlgebra simbólica, cálculo (integrales, límites)
zodValidación de entrada en tiempo de ejecución

Funciones personalizadas en evaluate

El evaluador extiende mathjs con estas funciones personalizadas:

FunciónImplementación
rank(A)Mediante el conteo de valores propios de AᵀA
solve(A, b)Envuelve math.lusolve()
eig(A) / eigs(A)Envuelve math.eigs() con salida formateada
svd(A)Mediante la descomposición de valores propios de AᵀA
charpoly(A)Basada en fórmulas para 2×2 y 3×3
lu(A)Alias de math.lup()
qr(A)Alias de math.qr()
project(u, v)Fórmula de proyección vectorial
norm(v, type)L1, L2 (predeterminada), L∞

Desarrollo

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

Pruebas

npm test             # run all tests (vitest)
npm run test:watch   # watch mode
npm run typecheck    # TypeScript validation only
SuitePruebasCobertura
evaluator.test.ts36Operaciones con matrices, operaciones con vectores, descomposiciones, valores propios, alcance de variables, manejo de errores
symbolic.test.ts15Simplificar, expandir, sustituir, derivadas ordinarias
calculus.test.ts17Integrales indefinidas/definidas, límites, derivadas parciales

Las 68 pruebas pasan.

Limitaciones conocidas

  • SVD: La SVD con rango deficiente da vectores cero para columnas del espacio nulo (calculada mediante descomposición de valores propios de AᵀA, no el método completo de Golub-Reinsch)
  • Cholesky: No disponible en mathjs v13; usa lu() para descomposición general
  • norm(v, inf): Debe usar "inf" entre comillas (no inf sin comillas) debido al análisis de mathjs
  • charpoly: Solo numérico, admite matrices de 2×2 y 3×3
  • symbolic_limit: Algunos límites avanzados (por ejemplo, (1+1/x)^x cuando x→∞) pueden no resolverse por completo

Licencia

MIT