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

已驗證STDIO僅桌面資料與分析AI 與機器學習

概覽

AI 產生的概覽

本機 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 以及逾時與堆積記憶體變數。
安裝前請注意
選用的 HTTP 傳輸沒有身分驗證與速率限制,隨附的 Docker Compose 檔會將其綁定到所有網路介面;若對外開放,應放在具備驗證與限流的反向代理之後。Host 允許清單(MCP_ALLOWED_HOSTS)並非身分驗證。儲存庫中的基準測試腳本需要 ZAI_API_KEY 或 OPENROUTER_API_KEY 等模型服務金鑰,但伺服器本身不會用到。工具皆為唯讀運算;只有在明確要求輸出檔案時,plot 才會寫入 SVG。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Axiom — Advanced Math,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

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:

bash
npx -y axiom-math compute 'integrate(sin(x)^3,x)'   # -cos(x)+cos(x)^3/3npx -y axiom-math verify 'diff(x^3,x) = 3*x^2'      # exit 0 — it holds

As an MCP server, in any client's config:

json
{ "command": "npx", "args": ["-y", "axiom-math"] }

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)

DatasetBaseline+MCPDelta
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%(ceiling)

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.

ToolPurpose
computeSolve any math problem. Pass a CAS-style string (solve(...), diff(...), det([[...]]), C(10,3), 2+3*sin(pi/4)) or any Giac/Xcas expression.
verifyIndependently check a mathematical claim (identity, solution, or computation) via symbolic and/or numeric methods.
plotRender a 2D function graph as an SVG image.

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.

DomainVerbs / examples
Arithmetic & units2+3*sin(pi/4), 100 km/h to m/s
Equation solvingsolve(x^2-4=0, x), csolve(...) (complex), solve_system([x+y=5, x-y=1], [x,y])
Calculusdiff, int, limit, taylor, desolve (ODEs of any order, and linear constant-coefficient systems)
Multivariable calculusgradient, hessian, jacobian, divergence, curl, partial, iint/iiint (multiple integrals), critical_points, lagrange, tangent_plane, directional_derivative
Algebrafactor, simplify, expand, partfrac
Linear algebradet, inv, eigenvals, eigenvects, rref, rank, tran, ker, qr, lu, cholesky, svd, norm, cond
Number theoryifactor, isprime, euler, analyze
CombinatoricsC(n,k), P(n,k), stirling, bell, catalan, derangements, multinomial
Probabilitybinomial, normal, poisson, geometric, hypergeometric, chi_square, student_t, f_distribution, beta, exponential
Hypothesis testingt_test (one/two/paired), anova, chi_square_test
Numerical methodsnewton, bisection, secant, romberg, simpson
2D geometrydistance, midpoint, slope, area_*, perimeter, circumference, line_intersection, point_line_distance, angle_between_lines
3D geometrydistance3d, 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
Transforms & serieslaplace, ilaplace, fourier/fft/ifft, sum, product
Exact valuesto_exact, to_decimal, simplify_fraction
Regression & sequenceslinear_regression/fit, polynomial_regression, sequence (pattern identification)

Installation

The package is axiom-math on npm. Nothing to install for normal use — npx fetches and caches it:

bash
npx -y axiom-math compute '2+2'

Or install it so the axiom-math command is on your PATH:

bash
npm install -g axiom-math

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:

bash
git clone https://github.com/tufantunc/axiom-advanced-math-mcp.gitcd axiom-advanced-math-mcpnpm installnpm run build

Docker

bash
# Build and rundocker-compose -f docker/docker-compose.yml up -d
# Check logsdocker-compose -f docker/docker-compose.yml logs -f
# Stopdocker-compose -f docker/docker-compose.yml down

Usage

CLI (STDIO Transport)

bash
# Run with stdio transport (default)npm start
# Development modenpm run dev

Claude Desktop integration:

json
// ~/Library/Application Support/Claude/claude_desktop_config.json{  "mcpServers": [    {      "name": "axiom-math",      "command": "npx",      "args": ["-y", "axiom-math"]    }  ]}

Running from a local checkout instead of npm — point args at the built entry point:

json
"args": ["/path/to/axiom-advanced-math-mcp/dist/cli.js"]

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.

bash
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 truenpx -y axiom-math plot 'sin(x)' -o wave.svgecho 'diff(x^3,x)' | npx -y axiom-math compute -q   # 3*x^2
FlagMeaning
-qprint one value only, for scripting
--jsonstructured output
--latexLaTeX-focused text (compute only)
-h, --helpusage, or usage for a subcommand

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

bash
# Start HTTP server (default: http://127.0.0.1:3000)npm run start:http
# Development HTTPnpm run dev:http

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.

MethodPathBehaviour
POST/mcpHandles a JSON-RPC message
GET/mcp405 — no SSE stream is offered
DELETE/mcp405 — there are no sessions to terminate
GET/health200 when ready, 503 when the CAS engine is not

Security: there is no authentication and no rate limiting. The default bind address is 127.0.0.1, but docker/docker-compose.yml sets MCP_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 /mcp also validates the Host header 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 to 127.0.0.1 and reach this server through it. If you reach the server by a LAN address, hostname, or reverse-proxy domain other than loopback, set MCP_ALLOWED_HOSTS or every POST /mcp request will get a 403. This check is not authentication — it only constrains which host names may reach the endpoint, nothing about who is asking.

Environment variables:

