
AXIOM
io.github.dragoscv由 GitHub 账号 dragoscv 发布v3.0.0更新于 Oct 24, 2026
Transactional write gate for coding agents: plan, canonical manifest, checks, two-phase apply.
发布方自己的服务:Axiom
概览
AXIOM 是面向编码代理的事务性写入闸门:在允许的仓库根目录内规划、检查、预览并原子应用文件改动,并保留可回滚日志。
- 可以做什么
- 规划与编译:校验计划、编译为规范化清单包、解析 .axm 源文件、比较清单差异、生成仓库快照。
- 写入前检查:运行集合级检查与预应用配置,把耗时检查作为可轮询任务启动,并试运行查看差异。
- 经闸门写入:先预览,确认清单摘要后再原子地批量写入或删除文件,带锁与备份。
- 回滚与查看:回滚已应用的清单,读取状态、锁持有者与日志链,列出允许的根目录。
- 校验信任:对照根目录信任文件中固定的 Ed25519 公钥验证清单包与签名。
- 适用场景
- 当代理需要修改真实仓库,而你希望每次写入都先预览、检查、再原子应用并保留回滚路径时使用。也适合需要签名清单、防回滚计数器或代理改动审计日志的团队。
- 运行要求
- 通过 npx 以 stdio 在本地运行(需 Node.js),启动时须给出一个或多个绝对 --root 目录,没有 cwd 或环境变量回退。另有可选的 Streamable HTTP 模式,非回环地址必须提供 bearer 令牌。签名由 CLI 使用 AXIOM_SIGNING_KEY 或密钥文件完成,不由服务器执行。外部 guard 需同时通过命令行开关和配置启用。
安装
在 SourceWeft 中
- 打开 控制台中的 AXIOM,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
@codai/axiom-mcp
MCP server (stdio or Streamable HTTP) and CLI for AXIOM v2 — the transactional write gate for coding agents:
Plan → canonical ManifestBundle → set-level checks → hash-gated two-phase apply → journal.
dist/cli.js (thin entry) + dist/cli-main.js (lazy-loaded engines; the MCP SDK v2 and zod are
bundled into the mcp-lazy / http-lazy chunks); no runtime dependencies.
Install & run
--root may repeat. Every tool root argument must equal or lie inside one of them; with exactly one
root it is the default. There is no env-var or cwd fallback (ERR_ROOT_REQUIRED / ERR_ROOT_NOT_ALLOWED).
Protocol revisions — --wire 2026|2025|2026-only
Built on MCP TypeScript SDK v2 (@modelcontextprotocol/server 2.0.0). The server speaks the
2026-07-28 revision (no initialize, per-request _meta envelope, server/discover,
ttlMs/cacheScope on list results) and the 2025-era revisions (initialize handshake,
HTTP sessions) from the same entry — the SDK pins each stdio connection, or routes each HTTP
request, to the era the client opened with. --wire 2026 (default) and --wire 2025 both serve
both; --wire 2026-only refuses 2025 openings with the unsupported-protocol-version error. Clients
on SDK v1 need no change. Details: docs/reference/mcp-tools.md.
VS Code — .vscode/mcp.json
Streamable HTTP — --http <host:port>
- Endpoints:
POST /mcp(2026-07-28 requests are served statelessly; a 2025initializeopens a session and returnsMcp-Session-Id, which every later 2025 request must send),GET /mcp(standalone SSE stream, one per 2025 session),DELETE /mcp(close the session),GET /health→{ ok, name, version }(unauthenticated). Anything else is404JSON. - Loopback by default. A non-loopback host refuses to start unless a bearer token is present in
the env var named by
--http-token-env <NAME>(defaultAXIOM_HTTP_TOKEN, ≥ 16 chars). Clients sendAuthorization: Bearer <token>; the compare is constant-time. A token is optional on loopback. - DNS-rebinding protection is on for loopback binds (
Hostmust be<host>:<port>,localhost:<port>or127.0.0.1:<port>; otherwise403). Request bodies over 4 MiB are413. - 2025 sessions idle for 30 minutes are evicted; each session (and each 2026 request) has its own
server instance from one factory (roots, discovered sub-roots and guard settings are shared). The
transport lives in
dist/http-lazy.js, loaded only with--http, and is plainnode:http— no express/hono at runtime. - VS Code:
{ "type": "http", "url": "http://127.0.0.1:3411/mcp" }; add"headers": { "Authorization": "Bearer ${input:axiom-token}" }when a token is set.
Conformance: packages/conformance runs @modelcontextprotocol/conformance server against this transport
in CI with an expected-failures baseline (packages/conformance/baseline.yml).
Claude Desktop — claude_desktop_config.json
Tools
Toolsets (3.0, D-43)
axiom mcp serves the core toolset by default — the six tools an agent needs to write
through the gate: axiom_write, axiom_status, axiom_rollback, axiom_check,
axiom_apply, axiom_apply_dry_run. Start the server with --tools full to also expose the
plan / manifest / task plumbing below (every row not marked core). spec/tools.json and
spec/codai-tools.json list every tool with "toolset": "core" | "full". Library users pass
createServer(policy, { toolset: "full" }) / serverFactory(policy, { toolset });
parseToolset(value) maps the flag value (ERR_USAGE otherwise).
Every tool carries MCP annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
and an outputSchema; structuredContent is the full result, content[0].text a small summary (digest,
verdict, counts, first 20 findings). Errors come back as isError: true with { code, message, path? }
from the closed ERROR_CODES enum — a handler never throws. spec/tools.json is generated from the same
registry (pnpm build:spec) and guarded by a parity test. spec/codai-tools.json is the same registry in
codai's packages/agent-core/spec/tools-v2.json entry shape ({ name, risk, toolset, description, parameters }) —
see docs/integration/codai.md.
Resources: axiom://manifest/{sha}, axiom://report/{sha}, axiom://applied/{sha},
axiom://profile/{name}, axiom://schema/{Plan|Manifest|ManifestBundle|CheckReport|ApplyResult|Profile|Journal|RepoSnapshot},
axiom://emitters (template emitters loaded with --emitter <pkg> — empty by default since 3.0; install
@codai/axiom-emitters-web next to the repo and pass --emitter @codai/axiom-emitters-web, see docs/guides/emitters.md),
axiom://lock ({ roots: [{ root, held, holder?, queue[], intents[] }] } for every allowlisted root; read-only).
Trust model
- Roots are realpath'd at startup, must be directories, and the set is frozen. Requested roots are realpath'd too (case-insensitive containment on Windows); anything outside is a hard error.
axiom_applyrequiresconfirmDigest === bundle.manifestDigest— echo the digest you saw in dry-run. Pre-apply checks run against the profile (defaultdefault, or<root>/.axiom/profiles/<name>.json); a non-passverdict aborts withERR_CHECKS_FAILEDbefore any write.- Payloads over 4 MiB are rejected up front (
ERR_BUNDLE_TOO_LARGE). - Tasks and plan sessions live in the server process (shared by every connection/request the
process serves; never on disk). A restart forgets them; finished tasks stay pollable for 10 min, idle
sessions expire after 30 min; at most 8 tasks run concurrently (
ERR_EBUSYbeyond that). Stopping the server aborts every running task and kills its guard trees. .axiom/lockmakes apply single-writer per root; the journal makes it crash-safe and reversible.- stdout carries only JSON-RPC. Logs are JSON lines on stderr (
--log-level error|warn|info|debug, defaultwarn). - External guards (
guard.external) are off unless the process is started with--allow-guardsand the profile setsfacts.allowGuards: true. Relative commands must live under<root>/scripts/; absolute ones must be listed exactly via--guard-allowlist <abs>(repeatable). Guards are spawned with an args array (never a shell), a scrubbed environment, a wall-clock timeout, and must printGuardOutputJSON — seedocs/guides/checks.md. - Signed manifests (
docs/guides/signing.md): a root can pin Ed25519 public keys in.axiom/trust/keys.json; a profile withmanifest.requireSignedthen refuses unsigned, tampered or untrusted bundles, and withantiRollback: truerefuses anycounter ≤ .axiom/trust/state.json#lastCounter.axiom_applyadvances that state only onstatus: "applied". Private keys never enter the server: signing isaxiom signwithAXIOM_SIGNING_KEYor--key-file.
CLI
Exit codes: 0 ok · 1 verdict fail / apply failed / journal chain broken / keyless unavailable · 2 usage or error
(doctor: 2 = a check failed). Non-mcp verbs print JSON to stdout (init, doctor, status, log, check, emitters: human lines unless --json).
ref sources ({ type: "ref", uri, digest }) are offline by default: a digest already in
<root>/.axiom/cas resolves without network, anything else is ERR_NET_DISABLED. --allow-net
fetches https: only (no redirects, 30 s timeout, 32 MiB cap), optionally restricted to
--net-allow hosts (*.example.com wildcards), verifies the pinned digest and stores the blob in
the CAS — a mismatch stores nothing (ERR_DIGEST_MISMATCH). apply never fetches. The MCP
axiom_plan_compile tool has no network switch. See docs/reference/plan-format.md
and docs/concepts/cas.md.
Hook mode — axiom gate --stdin
A PreToolUse hook for Claude Code, Copilot CLI and VS Code agent hooks. It reads one harness
payload from stdin (both {tool_name, tool_input, cwd} and {toolName, toolArgs, cwd} casings;
toolArgs may be a JSON string), extracts the write target(s) of Write|Edit|MultiEdit|NotebookEdit,
create_file|replace_string_in_file|insert_edit_into_file|apply_patch|multi_replace_string_in_file|edit_notebook_file
and generic write|edit, scans shell tools (Bash, run_in_terminal, …) for write
primitives (>, >>, tee, rm, mv, cp, sed -i, git checkout|reset|clean, PowerShell
Set-Content/Remove-Item, … — a heuristic, documented in docs/getting-started/hooks.md), and runs only the
fast predicates: containment + RelPath rules (.., CON, NTFS ADS → ERR_CONTAINMENT /
ERR_PATH_*), path.deny, path.allow, content.noSecrets and content.maxBytes on the new
content when the payload carries it. Fail-closed (D-18): a non-answer is a deny.
A deny exits 0 since 2.4.1 (D-35): the npm axiom.ps1 shim on Windows rewrites 2 to 1, and
VS Code treats 1 as a warning. Every JSON-aware harness honours the document on exit 0; use
--deny-exit 2 for exit-code-only harnesses (Windsurf). Read-only tools are answered before the
gate chunk loads. A target in a sibling worktree of the same repository (same git common dir) is
judged against that worktree's root and gate profile instead of ERR_CONTAINMENT.
Root = payload cwd, walked up to the nearest .git / repository .axiom/ ancestor (never the
home dir; --no-root-discovery disables), else --root, else the process cwd (the hook is the
one place where cwd is acceptable: the harness spawns the hook in the project directory and owns
that value). Relative targets stay relative to cwd.
Profile = --profile <file> → <root>/.axiom/gate-profile.json → ~/.axiom/gate-profile.json →
built-in { deny: [".git/**", ".axiom/**", "**/*.lock", "pnpm-lock.yaml", ".env", ".env.*", "**/node_modules/**"], noSecrets: true, pii: false }.
Schema: { deny: string[], allow?: string[], noSecrets: boolean, pii: boolean, maxBytes?: number } (strict).
pii: true additionally scans for personal data (cnp, email, phoneRo, card) — off by default
since S-414 (maintainer e-mails in pyproject.toml denied real edits; see docs/guides/checks.md).
gate is a separate lazy chunk (dist/gate-lazy.js, no MCP SDK): in-process p95 ≈ 5 ms per payload,
end-to-end ≈ 150–200 ms including node startup; check-gate-latency guards p95 ≤ 250 ms.
Wiring for each harness is in docs/getting-started/hooks.md.
来源:packages/mcp/README.md,提交 8ddce4c
工具
0版本历史
10- v3.0.0最新Oct 19, 2026
- v2.7.0Oct 19, 2026
- v2.6.1Oct 14, 2026
- v2.5.2Oct 14, 2026
- v2.5.0Oct 14, 2026
- v2.4.1Oct 14, 2026
- v2.4.0Sep 27, 2026
- v2.3.1Sep 27, 2026
- v2.3.0Sep 23, 2026
- v2.2.1Sep 21, 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 建索引,只向助手提供与当前项目或任务相关的那部分内容。

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

Axiom — Advanced Math
由 GitHub 账号 tufantunc 发布
本地 MCP 服务器,借助 Giac/Xcas 与 math.js 为助手提供精确的符号与数值数学计算:求解、验证命题、绘制函数图。