
Axiom — Advanced Math
io.github.tufantunc由 GitHub 账号 tufantunc 发布v1.0.5更新于 Oct 27, 2026
Exact symbolic math for LLMs: integrals, equations, matrices, and claim verification via Giac/Xcas
发布方自己的服务:Axiom
概览
本地 MCP 服务器,借助 Giac/Xcas 与 math.js 为助手提供精确的符号与数值数学计算:求解、验证命题、绘制函数图。
- 可以做什么
- 用 CAS 风格字符串求解数学问题:算术与单位、方程与方程组、微积分、多元微积分、代数、线性代数、数论、组合、概率、假设检验、数值方法、二维与三维几何、变换与级数、精确值、回归与数列
- 以符号、数值或两者兼用的方式验证数学命题,返回是否成立、是否成功求值、置信度与检查次数
- 将二维函数渲染为可设置范围、尺寸和标题的 SVG 图像
- 提供串联求解与验证的引导式提示,用于分步求解、函数分析、恒等式验证、单位换算、数据集分析、微分方程组与回归
- 适用场景
- 当助手需要可信的精确结果而非猜测的算术时值得添加:符号积分与求导、解方程、矩阵运算、统计,或对模型给出的结论做二次核验。也可作为一次性命令行工具使用,无需配置 MCP。
- 运行要求
- 以 stdio 方式在本机运行,通常通过 npx 启动 npm 包 axiom-math。需要 Node.js 20 或更高版本;首次运行会下载约 3.8 MB 的 WebAssembly 计算引擎。日常使用无需账号、API 密钥或环境变量。另有可选 HTTP 模式,涉及 MCP_PORT、MCP_HOST、MCP_ALLOWED_HOSTS 以及超时和堆内存变量。
安装
在 SourceWeft 中
- 打开 控制台中的 Axiom — Advanced Math,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Axiom — Advanced Math MCP Server
[npm] [License: GPL v3+] [Node.js >=20] [MCP] [CI] [codecov]
Exact symbolic and numerical mathematics for LLMs — a real computer algebra
system (Giac/Xcas) behind the Model Context Protocol, and behind a shell
command. Published as axiom-math.
[Axiom catching a wrong derivative, then computing an exact integral]
Quick start
As a CLI, straight away:
As an MCP server, in any client's config:
As an agent skill — drop in skills/axiom-math/SKILL.md, which teaches an agent the three commands and their exit codes.
Why Axiom?
LLMs often make calculation errors, especially with symbolic math, exact fractions, and multi-step problems. Axiom provides verified, exact results through two layers:
- math.js — Fast numerical evaluation (arithmetic, trigonometry, matrices)
- Giac/Xcas WASM — Symbolic computation (calculus, algebra, equation solving)
Benchmark Results (GLM-5.1, May 2026)
Key insights:
- Phase 0 grader (LaTeX/Unicode normalization + symbolic equivalence) is the dominant value driver across all datasets
- CAS-quick lifted from 26.7% (April pre-grader) to 70% (post-grader) — the biggest single jump
- Omni-MATH ≥7 is at ceiling for current LLM+CAS setups; needs fundamentally different approaches (Lean/Coq, fine-tuning, RAG)
Full results: benchmark/results/ and docs/superpowers/specs/ (per-phase analysis)
Features
Axiom exposes 3 MCP tools. Almost everything flows through compute, a single gateway that parses a CAS-style problem string and routes it to the right internal engine — so callers learn one tool, not dozens.
What compute covers
compute recognizes CAS-style verbs and dispatches across these domains. Anything it doesn't recognize falls through to raw Giac/Xcas evaluation.
Installation
The package is axiom-math on npm.
Nothing to install for normal use — npx fetches and caches it:
Or install it so the axiom-math command is on your PATH:
Node.js >= 20 required. The first run downloads about 3.8 MB (the CAS engine compiled to WebAssembly) and takes a few seconds; later runs come from the npx cache.
From source
For contributors, or to run a modified build:
Docker
Usage
CLI (STDIO Transport)
Claude Desktop integration:
Running from a local checkout instead of npm — point args at the built entry
point:
Command line
The same binary works as a one-shot CLI, so agents can use it as a skill with no MCP configuration. With no arguments it is the MCP server; with a subcommand it runs one computation and exits.
Exit codes: 0 success · 1 tool or usage error · 2 verify checked the
claim and it is false.
2 is a mathematical verdict, so a claim that never got checked does not use
it: one that fails to parse, that the CAS cannot evaluate, or that has a
superscript with more than one reading, exits 1 with nothing on stdout.
axiom-math verify '...' && ... therefore never reads a syntax error as a
disproof.
A ready-to-use agent skill is in skills/axiom-math/SKILL.md.
HTTP Transport
The HTTP transport is stateless: every POST /mcp is handled independently,
no Mcp-Session-Id is issued, and no session state is kept between requests.
This server sends no server-initiated notifications, so nothing is lost — and it
scales horizontally with no shared state.
Security: there is no authentication and no rate limiting. The default bind address is
127.0.0.1, butdocker/docker-compose.ymlsetsMCP_HOST=0.0.0.0. If you expose the port, put it behind a reverse proxy that authenticates and rate-limits —docker/reverse-proxy/is a working, tested one (nginx + basic auth + per-client concurrency cap, with the app publishing no port of its own). SECURITY.md documents the full posture — what is protected, what is not, and how to report a vulnerability.
POST /mcpalso validates theHostheader against an allowlist (localhost,127.0.0.1,[::1]by default) to block DNS rebinding — a malicious page can make a victim's browser resolve an attacker domain to127.0.0.1and reach this server through it. If you reach the server by a LAN address, hostname, or reverse-proxy domain other than loopback, setMCP_ALLOWED_HOSTSor everyPOST /mcprequest will get a403. This check is not authentication — it only constrains which host names may reach the endpoint, nothing about who is asking.
Environment variables:
One bound is not configurable: a result over 100,000 characters is refused
rather than returned, so an expression like 1:2000000 reports its element count
instead of shipping 24 million characters into the caller's context.
Some inputs are refused rather than answered, because any answer would be
meaningless. Arithmetic that evaluates to NaN (such as 0/0) is an error; an
infinite result is returned with a warning, because a true infinity and a value
that overflowed the range of a double are indistinguishable once computed. A
t-test needs variation in whatever it actually tests — paired_t compares the
differences, so it is those that must vary, while Welch's two_sample_t needs
only one of the two samples to vary. A contingency table needs non-negative
counts, no all-zero row or column, rows of equal length, and more than one row
and column. A one-way ANOVA needs some within-group variation and more
observations than groups. And any of these is refused when the values are large
enough that the statistic itself overflows to infinity, because an overflowed
statistic is no longer the statistic. A numerical method is refused when its
expression does not depend on the variable it is solved or integrated over, or
when the CAS answers symbolically rather than with a number — previously the
leading term of that symbolic answer was reported as the result.
A system of differential equations written as a list — desolve([y'=z, z'=-y], x) — is rewritten into the matrix form the CAS solves and returns a solution for
every function. The components come back in the order the equations were written,
and the JSON envelope names them in a components field, because
[[cos(x),-sin(x)]] is not interpretable without it.
Initial conditions must be given for every function, at the same point, or not at
all — a partial set is refused rather than ignored. Also refused, each with its
own reason: a system that is not linear in the unknown functions; coefficients
that depend on the independent variable; a derivative of order above one (rewrite
y''=z as y'=w, w'=z); more than nine equations; and a system the CAS cannot
finish.
The infinite-result rule covers arithmetic evaluation. A symbolic +infinity
from the CAS routes — a limit, a divergent integral — is a normal answer and
carries no warning.
MCP Inspector
Tool Reference
compute
The single gateway for all math. Pass a CAS-style problem string; the router parses it and dispatches to the right engine.
Examples:
verify
Independently check a mathematical claim. Useful as a second, tool-grounded opinion on a result the model produced.
Returns four fields: verified, evaluated, confidence, and checks_performed.
evaluated is the one to read first. It is false when no check produced a
usable answer — the claim did not parse, the CAS could not evaluate it, or it
has a superscript with more than one reading — in which case verified: false
means "unknown", not "refuted". Treating the two as
the same turns a syntax error into a disproof.
plot
Render a 2D function as an SVG image.
Returns a base64-encoded SVG image (axes, grid, labels, asymptote detection) plus a text caption.
Prompts
The server also registers guided MCP prompts that chain compute/verify for multi-step workflows: solve-step-by-step, analyze-function, verify-identity, convert-units, analyze-dataset, solve-ode-system, and regression-workflow.
Run Benchmarks
Default production recipe (grader-v2 included automatically):
Optional ablation features (off by default)
--features=output-hygiene— tool output post-processing (Unicode normalize, optional simplify, silent-failure warning). Marginal +1pp on CAS in live measurement.--features=grader-v3— equation-RHS extraction + bare-comma-list set match. Marginal +1pp on CAS.--features=self-consistency— N=3 majority voting (variance reduction; 3× cost; no accuracy gain on CAS).
Example:
See docs/superpowers/specs/2026-05-*-results.md for live ablation analysis of every flag.
What we tried that didn't work
This project went through extensive ablation across five phases (Phase 0–4). The following experimental approaches were tested live and rejected:
- Phase 1: Structured JSON output with
\boxed{}trailers — model paraphrased boxed content into LaTeX style, breaking answer extraction. Net regression on CAS. - Phase 2: 8K token budget (
tokens-8k) — gave the model more room to wander rather than recovering from truncation. Net regression −6.7pp on CAS. - Phase 3: Self-consistency for accuracy — N=3 voting did not lift accuracy (Wang et al. literature gain not reproducible on CAS); kept as a methodology tool for variance reduction only.
- Phase 4: Olympiad-specific scaffolding prompt — engagement improved (no-tool-call rate 84% → 74%) but accuracy stayed at 0%. Olympiad-tier problems are out of scope for prompt-engineering interventions.
Each phase's per-problem analysis is in docs/superpowers/specs/2026-05-*-results.md. The honest documentation of failures is preserved as a project archive.
Architecture
Compute gateway → router → domain handlers
compute never asks the caller to pick a handler. The router matches the problem string against ordered rules, the matching extractor parses arguments, and the dispatcher calls the corresponding domain handler. Unmatched input falls through to raw Giac/Xcas.
Response Format
Text-format responses are line-structured so LLMs (and the benchmark grader) can extract answers reliably:
Benchmark Results
Datasets
How to Run
See Run Benchmarks above for the commands. In short, from the repository root:
Swap :zai for :openrouter to change provider. The benchmark/ directory is
a separate npm project with finer-grained scripts (cas:quick:zai,
gsm8k:quick:zai, …); npm run benchmark:* from the root delegates to them.
Environment variables:
Development
Scripts
Testing
The suites are split. npm test runs the unit tests and needs no build;
npm run test:integration builds first and exercises the packaged dist/
output, so it catches things the unit suite cannot — the shipped binary's
argument dispatch, the MCP handshake, exit codes.
Test coverage: unit + integration suite, 100% pass rate. Run npm test for the current count — it changes too often to keep a number here in sync.
WASM Build (Giac)
This runs scripts/build-giac-wasm.sh, which builds
docker/build-giac-wasm/Dockerfile with docker build (no Compose file
involved) and writes giac.wasm.js straight into src/server/giac/ — no
manual copy step needed. Requires Docker Desktop (or another Docker daemon)
running locally. Per-task build logs land under logs/giac-build/.
Contributing
Bug reports and pull requests are welcome — see CONTRIBUTING.md for the setup, the checks CI runs, and the few things about this codebase that are not obvious from reading it.
License
GNU General Public License v3.0 or later — see LICENSE.
Axiom embeds Giac/Xcas, which is GPL-3.0-or-later, so the combined work carries the same license. Details and attribution: THIRD-PARTY-NOTICES.md.
Does the GPL affect my agent?
No. Your agent talks to Axiom over the Model Context Protocol — a separate process, over stdio or HTTP. Separate programs communicating at arm's length are not a combined work, so running Axiom alongside your own agent puts no license obligation on your code, whatever license it uses. Running the software is unrestricted under the GPL, including running it as a service.
The copyleft terms apply when you redistribute Axiom itself — shipping it (modified or not) inside a product you hand to someone else. In that case, pass along the source under GPL-3.0 and keep the notices intact.
来源:README.md,提交 0b5561f
工具
0版本历史
1- v1.0.5最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
其他 Axiom 集成

Axiom
co.axiom官方发布者
Axiom 是一个远程 MCP 服务器,让助手列出数据集和 schema、运行 APL 查询,并使用提示词进行探索、异常和监控工作。
Axiom Lab — AI Pitch Deck & Business Video MCP
由 GitHub 账号 Axiom-lab-tech 发布
远程 MCP 服务器,可将路演 PPT、幻灯片、产品照片和简报转成经质检的商业视频,付费渲染前先免费生成方案。

Axiom Meridian
由 GitHub 账号 abeljumanuel 发布
一个本地 MCP 服务器,将团队的编码规则与经验教训以 Markdown 建索引,只向助手提供与当前项目或任务相关的那部分内容。

AXIOM
由 GitHub 账号 dragoscv 发布
AXIOM 是面向编码代理的事务性写入闸门:在允许的仓库根目录内规划、检查、预览并原子应用文件改动,并保留可回滚日志。

OWL class axiom count, body discarded
由 GitHub 账号 sadri-dridi 发布
远程 MCP 端点,提供一批小型、基本无状态的实用检查:URL 与主机名结构、HTTP 状态、时区、JSON 合法性和简单算术。