AGA MCP Server

by attestedintelligence

Not rated
GitHub

About

Cryptographic runtime governance for AI agents. 20 tools. Sealed policy artifacts, continuous measurement, tamper-evident proof. Ed25519 + SHA-256.

Details

Author
attestedintelligence
Categories
Other, Security, AI

Setup

Install AGA MCP Server in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/attestedintelligence/aga-mcp-server

Follow the installation instructions in the repository README, then restart your MCP client.

Cryptographic runtime governance for AI agents and autonomous systems.

Status: published to npm; this release carries SLSA build provenance (check it:npm audit signatures).The server tools and theaga-proxyemit thecanonical SEP evidence bundle, verifiable offline by the published@attested-intelligence/aga-verifyand the reference verifieraga-receipt-spec/verify/verify-sep.mjs.Since 3.2.0 the verifier is algorithm-agile and ships a post-quantum profile:v1Ed25519-SHA256-JCS(the default the gateway emits) and v2ML-DSA-65+Ed25519-SHA256-JCS(a NIST FIPS-204 ML-DSA-65 + RFC-8032 Ed25519composite, both must verify), selected per-bundle by thealgorithmfield with aVERIFIED / FAILED / UNSUPPORTED_PROFILEtrichotomy. Pre-3.0 releases (a legacy continuity-chain bundle that doesnotverify under the SEP verifier) are deprecated; use^3.0.0. Claim scope and residual attack surface are documented honestly inTHREAT_BOUNDARY.md.

# This package IS the AGA MCP server (TypeScript, runs over stdio). Use it from any MCP client: npx -y @attested-intelligence/aga-mcp-server

A Python companion SDK (aga-governance) is documented in the Python SDK section below.

