Axiom — Advanced Math について
Axiom — Advanced Mathは、LLMやエージェント向けの高精度な数式計算プロジェクトです。math.jsとGiac/Xcasを組み合わせ、MCPサーバー、コマンドライン、エージェントスキルとして計算や数式の検証に使えます。
主な機能
- 01記号・数値計算の実行
- 02方程式や微積分問題の解決
- 03恒等式や計算結果の検証
- 042D関数グラフをSVGで出力
- 05コマンドラインとエージェントスキル
活用シーン
- 01積分、微分、極限の計算
- 02連立方程式や行列問題の解決
- 03導出した数式の主張を検証
- 04スクリプト用の関数グラフ作成
MCP 対応
Axiom — Advanced Mathは、計算、主張の検証、関数の描画に使う`compute`、`verify`、`plot`ツールをMCP経由で提供します。コマンドライン単体でも実行できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| domain | enum | いいえ | 領域のヒント: real(デフォルト)— 実数解 complex — 複素数解(csolve、cfactor) numeric — 数値計算を強制 exact — 厳密な記号形式real | complex | numeric | exact |
| format | enum | いいえ | 出力形式: text(デフォルト)— 人間が読みやすい結果 latex — LaTeX を中心とした出力 json — 構造化された ComputeEnvelopetext | latex | json |
| problem | string | はい | 解く数学の問題。明確にするため、CAS 形式の関数呼び出しを使用してください。 solve(x^2-4=0, x) — 方程式を解く diff(x^3, x) — 微分する int(x^2, x, 0, 1) — 定積分 limit(sin(x)/x, x, 0) — 極限 taylor(exp(x), x=0, 5) — テイラー級数 factor(x^2-4) — 因数分解 simplify((x^2-1)/(x-1)) — 簡約する expand((x+1)^3) — 展開する det([[1,2],[3,4]]) — 行列式 C(10,3) — 組合せ ifactor(2310) — 素因数分解 2+3*sin(pi/4) — 算術演算 または、有効な Giac/Xcas 式をフォールバックとして使用できます。 |
| precision | number | いいえ | 小数精度(デフォルト:10) |
詳細
Axiom — 高度な数学 MCP サーバー
LLM 向けの厳密な記号数学と数値数学 — Model Context Protocol を介した、実際の数式処理システム(Giac/Xcas)とシェルコマンドです。axiom-math として公開されています。

