{"name":"io.github.dragoscv/axiom","slug":"dragoscv-axiom","title":"AXIOM","description":"Transactional write gate for coding agents: plan, canonical manifest, checks, two-phase apply.","url":"https://mcp.market/server/dragoscv-axiom","rating":null,"grade":"B","score":75,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":30,"stars":0,"forks":0,"downloads_week":227,"last_push_at":"2026-10-28T12:46:35.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/dragoscv/axiom","website":"https://dragoscv.github.io/axiom/","version":"3.0.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@codai/axiom-mcp","version":"3.0.0","runtimeHint":"npx","transport":{"type":"stdio"},"packageArguments":[{"description":"Serve the MCP stdio transport.","value":"mcp","type":"positional","valueHint":"mcp"},{"description":"Absolute repository root AXIOM may write to (allowlist; repeatable). There is no cwd fallback.","isRequired":true,"format":"filepath","placeholder":"/absolute/path/to/repo","type":"named","name":"--root","isRepeated":true}],"environmentVariables":[{"description":"Optional Ed25519 private key (base64 PKCS#8 or raw seed) used by axiom_sign; never stored under a root.","isSecret":true,"name":"AXIOM_SIGNING_KEY"}]}],"tools":[{"name":"axiom_apply","description":"Transactionally write the bundle into the root: pre-image verification, staging, journal, atomic renames, scoped rollback on failure. Requires `confirmDigest === bundle.manifestDigest` (echo the digest you saw in dry-run); when the client supports elicitation the user must also confirm by typing the digest's first 12 hex characters. Idempotent: re-applying an applied digest is a no-op.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_apply_dry_run","description":"Stage 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 `confirmDigest` to axiom_apply.","write_action":true,"price_micros":0,"input_schema":null},{"name":"axiom_axm_parse","description":"Parse .axm v2 text into a Plan with 1-based {line, column} diagnostics; `plan` is present only when error-free. Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_check","description":"Evaluate the profile's predicates (plus the manifest's own checks) against the bundle. Repo facts are read from the root when one is available and the profile allows it. Verdict `error` means a provider could not run — never a silent pass.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_check_start","description":"Same evaluation as axiom_check, but returned immediately as a task so long `guard.external` suites (up to 15 min per guard) outlive the client's per-call timeout. Poll axiom_task_get with the returned taskId every pollIntervalMs until status is completed|failed|cancelled; the CheckReport is in `result`. Finished tasks are pollable for ttlMs, then forgotten. Tasks live in this server process only (","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_manifest_diff","description":"Compare two manifests by artifact path and digest. Each side is a ManifestBundle or a `sha256:<hex>` reference to a bundle stored under an allowlisted root.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_manifest_verify","description":"Structural 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 `signatures`. Never writes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_plan_add","description":"Add 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_plan_begin","description":"Start assembling a Plan whose JSON would exceed the 4 MiB per-call cap: send the header here (everything except `artifacts`), append artifacts in chunks with axiom_plan_add, then axiom_plan_seal compiles the whole. The sealed bundle's manifestDigest is identical to a one-shot axiom_plan_compile of the same Plan. Sessions are in-memory, expire after 30 min idle, and hold at most 2000 artifacts / 64","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_plan_compile","description":"Compile a Plan into a content-addressed ManifestBundle (sorted artifacts, sha256 digests, in-toto planDigest). `store: cas` writes blobs under <root>/.axiom/cas instead of inlining them. When a root is given the bundle is stored under <root>/.axiom/manifests/<hex>.json so later tools can reference it by digest. `template` sources need an emitter package loaded with `axiom mcp --emitter <pkg>` (e.g","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_plan_seal","description":"Assemble the session's header + every added artifact into one Plan and compile it exactly like axiom_plan_compile (same options, same digest). The session is consumed whether or not compilation succeeds. Bundles whose inline blobs exceed 4 MiB need `store: cas` (and therefore a root).","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_plan_validate","description":"Validate a Plan against PlanSchema and, when all sources are inline, compute its planDigest. Read-only; touches no files.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_repo_snapshot","description":"Deterministic, content-addressed inventory of a root: every regular file (and symlink) as { path, bytes, sha256, mode, kind }, sorted by code point, with snapshotDigest = sha256(JCS(body)). No timestamps, no absolute paths — the same tree gives the same digest on every machine. Honours the root .gitignore, always skips .git/ and .axiom/, never follows symlinks, never leaves the root. Use it to bui","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_rollback","description":"Replay the journal of a committed/committing manifest in reverse: restore backups, remove created files, drop the applied marker.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_roots_list","description":"The frozen set of roots this server may read and write, as given by --root at startup.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_status","description":"Read-only snapshot of a root's write state, same as `axiom status --json`: who holds .axiom/lock (pid, host, digest, since, stale), the wait queue, registered in-flight intents (paths), interrupted journals that need `axiom_rollback`, the last applied chain entry and whether the journal hash chain verifies. Never takes the lock.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_task_cancel","description":"Abort a `working` task: every running guard process tree is killed and the task ends `cancelled` with error ERR_TASK_CANCELLED. Idempotent — a terminal task is returned unchanged.","write_action":true,"price_micros":0,"input_schema":null},{"name":"axiom_task_get","description":"Status of a task created by axiom_check_start. While `working` only the descriptor is returned; once terminal, `result` (completed) or `error` (failed|cancelled) is attached. Unknown or expired taskId → ERR_TASK_NOT_FOUND.","write_action":false,"price_micros":0,"input_schema":null},{"name":"axiom_write","description":"One-tool transactional write: send the files you want written/deleted. Without confirmDigest it compiles them against the current tree, runs the pre-apply checks and returns status `preview` with the manifestDigest and a unified diff (nothing outside .axiom/ touched). Call again with the SAME files, intent and profile plus confirmDigest=<manifestDigest> to apply atomically (when the client support","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":75,"grade":"B","scanned_at":"2026-10-30T18:16:05.979Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-30T18:16:05.920Z","components":{"code":{"score":20,"max":25,"notes":["27 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/axm-lazy.js: …s(\"Cloudflare\")) return false; try { new Function(\"\"); return true; } catch (_) { ret…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@codai/axiom-mcp","version":"3.0.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":8,"publishedAt":"2026-10-19T19:09:36.195Z","repositoryUrl":"git+https://github.com/dragoscv/axiom.git","weeklyDownloads":227}],"repo":{"found":true,"owner":"dragoscv","repo":"axiom","archived":false,"pushedAt":"2026-10-28T12:46:35Z","stars":0,"forks":0,"openIssues":2,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/15914392?v=4","ownerCreatedAt":"2015-11-18T20:25:05Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/15914392?v=4&s=128","source":"registry"},"presence":{"stars":0,"forks":0,"downloadsWeek":227,"license":"MIT","lastPushAt":"2026-10-28T12:46:35.000Z","score":30}}}},"grade_history":[],"reviews":[]}