符号代数 MCP 服务器
Sympy-MCP 是一个模型上下文协议 (MCP) 服务器,允许 LLM 自主执行符号数学和计算机代数运算。它将 SymPy 核心功能中的众多工具开放给 MCP 客户端,用于操作数学表达式和方程式。
为什么?
语言模型在符号操作方面简直糟糕透顶。它们会幻化变量,制造随机常数,对术语进行置换,通常会造成混乱。但我们有专门为符号操作构建的计算机代数系统,因此我们可以使用工具调用来协调一系列转换,以便符号核完成所有繁重的工作。
虽然您当然可以让 LLM 生成 Mathematica 或 Python 代码,但如果您想将 LLM 用作代理或即时计算器,那么使用 MCP 服务器并直接公开符号工具会是一种更好的体验。
该服务器公开了一系列符号数学功能,包括代数方程求解、积分和微分、矢量微积分、广义相对论的张量微积分以及常微分方程和偏微分方程。
例如,你可以用自然语言要求它解决微分方程:
求解具有强迫项的阻尼谐振子:由微分方程描述的质量-弹簧-阻尼器系统,其中 m 为质量,c 为阻尼系数,k 为弹簧常数,F(t) 为外力。
$$ m\frac{d^2x}{dt^2} + c\frac{dx}{dt} + kx = F(t) $$
或者涉及广义相对论:
使用反德西特时空的逆度量 $g^{\mu\nu}$ 计算里奇张量 $R_{\mu\nu}$ 的迹,以确定其常数标量曲率 $R$。
Related MCP server: Calculator MCP Server
用法
你首先需要紫外线。
自制-
brew install uv卷曲-
curl -LsSf https://astral.sh/uv/install.sh | sh
然后您可以使用以下命令安装并运行服务器:
您现在应该可以在 Claude 桌面应用中看到服务器了。其他客户端请参见下文。
如果您想要一个完全独立的版本,只需一个命令即可运行,可以使用以下命令。请注意,这会运行来自 Github 的任意代码,因此请谨慎操作。
如果要做广义相对论计算,需要安装einsteinpy库。
可用工具
sympy-mcp 服务器为符号数学提供了以下工具:
工具 | 工具 ID | 描述 |
变量引入 |
| 引入具有指定假设的变量并存储它 |
多变量 |
| 同时引入具有指定假设的多个变量 |
表达式解析器 |
| 使用可用的局部变量解析表达式字符串并存储它 |
LaTeX 打印机 |
| 以 LaTeX 格式打印存储的表达式以及变量假设 |
代数求解器 |
| 在给定域内对给定变量进行代数求解方程 |
线性求解器 |
| 求解线性方程组 |
非线性求解器 |
| 求解非线性方程组 |
函数变量 |
| 引入用于微分方程的函数变量 |
ODE 求解器 |
| 求解常微分方程 |
PDE 求解器 |
| 求解偏微分方程 |
标准公制 |
| 创建预定义的时空度量(例如史瓦西、克尔、闵可夫斯基) |
指标搜索 |
| 搜索可用的预定义指标 |
张量计算器 |
| 根据度量计算张量(Ricci、Einstein、Weyl 张量) |
自定义指标 |
| 根据提供的组件和符号创建自定义度量张量 |
张量 LaTeX |
| 以 LaTeX 格式打印存储的张量表达式 |
简化器 |
| 使用 SymPy 的规范化函数简化数学表达式 |
替代 |
| 用另一个表达式中的表达式替换变量 |
一体化 |
| 对变量的表达式进行积分 |
差异化 |
| 对表达式进行关于变量的区分 |
坐标 |
| 为矢量微积分运算创建 3D 坐标系 |
矢量场 |
| 在指定的坐标系中创建一个矢量场 |
卷曲 |
| 计算矢量场的旋度 |
分歧 |
| 计算矢量场的散度 |
坡度 |
| 计算标量场的梯度 |
单位换算器 |
| 将数量转换为给定的目标单位 |
单位简化器 |
| 用单位简化数量 |
矩阵创造者 |
| 根据提供的数据创建 SymPy 矩阵 |
行列式 |
| 计算矩阵的行列式 |
矩阵逆 |
| 计算矩阵的逆 |
特征值 |
| 计算矩阵的特征值 |
特征向量 |
| 计算矩阵的特征向量 |
默认情况下,变量是预先设定好的(类似于 SymPy 中symbol()函数的工作原理)。除非另有说明,否则默认假设变量是复数域 $\mathbb{C}$ 上的复数、交换项。
财产 | 价值 |
| 真的 |
| 真的 |
| 真的 |
| 错误的 |
Claude 桌面设置
通常情况下, mcp install命令会自动将服务器添加到claude_desktop_config.json文件中。如果没有,您需要找到该配置文件并添加以下内容:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
将以下内容添加到mcpServers对象,将/ABSOLUTE_PATH_TO_SYMPY_MCP/server.py替换为 sympy-mcp server.py文件的绝对路径。
光标设置
在您的~/.cursor/mcp.json中,添加以下内容,其中ABSOLUTE_PATH_TO_SYMPY_MCP是 sympy-mcp server.py 文件的路径。
VS Code 设置
VS Code 和 VS Code Insiders 现已支持代理模式下的 MCP。对于 VS Code,您可能需要在设置中启用Chat > Agent: Enable 。
一键设置:
或者手动将配置添加到您的settings.json (全局):
单击服务器配置上方的“开始”,打开 Python 或数学文件,在聊天中切换到代理模式,然后尝试“integrate x^2”或“solve x^2 = 1”等命令来开始。
Cline 设置
要与Cline一起使用,您需要先使用“使用”部分中的命令手动运行 MCP 服务器。MCP 服务器运行后,打开 Cline 并选择顶部的“MCP 服务器”。
然后选择“远程服务器”并添加以下内容:
服务器名称:
sympy-mcp服务器网址:
http://127.0.0.1:8081/sse8081/sse
5ire 设置
另一个在后端支持多种模型(o3、o4-mini、DeepSeek-R1 等)的 MCP 客户端是 5ire。
要使用5ire进行设置,请打开 5ire 并转到工具 -> 新建并设置以下配置:
工具密钥:
sympy-mcp名称:SymPy MCP
命令:
/opt/homebrew/bin/uv run --with einsteinpy --with mcp[cli] --with pydantic --with sympy mcp run /ABSOLUTE_PATH_TO/server.py
将/ABSOLUTE_PATH_TO/server.py替换为 sympy-mcp server.py 文件的实际路径。
在容器中运行
您可以在本地使用 Docker 构建并运行服务器:
或者,您可以从 GitHub Container Registry 中提取预先构建的图像:
要配置 Claude Desktop 来启动 Docker 容器,请编辑claude_desktop_config.json文件:
或者使用 GitHub 上预先构建的容器:
此配置告知 Claude Desktop 在需要时启动 Docker 容器。使用此配置之前,请确保已构建 Docker 镜像 ( docker build -t sympy-mcp . )。
如果您将 uv 命令更改为使用 docker run 命令,其他安装方法也可以适应 Docker。
示例交互 1:微分方程
以下是使用此 MCP 服务器与 AI 助手对话时工具调用工作原理的示例:
用户:求解具有强迫项的阻尼谐振子:由微分方程描述的质量-弹簧-阻尼器系统,其中 m 为质量,c 为阻尼系数,k 为弹簧常数,F(t) 为外力。
$$ m\frac{d^2x}{dt^2} + c\frac{dx}{dt} + kx = F(t) $$
助手:(内部工具调用) intro_many引入变量:
助手:(内部工具调用) introduce_function来定义 x(t):
助手:(内部工具调用) introduce_expression来创建微分方程:
助手:(内部工具调用) print_latex_expression很好地显示方程式:
结果:
$$ c \frac{d}{dt} x{\left(t \right)} + kx{\left(t \right)} + m \frac{d^{2}}{dt^{2}} x{\left(t \right)} = F{\left(t \right)} $$
助手:(内部工具调用) introduce_function来定义 F(t):
助手:(内部工具调用) dsolve_ode求解微分方程:
结果:
$$ x{\left(t \right)} = C_{1} e^{\frac{t \left(- c + \sqrt{c^{2} - 4 km}\right)}{2 m}} + C_{2} e^{- \frac{t \left(c + \sqrt{c^{2} - 4 km}\right)}{2 m}} + \cdots $$
示例交互2:广义相对论
用户:使用反德西特时空的逆度量 $g^{\mu\nu}$ 计算 Ricci 张量 $R_{\mu\nu}$ 的迹,以确定其常数标量曲率 $R$。
助手:(内部工具调用) create_predefined_metric创建 Anti-de Sitter 指标:
助手:(内部工具调用) calculate_tensor计算 Ricci 张量:
助手:(内部工具调用) print_latex_tensor显示 Ricci 张量:
结果:
$$ \left[\begin{matrix}3 & 0 & 0 & 0\\0 & - 3 \cos^{2}{\left(t \right)} & 0 & 0\\0 & 0 & - 3 \cos^{2}{\left(t \right)} \sinh^{2}{\left(\chi \right)} & 0\\0 & 0 & 0 & - 3 \sin^{2}{\left(\theta \right)} \cos^{2}{\left(t \right)} \sinh^{2}{\left(\chi \right)}\end{matrix}\right] $$
助手:(内部工具调用) calculate_tensor计算 Ricci 标量:
助手:(内部工具调用) print_latex_tensor显示 Ricci 标量:
结果:
$$ -12 $$
安全免责声明
该服务器在您的计算机上运行,并授予语言模型运行 Python 逻辑的权限。值得注意的是,它使用 Sympy 的parse_expr来解析数学表达式,而这在底层使用了eval ,实际上允许任意代码执行。运行该服务器意味着您信任 Claude 生成的代码。在 Docker 镜像中运行会稍微安全一些,但在运行之前检查代码仍然是个好主意。
执照
版权所有 2025 Stephen Diehl。
本项目遵循 Apache 2.0 许可证。详情请参阅许可证文件。