内容
# mcp-abacus
[](https://github.com/laszlopere/mcp-abacus/actions/workflows/ci.yml)
[](https://pypi.org/project/mcp-abacus/)
[](https://www.python.org/)
[](LICENSE)
[](https://github.com/sponsors/laszlopere)
[](https://github.com/astral-sh/ruff)
[](https://mypy-lang.org/)
[](https://github.com/laszlopere/mcp-abacus/commits)
**为人工智能打造的计算器 — 因为我们知道它们的需求是不同的。**
人们使用计算器来获取数字。而语言模型则需要一个可以信任并能推理的数字:这个数字是精确的还是近似的?它的精度是多少?更宽的数据类型是否能容纳更多的数字?这个数字是否会像生产代码一样溢出?一个看似精确但实则不精确的浮点数答案比没有答案更糟糕,因为它会将舍入误差伪装成自信的声明。
mcp-abacus 就是为这种调用者而设计的。它提供**类型忠实计算**:您可以选择一种数值类型/模式(定点数、IEEE-754 双精度浮点数、精确有理数、复数),整个表达式的行为与真实代码中该类型完全一致 — 它在类型舍入的地方舍入,在类型精确的地方保持精确,并按位将结果带入下一个计算。每个答案都带有自己的精度判决(`精确` vs `不精确,舍入到 N 小数位`),因此模型永远不必猜测结果是否是真实值。它不近似类型;它**使用**该类型进行计算。
## 它能为您提供什么
- **`计算`** — 在一种数值类型中评估一个表达式。模式:
- `定点数` *(默认)* — 精确缩放整数;货币 / ERC-20 安全
- `浮点数` — IEEE-754 双精度浮点数(别名 `float64`、`double`)
- `有理数` — 精确分子/分母;无静默舍入
- `复数` — `a + b*i`,两个定点数部分;写成虚数单位 `1i`(例如 `3+4i`、`2.5i`)。精确 `+ - *`(`(3+4i)*(1+2i)` → `-5+10i`,`sqrt(-1)` → `1i`),对网格进行舍入 `/` 和超越函数;无序、按位、整数(`gcd`/`阶乘`)或求解器支持
**向量字面量** `[a, b, …]` 在选定模式下构建一维值列表(例如 `[1, 2, 3]`、空列表 `[]` 或 `[1+1, 2*3]` → `[2, 6]`);它是一个内部容器,不是可选模式。整个统计系列都减少了单个向量的元素 — `最小值`/`最大值`/`平均值`/`中位数`/`方差`/`标准差`/`平方和`/`几何平均值`/`调和平均值`(`平均值([1, 2, 3])` → `2`,`平方和([1, 2, 3])` → `14`,`几何平均值([4, 9])` → `6`),以及整数约简器 `gcd`/`最小公倍数`(`gcd([54, 24, 6])` → `6`)。顺序统计量获取一个前导点,然后获取数据(一个运行或一个向量):`quantile(q, …)` 表示 `q` 在 `[0, 1]` 中,`percentile(p, …)` 表示 `p` 在 `[0, 100]` 中,读取该排名的值(7型线性插值),概括了 `中位数` — `percentile(50, [1, 2, 3, 4])` 就是中位数。并且 `协方差(x, y)`/`相关性(x, y)` 获取两个等长向量(`协方差([1, 2, 3], [4, 5, 6])`,皮尔逊 `相关性(...)` 在 `[-1, 1]` 中)。反之,`因数(n)` 生成一个向量 — 一个正整数的质因数,按升序排列并带有重数(`因数(12)` → `[2, 2, 3]`,`因数(1)` → `[]`)。否则,向量仅构造和渲染 — 其他运算符和函数拒绝一个索引 (`b[i]`),并且拒绝嵌套 (`[[1,2],[3,4]]`)。
- **`分析`** — 评估表达式并返回其整个解析树,每个节点都带有它计算出的值,这样您就可以看到**哪里**的意外答案舍入或溢出了(例如 `(1 + 1/2) * 3` 在定点数中是 `3` — 树显示了 `1/2 = 0` 的叶子,这解释了它)
- **`求解器`** — 找到一个或多个变量的值,使表达式在某个区间上达到目标:*求根*(`x**2 - 2` 在 `[0, 2]` 上 → √2)或 *求最小值* / *求最大值*,在相同的数值类型和表达式语言中(常量来自 `名称 = 表达式` 赋值行)。一个未知数使用 *黄金分割搜索*(或通过 `算法="brent-parabolic"`,通常在平滑极值上更快),传递 `变量`(一个名称 → `[下限, 上限]` 映射)与 `算法="nelder-mead"` 一起使用 *Nelder-Mead* 单纯形求解多个变量
- **`曲线拟合`** — 将已知的曲线形式拟合到成对的 `(x, y)` 观测值,并报告每个拟合方程及其误差。将数据交给它,它会估计,对于直线、二次曲线、立方曲线、幂律 `a*x**b`、指数 `a*exp(b*x)`、指数-倒数(阿伦尼乌斯)`a*exp(b/x)`、对数 `a + b*ln(x)`、平方根 `a*sqrt(x) + b`、倒数 `a/x + b`、正弦曲线 `a*sin(b*x + c) + d`、高斯曲线 `a*exp(-(x-b)**2/(2*c**2))`、饱和度 `x/(a*x + b)`(米氏方程)、双曲线 `1/(a*x + b)`、洛朗 `a + b*x + c/x`、霍尔方程 `a*b**x*x**c`、威布尔累积分布函数 `1 - exp(-(x/a)**b)`、逻辑斯谛函数 `a/(1 + exp(-(b*x + c)))`(带有数据固定上限 `a`)、广义双曲线 `1/(a*x**2 + b*x + c)` 和洛伦兹峰 `a/(1 + ((x-b)/c)**2)`,参数在最小二乘意义上最佳匹配 — 多项式和仿射形式通过正规方程闭合,幂律、指数和指数-倒数律通过对数线性化,高斯和霍尔方程通过拟合对数空间基(卡鲁阿纳方法用于高斯),威布尔通过双对数威布尔图,逻辑斯谛函数通过其对数几率,一旦其上限固定,饱和度和双曲线通过倒数线性变换(广义双曲线和洛伦兹通过倒数二次变换),以及正弦曲线(唯一没有闭合形式的曲线)通过迭代频率搜索 — 然后按残差误差排序并返回前三个(例如 `x=[1,1.5,2]`,`y=[2,5.8,8.9]` → `6.9*x - 4.78…`)。整个拟合过程在选定的数值类型中运行,因此参数和误差带有通常的精度判决。
- **`帮助`** — 语法和类型参考,随时为模型提供帮助
- **`信息`** — 服务器版本和环境
每个 `计算` 结果都是自我描述的:一个渲染的 `值` 字符串带有其精度判决,加上结构化的 `精确` / `精度` 字段。即使是不精确的定点数结果也预览了多几个小数位会显示的内容,因此调用者被引导向更高的精度,而不是误导性的浮点数。
## 安装和注册 Claude Code
使用此检出将服务器作为 [uv](https://docs.astral.sh/uv/) 工具安装:
```sh
uv tool install .
```
这会在您的 PATH 上放置一个 `mcp-abacus` 可执行文件。在 Claude Code 中注册它(用户范围,因此在每个项目中都可用):
```sh
claude mcp add abacus -- mcp-abacus
```
然后启动(或 `/mcp` 重新连接)一个 Claude Code 会话 — `abacus` 工具将可用。验证服务器已启动:
```sh
claude mcp list
```
> **从源代码升级:** 版本已固定,因此直接重新安装可以使用缓存的轮子并静默安装过时的代码。强制干净的重建:
> ```sh
> uv cache clean mcp-abacus
> uv tool install --force --no-cache .
> ```
> 一个长期运行的 Claude 会话保留旧服务器子进程,直到您 `/mcp` 重新连接或启动新的会话。
## 开发
```sh
uv sync
uv run pytest
```
## 赞助
mcp-abacus 是免费、开源的软件,在我的空闲时间开发。赞助是保持项目存活和积极维护的关键 — 它们资助新的数值模式、错误修复和持续支持,并且是工作值得继续的直接信号。
如果该项目对您有用,请考虑通过 **GitHub 赞助者** 赞助它。点击存储库顶部的 **赞助** 按钮,或直接访问链接,并选择一次性或循环捐赠。每一个贡献,无论大小,都非常感谢,并直接用于保持 mcp-abacus 健康。
## 许可证
GNU 通用公共许可证 v3.0 或更高版本(GPL-3.0-or-later)。参见 [LICENSE](LICENSE)。