符号代数 MCP 服务器
Sympy-MCP 是一个模型上下文协议 (MCP) 服务器,允许 LLM 自主执行符号数学和计算机代数运算。它将 SymPy 核心功能中的众多工具开放给 MCP 客户端,用于操作数学表达式和方程式。
为什么?
语言模型在符号操作方面简直糟糕透顶。它们会幻化变量,制造随机常数,对术语进行置换,通常会造成混乱。但我们有专门为符号操作构建的计算机代数系统,因此我们可以使用工具调用来协调一系列转换,以便符号核完成所有繁重的工作。
虽然您当然可以让 LLM 生成 Mathematica 或 Python 代码,但如果您想将 LLM 用作代理或即时计算器,那么使用 MCP 服务器并直接公开符号工具会是一种更好的体验。
该服务器公开了一系列符号数学功能,包括代数方程求解、积分和微分、矢量微积分、广义相对论的张量微积分以及常微分方程和偏微分方程。
例如,你可以用自然语言要求它解决微分方程:
求解具有强迫项的阻尼谐振子:由微分方程描述的质量-弹簧-阻尼器系统,其中 m 为质量,c 为阻尼系数,k 为弹簧常数,F(t) 为外力。
Loading...
或者涉及广义相对论:
使用反德西特时空的逆度量 Loading... 计算里奇张量 Loading... 的迹,以确定其常数标量曲率 Loading...。
用法
你首先需要紫外线。
- 自制-
brew install uv
- 卷曲-
curl -LsSf https://astral.sh/uv/install.sh | sh
然后您可以使用以下命令安装并运行服务器:
您现在应该可以在 Claude 桌面应用中看到服务器了。其他客户端请参见下文。
如果您想要一个完全独立的版本,只需一个命令即可运行,可以使用以下命令。请注意,这会运行来自 Github 的任意代码,因此请谨慎操作。
如果要做广义相对论计算,需要安装einsteinpy
库。
可用工具
sympy-mcp 服务器为符号数学提供了以下工具:
工具 | 工具 ID | 描述 |
---|---|---|
变量引入 | intro | 引入具有指定假设的变量并存储它 |
多变量 | intro_many | 同时引入具有指定假设的多个变量 |
表达式解析器 | introduce_expression | 使用可用的局部变量解析表达式字符串并存储它 |
LaTeX 打印机 | print_latex_expression | 以 LaTeX 格式打印存储的表达式以及变量假设 |
代数求解器 | solve_algebraically | 在给定域内对给定变量进行代数求解方程 |
线性求解器 | solve_linear_system | 求解线性方程组 |
非线性求解器 | solve_nonlinear_system | 求解非线性方程组 |
函数变量 | introduce_function | 引入用于微分方程的函数变量 |
ODE 求解器 | dsolve_ode | 求解常微分方程 |
PDE 求解器 | pdsolve_pde | 求解偏微分方程 |
标准公制 | create_predefined_metric | 创建预定义的时空度量(例如史瓦西、克尔、闵可夫斯基) |
指标搜索 | search_predefined_metrics | 搜索可用的预定义指标 |
张量计算器 | calculate_tensor | 根据度量计算张量(Ricci、Einstein、Weyl 张量) |
自定义指标 | create_custom_metric | 根据提供的组件和符号创建自定义度量张量 |
张量 LaTeX | print_latex_tensor | 以 LaTeX 格式打印存储的张量表达式 |
简化器 | simplify_expression | 使用 SymPy 的规范化函数简化数学表达式 |
替代 | substitute_expression | 用另一个表达式中的表达式替换变量 |
一体化 | integrate_expression | 对变量的表达式进行积分 |
差异化 | differentiate_expression | 对表达式进行关于变量的区分 |
坐标 | create_coordinate_system | 为矢量微积分运算创建 3D 坐标系 |
矢量场 | create_vector_field | 在指定的坐标系中创建一个矢量场 |
卷曲 | calculate_curl | 计算矢量场的旋度 |
分歧 | calculate_divergence | 计算矢量场的散度 |
坡度 | calculate_gradient | 计算标量场的梯度 |
单位换算器 | convert_to_units | 将数量转换为给定的目标单位 |
单位简化器 | quantity_simplify_units | 用单位简化数量 |
矩阵创造者 | create_matrix | 根据提供的数据创建 SymPy 矩阵 |
行列式 | matrix_determinant | 计算矩阵的行列式 |
矩阵逆 | matrix_inverse | 计算矩阵的逆 |
特征值 | matrix_eigenvalues | 计算矩阵的特征值 |
特征向量 | matrix_eigenvectors | 计算矩阵的特征向量 |
默认情况下,变量是预先设定好的(类似于 SymPy 中symbol()函数的工作原理)。除非另有说明,否则默认假设变量是复数域 Loading... 上的复数、交换项。
财产 | 价值 |
---|---|
commutative | 真的 |
complex | 真的 |
finite | 真的 |
infinite | 错误的 |
Claude 桌面设置
通常情况下, mcp install
命令会自动将服务器添加到claude_desktop_config.json
文件中。如果没有,您需要找到该配置文件并添加以下内容:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%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/sse
8081/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) 为外力。
Loading...
助手:(内部工具调用) intro_many
引入变量:
助手:(内部工具调用) introduce_function
来定义 x(t):
助手:(内部工具调用) introduce_expression
来创建微分方程:
助手:(内部工具调用) print_latex_expression
很好地显示方程式:
结果:
Loading...
助手:(内部工具调用) introduce_function
来定义 F(t):
助手:(内部工具调用) dsolve_ode
求解微分方程:
结果:
Loading...
示例交互2:广义相对论
用户:使用反德西特时空的逆度量 Loading... 计算 Ricci 张量 Loading... 的迹,以确定其常数标量曲率 Loading...。
助手:(内部工具调用) create_predefined_metric
创建 Anti-de Sitter 指标:
助手:(内部工具调用) calculate_tensor
计算 Ricci 张量:
助手:(内部工具调用) print_latex_tensor
显示 Ricci 张量:
结果:
Loading...
助手:(内部工具调用) calculate_tensor
计算 Ricci 标量:
助手:(内部工具调用) print_latex_tensor
显示 Ricci 标量:
结果:
Loading...
安全免责声明
该服务器在您的计算机上运行,并授予语言模型运行 Python 逻辑的权限。值得注意的是,它使用 Sympy 的parse_expr
来解析数学表达式,而这在底层使用了eval
,实际上允许任意代码执行。运行该服务器意味着您信任 Claude 生成的代码。在 Docker 镜像中运行会稍微安全一些,但在运行之前检查代码仍然是个好主意。
执照
版权所有 2025 Stephen Diehl。
本项目遵循 Apache 2.0 许可证。详情请参阅许可证文件。
You must be authenticated.
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
Tools
模型上下文协议服务器使 LLM 能够通过 SymPy 的操作数学表达式和方程的功能自主执行符号数学和计算机代数。
Related Resources
Related MCP Servers
- AsecurityAlicenseAqualityA Model Context Protocol server that provides basic mathematical and statistical functions to LLMs, enabling them to perform accurate numerical calculations through a simple API.Last updated -1313TypeScriptMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that enables LLMs to perform precise numerical calculations by evaluating mathematical expressions.Last updated -148PythonMIT License
- -securityFlicense-qualityA Model Context Protocol server that connects LLMs to the Compiler Explorer API, enabling them to compile code, explore compiler features, and analyze optimizations across different compilers and languages.Last updated -Python
- AsecurityFlicenseAqualityA Model Context Protocol server that allows LLMs to interact with Python environments, execute code, and manage files within a specified working directory.Last updated -98Python