返回市场
符号计算MCP

符号计算MCP

作者:sdiehl43 星标更新:2025-06-28

项目介绍

<div align="center"> <img src=".github/logo.png" alt="Sympy MCP Logo" width="400" /> </div>

符号代数MCP服务器

Sympy-MCP是一个模型上下文协议服务器,允许语言模型自主执行符号数学和计算机代数。它向MCP客户端暴露了SymPy核心功能中的多种工具,用于操作数学表达式和方程。

为什么?

语言模型在符号操作方面表现极差。它们会虚构变量、编造随机常数、排列项,并且通常会制造混乱。但我们有专门为符号操作设计的计算机代数系统,因此我们可以使用工具调用来编排一系列变换,使符号内核完成所有繁重的工作。

虽然你可以让语言模型生成Mathematica或Python代码,但如果你想将语言模型用作代理或实时计算器,使用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$。

使用方法

你需要先安装uv

  • Homebrew : brew install uv
  • Curl : curl -LsSf https://astral.sh/uv/install.sh | sh

然后你可以使用以下命令安装并运行服务器:

# 设置项目
git clone https://github.com/sdiehl/sympy-mcp.git
cd sympy-mcp
uv sync

# 将服务器安装到Claude Desktop
uv run mcp install server.py

# 运行服务器
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引入用于微分方程的函数变量
常微分方程求解器dsolve_ode求解常微分方程
偏微分方程求解器pdsolve_pde求解偏微分方程
标准度规create_predefined_metric创建预定义的时空度规(如史瓦西、克尔、闵可夫斯基)
度规搜索search_predefined_metrics搜索可用的预定义度规
张量计算器calculate_tensor从度规计算张量(里奇、爱因斯坦、威耳张量)
自定义度规create_custom_metric从提供的组件和符号创建自定义度规张量
张量LaTeXprint_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中的symbols()函数)。除非另有说明,默认假设是变量是复数、交换、属于复数域$\mathbb{C}$。

属性
commutativetrue
complextrue
finitetrue
infinitefalse

Claude Desktop设置

通常,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文件的绝对路径。

{
  "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 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"
      ]
    }
  }
}

VS Code设置

VS Code和VS Code Insiders现在支持代理模式下的MCPs。对于VS Code,你可能需要在设置中启用Chat > Agent: Enable

  1. 一键设置:

在VS Code中安装

在VS Code Insiders中安装

或者手动将配置添加到你的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"
        ]
      }
    }
  }
}
  1. 在服务器配置开关上方点击“开始”,切换到聊天中的代理模式,并尝试像“积分 x^2”或“求解 x^2 = 1”这样的命令来开始使用。

Cline设置

要与Cline一起使用,首先需要使用“使用方法”部分中的命令手动运行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 server.py文件路径。

容器中运行

你可以使用Docker本地构建和运行服务器:

# 构建Docker镜像
docker build -t sympy-mcp .

# 运行Docker容器
docker run -p 8081:8081 sympy-mcp

或者,可以从GitHub Container Registry拉取预构建的镜像:

# 拉取最新镜像
docker pull ghcr.io/sdiehl/sympy-mcp:main

# 运行容器
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"
      ]
    }
  }
}

此配置告诉Claude Desktop在需要时启动Docker容器。确保在使用此配置的Claude Desktop之前构建Docker镜像(docker build -t sympy-mcp .)。其他安装方法也可以适应Docker,只需将uv命令更改为使用docker run命令即可。

示例交互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}{d t} x{\left(t \right)} + k x{\left(t \right)} + m \frac{d^{2}}{d t^{2}} x{\left(t \right)} = F{\left(t \right)} $$

助手:(内部工具调用)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} - 4 k m}\right)}{2 m}} + C_{2} e^{- \frac{t \left(c + \sqrt{c^{2} - 4 k m}\right)}{2 m}} + \cdots $$

示例交互2:广义相对论

用户:使用反德西特时空的逆度规$g^{\mu\nu}$计算里奇张量$R_{\mu\nu}$的迹,以确定其常数量曲率$R$。

助手:(内部工具调用)create_predefined_metric以创建反德西特度规:

{
  "metric_name": "AntiDeSitter"
}

助手:(内部工具调用)calculate_tensor以计算里奇张量:

{
  "metric_key": "metric_AntiDeSitter",
  "tensor_type": "RICCI_TENSOR",
  "simplify_result": true
}

**