使用说明
微积分助手MCP服务器
一个MCP(模型上下文协议)服务器,为AI代理提供符号演算工具。它基于FastMCP 2.x和SymPy构建,处理导数、积分、极限、级数展开、方程求解、ODE和多变量微积分——所有这些都具有人性化的表达式解析和LaTeX输出。
设计用于支持微积分辅导代理,但任何需要符号数学的MCP客户端都可以使用。
特性
- 七种微积分工具,涵盖单变量和多变量主题
- 人性化的表达式输入:插入符号(
x^2),隐式乘法(2x),标准功能(sin,cos,exp,log,sqrt) - 每个结果都包含LaTeX输出
- 两个输出详细程度级别(
concise/detailed)在每个工具上 - 可组合工具设计:将梯度输出直接送入发散或卷曲
- 六个微积分主题的定义、定理和公式的参考资源
- 辅导提示,将代理配置为三个学生级别的微积分导师
- 用于本地开发和OpenShift部署的STDIO和HTTP传输
快速开始
# Install and run locally
make install
make run-local
# Test with cmcp (in another terminal)
cmcp ".venv/bin/python -m src.main" tools/list
# Deploy to OpenShift
make deploy PROJECT=calculus-helper
工具
| 工具 | 说明 |
|---|---|
compute_derivative |
区分表达式(支持高阶和偏微分) |
compute_integral |
数值近似的不定积分或定积分 |
compute_limit |
评估极限(双侧、单侧、无穷远) |
expand_series |
泰勒/麦克劳林级数展开与奇异性检测 |
solve_equation |
求解一个或多个变量的代数方程 |
solve_ode |
求解常微分方程(一般或特殊) |
multivariable_calc |
偏导数、梯度、散度、旋度、二重/三重积分 |
计算导数
计算数学表达式的导数。支持多变量表达式的高阶导数和偏导数。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
expression |
str | required | 用于区分的表达式,例如。 x**3 + 2*x |
variable |
str | 必填 | 用于区分的变量 |
order |
int | 1 | 导数的顺序(1=第一,2=第二,…) |
d/dx(x^3 + 2*x) -> 3*x**2 + 2
d^2/dx^2(x^4) -> 12*x**2
d/dy(x*y^2) -> 2*x*y
d/dx(sin(x)*cos(x)) -> cos(2*x)
计算积分
计算不定积分或定积分。不定积分返回反导数+C。定积分在可能的情况下返回符号结果和数值近似值。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
expression |
str | 必需 | 要集成的表达式 |
variable |
str | 必填 | 积分变量 |
lower_bound |
str或null | null | 下限(使用 -oo 对于负无穷大) |
upper_bound |
str或null | null | 上限(使用 oo 无限) |
必须为定积分提供两个界;无限期省略两者。
integral(x^2, x) -> x**3/3 + C
integral(sin(x), x, 0, pi) -> 2
计算极限
当变量接近某个值时,评估限制。双侧限值验证两个单侧限值是否一致;如果他们不同意,该工具会报告这两个值。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
expression |
str | required | 用于计算限制的表达式 |
variable |
str | 必填 | 接近该点的变量 |
point |
str | 必填 | 接近值(oo, -oo, pi,数字) |
direction |
str | "both" |
"both", "+" / "right", "-" / "left" |
lim(sin(x)/x, x, 0) -> 1
lim(1/x, x, 0, "+") -> oo
lim(1/x, x, 0, "both") -> ToolError: left = -oo, right = oo
expand_series
泰勒/麦克劳林级数围绕给定点展开。检测奇异点并将其报告为错误,而不是返回Laurent级数。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
expression |
str | 必需 | 要展开的函数 |
variable |
str | required | 要展开的变量 |
point |
str | "0" |
扩建中心("0" =麦克劳林) |
order |
int | 6 | 术语数量 |
series(exp(x), x, 0, 6) -> 1 + x + x**2/2 + x**3/6 + x**4/24 + x**5/120 + O(x**6)
series(sin(x), x, 0, 4) -> x - x**3/6 + O(x**4)
series(exp(x), x, 1, 3) -> E + E*(x-1) + E*(x-1)**2/2 + O((x-1)**3)
求解方程
求解一个或多个变量的代数方程。如果没有 = 如果存在,则假设表达式等于零。当不存在真正的根时,返回复杂的解。三角方程只返回主解。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
equation |
str | 必填 | 要求解的方程式(使用 = 平等) |
variable |
str或null | null | 要求解的变量(如果是单个变量,则自动检测) |
solve(x^2 - 4 = 0, x) -> x = -2, 2
solve(3*x + 1 = 7, x) -> x = 2
solve(x^2 - 1) -> x = -1, 1 (assumes = 0)
solve(x + y = 5, x) -> x = 5 - y
解决方案
求解常微分方程。支持素数表示法(y', y'', y''')以及 Derivative(y, x) 符号。返回具有任意常数(C1,C2,…)的通解,或在提供初始条件时返回特定解。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
equation |
str | 必填 | ODE(y' - 2*y = 0, y'' + y = sin(x)) |
function_name |
str | "y" |
未知函数的名称 |
variable |
str | "x" |
自变量 |
initial_conditions |
str或null | null | 逗号分隔的IC: y(0)=1, y'(0)=0 |
ode(y' - 2*y = 0) -> y(x) = C1*exp(2*x)
ode(y'' + y = 0, ics="y(0)=1, y'(0)=0") -> y(x) = cos(x)
多变量calc
执行多变量微积分运算。渐变输出使用括号符号([2*x, 2*y, 2*z])这被散度和旋度直接接受为输入。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
operation |
str | 必填 | 以下之一: partial_derivative, gradient, divergence, curl, double_integral, triple_integral |
expression |
str | 必填 | 标量字段或逗号分隔的向量分量 |
variables |
str | 必填 | 逗号分隔的变量名,例如。 x, y, z |
with_respect_to |
str或null | null | 必需 partial_derivative |
bounds |
str或null | null | 积分需要。格式: x: 0, 1; y: 0, x |
partial_derivative(x*y^2, vars="x,y", wrt="y") -> 2*x*y
gradient(x^2+y^2+z^2, vars="x,y,z") -> [2*x, 2*y, 2*z]
divergence([2*x, 2*y, 2*z], vars="x,y,z") -> 6
curl([-y, x, 0], vars="x,y,z") -> [0, 0, 2]
double_integral(x*y, vars="x,y", bounds="x:0,1; y:0,1") -> 1/4
公共参数
所有工具都接受这些可选参数:
detail_level(str,默认值"concise"):"concise"只返回结果和LaTeX;"detailed"添加输入表达式、应用规则、中间步骤和(在适用的情况下)ODE分类。ctx(上下文,默认值None):用于日志记录的FastMCP上下文。内部使用;呼叫者不需要提供它。
表达式语法
解析器接受标准数学符号,但有一些便利:
| 符号 | 示例 | 解释 |
|---|---|---|
| Caret指数运算 | x^2 |
x**2 |
| 隐式乘法 | 2x, 3sin(x) |
2*x, 3*sin(x) |
| 标准功能 | sin, cos, tan, exp, log, sqrt |
SymPy等效物 |
| 常量 | pi, E, e, oo |
pi,欧拉数,无穷大 |
| 负无穷大 | -oo, -inf |
负无穷大 |
对于ODE表示法,使用素数表示法(y', y'', y''')或 Derivative(y(x), x).
资源
calculus://reference/{主题}
六个微积分主题的参考资料(定义、关键定理、常用公式):
| 主题 | 内容 |
|---|---|
derivatives |
定义、规则(功率、乘积、商、链)、常见导数、MVT、L'Hopital |
integrals |
黎曼定义、FTC、技术(替换、部分、偏分数)、普通积分 |
limits |
Epsilon delta定义,极限定律,关键极限,挤压定理,连续性 |
series |
收敛性测试,几何/p系列,Taylor/Maclaurin系列,收敛半径 |
differential_equations |
一阶(可分、线性、精确)、二阶线性、存在性/唯一性 |
multivariable |
偏导数、梯度、散度/旋度、多重积分、格林/斯托克斯/散度定理 |
提示
微积分导师
将代理配置为微积分导师的系统提示。导师使用可用的工具逐步展示工作,并参考 calculus://reference/{topic} 背景材料资源。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
topic |
str | 必填 | 微积分主题要关注 |
level |
str | "undergraduate" |
学生级别: high_school, undergraduate, graduate |
级别控制解释深度:
- 高中简单的语言,真实世界的例子,在严谨之前建立直觉。
- 本科生:标准符号,直觉和形式主义的平衡,按名称引用定理。
- 毕业:形式证明、epsilon-delta参数、收敛条件、与其他领域的联系。
项目结构
src/
core/ # Server bootstrap, dynamic loading, auth, logging
tools/ # Calculus tool implementations
_sympy_helpers.py # Shared expression parsing and formatting
resources/ # calculus://reference/{topic} resource
prompts/ # calculus_tutor prompt
middleware/ # (none currently)
tests/
tools/ # Tool unit tests
resources/ # Resource tests
prompts/ # Prompt tests
Containerfile # Container definition (UBI base)
openshift.yaml # OpenShift manifests
deploy.sh # Deployment script
Makefile # Common tasks
发展
添加工具
在中创建Python文件 src/tools/.导入共享 mcp 实例来自 src.core.app:
from typing import Annotated
from pydantic import Field
from fastmcp import Context
from fastmcp.exceptions import ToolError
from src.core.app import mcp
@mcp.tool(
annotations={"readOnlyHint": True, "idempotentHint": True, "openWorldHint": False}
)
async def my_tool(
expression: Annotated[str, Field(description="Math expression")],
ctx: Context = None,
) -> str:
"""Tool description for the LLM."""
# Use helpers from src.tools._sympy_helpers for parsing/formatting
return "result"
添加资源
from src.core.app import mcp
@mcp.resource("calculus://my-resource/{param}")
async def my_resource(param: str) -> str:
"""Resource description."""
return "content"
添加提示
from pydantic import Field
from src.core.app import mcp
@mcp.prompt
def my_prompt(
topic: str = Field(description="Topic area"),
) -> str:
"""Prompt purpose."""
return f"You are an expert in {topic}..."
加载程序在启动时会自动发现所有组件,无需手动注册。
进口公约
始终使用 src. 此项目中导入的前缀:
from src.core.app import mcp # correct
from src.tools._sympy_helpers import parse_expression # correct
from core.app import mcp # WRONG - causes dual FastMCP instances
测试
# Run all tests
make test
# Or directly
.venv/bin/pytest tests/ -v
# Run a single test file
.venv/bin/pytest tests/tools/test_compute_derivative.py -v
# Run tests matching a pattern
.venv/bin/pytest tests/ -k "test_limit" -v
# Test with cmcp (STDIO, requires separate terminal)
make test-local
cmcp ".venv/bin/python -m src.main" tools/call compute_derivative '{"expression": "x^3", "variable": "x"}'
FastMCP装饰器将函数封装在特殊对象中。通过以下方式访问底层功能 .fn 在测试中:
from src.tools.compute_derivative import compute_derivative
@pytest.mark.asyncio
async def test_power_rule():
result = await compute_derivative.fn(expression="x^3", variable="x")
assert "3*x**2" in result
环境变量
| 变量 | 默认值 | 用途 |
|---|---|---|
MCP_TRANSPORT |
stdio |
运输方式: stdio 或 http |
MCP_HTTP_HOST |
127.0.0.1 |
HTTP绑定地址 |
MCP_HTTP_PORT |
8000 |
HTTP端口 |
MCP_HTTP_PATH |
/mcp/ |
HTTP端点路径 |
MCP_LOG_LEVEL |
INFO |
日志记录级别 |
MCP_HOT_RELOAD |
0 |
启用热重新加载以进行开发 |
MCP_SERVER_NAME |
fastmcp-unified |
MCP响应中的服务器名称 |
建筑
看 建筑.md 有关动态加载系统、工具可组合性设计和共享助手模式的详细信息。
需求
- Python 3.11+
- SymPy>=1.13
- 快速MCP>=2.11.3
- OpenShift命令行界面(
oc)用于部署 - cmcp用于本地测试:
pip install cmcp