符号代数MCP服务器
Sympy MCP是一个模型上下文协议服务器,允许LLM自主执行符号数学和计算机代数。它向MCP客户端展示了SymPy核心功能中的许多工具,用于操纵数学表达式和方程。
为什么?
语言模型在符号操纵方面绝对糟糕。他们幻想变量,组成随机常数,排列术语,通常会把事情弄得一团糟。但是我们有专门为符号操作构建的计算机代数系统,因此我们可以使用工具调用来编排一系列转换,以便符号内核完成所有繁重的工作。
虽然你当然可以让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}$计算Ricci张量$R\_{\\mu\\nu}$的轨迹,以确定其常数标量曲率$R$。
用法
你需要 紫外线 第一。
- 家酿 :
brew install uv - 卷曲 :
curl -LsSf https://astral.sh/uv/install.sh | sh
然后,您可以使用以下命令安装并运行服务器:
# Setup the project
git clone https://github.com/sdiehl/sympy-mcp.git
cd sympy-mcp
uv sync
# Install the server to Claude Desktop
uv run mcp install server.py
# Run the server
uv run mcp run server.py您现在应该可以在Claude Desktop应用程序中看到可用的服务器。其他客户请参阅下文。
如果你想要一个完全独立的版本,只需一个命令即可运行,你可以使用以下命令。 *请注意,这是从Github运行的任意代码,所以要小心。*
uv run --with https://github.com/sdiehl/sympy-mcp/releases/download/0.1/sympy_mcp-0.1.0-py3-none-any.whl python server.py如果你想进行广义相对论计算,你需要安装 einsteinpy 图书馆。
uv sync --group relativity可用工具
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 | 为向量演算操作创建三维坐标系 |
| 矢量场 | 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中工作)。除非另有说明,否则defaut假设是变量在复数域$\\mathbb{C}$上是复数、可交换的项。
| 财产 | 价值 |
|---|---|
commutative | 真的 |
complex | 真的 |
finite | 真的 |
infinite 错误的 |
Claude桌面设置
通常情况下 mcp install 命令将自动将服务器添加到 claude_desktop_config.json 文件。如果没有,你需要找到配置文件并添加以下内容:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
将以下内容添加到 mcpServers 对象,替换 /ABSOLUTE_PATH_TO_SYMPY_MCP/server.py 具有通往sympy mcp的绝对路径 server.py 文件。
{
"mcpServers": {
"sympy-mcp": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--with",
"einsteinpy",
"--with",
"mcp[cli]",
"--with",
"pydantic",
"--with",
"sympy",
"mcp",
"run",
"/ABSOLUTE_PATH_TO_SYMPY_MCP/server.py"
]
}
}
}光标设置
在你的 ~/.cursor/mcp.json,添加以下内容,其中 ABSOLUTE_PATH_TO_SYMPY_MCP 是sympy mcp服务器.py文件的路径。
{
"mcpServers": {
"sympy-mcp": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--with",
"einsteinpy",
"--with",
"mcp[cli]",
"--with",
"pydantic",
"--with",
"sympy",
"mcp",
"run",
"/ABSOLUTE_PATH_TO_SYMPY_MCP/server.py"
]
}
}
}VS代码设置
VS Code和VS Code Insider现在支持MCP 代理模式。对于VS Code,您可能需要启用 Chat > Agent: Enable 在设置中。
- 一键设置:


