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.
GitHub
2
Prueba este MCPPatrocinadoDocumentació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
| Herramienta | Descripción |
|---|---|
evaluate | Evaluador universal de expresiones con sintaxis matemática natural. Admite matrices, vectores, escalares, descomposiciones y funciones personalizadas. |
set_variable | Define una variable con nombre (matriz, vector o escalar) para usar en evaluate |
get_variable | Recupera el valor de una variable |
list_variables | Lista todas las variables definidas y sus tipos |
clear_variables | Restablece todas las variables |
Creación de matrices
| Herramienta | Descripción |
|---|---|
matrix_create | Crea una matriz a partir de un arreglo 2D de cadenas |
matrix_identity | Crea una matriz identidad de n×n |
matrix_zeros | Crea una matriz de ceros de m×n |
matrix_diagonal | Crea una matriz diagonal a partir de un vector de valores |
Matemática simbólica
| Herramienta | Descripción |
|---|---|
symbolic_simplify | Simplifica expresiones algebraicas |
symbolic_expand | Expande expresiones factorizadas |
symbolic_substitute | Sustituye variables con valores o expresiones |
symbolic_derivative | Calcula derivadas ordinarias (una variable) |
symbolic_partial_derivative | Calcula derivadas parciales (multivariable) |
symbolic_integrate | Calcula integrales indefinidas (antiderivadas) |
symbolic_definite_integral | Calcula integrales definidas con límites |
symbolic_limit | Calcula 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
| Paquete | Propósito |
|---|---|
@modelcontextprotocol/sdk | Implementación del protocolo MCP |
mathjs v13 | Operaciones numéricas con matrices, análisis de expresiones |
nerdamer | Álgebra simbólica, cálculo (integrales, límites) |
zod | Validación de entrada en tiempo de ejecución |
Funciones personalizadas en evaluate
El evaluador extiende mathjs con estas funciones personalizadas:
| Función | Implementació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
| Suite | Pruebas | Cobertura |
|---|---|---|
evaluator.test.ts | 36 | Operaciones con matrices, operaciones con vectores, descomposiciones, valores propios, alcance de variables, manejo de errores |
symbolic.test.ts | 15 | Simplificar, expandir, sustituir, derivadas ordinarias |
calculus.test.ts | 17 | Integrales 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 (noinfsin comillas) debido al análisis de mathjscharpoly: Solo numérico, admite matrices de 2×2 y 3×3symbolic_limit: Algunos límites avanzados (por ejemplo,(1+1/x)^xcuandox→∞) pueden no resolverse por completo
Licencia
MIT