Atlas / MCP servers / dragoscv / axiom

axiomCAUTION

mcp/dragoscv/axiom

The transactional write gate for coding agents: Plan -> canonical Manifest -> set-level checks -> hash-gated two-phase apply. MCP server, CLI, PreToolUse hook, GitHub Action.

Verdict
CAUTION
Grade
F
Trust score
54 /100
Exposed tools
17 11r · 6w · 0d
Transport
stdio · streamable-http
License
MIT
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://www.npmjs.com/package/@codai/axiom-mcp) [](https://www.npmjs.com/package/@codai/axiom-mcp) [](https://github.com/dragoscv/axiom/actions/workflows/ci.yml) [](https://github.com/dragoscv/axiom/actions/workflows/release.yml) [](https://scorecard.dev/viewer/?uri=github.com/dragoscv/axiom) [](LICENSE) [](https://dragoscv.github.io/axiom/) [](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.dragoscv%2Faxiom/versions/latest) [](https://nodejs.org)

Docs · Quickstart · Tools · Architecture · Packages · Contributing

An agent describes a change set as a Plan. AXIOM compiles it to a canonical, content-addressed Manifest, runs checks over the whole set, and applies it with a hash-gated two-phase commit that leaves a journal and, optionally, a signed attestation. It ships as one npm package — @codai/axiom-mcp — that is an MCP server, a CLI, a PreToolUse hook and

Read from source at commit a5aaca5a8803OBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add axiom-mcp --env AXIOM_SIGNING_KEY=${AXIOM_SIGNING_KEY} -- npx -y @codai/[email protected] mcp
03

Exposed tools (17)

11 read · 6 write · 0 destructive.

