advanced-math-mcp

advanced-math-mcp — Servidor MCP para álgebra linear, cálculo e matemática simbólica. 17 ferramentas com um mecanismo de expressão evaluate() unificado. Suporta matrizes, autovalores, SVD, integrais, limites, derivadas e mais.

Documentação

advanced-math-mcp

Servidor MCP (Model Context Protocol) para matemática avançada — álgebra linear, matemática vetorial, computação simbólica e cálculo. Projetado para uso com Claude e outros LLMs compatíveis com MCP.

Início Rápido

npm install -g advanced-math-mcp

Em seguida, adicione à configuração do seu cliente MCP (ex.: 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"
      ]
    }
  }
}

Ferramentas (17 no total)

Avaliador de Expressões Unificado

FerramentaDescrição
evaluateAvaliador universal de expressões com sintaxe matemática natural. Suporta matrizes, vetores, escalares, decomposições e funções personalizadas.
set_variableDefine uma variável nomeada (matriz, vetor ou escalar) para uso em evaluate
get_variableRecupera o valor de uma variável
list_variablesLista todas as variáveis definidas e seus tipos
clear_variablesRedefine todas as variáveis

Criação de Matrizes

FerramentaDescrição
matrix_createCria uma matriz a partir de um array 2D de strings
matrix_identityCria uma matriz identidade n×n
matrix_zerosCria uma matriz m×n de zeros
matrix_diagonalCria uma matriz diagonal a partir de um vetor de valores

Matemática Simbólica

FerramentaDescrição
symbolic_simplifySimplifica expressões algébricas
symbolic_expandExpande expressões fatoradas
symbolic_substituteSubstitui variáveis por valores ou expressões
symbolic_derivativeCalcula derivadas ordinárias (uma variável)
symbolic_partial_derivativeCalcula derivadas parciais (multivariáveis)
symbolic_integrateCalcula integrais indefinidas (antiderivadas)
symbolic_definite_integralCalcula integrais definidas com limites
symbolic_limitCalcula limites de expressões

evaluate — O Avaliador Universal

Todas as operações com matrizes/vetores usam uma única ferramenta evaluate com sintaxe de expressão natural:

Operações com Matrizes

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

Operações com Vetores

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]

Literais Inline

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

Fluxo de Trabalho com Variáveis

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

Simplificação e Expansão

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

Substituição

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

Arquitetura

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

Dependências

PacoteFinalidade
@modelcontextprotocol/sdkImplementação do protocolo MCP
mathjs v13Operações numéricas com matrizes, análise de expressões
nerdamerÁlgebra simbólica, cálculo (integrais, limites)
zodValidação de entrada em tempo de execução

Funções Personalizadas em evaluate

O avaliador estende o mathjs com estas funções personalizadas:

FunçãoImplementação
rank(A)Via contagem de autovalores de AᵀA
solve(A, b)Encapsula math.lusolve()
eig(A) / eigs(A)Encapsula math.eigs() com saída formatada
svd(A)Via decomposição de autovalores de AᵀA
charpoly(A)Baseado em fórmula para 2×2 e 3×3
lu(A)Alias para math.lup()
qr(A)Alias para math.qr()
project(u, v)Fórmula de projeção vetorial
norm(v, type)L1, L2 (padrão), L∞

Desenvolvimento

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

Testes

npm test             # run all tests (vitest)
npm run test:watch   # watch mode
npm run typecheck    # TypeScript validation only
SuíteTestesCobertura
evaluator.test.ts36Operações com matrizes, operações com vetores, decomposições, autovalores, escopo de variáveis, tratamento de erros
symbolic.test.ts15Simplificar, expandir, substituir, derivadas ordinárias
calculus.test.ts17Integrais indefinidas/definidas, limites, derivadas parciais

Todos os 68 testes passam.

Limitações Conhecidas

  • SVD: A SVD com posto deficiente fornece vetores zero para colunas do espaço nulo (calculada via decomposição de autovalores de AᵀA, não Golub-Reinsch completo)
  • Cholesky: Não disponível no mathjs v13; use lu() para decomposição geral
  • norm(v, inf): Deve usar "inf" entre aspas (não inf puro) devido à análise do mathjs
  • charpoly: Somente numérico, suporta matrizes 2×2 e 3×3
  • symbolic_limit: Alguns limites avançados (ex.: (1+1/x)^x quando x→∞) podem não ser totalmente resolvidos

Licença

MIT