或者手动将配置添加到您的 settings.json (全球):
{
"mcp": {
"servers": {
"sympy-mcp": {
"command": "uv",
"args": [
"run",
"--with",
"einsteinpy",
"--with",
"mcp[cli]",
"--with",
"pydantic",
"--with",
"sympy",
"mcp",
"run",
"/ABSOLUTE_PATH_TO_SYMPY_MCP/server.py"
]
}
}
}
}- 点击服务器配置上方的“开始”,在聊天中切换到代理模式,然后尝试“集成x^2”或“求解x^2=1”等命令开始。
临床设置
与一起使用 克莱恩,您需要首先使用“用法”部分中的命令手动运行MCP服务器。MCP服务器运行后,打开Cline并选择顶部的“MCP服务器”。
然后选择“远程服务器”并添加以下内容:
- 服务器名称:
sympy-mcp - 服务器URL:
http://127.0.0.1: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服务器.py文件的实际路径。
HTTP传输(流式HTTP/SSE)
服务器使用HTTP支持MCP 可流式传输http 在MCP规范2025-03-26中引入。这取代了传统的SSE传输,并公开了一个 /mcp 客户端通过HTTP连接到的端点。
当服务器作为独立进程或在容器中运行时,这是推荐的传输方式,因为它允许任何支持HTTP的MCP客户端连接,而无需将服务器作为子进程启动。
# Run locally with HTTP transport
uv run python server.py --transport streamable-http
# Override host/port
uv run python server.py --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 9000遗产 --transport sse 仍然支持标志以实现向后兼容性。
A. /healthcheck 还公开了运行完整MCP协议往返的端点(初始化→ 工具/列表→ 会话拆除)并返回 {"status": "ok", "tool_count": N}.
在容器中运行
您可以在本地使用Docker构建和运行服务器:
# Build the Docker image
docker build -t sympy-mcp .
# Run the Docker container
docker run -p 8081:8081 sympy-mcp或者使用Docker Compose docker/ 目录:
cd docker
docker compose up -d --build或者,您可以从GitHub容器注册表中提取预构建的映像:
# Pull the latest image
docker pull ghcr.io/sdiehl/sympy-mcp:main
# Run the container
docker run -p 8081:8081 --rm ghcr.io/sdiehl/sympy-mcp:main要配置Claude Desktop以启动Docker容器,请编辑您的 claude_desktop_config.json 文件:
{
"mcpServers": {
"sympy-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"-p",
"8081:8081",
"--rm",
"sympy-mcp"
]
}
}
}或者使用GitHub上的预构建容器:
{
"mcpServers": {
"sympy-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"-p",
"8081:8081",
"--rm",
"ghcr.io/sdiehl/sympy-mcp:main"
]
}
}
}此配置告诉会在需要时启动Docker容器。确保构建Docker镜像(docker build -t sympy-mcp .)在使用此配置的Claude Desktop之前。
如果您将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 引入变量:
{
"variables": [
{"var_name": "t", "pos_assumptions": ["real"], "neg_assumptions": []},
{"var_name": "m", "pos_assumptions": ["real", "positive"], "neg_assumptions": []},
{"var_name": "c", "pos_assumptions": ["real", "positive"], "neg_assumptions": []},
{"var_name": "k", "pos_assumptions": ["real", "positive"], "neg_assumptions": []}
]
}助手:(内部工具调用) introduce_function 定义x(t):
{
"func_name": "x"
}助手:(内部工具调用) introduce_expression 以创建微分方程:
{
"expr_str": "Eq(m*Derivative(x(t), t, t) + c*Derivative(x(t), t) + k*x(t), F(t))"
}助手:(内部工具调用) print_latex_expression 为了很好地显示方程式:
{
"expr_key": "expr_12"
}结果:
$$ c\\frac{d}{dt}x{\\left(t\\right)}+kx{\\left(t\\right)}+m\\frac{d^{2}{dt^{2}x{\\right(t\\left)}=F{\\left $$
助手:(内部工具调用) introduce_function 定义F(t):
{
"func_name": "F"
}助手:(内部工具调用) dsolve_ode 为了求解微分方程:
{
"expr_key": "expr_12",
"func_name": "x"
}结果:
$$ x{\\left(t\\right)}=C\_{1}e^{\\frac{t\\left(-C+\\sqrt{C^{2}-4k m}\\right)}{2 m}}+C\_{2}e^{-\\frac{t=t\\left $$
示例交互2:广义相对论
用户:使用反德西特时空的逆度量$g^{\\mu\\nu}$计算Ricci张量$R\_{\\mu\\nu}$的轨迹,以确定其常数标量曲率$R$。
助手:(内部工具调用) create_predefined_metric 要创建反德西特指标:
{
"metric_name": "AntiDeSitter"
}助手:(内部工具调用) calculate_tensor 计算Ricci张量:
{
"metric_key": "metric_AntiDeSitter",
"tensor_type": "RICCI_TENSOR",
"simplify_result": true
}助手:(内部工具调用) print_latex_tensor 显示Ricci张量:
{
"tensor_key": "riccitensor_metric_AntiDeSitter"
}结果:
$$ \\左\ 文件以获取详细信息。