ToolRiskDescription
axiom_applywriteTransactionally write the bundle into the root: pre-image verification, staging, journal, atomic renames, scoped rollback on failure. Requires
axiom_apply_dry_runwriteStage the bundle under <root>/.axiom/staging, run pre-apply checks and produce a unified diff against the current tree. Nothing outside .axiom/ is touched. Echo the returned manifestDigest as
axiom_axm_parsereadParse .axm v2 text into a Plan with 1-based {line, column} diagnostics;
axiom_checkreadEvaluate the profile
axiom_check_startwriteSame evaluation as axiom_check, but returned immediately as a task so long
axiom_manifest_diffreadCompare two manifests by artifact path and digest. Each side is a ManifestBundle or a
axiom_manifest_verifyreadStructural and content-address verification: schema, recomputed manifestDigest, every inline blob hashes to its key, attestation subject matches. When a root with .axiom/trust/keys.json is available, detached DSSE signatures are verified and the trusted keyids are reported under
axiom_plan_addwriteAdd a chunk of Plan artifacts (each ≤ 4 MiB call, inline content ≤ 256 KiB per artifact as in a Plan) to an open session. Paths must be unique across every chunk (ERR_INVALID_PLAN otherwise); a sealed or over-budget session is ERR_PLAN_SESSION_STATE.
axiom_plan_beginwriteStart assembling a Plan whose JSON would exceed the 4 MiB per-call cap: send the header here (everything except
axiom_plan_compilereadCompile a Plan into a content-addressed ManifestBundle (sorted artifacts, sha256 digests, in-toto planDigest).
axiom_plan_sealreadAssemble the session
axiom_plan_validatereadValidate a Plan against PlanSchema and, when all sources are inline, compute its planDigest. Read-only; touches no files.
axiom_rollbackreadReplay the journal of a committed/committing manifest in reverse: restore backups, remove created files, drop the applied marker.
axiom_roots_listwriteThe frozen set of roots this server may read and write, as given by --root at startup.
axiom_statusreadRead-only snapshot of a root
axiom_task_cancelreadAbort a
axiom_task_getreadStatus of a task created by axiom_check_start. While
04

Trust audit

CAUTIONgrade F · trust 54/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (4 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

MEDIUMInventory / provenance · inv.binary · CWE-1104
.archive/axiom_starter_full.zip
axiom_starter_full.zip
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/checks/src/predicates/cel-vectors.json:1918
"expr": "manifest.name == 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/checks/src/predicates/cel-vectors.json:1948
"expr": "manifest.name == 'demo' || 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/checks/src/predicates/cel-vectors.json:1953
"expr": "manifest.name == 'demo' || 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MEDIUMHard-coded secrets · secret.aws · CWE-798, CWE-321
packages/checks/src/predicates/cedar.test.ts:189
{ path: ".env", content: "AWS_KEY=AKIAAAAAAAAAAAAAAAAA" },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/checks/src/predicates/content.ts:117
// Identifier-shaped values (`libsecret = "keyring.backends.libsecret"`, `TOKEN = "REVISION_SCRIPT_FILENAME"`).
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/checks/src/predicates/predicates.test.ts:146
'api_key: "sk-live-9f8e7d6c5b4a3210"',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/mcp/src/http.test.ts:249
await start({ token: "0123456789abcdef-secret" });
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/mcp/src/http.test.ts:256
const { client } = await connect({ token: "0123456789abcdef-secret" });
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/mcp/src/http.test.ts:310
const token = "0123456789abcdef-secret";
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
packages/checks/src/predicates/predicates.test.ts:77
privateKey: "-----BEGIN RSA PRIVATE KEY-----",
LOWInventory / provenance · inv.binary · CWE-1104
docs/archive/v1/scratch/axiom-1.0.0-bundle.tar.gz
axiom-1.0.0-bundle.tar.gz
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
docs/archive/v1/scratch/codai-axiom-mcp-1.0.11.tgz
codai-axiom-mcp-1.0.11.tgz
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
.copilot-ripple.json
.copilot-ripple.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
packages/vscode-axm/.vscodeignore
.vscodeignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/release.yml:270
if ../../mcp-publisher publish 2>&1 | tee publish.log; then exit 0; fi
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/site/astro.config.mjs:19
readFileSync(new URL("../../packages/vscode-axm/syntaxes/axm.tmLanguage.json", import.meta.url), "utf8"),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/_v1/axiom-tests/debug-manifest-v2.mjs:10
const source = readFileSync("../../axiom/notes-v2.axm", "utf-8");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/_v1/axiom-tests/src/apply-security.test.ts:71
path: "../../../etc/passwd", // Path traversal
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/_v1/axiom-tests/src/error-paths.test.ts:189
path: "../../etc/passwd", // Path traversal
LOWNetwork egress · net.env_exfil · CWE-200, CWE-319
packages/mcp/src/gate.test.ts:460
/.env" ... curl
Why it matters. reads secrets in the same file that sends data out
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/integration/harnesses.md:214
`--root`. Streamable HTTP clients point at `http://127.0.0.1:3411/mcp` after
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/integration/vscode.md:98
{ "servers": { "axiom": { "type": "http", "url": "http://127.0.0.1:3411/mcp" } } }
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/mcp/README.md:64
- VS Code: `{ "type": "http", "url": "http://127.0.0.1:3411/mcp" }`; add
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/_v1/axiom-tests/package.json
@types/node, tsx, typescript, vitest
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha a5aaca5a8803full audit observations/trust-audit/mcp-server/dragoscv__axiom.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11a5aaca5a8803CAUTIONF54first audit
06

Questions

What is the axiom MCP server?

The transactional write gate for coding agents: Plan -> canonical Manifest -> set-level checks -> hash-gated two-phase apply. MCP server, CLI, PreToolUse hook, GitHub Action.

What tools does axiom expose?

17 in total: 11 read-only, 6 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is axiom safe to connect to an agent?

With care. The audit graded it F (54/100) and found 25 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does axiom need?

It reads ACTIONS_ID_TOKEN_REQUEST_URL, AXIOM_SIGNING_KEY, DB_PASSWORD and SECRET_X from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does axiom run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as axiom-axm at 2.0.0.

How current is this page?

The grade is for one exact copy of the source (a5aaca5a8803), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement