mcpField
A
A Rust port of calc (Landon Curt Noll's arbitrary-precision calculator)

A Rust port of calc (Landon Curt Noll's arbitrary-precision calculator)

本地服务
github.com/carlomagnoglobal科研与教育014 周前更新

关于 A Rust port of calc (Landon Curt Noll's arbitrary-precision calculator)

toRustCalcMCP 是 calc 的 Rust 移植版,面向需要通过命令行、浏览器 REPL 或 MCP 进行任意精度计算的用户。其共用引擎采用精确有理数运算。

主要功能

  1. 01精确有理数运算
  2. 02兼容 calc 的命令行计算器
  3. 03浏览器 Web REPL
  4. 04MCP 计算工具
  5. 05函数、变量和控制流
  6. 06复数与列表

适用场景

  1. 01计算高精度表达式
  2. 02通过 MCP 客户端使用计算器
  3. 03在浏览器中交互式计算

MCP 相关

提供通过 stdio 传输 JSON-RPC 2.0 的 MCP 服务。客户端可计算表达式、配置会话精度与显示方式,并列出内置函数。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"toRustCalcMCP": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/carlomagnoglobal/torustcalcmcp:latest"
]
}
}
}
启动命令docker run -i --rm ghcr.io/carlomagnoglobal/torustcalcmcp:latest

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/carlomagnoglobal/torustcalcmcp:latest

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

toRustCalcMCP

License Rust Crates.io

calc(Landon Curt Noll 的任意精度计算器)的 Rust 移植版,可用作:

  • rcalc — 兼容 calc 的命令行计算器
  • Web REPL — 基于浏览器的交互式计算器
  • MCP 服务 — 通过 stdio 使用 JSON-RPC 2.0,集成大模型/Agent

三种接口,一个引擎。 数值核心使用精确有理数运算 (基于 num-bigint 的 num-rational),与 calc 原生使用的模型相同 — 因此 1/3 * 3 的结果精确为 1,而 2^256 会精确计算到最后一位。

👉 2 分钟快速入门 — 初次使用 rcalc?从这里开始。 👉 作为 Claude Desktop MCP 安装 — 与 Claude Desktop 集成。

构建

cargo build --release
# binaries:
#   target/release/toRustCalcMCP   (auto-detects MCP vs CLI)
#   target/release/rcalc           (always the CLI)

也可以创建符号链接:ln -s toRustCalcMCP rcalc — 当 argv[0] 为 rcalc 时, toRustCalcMCP 将作为计算器运行。

CLI 用法(rcalc)

rcalc '2^100'                 # 1267650600228229401496703205376
rcalc '1/3 + 1/6'            # 0.5
rcalc -m frac '1/3 + 1/6'    # 1/2
rcalc 'gcd(462,1071)'        # 21
rcalc 'fact(30)'            # 265252859812191058636308480000000
rcalc 'sqrt(2)'             # 1.4142135623730950488
rcalc 'isprime(1000003)' 'nextprime(1000003)'   # 1 \n 1000033
echo '3*4' | rcalc -p        # pipe mode
rcalc                        # interactive REPL (Ctrl-D to exit)

标志:-p 管道模式,-q 静默模式,-m real|frac|int,-v 版本,-h 帮助。 若干经典 calc 标志(-c -C -d -e -i -O -s -u)会被接受并忽略。

Web REPL 用法

cargo build --release
./target/release/rcalc-web
# Open browser: http://localhost:8888

一个现代化的浏览器交互式 REPL,支持:

  • 交互式表达式求值
  • 命令历史记录(↑/↓ 方向键)
  • 语法高亮输出
  • 完整的 calc 功能(483 个内置名称)
  • 适配手机/桌面的响应式设计

试用:打开 http://localhost:8888 并输入 2^256 或 sin(pi()/6)。

MCP 用法

toRustCalcMCP --mcp     # speak JSON-RPC 2.0 over stdio

握手 → initialize,然后 tools/list,再然后 tools/call。权威的、 由服务端生成的模式定义请参见 docs/MCP_TOOL_SCHEMA.json,客户端注册示例请参见 examples/mcp-config.json。

工具
工具用途关键参数
calc_eval求值表达式expression(必填)、mode、digits、epsilon
calc_config获取/设置会话精度和显示方式action(get/set)、mode、digits、epsilon
calc_functions列出内置函数filter(可选子字符串)

calc_eval 的 mode/digits/epsilon 是单次调用的覆盖参数;calc_config set 会为整个会话更改这些参数。

支持的语言

  • 运算符:+ - * /(精确运算)、//(整数除法)、%(取模)、^/** (幂运算)、比较运算符 == != < <= > >=(结果为 1/0)、一元运算符 -/+。
  • 变量和赋值:x = 7; x^2。
  • 用户定义函数:define f(x) = x^2; f(5) → 25。
  • 控制流:if/else、while、for 循环、使用 {} 的代码块。
  • 用 ; 分隔的语句;每条语句的值都会打印出来(calc 的行为)。
  • 数值字面量:整数、a/b 有理数、小数、1.2e-3、0x/0b。
  • 列表:list(1,2,3); append(x,4); slice(x,1,3)。
  • 复数:sqrt(-1) → i;支持使用 +、-、*、/ 运算。
  • 字符串字面量:"hello"; strlen(s); index(haystack, needle)。
  • 483 个内置名称(与 calc 的 350 个完全兼容,减去 15 个已记录的解释器内部函数,再加上扩展功能)— 详见下方的实现状态。

精度模型

数字均为精确有理数。无理数结果会近似到会话 epsilon 指定的精度范围内(默认精确值为 1/10^20),与 calc 完全相同。超越函数(exp、 ln、sin、cos、tan)通过泰勒级数和牛顿法以任意精度计算。sqrt、sin、 cos 等函数会持续收敛计算,直到项小于 epsilon。pi/e 为 60 位常数。与 calc 一样,实数模式输出中的前导 ~ 表示结果为不精确表示(经过舍入/无限不循环)。

实现状态 — 与上游完全一致 ✅

calc 上游(lcn2/calc 的 func.c)定义了 350 个内置函数。此移植版注册了 483 个内置函数名,涵盖上游 350 个内置函数中的 335 个(此前长期缺失的另外 148 个已在下方与上游保持一致的批次中添加),此外还提供数十个上游没有的扩展和别名(统计、哈希、 位运算技巧、系统信息等)。

有意不实现的功能(15 个解释器内部项)

这些上游名称是 calc 的 C 解释器内部实现的产物,与此移植版的架构没有 有意义的对应关系;因此不实现它们,而不是提供无用的存根:

access、calc_tty、calclevel、calcpath、custom、dp、estr、 inputlevel、memsize、name、param、prompt、protect、saveval、 stoponerror

与上游已知的差异
  • 带输出参数的内置函数改为返回值:d2dm/d2dms(以及 g/h 系列)返回 [deg, min] / [deg, min, sec] 列表;quomod 返回 [q, r];search/rsearch 返回索引或 null。
  • 原地修改/左值内置函数改为返回新值:modify、copy、swap (内置函数接收的是值,而不是引用)。
  • base2() 的读取结果为 0(没有次级进制);设置时会报错——渲染器 只有一个输出进制。
  • free*() 不执行任何操作:不会缓存任何内容,所有值都按需计算。
完整的语言功能
  • ✅ 用户自定义函数(define name(params) = expr)、高阶 内置函数(select/forall/modify 调用函数值)
  • ✅ 控制流(if/else、while、for 循环)
  • ✅ 变量和作用域
  • ✅ 列表和索引(从 0 开始,支持负索引)
  • ✅ 完整算术运算的复数
  • ✅ 字符串字面量和完整的字符串函数套件
  • ✅ 进制转换(2-36,输入和输出)
  • ✅ 任意精度运算(精确有理数;精确的 1/10^20 epsilon)
  • ✅ 文件加载(-f filename)、文件 I/O 内置函数、REPL、管道模式

范围 — 架构与设计

calc 上游是约 92,000 行 C 代码,包含约 350 个内置函数和一门完整的、 图灵完备的脚本语言。此移植版是忠实的核心实现,采用便于逐步扩展的结构:

  • ✅ 精确有理数数值引擎 — 与 calc 的原生模型一致
  • ✅ 完整的词法分析器/解析器 — 支持完整的表达式语法
  • ✅ 树遍历求值器 — 支持用户自定义函数、控制流和作用域
  • ✅ 内置函数注册表 — 可扩展的函数映射,支持自动编目
  • ✅ CLI 和 MCP 服务 — 两种前端,共用一个引擎
  • 🔄 逐步添加内置函数 — 每个类别都可无缝加入,无需返工

架构稳定;添加更多函数很简单。

许可证

LGPL-2.1,与 calc 上游一致。

测试 CI 工作流

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。