VariableDefaultDescription
MCP_PORT3000HTTP server port
MCP_HOST127.0.0.1HTTP server host
MCP_ALLOWED_HOSTSloopback only (localhost, 127.0.0.1, [::1])Comma-separated Host header allowlist for POST /mcp (DNS-rebinding protection). An explicit value replaces the default rather than extending it.
AXIOM_EVAL_TIMEOUT_MS10000Per-evaluation timeout, in milliseconds. Bounds one CAS call and one js-compute call (arbitrary-precision integer work, arithmetic, plot sampling), so lowering it tightens both. Accepts a plain number or a ms/s suffix (10000, 250ms, 10s), clamped into what a timer can hold (1–2147483647ms); a value with no number in it, or a non-positive one, falls back to 10000 with a warning. An unset or blank value takes the default silently.
AXIOM_INTEGRATION_BUDGET_MSmax(3 × AXIOM_EVAL_TIMEOUT_MS, 30000)Wall-clock budget for one multi-call numerical routine (integration, root finding). Bounds the SUM of CAS calls, where AXIOM_EVAL_TIMEOUT_MS bounds one. Validated like AXIOM_EVAL_TIMEOUT_MS, and a rejected value is named on stderr.
AXIOM_JS_COMPUTE_HEAP_MB512Heap ceiling for the child process that runs arbitrary-precision integer work and mathjs evaluation. Exceeding it fails the computation that caused it — calls queued behind it are re-sent to the replacement worker — and leaves the server up. Accepts whole MB, optionally suffixed (512, 512MB, 2GB). A value is floored to whole MB and clamped into [16, 1048576], never to a looser ceiling than the one written: below 16 the child cannot boot, and above 1048576 this server caps it (V8 honours more, but past ~1.76e13 its size_t arithmetic wraps to a smaller heap than requested). Only a value with no number in it falls back to 512. Every correction is named on stderr. The mathjs-backed tools (quick_calc, plot) need at least 48 — measured, their startup import needs ~46MB and 44MB dies — and below that they are refused by name with the cause, rather than failing as a worker fault.
AXIOM_COMPUTE_HYGIENEunsetSet to 1 to enable compute output post-processing

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

bash
npm run inspect

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.

ParameterTypeDescription
problemstring (required)CAS-style problem, e.g. solve(x^2-4=0, x), diff(x^3, x), det([[1,2],[3,4]]), gradient(x^2+y^2, [x,y]).
domainreal | complex | numeric | exactDomain hint (default real). complex → complex solutions; numeric → force numerical methods; exact → exact symbolic form.
precisioninteger 1–50Decimal places (default 10).
formattext | latex | jsonOutput format (default text). json returns a structured envelope.

Examples:

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

Independently check a mathematical claim. Useful as a second, tool-grounded opinion on a result the model produced.

ParameterTypeDescription
claimstring (required)The claim, e.g. "sin(x)^2 + cos(x)^2 = 1" (identity), "x=2 satisfies x^2-4=0" (solution), "diff(x^3, x) = 3*x^2" (computation).
methodnumeric | symbolic | bothVerification method (default both).

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.

ParameterTypeDescription
expressionstring (required)Function to plot, e.g. "sin(x)", "x^2 - 3*x + 1".
variablestringVariable name (default x).
x_min, x_maxnumberX range (default −10 … 10).
y_min, y_maxnumberY range (auto-detected if omitted).
width, heightnumberImage size in px (default 600 × 400).
titlestringOptional chart title.

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):

bash
cd benchmarknpm 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)

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:

bash
npm run cas:quick:zai -- --features=output-hygiene,grader-v3

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

┌─────────────────────────────────────────────────────────────┐│              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 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:

json
{  "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}

Benchmark Results

Datasets

DatasetProblemsDifficulty
GSM8K100Grade school math (arithmetic)
MATH L350High school math
MATH L450Advanced high school math
MATH L550Olympiad-level math
Omni-MATH ≥750Expert-level math

How to Run

See Run Benchmarks above for the commands. In short, from the repository root:

bash
npm run benchmark:zai         # quick sample, GLM-5.1npm run benchmark:full:zai    # all datasetsnpm run benchmark:l5:zai      # one difficulty tier

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:

VariableRequired forDescription
ZAI_API_KEYzai providerYour z.ai API key
OPENROUTER_API_KEYopenrouter providerYour OpenRouter API key

Development

Scripts

CommandDescription
npm run buildCompile TypeScript to dist/ and copy the WASM asset
npm startRun STDIO server
npm run devRun in development mode (tsx)
npm run start:httpRun HTTP server
npm run dev:httpRun HTTP server in dev mode
npm testUnit tests — no build required
npm run test:integrationIntegration tests — builds first, exercises dist/
npm run test:watchUnit tests in watch mode
npm run test:coverageUnit tests with coverage report
npm run typecheckType-check without emitting
npm run lintLint with oxlint
npm run lint:fixAuto-fix linting issues
npm run formatFormat with Prettier
npm run format:checkCheck formatting without writing
npm run inspectOpen the MCP Inspector against the stdio server

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.

bash
npm test                  # unitnpm run test:integration  # integration (runs npm run build first)npm run test:watch        # unit, watch modenpm run test:coverage     # unit, with coverage

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)

bash
npm run build:giac:wasm
# Build a specific upstream ref instead of masterGIAC_REF=v1.9.x npm run build:giac:wasm

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
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.0.5最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Axiom 整合