The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Aletheia Runtime Safety & Scope Creep Filter listing page.
Sub-millisecond runtime filter that blocks scope-creep and prompt-injection tool calls before an AI agent can run them.

Aletheia MCP intercepts tool calls from Claude Code, Claude Desktop, and any other MCP-compatible agent before they execute and blocks the destructive ones, with sub-millisecond (~25 µs) overhead and no LLM in the hot path.
It scores each call against the Aletheia research paper's taxonomy of nine behavioral signatures: recurring LLM failure patterns, each with an ID, derived from the interfaces through which a model touches its environment (output/reality, input/trust, task/scope, and so on). This server enforces two of them:
The paper validates those nine signatures against 2,571 entries across three independent corpora: the AI Incident Database (AIID + hand-curated supplement, n=1,134), the AVID AI Vulnerability Database (n=767), and the MIT AI Risk Repository (n=670). The per-model detection-rate figures from that research are reported in the paper with their methodology; treat them as directional context for why these signatures matter, not as an independently-audited benchmark of this codebase.
Aletheia MCP is a deterministic, pattern-based lexical and structural filter, iteratively hardened through many rounds of adversarial red-teaming against the shell, SQL, filesystem, and network surfaces it inspects. Each round of testing has turned up real gaps, and each has been fixed and re-verified. That process is ongoing, not finished, and it never fully finishes: this is honest heuristic pattern-matching over Bash and SQL, not a formal parser or a proof of completeness.
[!IMPORTANT] What this is, and isn't:
- Aletheia is a fast, first-line pre-execution filter: single-digit-to-low-tens-of-microseconds overhead, deterministic, no LLM in the hot path. It catches a wide and continually growing set of known destructive, exfiltration, SSRF, and privilege-escalation patterns before they execute.
- Aletheia is not a sandbox, not a formal guarantee, and not a substitute for least-privilege credentials, non-root system users, scoped database grants, or containerized/VM-level isolation (Docker, gVisor, Firecracker). Because it works by recognizing known-dangerous patterns in shell and SQL text rather than by parsing and fully understanding either language, a sufficiently novel or obfuscated construct can, in principle, always be found that the current pattern set doesn't yet cover. This is an inherent property of pattern-based filtering against a Turing-complete shell, not a bug that a future patch will finally close for good.
- Aletheia does not perform DNS resolution, so a domain name an attacker controls and points at a private IP or cloud metadata endpoint is outside what a string-based filter can ever detect at this layer; that requires DNS-aware egress control (see SECURITY.md).
- The right way to run this: treat Aletheia as one layer that removes the easy, common failure modes cheaply, combined with OS/network-level sandboxing as the actual security boundary, not instead of it.
When autonomous agents are granted tool execution access (Bash, SQL, filesystem mutation, API calls), the primary failure mode is Scope Creep Beyond Mandate:
git reset --hard or rm -rf * to resolve a conflict.~/.ssh/id_rsa, .env, or AWS credentials to resolve connection errors.DELETE FROM accounts; or UPDATE users SET role='admin'; without WHERE predicates (or with tautological WHERE 1=1).python3 -c "os.system('...')" or node -e "fs.rmSync('/')".169.254.169.254 (AWS metadata) or internal RFC1918 subnets.Existing defenses rely on LLM-as-a-judge evaluators that add 1,500–3,000 ms to every tool call. Aletheia MCP provides deterministic, multi-stage lexical and structural filtering in single-digit microseconds.
The list below reflects what the pattern set currently catches, built up through iterative adversarial testing rather than designed upfront as a complete taxonomy. See Known Limitations above for what it does not (yet, or ever, in the DNS case) cover.
operatorSecret.COPY ... PROGRAM, pg_read_file(), lo_import(); MySQL LOAD DATA INFILE, INTO OUTFILE; SQLite ATTACH DATABASE; and SQL Server xp_cmdshell.169.254.169.254/latest), enforcing strict fail-closed rejection on invalid URLs and direct cloud metadata access under offline mandates.curl / wget without URL schemes, and blocks socat raw socket exfiltration channels..env.* variants (.env.secrets, .env.staging, .env.test) and sensitive config roots (~/.kube/, ~/.docker/, ~/.gnupg/, .git-credentials)./dev/tcp/HOST/PORT and /dev/udp/HOST/PORT redirections, halting cloud metadata SSRF and covert exfiltration channels directly on shell inputs.WITH ... DELETE) and PL/pgSQL anonymous blocks (DO $$ ... $$).LD_PRELOAD, DYLD_INSERT_LIBRARIES, and runtime environment variable hijacking.r'm' -rf /, r\m -rf /).X=rm; $X -rf /) and default parameter expansions (${X:-rm} -rf /).$IFS$9 word-splitting.DROP/**/TABLE, DR/**/OP, and # MySQL comment).'r'+'m'), inspects dynamic imports (import("node:fs")), and parses code passed via -c/-e/-r flags across python, node, ruby, perl, php, and sh.bytes.fromhex(...)) and base64-encoded command payloads.\u200B, \u200C, \uFEFF) and confusable fullwidth/math-bold jailbreaks in prompt injections (S2b).[::ffff:a9fe:a9fe]) to canonical dotted-decimal bytes (169.254.169.254).%2e%2e%2f.env and ..%2f.ssh%2fid_rsa.chmod u+s, chmod 4755, and privilege tampering.WHERE 1=1, WHERE true, and tautologies as unbounded mutations.aletheia_set_mandate, aletheia_intercept, aletheia_safe_bash, aletheia_safe_sql).tools/call and JSON-RPC 2.0 batch arrays with strict fail-closed boundaries.aletheia://telemetry/summary.Measured on 10,000 consecutive multi-domain evaluations (Bash de-obfuscation, SQL pattern validation, path verification, SSRF check, prompt injection). Numbers below are from a representative local run; p50 is stable across runs, p99 varies with system load (observed range ~24–70 µs) since it's sensitive to GC pauses at microsecond scale; both are still comfortably within the sub-millisecond target:
| Metric | Measured Value | Target |
|---|---|---|
| p50 (Median) | ~0.0085 ms (8.5 µs) | < 0.500 ms |
| p95 Latency | ~0.0180 ms (18 µs) | < 0.800 ms |
| p99 Latency | ~0.024–0.070 ms (24–70 µs) | < 1.000 ms |
| Throughput | 100,000+ evals / second | > 10,000 / s |
| Hot-Path External APIs | 0 (Deterministic local engine) | 0 |
Run locally via npm run benchmark. Results will vary by machine; treat the specific microsecond figures as illustrative of "comfortably sub-millisecond," not as a precise SLA.
[!TIP] By default, Aletheia starts fully locked down (read-only, no network, no loopback) and stays that way, on purpose. If your agent needs to write files or make network calls, grant that up front with
--allow-write/--allow-network/--allow-loopback(and scope writes to a directory with--allowed-paths), as shown below. These flags set the initial mandate at server startup and are not gated byoperatorSecret; that gate only applies to changing an already-running session's mandate mid-flight (e.g. an agent callingaletheia_set_mandateto loosen its own permissions, which is deliberately blocked). Most users want the startup flags below, notoperatorSecret.
Add to your claude_desktop_config.json:
Wrap existing downstream MCP servers with Aletheia safety filtering:
| Tool | Mode | Annotation | Description |
|---|---|---|---|
aletheia_set_mandate | State | readOnlyHint: false | Establish or tighten operational safety envelope. Loosening requires operatorSecret. |
aletheia_get_mandate | Observability | readOnlyHint: true | Retrieve active mandate, allowed paths, and risk tolerance. |
aletheia_intercept | Gatekeeper | readOnlyHint: true | Pre-flight check for candidate tool calls. Returns ALLOW or BLOCK with violation details. |
aletheia_safe_bash | Execution | readOnlyHint: false | Verified shell executor. Blocks rm -rf, fork bombs, exfiltration before running. |
aletheia_safe_sql | Audit | readOnlyHint: true | Validates SQL against DROP, TRUNCATE, and unbounded DELETE/UPDATE (including WHERE 1=1). |
aletheia_get_telemetry | Observability | readOnlyHint: true | Emits evaluation counts, block rate %, and microsecond latency percentiles. |
resources/read)Clients can inspect server state on-demand via standard MCP resources/read:
aletheia://telemetry/summary: Real-time evaluation counters, block rate %, and microsecond latency distribution.aletheia://telemetry/audit-log: Rolling log of the last 50 tool clearance requests with inputs, verdicts, violation signatures, and timestamps.aletheia://mandate/current: Active session mandate parameters, allowed tool lists, path boundaries, and permission toggles.aletheia://signatures/s3: Specification, risk taxonomy, and benchmark failure rate data for Signature S3 (Scope Creep).prompts/get)aletheia_mandate_enforcer: System prompt directive that establishes operational safety boundaries and instructs the agent to route risky actions through Aletheia before execution. Accepts task_description (required), workspace_root (optional), and allow_write (optional).Aletheia MCP is developed by Vikas Shivpuriya as part of the broader Aletheia AI Safety Research Core. The underlying behavioral failure signatures are motivated by incidents cataloged in the AI Incident Database (AIID), the AVID AI Vulnerability Database, and the MIT AI Risk Repository. The per-model detection rates referenced for frontier systems (Claude Sonnet 4.6, GPT-4o, Gemini 2.5 Flash) come from that paper's evaluation harness; treat them as directional context for why Signature S3 matters rather than as a verifiable benchmark of this codebase.
What is independently verifiable in this repository: the test suite (npm test), the latency benchmark (npm run benchmark), and the commit history documenting each round of adversarial testing and the fixes it produced.