内容
# 高级数学MCP
用于高级数学的MCP(模型上下文协议)服务器——线性代数、向量数学、符号计算和微积分。设计用于与Claude和其他兼容MCP的大型语言模型(LLM)一起使用。
## 快速入门
```bash
npm install -g advanced-math-mcp
```
然后添加到您的MCP客户端配置中(例如,`mcp_settings.json`):
```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"
]
}
}
}
```
## 工具(共17个)
### 统一表达式求值器
| 工具 | 描述 |
|---|---|
| `evaluate` | 具有自然数学语法的通用表达式求值器。支持矩阵、向量、标量、分解和自定义函数。 |
| `set_variable` | 定义一个命名变量(矩阵、向量或标量)供`evaluate`使用 |
| `get_variable` | 获取变量的值 |
| `list_variables` | 列出所有已定义的变量及其类型 |
| `clear_variables` | 重置所有变量 |
### 矩阵创建
| 工具 | 描述 |
|---|---|
| `matrix_create` | 从二维字符串数组创建矩阵 |
| `matrix_identity` | 创建n×n单位矩阵 |
| `matrix_zeros` | 创建m×n零矩阵 |
| `matrix_diagonal` | 从值向量创建对角矩阵 |
### 符号数学
| 工具 | 描述 |
|---|---|
| `symbolic_simplify` | 简化代数表达式 |
| `symbolic_expand` | 展开因式表达式 |
| `symbolic_substitute` | 用值或表达式替换变量 |
| `symbolic_derivative` | 计算常微分(单变量) |
| `symbolic_partial_derivative` | 计算偏导数(多变量) |
| `symbolic_integrate` | 计算不定积分(反导数) |
| `symbolic_definite_integral` | 计算定积分 |
| `symbolic_limit` | 计算表达式的极限 |
## `evaluate` — 通用求值器
所有矩阵/向量操作都使用具有自然表达式语法的单个`evaluate`工具:
### 矩阵操作
```js
// 算术
evaluate("A + B") // 加法
evaluate("A - B") // 减法
evaluate("A * B") // 矩阵乘法
evaluate("A ^ 3") // 矩阵幂
// 属性
evaluate("det(A)") // 行列式
evaluate("trace(A)") // 迹
evaluate("rank(A)") // 秩
evaluate("inv(A)") // 逆
evaluate("transpose(A)") // 转置
// 分解
evaluate("eig(A)") // 特征值和特征向量
evaluate("charpoly(A)") // 特征多项式(2×2,3×3)
evaluate("lu(A)") // LU分解
evaluate("qr(A)") // QR分解
evaluate("svd(A)") // 奇异值分解
// 线性系统
evaluate("solve(A, b)") // 求解Ax = b
```
### 向量操作
```js
evaluate("dot([1,2,3], [4,5,6])") // 点积 → 32
evaluate("cross([1,2,3], [4,5,6])") // 叉积 → [-3, 6, -3]
evaluate("norm([3,4])") // L2范数 → 5
evaluate("norm([3,4], \"1\")") // L1范数 → 7
evaluate("project([3,4], [1,0])") // 向量投影 → [3, 0]
```
### 内联字面量
```js
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]]
```
### 变量工作流
```js
set_variable("A", "[[1,2],[3,4]]")
set_variable("B", "[[5,6],[7,8]]")
evaluate("A * B") // 使用存储的变量
list_variables() // 查看所有已定义的变量
clear_variables() // 重置
```
## 符号数学
### 简化与展开
```js
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
```
### 替换
```js
// 单变量
symbolic_substitute("x^2 + 2*x", { x: "3" }) // → 15
// 多变量
symbolic_substitute("x^2 + y*x + z", { x: "3", y: "2", z: "1" }) // → 16
```
### 微积分
```js
// 导数
symbolic_derivative("x^3 + 2*x^2", "x") // → 3x^2 + 4x
symbolic_partial_derivative("x^2*y + sin(z)", "x", 2) // → 2y(二次偏导)
// 积分
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)
// 极限
symbolic_limit("sin(x)/x", "x", "0") // → 1
```
## 架构
```
src/
├── index.ts # 入口点,加载nerdamer插件
├── server.ts # MCP服务器设置,工具路由
├── types.ts # 共享类型和Zod模式
├── engine/
│ ├── evaluator.ts # 统一表达式求值器(mathjs + 自定义函数)
│ ├── symbolic.ts # 符号引擎(nerdamer + mathjs)
│ ├── math-engine.ts # 低级矩阵操作
│ └── format.ts # 输出格式化工具
└── tools/
├── evaluate.ts # evaluate + 变量管理工具
├── matrix-create.ts # matrix_create, identity, zeros, diagonal
├── symbolic.ts # symbolic_simplify, substitute, derivative, expand
└── calculus.ts # symbolic_integrate, definite_integral, limit, partial_derivative
```
### 依赖
| 包 | 用途 |
|---|---|
| `@modelcontextprotocol/sdk` | MCP协议实现 |
| `mathjs` v13 | 数值矩阵操作,表达式解析 |
| `nerdamer` | 符号代数,微积分(积分,极限) |
| `zod` | 运行时输入验证 |
### `evaluate`中的自定义函数
求值器扩展了mathjs,具有以下自定义函数:
| 函数 | 实现 |
|---|---|
| `rank(A)` | 通过AᵀA的特征值计数 |
| `solve(A, b)` | 封装`math.lusolve()` |
| `eig(A)` / `eigs(A)` | 封装`math.eigs()`,并格式化输出 |
| `svd(A)` | 通过AᵀA的特征值分解 |
| `charpoly(A)` | 2×2和3×3矩阵的基于公式 |
| `lu(A)` | `math.lup()`的别名 |
| `qr(A)` | `math.qr()`的别名 |
| `project(u, v)` | 向量投影公式 |
| `norm(v, type)` | L1,L2(默认),L∞ |
## 开发
```bash
git clone https://github.com/PsyWhat/advanced-math-mcp.git
cd advanced-math-mcp
npm install
npm run build # 编译TypeScript
npm run dev # 监视模式
npm link # 全局安装,用于本地测试
```
## 测试
```bash
npm test # 运行所有测试(vitest)
npm run test:watch # 监视模式
npm run typecheck # 仅TypeScript验证
```
| 套件 | 测试 | 覆盖率 |
|---|---|---|
| `evaluator.test.ts` | 36 | 矩阵操作,向量操作,分解,特征值,变量范围,错误处理 |
| `symbolic.test.ts` | 15 | 简化,展开,替换,普通导数 |
| `calculus.test.ts` | 17 | 不定积分/定积分,极限,偏导数 |
**所有68个测试通过。**
## 已知限制
- **SVD**:秩亏SVD给出零向量作为零空间列(通过AᵀA特征值分解计算,而不是完整的Golub-Reinsch)
- **Cholesky**:mathjs v13中不可用;使用`lu()`进行一般分解
- **`norm(v, inf)`**:必须使用引用的`"inf"`(不能使用裸`inf`),因为mathjs解析
- **`charpoly`**:仅限数值,支持2×2和3×3矩阵
- **`symbolic_limit`**:一些高级极限(例如,`(1+1/x)^x`作为`x→∞`)可能无法完全解析
## 许可证
MIT