关于 calculator-mcp-server
calculator-mcp-server 是面向需要数值或符号计算的客户端与 Agent 的 MCP 服务,支持求值、化简和求导,并提供类型化错误与执行限制。
主要功能
- 01计算算术、统计、矩阵、单位等表达式
- 02化简代数与三角表达式
- 03计算符号导数
- 04选择 number、BigNumber 或 Fraction 结果
- 05通过资源查看语法与函数说明
适用场景
- 01按指定精度核验数值结果
- 02在后续处理前化简表达式
- 03按变量名对表达式求导
MCP 相关
提供用于求值、化简和求导的 `calculate` 工具,以及 `calculator://help` 资源。支持 STDIO 和 Streamable HTTP 传输。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://calculator.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-calculator https://calculator.caseyjhand.com/mcp{"mcpServers":{"cyanheads-calculator":{"type":"http","url":"https://calculator.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-calculator":{"type":"http","url":"https://calculator.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-calculator":{"type":"http","url":"https://calculator.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-calculator":{"serverUrl":"https://calculator.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
1| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| scope | object | 否 | 用于 evaluate 的变量赋值;simplify 和 derivative 会忽略这些赋值。例如:{ "x": 5, "y": 3 } 会使 "x + y" 的计算结果为 8。 |
| variable | any | 否 | 求导时使用的变量。operation 为 "derivative" 时必填。空字符串视为未提供。例如:"x"。 |
| operation | enum | 否 | 要执行的操作。"evaluate" 计算数值结果(默认)。"simplify" 符号化简代数表达式(例如,"2x + 3x" -> "5 * x")。支持代数恒等式和三角恒等式。如果化简器无法进一步化简表达式(例如,需要进行多项式因式分解的有理表达式),则原样返回结果,并在输出中将 unchanged: true 设为 true。"derivative" 计算符号导数(需要 variable 参数)。evaluate | simplify | derivative |
| precision | any | 否 | 数值结果的有效数字位数(1–16)。完整精度时省略。空字符串视为未提供。分数结果始终精确打印,符号操作(simplify、derivative)会忽略此参数。 |
| expression | string | 是 | 每次调用处理一个数学表达式——`;` 和换行符都不会分隔语句。在矩阵内部,`;` 用于分隔行(例如 `[1, 2; 3, 4]`)。支持算术(+、-、*、/、^、%)、算术和三角函数(sin、cos、sqrt、log、abs、round)、统计(mean、median、std、variance——默认情况下,std 和 variance 返回样本形式(n − 1);传入 "uncorrected" 可计算总体形式,例如 `std([2, 4, 6], "uncorrected")`)、组合数学(factorial、permutations、combinations)、矩阵运算(det、inv、transpose),以及常量(pi、e、phi、i)、单位(5 kg to lbs)和变量(提供 scope 时)。除 math.js 名称 `log` 和 `asin`/`atan` 外,也接受标准记法 `ln` 和 `arc*`(例如 `arcsin`、`arctan`);常见同义词(如 `stdev`、`permute`、`nCr` 和 `length`/`len`)会映射到对应的 math.js 名称(`std`、`permutations`、`combinations`、`count`)。 |
| numericType | enum | 否 | 用于 evaluate 的数值类型。"number"(默认):64 位 IEEE 754 浮点数——速度最快,约 16 位有效数字;值超过约 1.8e308(171!、2^1024、exp(1000))时会溢出,并以 undefined_result 失败。"BigNumber":具有 64 位有效数字和更大指数范围的十进制数,速度慢于 "number"——溢出时请改用此类型重试;结果是 64 位有效数字的近似值(10000!/9999! 返回 9999.99…96,precision: 16 会将其舍入为 10000)。除以零、0/0 和 log(0) 在所有数值类型中均未定义,因此更换数值类型无法解决这些问题。"Fraction":精确有理数运算(0.1 + 0.2 返回 3/10);当结果没有精确有理数值(sqrt(2)、sin(1)、log(3))、表达式调用 Fraction 模式无法计算的函数(sqrt(4)、5!、combinations(5, 2)),或使用 Fraction 模式仅以舍入浮点数保存的值(pi、e、2^(1/2)、含非整数部分的复数、number(x)、random())时,会以 fraction_unsupported 失败——这些情况请使用 "number" 或 "BigNumber"。含无理数因子的单位换算(30 deg to rad)会返回接近的有理近似值,而非精确值。符号操作(simplify、derivative)会忽略此参数。number | BigNumber | Fraction |
详细介绍
@cyanheads/calculator-mcp-server
通过 MCP 计算、化简和求导数学表达式。支持 STDIO 或 Streamable HTTP。
概述
由 math.js 驱动的计算器。通过一个工具验证数值结果、化简代数表达式并计算符号导数。
工具
| 工具 | 描述 |
|---|---|
calculate | 计算数学表达式、化简代数表达式或计算符号导数。 |
资源
| 资源 | 描述 |
|---|---|
calculator://help | 可用函数、运算符、常量和语法参考。 |
功能参考
calculate 工具
- 每次调用处理一个
expression。operation可选择evaluate(默认)、simplify或derivative;求导时需要提供variable(例如"x")。 - 可计算算术、三角函数、对数、统计、矩阵、复数、单位和组合数学;通过
scope赋值数值变量,例如{ "x": 5 }。 numericType可选择number、BigNumber(64 位有效数字,适用于超出 64 位浮点数范围的值)或Fraction(精确有理数)。当结果没有精确的有理数值(sqrt(2))、表达式调用了Fraction模式无法计算的函数(sqrt(4)、5!),或使用了Fraction模式仅以舍入浮点数形式保存的值(pi、2^(1/2))时,Fraction模式会返回fraction_unsupported,并提示更改数值类型。precision设置数值结果的 1–16 位有效数字。空白的可选variable和precision值会被视为未提供;scope和precision不影响符号运算。- 化简包括代数和三角恒等式(
2x + 3x→5 * x);unchanged: true表示化简器无法进一步化简表达式,包括多项式因式分解和有理式约分的情况。 - 返回结果字符串、结果类型、原始表达式和操作。验证失败时会提供带类型的原因和恢复提示。
calculator://help 资源
- 函数、运算符、常量、单位和表达式语法的 Markdown 参考;无需参数。
- 示例涵盖
scope、矩阵、复数、精度和全部三种操作。 - 可使用公共范围(
cacheHint)缓存 24 小时——这是运行时不会改变的静态内容。
功能
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),并提供结构化日志和可选的 OpenTelemetry 跟踪。
计算器专属功能:
- 强化的 math.js v15 实例——禁用危险函数,并在
vm超时限制下运行计算 - 无需身份验证——所有操作均为只读且无状态
- 输入验证:限制表达式长度并拒绝多条语句;矩阵行分隔符和字符串内容仍然有效
- 结果验证:屏蔽特定结果类型(函数、解析器、结果集),并可配置结果大小上限
- 大小限制:按次调用限制根据大小、乘积、广播、索引或精度参数构建矩阵或字符串的函数;每次计算还有总元素预算;超出限制的请求会快速失败并返回
result_too_large scope清理:仅允许数值,防止原型污染(屏蔽__proto__、constructor等)
面向 Agent 的输出:
- 有效调用回显——每个响应都会回显表达式和操作,以及应用了哪些
scope变量和精度,以便 Agent 验证实际计算内容 - 可区分的输出约定——
simplify中的unchanged: true会标明结果没有变化,而不是静默地返回相同表达式 - 带类型的错误原因——验证和计算失败时会附带带类型的
reason(例如fraction_unsupported、evaluation_timeout、disallowed_result_type)及可执行的恢复提示,而非原始异常
入门
公共托管实例
可使用公共实例 https://calculator.caseyjhand.com/mcp,无需安装。该实例提供 Streamable HTTP;每种客户端都有各自的配置格式。
对于 Claude Code:
claude mcp add --transport http calculator-mcp-server https://calculator.caseyjhand.com/mcp
对于 Cline(cline_mcp_settings.json):
{
"mcpServers": {
"calculator-mcp-server": {
"type": "streamableHttp",
"url": "https://calculator.caseyjhand.com/mcp"
}
}
}
对于 Cursor(mcp.json):
{
"mcpServers": {
"calculator-mcp-server": {
"url": "https://calculator.caseyjhand.com/mcp"
}
}
}
Claude Desktop 可在“设置”→“连接器”下添加远程服务。
自托管 / 本地
将以下任一配置添加到 MCP 客户端配置文件中:
{
"mcpServers": {
"calculator-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/calculator-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
或者使用 npx(无需 Bun):
{
"mcpServers": {
"calculator-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/calculator-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
或者使用 Docker:
{
"mcpServers": {
"calculator-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/calculator-mcp-server:latest"
]
}
}
}
对于 Streamable HTTP,设置传输方式并启动构建后的服务:
MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前置条件
- Bun v1.4.0 或更高版本
安装
- 克隆仓库:
git clone https://github.com/cyanheads/calculator-mcp-server.git
- 进入目录:
cd calculator-mcp-server
- 安装依赖:
bun install
配置
| 变量 | 说明 | 默认值 |
|---|---|---|
CALC_MAX_EXPRESSION_LENGTH | 允许的最大表达式字符串长度(10–10,000)。 | 1000 |
CALC_EVALUATION_TIMEOUT_MS | 最大求值时间(毫秒,100–30,000)。 | 5000 |
CALC_MAX_RESULT_LENGTH | 结果字符串的最大长度(字符数,1,000–1,000,000)。 | 100000 |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_HOST | HTTP 服务的主机名。 | 127.0.0.1 |
MCP_HTTP_PORT | HTTP 服务的端口。 | 3010 |
MCP_HTTP_ENDPOINT_PATH | HTTP MCP 端点的路径。 | /mcp |
MCP_HTTP_MAX_BODY_BYTES | 入站 HTTP 请求的最大大小;0 表示不设限制。 | 1048576 |
MCP_AUTH_MODE | 身份验证模式:none、jwt 或 oauth。 | none |
MCP_SESSION_MODE | auto、stateful 或 stateless。服务在代码中声明为 stateless,因此每种启动方式都会解析为相同模式;设置此项会覆盖该声明。 | stateless |
MCP_LOG_LEVEL | 日志级别(RFC 5424)。 | info |
有关可选的会话、可恢复性、日志记录和遥测设置,请参阅 .env.example。
运行服务
本地开发
-
构建并运行生产版本:
bun run build bun run start:http # or start:stdio -
运行检查和测试:
bun run devcheck # Lints, formats, type-checks bun run test # Runs test suite
Docker
docker build -t calculator-mcp-server .
docker run -p 3010:3010 calculator-mcp-server
该镜像默认使用端口 3010 上的 Streamable HTTP、无状态会话,并将日志写入 /var/log/calculator-mcp-server。默认会安装 OpenTelemetry 依赖;构建时使用 --build-arg OTEL_ENABLED=false 可省略这些依赖。
项目结构
| 目录 | 用途 |
|---|---|
src/mcp-server/tools/ | 工具定义(*.tool.ts)。 |
src/mcp-server/resources/ | 资源定义(*.resource.ts)。 |
src/services/ | 领域服务集成(MathService)。 |
src/config/ | 使用 Zod 解析和验证环境变量。 |
docs/ | 生成的目录树。 |
tests/ | 计算、配置和响应契约测试。 |
开发指南
开发指南和架构规则请参阅 AGENTS.md 或 CLAUDE.md。简要概括如下:
- 处理器抛出异常,框架捕获异常——工具逻辑中不要使用
try/catch - 使用
ctx.log记录日志 - 在
src/index.ts中注册新工具和资源
贡献
欢迎提交问题。提交前请运行检查:
bun run devcheck
bun run test
许可证
Apache-2.0 — 详情请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。