Verify this yourself (don't take our word)

You do not have to take any of this on faith. The repo ships the reference verifier, the canonical vectors, and sample bundles, so you can check one offline right now, with no network and no callback to us:

git clone https://github.com/attestedintelligence/aga-mcp-server cd aga-mcp-server # A canonical SEP bundle verifies; a one-byte-tampered copy is rejected. node aga-receipt-spec/verify/verify-sep.mjs fixtures/valid_minimal.json # OVERALL: VERIFIED (integrity only; no key pinned) node aga-receipt-spec/verify/verify-sep.mjs fixtures/tampered.json # OVERALL: FAILED

The published@attested-intelligence/aga-verifyCLI renders the identical verdict, andnpm run conformance:cross-stack(first:npm run build && npm --prefix independent-verifier run build) proves six v1 verifier configurations, spanningthree independent toolchains (JavaScript, Go, and Python, including a pure-stdlib, no-third-party-crypto path), agree on all57cross-stack cases;npm run conformance:cross-stack-v2provestwo genuinely independent-language oracles (@noble/JS and CIRCL/Go)agree on the v2 composite corpus. For a full trust-free reproduction (build the package yourself, reproduce the published tarball byte-for-byte, re-run every gate), see theREVIEWER_GUIDE.md(a command-by-command self-service path),REPRODUCIBILITY.md, and the step-by-stepSKEPTICAL_AUDITOR.md. This release carries SLSA build provenance, checkable withnpm audit signatures.

Every tool call an AI agent makes passes through the AGA gateway. Each call is evaluated against policy, and the decision (PERMITTED or DENIED) is recorded as a signed, hash-linked governance receipt. Receipts are collected into evidence bundles that any third party can verify offline using standard cryptography.

Scope:a verified bundle proves theintegrity of the receipts present: each is authentic, correctly ordered, Merkle-included, and (when a key is pinned) provenance-bound. It doesnotprove non-omission (that every action the agent took was logged); completeness is bounded by the tamper-evidence of the interception point, which is outside the bundle. SeeKNOWN_LIMITATIONS.mdfor the full honest boundary, andTHREAT_BOUNDARY.mdfor the per-field detail.

Add to your Claude Desktop MCP config (claude_desktop_config.json):

{ "mcpServers": { "aga": { "command": "npx", "args": ["-y", "@attested-intelligence/aga-mcp-server"] } } }

Claude can then seal artifacts, measure integrity, generate evidence bundles, and verify compliance through natural language.

By default the gateway signs with anephemeralkey that rotates on every restart. That is fine for a first look, but evidence-bundle provenance cannot be pinned across restarts (and the server warns about it on stderr). Set one stable 64-hex Ed25519 seed so provenance stays pinnable:

# generate a seed once (32 random bytes, hex) node -e "console.log(require('node:crypto').randomBytes(32).toString('hex'))"

Provide it viaAGA_GATEWAY_KEY, orAGA_GATEWAY_KEY_FILE(a path to the seed). In Claude Desktop, add anenvblock:

{ "mcpServers": { "aga": { "command": "npx", "args": ["-y", "@attested-intelligence/aga-mcp-server"], "env": { "AGA_GATEWAY_KEY": "<your-64-hex-seed>" } } } }

Keep the seed secret and out of version control; seeDEPLOYMENT.mdfor key handling.

measure_behavioris detective-only by default: it observes tool-usage patterns and records asigned, provabledrift finding, but does not block. Enforcement (drift → quarantine) is opt-in viaenforce=trueand off by default. Hard governance decisions (PERMITTED/DENIED) are made by the portal/PEP, not the behavioral monitor.

A bundle this package emits (via thegenerate_evidence_bundleMCP tool) is acanonical SEP bundle. Verify it offline, with no network and no callback to us:

# Published verifier CLI — ships on npm, nothing to clone. Pin the gateway key (from get_server_info) to prove provenance. npx -y @attested-intelligence/aga-verify evidence-bundle.json --pubkey <gateway-public-key> # Or, from a clone of this repo, the zero-dep reference verifier (Node 18+) renders the identical verdict: node aga-receipt-spec/verify/verify-sep.mjs evidence-bundle.json --pubkey <gateway-public-key>

The published@attested-intelligence/aga-verifyCLI is the shipped path (the older forgeable 1.0.0 is deprecated); the referenceverify-sep.mjsrenders the identical verdict from a repo clone. Without--pubkeyyou get anintegrity-onlyresult (issuerVerified=false); pin the key to also provewhoissued it. SeeTHREAT_BOUNDARY.md§3.7. A hosted browser verifier is linked underLinks.

The reference §6 algorithm is implemented inthree languages: JavaScript (aga-receipt-spec/verify/verify-sep.mjs), Go (verify.go, stdlibcrypto/ed25519), and Python (verify.py, pure-stdlib RFC-8032 Ed25519). A cross-stack harness (npm run conformance:cross-stack; first:npm run build && npm --prefix independent-verifier run build) proves all three, plus the in-server engine andaga-verify, renderidentical verdictson the canonical vectors (valid, adversarial, and every small-order forgery). Thev2 compositeprofile (ML-DSA-65+Ed25519-SHA256-JCS) is held to the same bar by a second harness (npm run conformance:cross-stack-v2): a@noble/JavaScript engine and a CIRCL/Go oracle, two genuinely independent toolchains, render identical verdicts on the pinned v2 corpus, and thereferencev1 verifier (verify-sep.mjs/verify.py/verify.go) returnsUNSUPPORTED_PROFILE(exit 3) on a v2 bundle, signalling "profile not implemented" rather than a misleading "invalid".(The publishedaga-verifyCLI does not implement this profile trichotomy: on a v2 bundle it returns FAILED (exit 1). Use exit 3 as the unsupported-profile signal only with the reference verifiers.)

Check-name mapping across implementations

The JS reference verifier and the Python SDK (aga-governance) decompose the same seven-check verification differently. Overall verdicts and exit codes agree on every conformance-corpus case (re-proven 2026-07-01: 10/10 cells across pristine/tampered bundles with unpinned, correct, and wrong keys); the sub-check that reports a given tamper can differ:

Known decomposition difference: the JS reference recomputes every Merkle leaf from full receipt content, so a receipt-signature tamper also failsmerkle_and_bijection; the Python verifier surfaces the same tamper inreceipt_signatures_valid,chain_integrity_valid, andbundle_consistentwhile itsmerkle_proofs_validcan remain true. Neither is looser: the bundle fails in both stacks, exit 1. One input-handling difference is deliberate: a malformed--pubkeypin is a usage error (exit 2) in the Python SDK, while the JS reference treats a malformed pin as unpinned; the Python behavior is strictly tighter.

AI Agent AGA Gateway Verifier | | | |-- tools/call ----------->| | | [Evaluate Policy] | | [Sign Receipt] | | [Chain to Previous] | |<-- PERMITTED/DENIED -----| | | | | | [Export Bundle] | | |--------- evidence.json ----->| | | [Verify Signatures] | | [Verify Chain + Order] | | [Verify Merkle Tree] | | [Verify Signed Checkpoint] | | [PASS / FAIL]

Run AGA as a transparent proxy between any MCP client and any MCP server. Every tool call gets evaluated against policy and produces a signed receipt.

# Start the proxy (the aga-proxy bin) in front of an upstream MCP server. # stdio upstream = the hardened default (the upstream is a child process, not network-reachable). npx -p @attested-intelligence/aga-mcp-server aga-proxy start \ --upstream "npx -y @modelcontextprotocol/server-filesystem /tmp/test" --profile standard

Exporting the evidence bundle from a running proxy

The proxy records receipts in its own process and keeps the SEP ledgerin memory. To make that live ledger reachable from a separate shell,aga-proxy startopens aloopback-only control channel— an HTTP listener bound to127.0.0.1(never a routable interface), on its own port (default18801, override with--control-port), distinct from the agent-facing proxy port (18800). It exposes only read routes (/export,/status,/receipts); nothing on it mutates policy or state, and it is unreachable off-host by construction (the loopback bind is the guarantee). The proxy writes the chosen control port to~/.aga-proxy/control.jsonalongsideproxy.pid.

Aseparateaga-proxy exportinvocation reads that file and fetches the same signed bundle the running proxy would emit:

# Terminal A — start the proxy in front of an upstream MCP server npx -p @attested-intelligence/aga-mcp-server aga-proxy start \ --upstream "npx -y @modelcontextprotocol/server-filesystem /tmp/test" --profile standard # Terminal B — export the live ledger from a different shell, then verify it offline npx -p @attested-intelligence/aga-mcp-server aga-proxy export -o evidence.json npx -y @attested-intelligence/aga-verify evidence.json --pubkey <gateway-public-key>

If no proxy is running,aga-proxy exportprintsno running proxy found; start it first, or export from within the sessionand exits non-zero — it never emits an empty or placeholder bundle. Within the MCPserversession you can also call thegenerate_evidence_bundletool and save the returned JSON.

In-memory ledger:the exported bundle is the durable cryptographic record, but the live in-process chain doesnotsurvive a proxy restart. This flow makes theliveledger reachable from another process; it doesnotadd cross-restart persistence, which needs the persistent (SQLite) backend and remains roadmap (seeKNOWN_LIMITATIONS.md).

The proxy interceptstools/callrequests, evaluates them against a sealed policy, and generates a signed SEP receipt foreverydecision. Permitted calls are forwarded to the downstream server; denied calls return an MCP error and never reach it. Every decision is hash-linked and checkpoint-bound into a tamper-evident bundle. (Methods other thantools/callaren't policy-evaluated, but non-benign ones are recorded as signedpassthroughreceipts for auditability, and an optional denylist can reject them; seeTHREAT_BOUNDARY.md§3.2.)

- permissive- log everything, block nothing (default)
- standard- rate limits + blocks destructive operations
- restrictive- explicit tool allowlist, all unknown tools denied

Verification(canonical SEP 3.0; normative §6 algorithm inaga-receipt-spec/verify/verify-sep.mjs)

- Structural floor- Bundle declares Ed25519-SHA256-JCS, public key well-formed (all small-order encodings + non-canonicaly ≥ prejected),receipts.length > 0, proof count = receipt count - Receipt Signatures- Ed25519 over JCS-profile canonical JSON, sorted-key (signature field excluded) - Chain + ordering- Each receipt'sprevious_receipt_hash= leaf of the preceding receipt; non-decreasing timestamps - Merkle Proofs- Recompute every leaf from receipt content, walk siblings/directions to one root, leaf indices form the complete0..N-1bijection - Signed checkpoint- Verify the gateway-signed checkpoint bindingmerkle_root,leaf_count, and chain head (this makes the no-prefix construction truncation-safe) - Provenance(when a key is pinned)-public_key == expected key; otherwise integrity-only is reported

A demo gateway is deployed on Cloudflare Workers (aseparate deploymentthat may track its own version; treat it as a convenience mirror, and always verify what it returns offline against a pinned key, not as the canonical artifact):

# Check status curl https://aga-mcp-gateway.attested-intelligence.workers.dev/health # Export evidence bundle curl https://aga-mcp-gateway.attested-intelligence.workers.dev/bundle -o evidence-bundle.json
from aga import AgentSession with AgentSession(gateway_id="my-gateway") as session: session.record_tool_call( tool_name="search_web", decision="PERMITTED", reason="tool in allowlist", request_id="req-1", ) bundle = session.export_bundle() result = session.verify() assert result["overall_valid"]

Automated tests across TypeScript and Python, plus a conformance corpus:

- TypeScript MCP server:384 automated tests (vitest), including provable-denial and behavioral-monitor regressions
- SEP conformance corpus:npm run test:conformance(valid → VERIFIED, negatives → FAILED)
- Python companion SDK:the separately-publishedaga-governancePyPI package (install + smoke-checked here; its full pytest suite runs from the source tree)

npm test # TypeScript tests (vitest) npm run test:conformance # SEP conformance corpus pip install aga-governance && python -c "import aga; print(aga.__version__)" # Python SDK smoke check

Receipt-format determinism is reproducible here:npm testruns the cross-language vectors, andnpm run conformance:cross-stack(first:npm run build && npm --prefix independent-verifier run build) shows the six v1 verifier configurations (across three independent toolchains: JS, Go, Python) agree on the canonical 57-case corpus, whilenpm run conformance:cross-stack-v2shows the two independent-language v2 oracles agree on the composite corpus.

src/ sep/ # Canonical SEP evidence engine: single source of truth (canon, merkle, receipt, checkpoint, bundle, verify) core/ # Governance primitives (portal, artifact, attestation, disclosure, delegation, behavioral) + internal continuity-chain profile crypto/ # Internal continuity-chain crypto: Ed25519 (node:crypto), SHA-256/blake2b, salt proxy/ # MCP governance proxy (transparent interception + policy enforcement; emits SEP bundles) middleware/ # Governance PEP wrapper (records a signed PERMITTED/DENIED receipt per governed call) independent-verifier/ # @attested-intelligence/aga-verify: standalone SEP verifier, zero AGA imports scenarios/ # Demo scenarios (SCADA, autonomous vehicle, AI agent) that emit SEP bundles tests/ # TypeScript test suite (384 automated tests)

- Website
-
Technology
-
Live Verifier
-
Trust and Scope
-
Diligence Materials
-
MCP Server (npm)
-
Python SDK (PyPI)

SeeSECURITY.mdfor vulnerability reporting.

SeeCONTRIBUTING.mdfor development setup and guidelines.

KHEPRA MCP Server smithery badge MCP Registry License Container PQC Sovereign compliance engine with 36,195 STIG/CCI/NIST/CMMC mappings. Air-gappable. Zero token costs. Run ert_scan → get a Godfather Report with dollar-denominated business impact. The only MCP compliance server that runs on your metal — with the World's First DoD PQC STIG built in. PQC-01-STIG-V1R1 — Full Whitepaper → 17 controls covering CNSA 2.0, FIPS 203/204/205, and the NSA's May 2026 MCP security advisory. The world's first DoD-style Post-Quantum Cryptography STIG, including the first PQC controls for agentic AI and MCP deployments.

AI Agent Supply Chain Security - Intercepts and validates every package installation, git clone, and script download triggered by AI coding agents before it executes.

Structured AI incident reporting for EU AI Act Article 62 — generates mandatory incident reports, severity classification, root cause analysis, and regulator-ready submissions for serious AI incidents.

Enforces organisational AI usage policies at the agent layer — blocks prohibited model calls, enforces data residency rules, logs policy violations, and ensures AI governance policies are machine-executable.

AI agent governance with quantum-safe audit trails and three-tier policy enforcement

Guardrails service for AI agents. Default-deny tool call evaluation with LLM safety analysis, priority-ordered decision matrix, and human-in-the-loop escalations. Session recording, behavioral analysis, MCP proxy, secret redaction, and real-time audit.

ISO 42001 AI management system compliance — gap analysis, control mapping, certification readiness by MEOK AI Labs

Security scanner for MCP servers — detects prompt injection, credential leaks, and tool poisoning with 52 CVSS-scored rules

Multi-framework AI governance reports across EU AI Act, NIST AI RMF, ISO 42001, and DORA with automated gap analysis

NIST AI Risk Management Framework compliance — risk profiling, govern/map/measure/manage functions by MEOK AI Labs

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.