{"_id":"@axiom-foundation/mcp","_rev":"6-19f245a0a734a23ac1956448ad95e58f","name":"@axiom-foundation/mcp","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@axiom-foundation/mcp","version":"0.1.0","keywords":["axiom","mcp","rules","benefits"],"license":"MIT","_id":"@axiom-foundation/mcp@0.1.0","maintainers":[{"name":"pavel-makarchuk","email":"pavel@policyengine.org"},{"name":"maxghenis","email":"mghenis@gmail.com"}],"homepage":"https://github.com/TheAxiomFoundation/axiom-mcp#readme","bugs":{"url":"https://github.com/TheAxiomFoundation/axiom-mcp/issues"},"bin":{"axiom-mcp":"dist/index.js"},"dist":{"shasum":"3a10ee640b3084727364cd5e66502844a34dc147","tarball":"https://registry.npmjs.org/@axiom-foundation/mcp/-/mcp-0.1.0.tgz","fileCount":18,"integrity":"sha512-0+A3dbFxPRCMznu0k4v7xN26VhemBs/8H8Bbi9fUOjVnSaSHm0DkOZxQOPlkqwU8UtaXLmCk5L5qLrKknh4RWA==","signatures":[{"sig":"MEUCIQD2fN4Ec5IsSn/oufY/mUC22Ke2ASi4Ml6XhSlfIuuIogIgQS9+gqL4L/vhK1+ZS2R1NkMztGjcdy9/x1/QY6eWtLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42277},"type":"module","engines":{"node":">=22.12.0"},"gitHead":"7ce0e185791a8e1810e6a83b8bd25d34c9a54a7c","scripts":{"mcp":"tsx src/index.ts","test":"vitest run","build":"rm -rf dist && tsc","check":"npm run build && npm test","prepare":"npm run build","smoke:live":"tsx scripts/smoke-live.ts","smoke:github-install":"tsx scripts/smoke-github-install.ts"},"_npmUser":{"name":"pavel-makarchuk","email":"pavel@policyengine.org"},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/TheAxiomFoundation/axiom-mcp.git","type":"git"},"_npmVersion":"10.5.0","description":"MCP server adapter for the Axiom Rule API.","directories":{},"_nodeVersion":"21.7.3","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","vitest":"^3.2.6","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1782958128663_0.8808041357722396","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@axiom-foundation/mcp","version":"0.1.1","keywords":["axiom","mcp","rules","benefits"],"license":"MIT","_id":"@axiom-foundation/mcp@0.1.1","maintainers":[{"name":"pavel-makarchuk","email":"pavel@policyengine.org"},{"name":"maxghenis","email":"mghenis@gmail.com"}],"homepage":"https://github.com/TheAxiomFoundation/axiom-mcp#readme","bugs":{"url":"https://github.com/TheAxiomFoundation/axiom-mcp/issues"},"bin":{"axiom-mcp":"dist/index.js"},"dist":{"shasum":"56161c4cf984fe87c887b9bb47ca321fefa1540f","tarball":"https://registry.npmjs.org/@axiom-foundation/mcp/-/mcp-0.1.1.tgz","fileCount":18,"integrity":"sha512-kXBMLwYvP9f2ZTN0uI1jrTSGkP5jWgC6sDhyTPoEMWeJcH79FSE/nFLoYGSaCtWdvU+gujogn3Z88hl2LSIaiw==","signatures":[{"sig":"MEYCIQDhc7uH3/zdaKIXreqUSiga/BwvXrqNWmmVEI6zmsWywQIhANVHxxDzuAXM0LzIi4Jp9nkg1OZUN1+aWt0KRf1Ue6x3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiom-foundation%2fmcp@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":42158},"type":"module","engines":{"node":">=22.12.0"},"gitHead":"9ca4daa02c344b10193cacef64d5121703701d9d","scripts":{"mcp":"tsx src/index.ts","test":"vitest run","build":"rm -rf dist && tsc","check":"npm run build && npm test","prepare":"npm run build","smoke:live":"tsx scripts/smoke-live.ts","smoke:github-install":"tsx scripts/smoke-github-install.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b1a9364d-896a-4779-902c-b97ca412c409"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/TheAxiomFoundation/axiom-mcp.git","type":"git"},"_npmVersion":"11.13.0","description":"MCP server adapter for the Axiom Rule API.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","vitest":"^3.2.6","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.1_1782958975928_0.6512678174330457","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@axiom-foundation/mcp","version":"0.1.2","keywords":["axiom","mcp","rules","benefits"],"license":"MIT","_id":"@axiom-foundation/mcp@0.1.2","maintainers":[{"name":"pavel-makarchuk","email":"pavel@policyengine.org"},{"name":"maxghenis","email":"mghenis@gmail.com"}],"homepage":"https://github.com/TheAxiomFoundation/axiom-mcp#readme","bugs":{"url":"https://github.com/TheAxiomFoundation/axiom-mcp/issues"},"bin":{"axiom-mcp":"dist/index.js"},"dist":{"shasum":"08db6661e805a0d196b0a923f514812e8e3b14fb","tarball":"https://registry.npmjs.org/@axiom-foundation/mcp/-/mcp-0.1.2.tgz","fileCount":18,"integrity":"sha512-Dw3lQsFpji6ViZXrqJv6rgNX2BWbXLJmKcQCfMKmlimMbqpvWd4iEATgPApU0f6gXwuwhefcD66ASxtiPGJTBA==","signatures":[{"sig":"MEQCIAh21nvy9h+yKvovgH8nXZSJvQBnWfCLe/h0zBmwOPjEAiAi64m2z8yyAPpbaFjslKO06NA3S9HxCtP9+4ihdG0pRQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiom-foundation%2fmcp@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51735},"type":"module","engines":{"node":">=22.12.0"},"gitHead":"f70000ed2c4ab21da22a6592028f934d10d84cc7","scripts":{"mcp":"tsx src/index.ts","test":"vitest run","build":"rm -rf dist && tsc","check":"npm run build && npm test","prepare":"npm run build","smoke:live":"tsx scripts/smoke-live.ts","smoke:github-install":"tsx scripts/smoke-github-install.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b1a9364d-896a-4779-902c-b97ca412c409"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/TheAxiomFoundation/axiom-mcp.git","type":"git"},"_npmVersion":"11.13.0","description":"MCP server adapter for the Axiom Rule API.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","vitest":"^3.2.6","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.2_1782965911623_0.4704364153195284","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@axiom-foundation/mcp","version":"0.1.3","keywords":["axiom","mcp","rules","benefits"],"license":"MIT","_id":"@axiom-foundation/mcp@0.1.3","maintainers":[{"name":"pavel-makarchuk","email":"pavel@policyengine.org"},{"name":"maxghenis","email":"mghenis@gmail.com"}],"homepage":"https://github.com/TheAxiomFoundation/axiom-mcp#readme","bugs":{"url":"https://github.com/TheAxiomFoundation/axiom-mcp/issues"},"bin":{"axiom-mcp":"dist/index.js"},"dist":{"shasum":"65200a8af2550d397434e808a7760e7fad017879","tarball":"https://registry.npmjs.org/@axiom-foundation/mcp/-/mcp-0.1.3.tgz","fileCount":18,"integrity":"sha512-ngm8NG/tn3uFQSqkdjU54D+92+GGrlUvMYkm1IeBy0Ikc65xwCDo/SogUsq8ESD6A26eerRDLFrAsLeVFOw/Xg==","signatures":[{"sig":"MEUCICvgGMHWoH7Yfk113jLGZbaei/wlwBSk/C4vtVIH7vCGAiEAlD0PYrF+epS2dUbo3kmPtmA9ujLdAzJVG/YELxwj5e0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiom-foundation%2fmcp@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":52285},"type":"module","engines":{"node":">=22.12.0"},"gitHead":"0cf911491432908f481beaefd768f5e1eb04e536","scripts":{"mcp":"tsx src/index.ts","test":"vitest run","build":"rm -rf dist && tsc","check":"npm run build && npm test","prepare":"npm run build","smoke:live":"tsx scripts/smoke-live.ts","smoke:github-install":"tsx scripts/smoke-github-install.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b1a9364d-896a-4779-902c-b97ca412c409"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/TheAxiomFoundation/axiom-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP server adapter for the Axiom Rule API.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","vitest":"^3.2.6","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.3_1783280954723_0.9924774229271169","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@axiom-foundation/mcp","version":"0.1.4","keywords":["axiom","mcp","rules","benefits"],"license":"MIT","_id":"@axiom-foundation/mcp@0.1.4","maintainers":[{"name":"pavel-makarchuk","email":"pavel@policyengine.org"},{"name":"maxghenis","email":"mghenis@gmail.com"}],"homepage":"https://github.com/TheAxiomFoundation/axiom-mcp#readme","bugs":{"url":"https://github.com/TheAxiomFoundation/axiom-mcp/issues"},"bin":{"axiom-mcp":"dist/index.js"},"dist":{"shasum":"a14a5640cb7f571e43e16e346f7a28d76bf99426","tarball":"https://registry.npmjs.org/@axiom-foundation/mcp/-/mcp-0.1.4.tgz","fileCount":18,"integrity":"sha512-Pr4IM5VJpEu/MSQWCtqykK4D4xFEI6Q4cy0cMehSu6Pk641i1mVHE42biyv5DrRrXUrtzsbnHwg4AzAP8AWq3w==","signatures":[{"sig":"MEUCIB6Owgv7oQoQiHUrefpDaXospzkKfazm87l4jmNlS7UpAiEAgtKaLY1pVAo4y1LoVhyoflZlEv+pcLEQcRRDZUtm15k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiom-foundation%2fmcp@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":52283},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"c58f44f2dfc063686a0b407e97ba888c499bf397","scripts":{"mcp":"tsx src/index.ts","test":"vitest run","build":"rm -rf dist && tsc","check":"npm run build && npm test","prepare":"npm run build","smoke:live":"tsx scripts/smoke-live.ts","smoke:github-install":"tsx scripts/smoke-github-install.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b1a9364d-896a-4779-902c-b97ca412c409"}},"overrides":{"esbuild":"^0.28.1"},"repository":{"url":"git+https://github.com/TheAxiomFoundation/axiom-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"MCP server adapter for the Axiom Rule API.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","vitest":"^3.2.6","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.4_1783283636871_0.6035240604196135","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@axiom-foundation/mcp","version":"0.2.0","type":"module","description":"MCP server adapter for the Axiom Rule API.","repository":{"type":"git","url":"git+https://github.com/TheAxiomFoundation/axiom-mcp.git"},"homepage":"https://github.com/TheAxiomFoundation/axiom-mcp#readme","bugs":{"url":"https://github.com/TheAxiomFoundation/axiom-mcp/issues"},"bin":{"axiom-mcp":"dist/index.js"},"publishConfig":{"access":"public"},"scripts":{"build":"rm -rf dist && tsc","test":"vitest run","mcp":"tsx src/index.ts","smoke:github-install":"tsx scripts/smoke-github-install.ts","smoke:live":"tsx scripts/smoke-live.ts","prepare":"npm run build","check":"npm run build && npm test"},"engines":{"node":">=20.0.0"},"keywords":["axiom","mcp","rules","benefits"],"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","zod":"^3.25.76"},"devDependencies":{"@types/node":"^24.10.0","tsx":"^4.20.6","typescript":"^5.9.3","vitest":"^3.2.6"},"overrides":{"esbuild":"^0.28.1"},"gitHead":"279f47c11676bc0e92cea10237f7a1749e0d8cd1","_id":"@axiom-foundation/mcp@0.2.0","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-/ckoO5R3eC29DjTUXmpb9U3fVYF62Ty8h7PhiNGNhDfcrPM0oEAyIDFvyqdoDkCcjR/mpiQAxcIumrTxL4ngeA==","shasum":"a1a350a485a65cbe7dc495bdb79dfd0bc2487dca","tarball":"https://registry.npmjs.org/@axiom-foundation/mcp/-/mcp-0.2.0.tgz","fileCount":19,"unpackedSize":80498,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axiom-foundation%2fmcp@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFD/y5cm6Sf/a7WQ/6qx6KTQTr3VSKNOH80aIK5hPNtoAiB29P/BaAgk3R+lZWOrUqIzaqmXPFoRO07SgK01Ip6J/g=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b1a9364d-896a-4779-902c-b97ca412c409"}},"directories":{},"maintainers":[{"name":"pavel-makarchuk","email":"pavel@policyengine.org"},{"name":"maxghenis","email":"mghenis@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.2.0_1787094412444_0.39896019483127465"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-02T02:08:48.483Z","modified":"2026-08-18T23:06:52.992Z","0.1.0":"2026-07-02T02:08:48.797Z","0.1.1":"2026-07-02T02:22:56.081Z","0.1.2":"2026-07-02T04:18:31.782Z","0.1.3":"2026-07-05T19:49:14.862Z","0.1.4":"2026-07-05T20:33:57.024Z","0.2.0":"2026-08-18T23:06:52.601Z"},"bugs":{"url":"https://github.com/TheAxiomFoundation/axiom-mcp/issues"},"license":"MIT","homepage":"https://github.com/TheAxiomFoundation/axiom-mcp#readme","keywords":["axiom","mcp","rules","benefits"],"repository":{"type":"git","url":"git+https://github.com/TheAxiomFoundation/axiom-mcp.git"},"description":"MCP server adapter for the Axiom Rule API.","maintainers":[{"name":"pavel-makarchuk","email":"pavel@policyengine.org"},{"name":"maxghenis","email":"mghenis@gmail.com"}],"readme":"# Axiom MCP\n\nMCP server adapter for the Axiom Rule API. The server is intentionally thin:\nall rule search, retrieval, source lookup, graph traversal, package discovery,\nand calculation execution go through the HTTP API.\n\n**Status: developer preview.** The MCP server and the hosted API it talks to\nare open for evaluation with self-serve trial keys. Interfaces and limits may\nchange before general availability; pin versions and expect breaking changes\nbetween minors.\n\n## Run\n\nFor a client-focused setup guide, see [docs/quickstart.md](docs/quickstart.md).\n\nFrom a checkout:\n\n```sh\nAXIOM_API_BASE_URL=https://axiom-api-eta.vercel.app \\\nAXIOM_API_KEY=... \\\nnpm run mcp\n```\n\nAfter installation:\n\n```sh\nAXIOM_API_BASE_URL=https://axiom-api-eta.vercel.app \\\nAXIOM_API_KEY=... \\\naxiom-mcp\n```\n\nClaude Desktop example:\n\n```json\n{\n  \"mcpServers\": {\n    \"axiom\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@axiom-foundation/mcp\"],\n      \"env\": {\n        \"AXIOM_API_BASE_URL\": \"https://axiom-api-eta.vercel.app\",\n        \"AXIOM_API_KEY\": \"axiom_...\"\n      }\n    }\n  }\n}\n```\n\nThe npm package `@axiom-foundation/mcp` is the primary distribution path.\nInstalling from GitHub also works and tracks `main`:\n\n```json\n{\n  \"mcpServers\": {\n    \"axiom\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"github:TheAxiomFoundation/axiom-mcp\"],\n      \"env\": {\n        \"AXIOM_API_BASE_URL\": \"https://axiom-api-eta.vercel.app\",\n        \"AXIOM_API_KEY\": \"axiom_...\"\n      }\n    }\n  }\n}\n```\n\nFor local development, point the client at the checkout:\n\n```json\n{\n  \"mcpServers\": {\n    \"axiom-local\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/axiom-mcp/dist/index.js\"],\n      \"env\": {\n        \"AXIOM_API_BASE_URL\": \"https://axiom-api-eta.vercel.app\",\n        \"AXIOM_API_KEY\": \"axiom_...\"\n      }\n    }\n  }\n}\n```\n\n## Tools\n\nThe server is a pure pass-through: every public, non-admin route of the\nAxiom API is a tool. Tool arguments are forwarded as-is; validation and\nerror codes come from the API.\n\nDiscovery and meta\n\n- `get_capabilities` — `GET /v1/capabilities`\n- `get_version` — `GET /v1/version`\n- `list_programs` — `GET /v1/programs`\n- `list_certified_nodes` — `GET /v1/certified` (paged)\n- `list_corpus_subtrees` — `GET /v1/corpus/subtrees` (every subtree executable on demand)\n\nRules and graphs\n\n- `search_rules` — `POST /v1/search`\n- `get_rule`, `get_rule_sources`, `get_rule_dependencies` — `GET /v1/rules/{id}[/sources|/dependencies]`\n- `get_node` — `GET /v1/nodes/{legal_id}` (certified node detail)\n- `compose_graph` — `GET /v1/graph/compose?focus=` (dependency graph for any rule or file)\n- `get_subgraph` — `GET /v1/subgraph?roots=` (certified closure from up to 20 roots)\n\nRuntime\n\n- `list_runtime_packages`, `get_runtime_package` — `GET /v1/runtime/packages[/{j}/{p}]`\n- `get_root_inputs` — `GET /v1/runtime/root-inputs?root=` (input catalog for any root)\n- `list_runtime_artifacts` — `GET /v1/runtime/artifacts` (pinned artifact identities)\n\nCalculate\n\n- `calculate_household` — `POST /v1/calculate`. Two addressing modes, mutually\n  exclusive: a registered package (`program_id` + `jurisdiction`) or any\n  corpus subtree compiled on demand (`root`, e.g. `us:statutes/7/2014/e/6/A`).\n  `facts` is sugar for `household.facts`.\n- `calculate_batch` — up to 25 synchronous calculations, positional results\n- `submit_calculation_job` / `get_calculation_job` — up to 50 as a detached async job\n- `calculate_household_compat` — `POST /v1/household/{country_id}/calculate` (PolicyEngine wire format)\n\nParity\n\n- `list_parity_cases`, `run_parity_cases`\n\n`list_parity_cases` returns canonical Axiom requests plus optional\n`external_comparisons` metadata for engines such as PolicyEngine. Those\ncomparisons include the external request, output mappings, trace mappings,\nnotes, and tolerances owned by the Axiom API fixture.\n\n`run_parity_cases` returns the Axiom API parity summary, expected-output\ndiffs, `trace_outputs`, calculation trace rows, and case notes when the API\nprovides them. Use it for migration checks and to explain why a result differs\nfrom another engine.\n\n## Resources\n\n- `axiom://capabilities`\n- `axiom://programs`\n- `axiom://runtime/packages`\n- `axiom://corpus/subtrees`\n- `axiom://parity/cases`\n\n## Prompts\n\n- `explain_rule_for_caseworker`\n- `trace_household_result`\n- `run_corpus_subtree`\n- `find_missing_household_inputs`\n\n## Security\n\nThe server does not expose shell execution, arbitrary network fetch, database\naccess, or write/admin operations. It only calls the configured Axiom API base\nURL with the configured API key.\n\nNo API key yet? Issue yourself a trial key (14-day expiry, read +\ncalculate scopes, no signup): `curl -s -X POST\nhttps://axiom-api-eta.vercel.app/v1/keys/trial`\n\nRecommended API key scopes:\n\n```txt\nrules:read      get_capabilities, get_version, list_programs, search_rules, get_rule, get_node, list_certified_nodes, list_corpus_subtrees, list_runtime_packages, get_runtime_package, get_root_inputs, list_runtime_artifacts\nsources:read    get_rule_sources\ngraphs:read     get_rule_dependencies, compose_graph, get_subgraph\ncalculate:run   calculate_household, calculate_household_compat, calculate_batch, submit_calculation_job, get_calculation_job\nadmin:parity    list_parity_cases, run_parity_cases\n```\n\nUse the narrowest key that matches the agent workflow. A read-only research\nagent usually needs `rules:read`, `sources:read`, and `graphs:read`; a scenario\nrunner also needs `calculate:run`.\n\nAxiom API errors are returned to the MCP client as structured tool errors that\ninclude the HTTP status and the API's error body, so agents can see error\ncodes, messages, and request ids. If the Axiom API returns `429 rate_limited`\nwith a `retry-after` of 10 seconds or less, the server retries once\nautomatically; otherwise the tool error includes the response's `retry-after`\nvalue — retry after that interval.\n\nFull reference with recorded examples:\n[axiom-api-eta.vercel.app/docs/mcp](https://axiom-api-eta.vercel.app/docs/mcp)\n\n## Configuration\n\n| Variable | Default | Purpose |\n| --- | --- | --- |\n| `AXIOM_API_BASE_URL` | `https://axiom-api-eta.vercel.app` | Axiom API base URL |\n| `AXIOM_API_KEY` | none | Bearer token sent to the API |\n| `AXIOM_API_TIMEOUT_MS` | `30000` | Per-request timeout in milliseconds |\n\n## Development\n\n```sh\nnpm run check\nnpm pack --dry-run\nnpm run smoke:github-install\n```\n\nLive smoke against the deployed API:\n\n```sh\nAXIOM_API_BASE_URL=https://axiom-api-eta.vercel.app \\\nAXIOM_API_KEY=... \\\nnpm run smoke:live\n```\n\n## Publishing\n\nThe package is published to npm as `@axiom-foundation/mcp`.\n\nUse npm Trusted Publishing for CI/CD releases instead of a long-lived npm token.\nConfigure the package's trusted publisher in npm with:\n\n- package: `@axiom-foundation/mcp`\n- repository owner: `TheAxiomFoundation`\n- repository name: `axiom-mcp`\n- workflow filename: `publish.yml`\n- environment: leave blank unless the workflow is later moved behind a GitHub\n  environment\n\nThen run the manual `Publish MCP Package` workflow from:\n\n```txt\nhttps://github.com/TheAxiomFoundation/axiom-mcp/actions\n```\n\nThe publish workflow runs `npm run check`, `npm pack --dry-run`, and\n`npm publish --access public --provenance` through GitHub OIDC. The first\nversion (`0.1.0`) was published manually because npm requires an existing\npackage before trusted publishing can be configured; all later releases should\ngo through the workflow.\n\nMCP clients can install with:\n\n```sh\nnpx -y @axiom-foundation/mcp\n```\n","readmeFilename":"README.md"}