クイックスタート
CLI として、すぐに使えます:
npx -y axiom-math compute 'integrate(sin(x)^3,x)' # -cos(x)+cos(x)^3/3
npx -y axiom-math verify 'diff(x^3,x) = 3*x^2' # exit 0 — it holds
MCP サーバーとして、任意のクライアントの設定に追加します:
{ "command": "npx", "args": ["-y", "axiom-math"] }
エージェントスキルとしては、skills/axiom-math/SKILL.md を追加してください。このファイルでは、3 つのコマンドと終了コードをエージェントに説明します。
Axiom を選ぶ理由
LLM は計算ミスをよく起こします。特に、記号数学、厳密な分数、複数ステップの問題で顕著です。Axiom は 2 つのレイヤーを通じて、検証済みの厳密な結果を提供します:
- math.js — 高速な数値評価(算術、三角関数、行列)
- Giac/Xcas WASM — 記号計算(微積分、代数、方程式の求解)
ベンチマーク結果(GLM-5.1、2026 年 5 月)
| データセット | ベースライン | +MCP | 差分 |
|---|---|---|---|
| GSM8K (100) | 96.0% | 98.0% | +2.0% |
| MATH L3 (50) | 70.0% | 80.0% | +10.0% |
| MATH L4 (50) | 50.0% | 62.0% | +12.0% |
| MATH L5 (50) | 38.0% | 52.0% | +14.0% |
| CAS-quick (60) | 55.0% | 70.0% | +15.0% |
| Omni-MATH ≥7 (50) | 0.0% | 0–4% | (上限) |
主な知見:
- Phase 0 の採点器(LaTeX/Unicode の正規化と記号的同値性)が、すべてのデータセットで最も大きな価値をもたらします
- CAS-quick は 26.7%(採点器導入前の 4 月)から 70%(導入後)に向上しました — 単一の改善としては最大の伸びです
- Omni-MATH ≥7 は現在の LLM+CAS 構成では上限に達しており、根本的に異なるアプローチ(Lean/Coq、ファインチューニング、RAG)が必要です
完全な結果:benchmark/results/ および docs/superpowers/specs/(フェーズごとの分析)
機能
Axiom は 3 つの MCP ツールを公開します。ほとんどの処理は compute を通じて行われます。これは CAS 形式の問題文字列を解析し、適切な内部エンジンに振り分ける単一の窓口です。そのため、呼び出し側が覚えるツールは 1 つで済みます。
| ツール | 目的 |
|---|---|
compute | あらゆる数学の問題を解きます。CAS 形式の文字列(solve(...)、diff(...)、det([[...]])、C(10,3)、2+3*sin(pi/4))または任意の Giac/Xcas 式を渡します。 |
verify | 記号的および/または数値的な方法で、数学的な主張(恒等式、解、計算)を独立して検証します。 |
plot | 2D 関数グラフを SVG 画像として描画します。 |
compute の対象範囲
compute は CAS 形式の動詞を認識し、以下の各分野に振り分けます。認識できないものは、Giac/Xcas の生の評価にフォールスルーします。
| 分野 | 動詞/例 |
|---|---|
| 算術と単位 | 2+3*sin(pi/4)、100 km/h to m/s |
| 方程式を解く | solve(x^2-4=0, x)、csolve(...)(複素数)、solve_system([x+y=5, x-y=1], [x,y]) |
| 微積分 | diff、int、limit、taylor、desolve(任意の階数の ODE、および線形定数係数系) |
| 多変数微積分 | gradient、hessian、jacobian、divergence、curl、partial、iint/iiint(重積分)、critical_points、lagrange、tangent_plane、directional_derivative |
| 代数 | factor、simplify、expand、partfrac |
| 線形代数 | det、inv、eigenvals、eigenvects、rref、rank、tran、ker、qr、lu、cholesky、svd、norm、cond |
| 数論 | ifactor、isprime、euler、analyze |
| 組合せ論 | C(n,k)、P(n,k)、stirling、bell、catalan、derangements、multinomial |
| 確率 | binomial、normal、poisson、geometric、hypergeometric、chi_square、student_t、f_distribution、beta、exponential |
| 仮説検定 | t_test(1標本/2標本/対応あり)、anova、chi_square_test |
| 数値計算法 | newton、bisection、secant、romberg、simpson |
| 2D 幾何 | distance、midpoint、slope、area_*、perimeter、circumference、line_intersection、point_line_distance、angle_between_lines |
| 3D 幾何 | distance3d、midpoint3d、dot、cross、vector_norm、angle_vectors、plane_from_points、point_plane_distance、line_plane_intersection、plane_plane_angle、line_line_distance、volume_tetrahedron、volume_sphere、volume_parallelepiped |
| 変換と級数 | laplace、ilaplace、fourier/fft/ifft、sum、product |
| 厳密値 | to_exact、to_decimal、simplify_fraction |
| 回帰と数列 | linear_regression/fit、polynomial_regression、sequence(パターンの識別) |
インストール
npm パッケージは axiom-math です。
通常の使用ではインストールは不要です。npx が取得してキャッシュします。
npx -y axiom-math compute '2+2'
または、axiom-math コマンドを PATH から実行できるようにインストールします。
npm install -g axiom-math
Node.js >= 20 が必要です。 初回実行時には約 3.8 MB(WebAssembly にコンパイルされた CAS エンジン)がダウンロードされ、数秒かかります。以降の実行では npx のキャッシュが使われます。
ソースから
コントリビューター向け、または変更したビルドを実行する場合:
git clone https://github.com/tufantunc/axiom-advanced-math-mcp.git
cd axiom-advanced-math-mcp
npm install
npm run build
Docker
# Build and run
docker-compose -f docker/docker-compose.yml up -d
# Check logs
docker-compose -f docker/docker-compose.yml logs -f
# Stop
docker-compose -f docker/docker-compose.yml down
使用方法
CLI(STDIO トランスポート)
# Run with stdio transport (default)
npm start
# Development mode
npm run dev
Claude Desktop との連携:
// ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": [
{
"name": "axiom-math",
"command": "npx",
"args": ["-y", "axiom-math"]
}
]
}
npm の代わりにローカルのチェックアウトから実行するには、ビルド済みのエントリーポイントを args に指定します。
"args": ["/path/to/axiom-advanced-math-mcp/dist/cli.js"]
コマンドライン
同じバイナリを単発の CLI としても使用できるため、エージェントは MCP の設定なしでスキルとして利用できます。引数なしでは MCP サーバーとして動作し、サブコマンドを指定すると計算を 1 回実行して終了します。
npx -y axiom-math compute 'integrate(sin(x)^3,x)'
npx -y axiom-math compute -q 'solve(x^2-4=0,x)' # {-2, 2}
npx -y axiom-math verify 'sin(x)^2+cos(x)^2 = 1' # exit 0 if true
npx -y axiom-math plot 'sin(x)' -o wave.svg
echo 'diff(x^3,x)' | npx -y axiom-math compute -q # 3*x^2
| フラグ | 意味 |
|---|---|
-q | スクリプト用に値だけを出力します |
--json | 構造化出力 |
--latex | LaTeX に特化したテキスト(compute のみ) |
-h、--help | 使用方法、またはサブコマンドの使用方法 |
終了コード:0 成功 · 1 ツールまたは使用方法のエラー · 2 verify が主張を検証し、偽と判定しました。
2 は数学的な判定を示すため、検証されなかった主張には使われません。解析に失敗したもの、CAS が評価できないもの、または複数の解釈が可能な上付き文字を含むものは、標準出力に何も出さずに 1 で終了します。そのため、axiom-math verify '...' && ... が構文エラーを反証として扱うことはありません。
すぐに使えるエージェントスキルは skills/axiom-math/SKILL.md にあります。
HTTP トランスポート
# Start HTTP server (default: http://127.0.0.1:3000)
npm run start:http
# Development HTTP
npm run dev:http
HTTP トランスポートはステートレスです。各 POST /mcp は個別に処理され、Mcp-Session-Id は発行されず、リクエスト間でセッション状態も保持されません。このサーバーはサーバー起点の通知を送信しないため、失われるものはありません。また、共有状態なしで水平スケーリングできます。
| メソッド | パス | 動作 |
|---|---|---|
| POST | /mcp | JSON-RPC メッセージを処理します |
| GET | /mcp | 405 — SSE ストリームは提供されません |
| DELETE | /mcp | 405 — 終了するセッションはありません |
| GET | /health | 準備完了時は 200、CAS エンジンが準備できていない場合は 503 |
セキュリティ: 認証もレート制限もありません。デフォルトのバインドアドレスは
127.0.0.1ですが、docker/docker-compose.ymlではMCP_HOST=0.0.0.0が設定されています。ポートを公開する場合は、認証とレート制限を行うリバースプロキシの背後に配置してください。アプリケーション自身はポートを公開しない、動作確認済みの例としてdocker/reverse-proxy/(nginx + basic auth + クライアントごとの同時実行数上限)があります。 SECURITY.md には、保護される対象、保護されない対象、脆弱性の報告方法など、セキュリティ対策の全容を記載しています。
POST /mcpは、DNS リバインディングを防ぐため、Hostヘッダーも許可リスト(デフォルトではlocalhost、127.0.0.1、[::1])と照合します。悪意のあるページは、被害者のブラウザーに攻撃者のドメインを127.0.0.1に解決させ、このサーバーにアクセスさせる可能性があります。ループバック以外の LAN アドレス、ホスト名、リバースプロキシのドメインを通じてサーバーにアクセスする場合は、MCP_ALLOWED_HOSTSを設定してください。設定しないと、すべてのPOST /mcpリクエストが403になります。このチェックは認証ではありません。エンドポイントにアクセスできるホスト名を制限するだけで、リクエスト元については何も制限しません。
環境変数:
| 変数 | デフォルト | 説明 |
|---|---|---|
MCP_PORT | 3000 | HTTP サーバーのポート |
MCP_HOST | 127.0.0.1 | HTTP サーバーのホスト |
MCP_ALLOWED_HOSTS | ループバックのみ(localhost、127.0.0.1、[::1]) | POST /mcp の Host ヘッダーに対する許可リスト。カンマ区切りで指定します(DNS リバインディング対策)。明示的に値を指定すると、デフォルトに追加されるのではなく、置き換えられます。 |
AXIOM_EVAL_TIMEOUT_MS | 10000 | 評価ごとのタイムアウト(ミリ秒)。1 回の CAS 呼び出しおよび1 回の js-compute 呼び出し(任意精度整数の処理、算術演算、プロットのサンプリング)を制限するため、値を小さくすると両方の制限が厳しくなります。数値のみ、または ms/s の接尾辞を付けて指定できます(10000、250ms、10s)。タイマーが扱える範囲(1~2147483647ms)に制限されます。数値を含まない値、または正でない値を指定すると、警告を出して 10000 にフォールバックします。未設定または空白のみの場合は、警告なしでデフォルト値が使われます。 |
AXIOM_INTEGRATION_BUDGET_MS | max(3 × AXIOM_EVAL_TIMEOUT_MS, 30000) | 1 回の複数呼び出しを行う数値ルーチン(積分、根の探索)の実行時間上限です。AXIOM_EVAL_TIMEOUT_MS が 1 回の CAS 呼び出しを制限するのに対し、こちらは CAS 呼び出しの合計を制限します。AXIOM_EVAL_TIMEOUT_MS と同様に検証され、無効な値は標準エラー出力に表示されます。 |
AXIOM_JS_COMPUTE_HEAP_MB | 512 | 任意精度整数の処理と mathjs の評価を実行する子プロセスのヒープ上限です。この上限を超えると、原因となった計算は失敗します。キューに入って後続する呼び出しは置き換え後のワーカーに再送され、サーバーは稼働を続けます。整数の MB 単位で指定でき、接尾辞は任意です(512、512MB、2GB)。値は整数 MB に切り捨てられ、[16, 1048576] の範囲に制限されます。指定値を超える上限に緩和されることはありません。16 未満では子プロセスを起動できず、1048576 を超える場合はこのサーバーが上限を適用します(V8 はそれ以上の値を受け付けますが、約 1.76e13 を超えると size_t の演算がオーバーフローし、要求した値よりも小さいヒープになります)。数値を含まない値のみ 512 にフォールバックします。補正内容はすべて標準エラー出力に表示されます。mathjs を使用するツール(quick_calc、plot)には 48 以上が必要です。実測では、起動時のインポートに約 46MB 必要で、44MB では失敗します。これを下回る場合、ワーカー障害として失敗するのではなく、原因を示してツール名で拒否されます。 |
AXIOM_COMPUTE_HYGIENE | 未設定 | 1 に設定すると、計算結果の後処理を有効にします。 |
設定できない上限もあります。100,000 文字を超える結果は返されず、拒否されます。そのため、1:2000000 のような式では、呼び出し元のコンテキストに 2,400 万文字を送る代わりに、要素数が報告されます。
答えに意味がない入力は、回答せずに拒否されることがあります。NaN(0/0 など)になる算術演算はエラーです。無限大の結果は警告付きで返されます。真の無限大と、倍精度の範囲を超えてオーバーフローした値は、計算後には区別できないためです。t 検定では、実際に検定する対象にばらつきが必要です。paired_t では差を比較するため、差にばらつきが必要です。一方、Welch の two_sample_t では、2 つの標本のうち片方にばらつきがあれば十分です。分割表では、カウントが非負であること、すべての値がゼロの行または列がないこと、各行の長さが等しいこと、行と列がそれぞれ 2 つ以上あることが必要です。一元配置 ANOVA では、群内にばらつきがあり、観測数が群数より多いことが必要です。また、統計量自体が無限大にオーバーフローするほど値が大きい場合は、いずれの計算も拒否されます。オーバーフローした統計量は、もはや本来の統計量ではないためです。数値計算法は、解く対象または積分対象の変数に式が依存していない場合、あるいは CAS が数値ではなく記号式で回答した場合に拒否されます。以前は、その記号式の先頭の項が結果として報告されていました。
リストとして記述された微分方程式系 — desolve([y'=z, z'=-y], x) — は、CAS が解く行列形式に書き換えられ、各関数の解が返されます。各成分は方程式を記述した順に返されます。また、[[cos(x),-sin(x)]] だけでは解釈できないため、JSON のエンベロープでは components フィールドに関数名が示されます。
初期条件は、すべての関数について同じ点で指定するか、まったく指定しない必要があります。一部の関数にだけ指定した場合、無視されるのではなく拒否されます。また、次のケースも、それぞれ固有の理由で拒否されます。不明関数について線形でない系、係数が独立変数に依存する系、2 階を超える導関数(y''=z は y'=w, w'=z のように書き換えてください)、方程式が 9 個を超える系、そして CAS が解ききれない系です。
無限大の結果に関するルールは、算術評価にも適用されます。CAS が返す記号的な +infinity — 極限や発散する積分など — は通常の回答であり、警告は付きません。
MCP Inspector
npm run inspect
ツールリファレンス
compute
あらゆる数学処理の単一ゲートウェイです。CAS 形式の問題文字列を渡すと、ルーターが解析し、適切なエンジンに振り分けます。
| パラメーター | 型 | 説明 |
|---|---|---|
problem | string (必須) | CAS 形式の問題。例:solve(x^2-4=0, x)、diff(x^3, x)、det([[1,2],[3,4]])、gradient(x^2+y^2, [x,y])。 |
domain | real | complex | numeric | exact | 定義域のヒント(デフォルトは real)。complex → 複素数解、numeric → 数値計算法を強制、exact → 厳密な記号形式。 |
precision | integer 1–50 | 小数点以下の桁数(デフォルトは 10)。 |
format | text | latex | json | 出力形式(デフォルトは text)。json は構造化されたエンベロープを返します。 |
例:
{ "problem": "solve(x^2 - 5*x + 6 = 0, x)" }
{ "problem": "int(x^2*sin(x), x)", "format": "latex" }
{ "problem": "lagrange(x*y, x+y, 1, [x, y])" }
{ "problem": "volume_tetrahedron([0,0,0],[1,0,0],[0,1,0],[0,0,1])" }
{ "problem": "binomial cdf n=10 k=3 p=0.5", "format": "json" }
verify
数学的な主張を独立して検証します。モデルが生成した結果に対する、ツールに基づくセカンドオピニオンとして便利です。
| パラメーター | 型 | 説明 |
|---|---|---|
claim | string (必須) | 主張。例:"sin(x)^2 + cos(x)^2 = 1"(恒等式)、"x=2 satisfies x^2-4=0"(解)、"diff(x^3, x) = 3*x^2"(計算結果)。 |
method | numeric | symbolic | both | 検証方法(デフォルトは both)。 |
次の 4 つのフィールドを返します:verified、evaluated、confidence、checks_performed。
最初に確認すべきなのは evaluated です。検証によって利用可能な回答が得られなかった場合 — 主張を解析できなかった、CAS が評価できなかった、または上付き文字に複数の解釈がある場合 — これは false になります。その場合、verified: false は「反証された」ではなく「不明」を意味します。この 2 つを同一視すると、構文エラーが反証として扱われてしまいます。
plot
2D 関数を SVG 画像として描画します。
| パラメーター | 型 | 説明 |
|---|---|---|
expression | string (required) | 描画する関数。例:"sin(x)"、"x^2 - 3*x + 1"。 |
variable | string | 変数名(デフォルトは x)。 |
x_min, x_max | number | X の範囲(デフォルトは −10 … 10)。 |
y_min, y_max | number | Y の範囲(省略時は自動検出されます)。 |
width, height | number | 画像サイズ(px、デフォルトは 600 × 400)。 |
title | string | オプションのグラフタイトル。 |
base64 エンコードされた SVG 画像(軸、グリッド、ラベル、漸近線の検出を含む)とテキストのキャプションを返します。
Prompts
このサーバーは、複数ステップのワークフロー向けに compute/verify を連鎖させる、ガイド付き MCP プロンプトも登録します:solve-step-by-step、analyze-function、verify-identity、convert-units、analyze-dataset、solve-ode-system、regression-workflow。
ベンチマークの実行
デフォルトの本番用レシピ(grader-v2 は自動的に含まれます):
cd benchmark
npm install
# Set provider API key (one of):
export ZAI_API_KEY=...
export ANTHROPIC_API_KEY=...
export OPENROUTER_API_KEY=...
# Run benchmarks (provider defaults from --zai/--anthropic/--openrouter flags)
npm run cas:quick:zai # CAS-quick (60 problems, ~30 min)
npm run gsm8k:quick:zai # GSM8K-quick (100 problems, ~30 min)
npm run math:quick:zai # MATH L3-L5 quick (150 problems, ~75 min)
オプションのアブレーション機能(デフォルトではオフ)
--features=output-hygiene— ツール出力の後処理(Unicode の正規化、オプションの簡略化、サイレント失敗の警告)。実測では CAS でわずか +1pp。--features=grader-v3— 方程式の RHS 抽出+カンマ区切りの集合の直接照合。CAS でわずか +1pp。--features=self-consistency— N=3 の多数決(分散を低減、コストは 3 倍、CAS では精度向上なし)。
例:
npm run cas:quick:zai -- --features=output-hygiene,grader-v3
各フラグの実測アブレーション分析については、docs/superpowers/specs/2026-05-*-results.md を参照してください。
効果がなかった試み
このプロジェクトでは、5 つのフェーズ(Phase 0–4)にわたって広範なアブレーションを実施しました。以下の実験的なアプローチは実測でテストされ、採用を見送られました:
- Phase 1:
\boxed{}の末尾付加を伴う構造化 JSON 出力 — モデルが boxed の内容を LaTeX 形式に言い換え、回答の抽出に支障が生じました。CAS で総合的に性能が低下しました。 - Phase 2:8K トークンの予算(
tokens-8k) — 切り詰めからの回復ではなく、モデルが無関係な方向に進む余地を増やしました。CAS で総合的に −6.7pp の性能低下となりました。 - Phase 3:精度向上のための自己一貫性 — N=3 の投票では精度が向上しませんでした(Wang らの文献で報告された向上は CAS では再現できませんでした)。分散低減のための手法としてのみ残しています。
- Phase 4:オリンピック数学専用の足場かけプロンプト — 応答性は向上しました(ツール呼び出しなしの割合が 84% → 74%)が、精度は 0% のままでした。オリンピック数学レベルの問題は、プロンプトエンジニアリングによる介入の対象外です。
各フェーズの問題ごとの分析は、docs/superpowers/specs/2026-05-*-results.md にあります。失敗に関する率直な記録は、プロジェクトのアーカイブとして保存されています。
アーキテクチャ
計算ゲートウェイ → ルーター → ドメインハンドラー
┌─────────────────────────────────────────────────────────────┐
│ MCP Protocol Layer (stdio / HTTP) │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌─────────┐ ┌──────────┐ ┌─────────┐
│ compute │ │ verify │ │ plot │
└────┬────┘ └──────────┘ └─────────┘
│ route() → extract args → dispatch
▼
┌─────────────────────────────────────────────────────────────┐
│ Domain handlers: calculus, algebra, matrix, multivariable, │
│ geometry / geometry3d, combinatorics, probability, │
│ hypothesis testing, number theory, numerical methods, … │
└─────────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ math.js │ │ Giac/Xcas │ │ Exact engine │
│ (numerical) │ │ (symbolic) │ │ (fractions) │
└──────────────┘ └──────────────┘ └──────────────┘
compute が呼び出し元にハンドラーの選択を求めることはありません。ルーターが問題文を順序付けられたルールと照合し、一致した抽出器が引数を解析し、ディスパッチャーが対応するドメインハンドラーを呼び出します。一致する入力がない場合は、raw Giac/Xcas にフォールスルーします。
応答形式
テキスト形式の応答は行ごとに構成されており、LLM(およびベンチマークの採点器)が回答を確実に抽出できます:
{
"content": [
{ "type": "text", "text": "Result: 400/11" },
{ "type": "text", "text": "Decimal: 36.3636363636" },
{ "type": "text", "text": "LaTeX: \\frac{400}{11}" },
{ "type": "text", "text": "" },
{ "type": "text", "text": "The answer is 400/11 (≈ 36.36)" }
],
"isError": false
}
ベンチマーク結果
データセット
| データセット | 問題数 | 難易度 |
|---|---|---|
| GSM8K | 100 | 小学校レベルの数学(算術) |
| MATH L3 | 50 | 高校数学 |
| MATH L4 | 50 | 高度な高校数学 |
| MATH L5 | 50 | オリンピックレベルの数学 |
| Omni-MATH ≥7 | 50 | 専門家レベルの数学 |
実行方法
コマンドについては、上記のベンチマークの実行を参照してください。簡単に言うと、リポジトリのルートから次のように実行します。
npm run benchmark:zai # quick sample, GLM-5.1
npm run benchmark:full:zai # all datasets
npm run benchmark:l5:zai # one difficulty tier
プロバイダーを変更するには、:zai を :openrouter に置き換えます。benchmark/ ディレクトリは個別の npm プロジェクトで、より細かいスクリプト(cas:quick:zai、gsm8k:quick:zai、…)を用意しています。ルートから実行する npm run benchmark:* は、それらに処理を委譲します。
環境変数:
| 変数 | 必要なプロバイダー | 説明 |
|---|---|---|
ZAI_API_KEY | zai プロバイダー | z.ai API キー |
OPENROUTER_API_KEY | openrouter プロバイダー | OpenRouter API キー |
開発
スクリプト
| コマンド | 説明 |
|---|---|
npm run build | TypeScript を dist/ にコンパイルし、WASM アセットをコピーします |
npm start | STDIO サーバーを実行します |
npm run dev | 開発モード(tsx)で実行します |
npm run start:http | HTTP サーバーを実行します |
npm run dev:http | 開発モードで HTTP サーバーを実行します |
npm test | ユニットテスト — ビルドは不要です |
npm run test:integration | 統合テスト — 最初にビルドし、dist/ をテストします |
npm run test:watch | ウォッチモードでユニットテストを実行します |
npm run test:coverage | カバレッジレポート付きでユニットテストを実行します |
npm run typecheck | 出力せずに型チェックします |
npm run lint | oxlint で lint を実行します |
npm run lint:fix | lint の問題を自動修正します |
npm run format | Prettier でフォーマットします |
npm run format:check | 書き込みを行わずにフォーマットをチェックします |
npm run inspect | stdio サーバーに対して MCP Inspector を開きます |
テスト
テストスイートは分かれています。npm test はユニットテストを実行し、ビルドは不要です。npm run test:integration は最初にビルドして、パッケージ化された dist/ の出力をテストするため、ユニットテストでは検出できない、配布されるバイナリの引数振り分け、MCP ハンドシェイク、終了コードなどを検出できます。
npm test # unit
npm run test:integration # integration (runs npm run build first)
npm run test:watch # unit, watch mode
npm run test:coverage # unit, with coverage
テストカバレッジ: ユニットテストと統合テストの成功率は 100% です。現在の件数は頻繁に変わるため、npm test を実行して確認してください。ここでは数値を記載していません。
WASM ビルド(Giac)
npm run build:giac:wasm
# Build a specific upstream ref instead of master
GIAC_REF=v1.9.x npm run build:giac:wasm
このコマンドは scripts/build-giac-wasm.sh を実行します。このスクリプトは docker build で docker/build-giac-wasm/Dockerfile をビルドし(Compose ファイルは使用しません)、giac.wasm.js を src/server/giac/ に直接書き出すため、手動でコピーする必要はありません。Docker Desktop(または別の Docker デーモン)がローカルで実行されている必要があります。タスクごとのビルドログは logs/giac-build/ に保存されます。
貢献
バグ報告やプルリクエストを歓迎します。環境のセットアップ方法、CI で実行されるチェック、このコードベースを読むだけでは分かりにくい点については、CONTRIBUTING.mdを参照してください。
ライセンス
GNU General Public License v3.0 or later — 詳細はLICENSEを参照してください。
Axiom には Giac/Xcas が組み込まれており、同ソフトウェアは GPL-3.0-or-later でライセンスされているため、結合作品にも同じライセンスが適用されます。詳細とクレジットについては、THIRD-PARTY-NOTICES.mdを参照してください。
GPL はエージェントに影響しますか?
いいえ。 エージェントは Model Context Protocol を介して Axiom と通信します。これは、stdio または HTTP を使う別プロセスです。別々のプログラムが独立して通信する場合、それらは結合作品ではないため、Axiom を独自のエージェントと並行して実行しても、どのライセンスを使用しているかにかかわらず、コードにライセンス上の義務は生じません。サービスとしての実行を含め、GPL の下でソフトウェアを実行することに制限はありません。
コピーレフト条項が適用されるのは、Axiom 自体を再配布する場合、つまり変更の有無を問わず、他者に提供する製品に組み込んで同梱する場合です。その場合は、GPL-3.0 に基づいてソースコードを提供し、通知をそのまま保持してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。