
Axiom — Advanced Math
io.github.tufantuncPublished by GitHub account tufantuncv1.0.5Updated Oct 27, 2026
Exact symbolic math for LLMs: integrals, equations, matrices, and claim verification via Giac/Xcas
The publisher's own server: Axiom
Overview
Local MCP server that gives an assistant exact symbolic and numerical math via Giac/Xcas and math.js: compute, verify claims, and plot functions.
- What you can do
- Solve math problems from a CAS-style string: arithmetic and units, equations and systems, calculus, multivariable calculus, algebra, linear algebra, number theory, combinatorics, probability, hypothesis tests, numerical methods, 2D/3D geometry, transforms and series, exact values, regression and sequences
- Verify a mathematical claim symbolically, numerically or both, returning verified, evaluated, confidence and checks performed
- Render a 2D function as an SVG image with configurable range, size and title
- Use guided prompts that chain compute and verify for step-by-step solving, function analysis, identity checks, unit conversion, dataset analysis, ODE systems and regression
- When to use it
- Worth adding when an assistant needs trustworthy exact results rather than guessed arithmetic: symbolic integration and differentiation, equation solving, matrices, statistics, or a second opinion on a claim the model produced. Also usable as a one-shot command-line tool without MCP configuration.
- Requirements
- Runs as a local process over stdio, typically launched with npx from the npm package axiom-math. Node.js 20 or newer is required; the first run downloads about 3.8 MB of WebAssembly CAS engine. No accounts, API keys or environment variables are needed for normal use. An optional HTTP mode exists with MCP_PORT, MCP_HOST, MCP_ALLOWED_HOSTS and timeout/heap variables.
Installation
In SourceWeft
- Open Axiom — Advanced Math in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
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.
Source: README.md at commit 0b5561f
Tools
0Version history
1- v1.0.5LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Other Axiom integrations

Axiom
co.axiomOfficial publisher
Axiom is a remote MCP server that lets an assistant list datasets and schemas, run APL queries, and use prompts for exploration, anomaly and monitoring work.
Axiom Lab — AI Pitch Deck & Business Video MCP
Published by GitHub account Axiom-lab-tech
Remote MCP server that turns pitch decks, slides, photos and briefs into QA-checked commercial videos, with free planning before paid rendering.

Axiom Meridian
Published by GitHub account abeljumanuel
A local MCP server that indexes a team's coding rules and lessons learned in Markdown and serves only the slice relevant to the current project or task.

AXIOM
Published by GitHub account dragoscv
AXIOM is a transactional write gate for coding agents: it plans, checks, previews and atomically applies file changes inside allowlisted repository roots…

OWL class axiom count, body discarded
Published by GitHub account sadri-dridi
Remote MCP endpoint offering small, mostly stateless utility checks: URL and host shape, HTTP status, time zones, JSON validity and simple arithmetic.