
Company News
Socket Joins New OpenJS Program to Fund Node.js Security Work
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.
aletheia-mcp
Advanced tools
Fast deterministic MCP pre-filter that blocks known scope-creep (S3) and prompt-injection (S2b) tool-call patterns before an agent runs them. ~25 microsecond overhead, no LLM in the hot path; a first-line pre-filter, not a sandbox.
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's motivated by 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 targets 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.
There's no single trick — it's the absence of the things that would make this slow, plus a few deliberate implementation choices:
DESTRUCTIVE_SIGNATURES, SENSITIVE_PATH_PATTERNS, OBFUSCATION_PATTERNS, etc.) is a RegExp object constructed at server startup and reused for the life of the process — V8 compiles a regex's internal representation once, so there's no recompilation cost per request.The honest caveat if the exact number gets pushed on: the ~25µs figure is the cost of the in-process evaluation function itself, measured with a high-resolution monotonic clock directly around that call. It does not include JSON-RPC serialization or stdio pipe I/O in a real MCP session, which adds some overhead on top. The claim that holds up is "no LLM in the hot path, comfortably sub-millisecond end to end" — not "exactly 25 microseconds no matter what's measuring it."
Beyond the unit test suite, these are real, reproducible tests against actual spawned processes and a real downstream MCP server (@modelcontextprotocol/server-filesystem), not synthetic in-process loops. Run them yourself via npm run test:scale:concurrent and npm run test:scale:isolation (source: test/scale-*.mjs).
| Test | What it checks | Result |
|---|---|---|
| Sustained load (3M evaluations, single instance) | Memory growth / throughput degradation over an extended run, with periodic mandate changes and telemetry reads mixed in | Heap flat at ~8.3MB after an initial ~500K-eval warmup; ~154,000 evals/sec sustained with zero degradation trend across the full run |
| Concurrent multi-instance (30 simulated customers, real spawned processes) | Correctness and isolation when many independent Aletheia+downstream-server pairs run at once | 4,800 total operations, 0 timeouts, 0 correctness failures — every one of 1,200 concurrent adversarial path-traversal attempts was blocked, every benign write/read-back matched correctly with no cross-contamination |
| Cross-customer isolation (targeted) | Whether Aletheia's own --allowed-paths boundary — not the wrapped server's — actually prevents one instance from reading another's data | Customer A blocked from reading Customer B's ordinary (non-"sensitive") file, even though the downstream server was deliberately given access to both directories; zero content leakage |
| Realistic false-positive sweep (114 commands: git, npm/yarn/pnpm, python/pip/poetry, docker/kubectl, make/cargo/maven/gradle, file ops, curl to real APIs, common SQL) | Whether ordinary developer workflows get incorrectly blocked | 0 false positives (0.00%) under the recommended --allow-write --allow-network config |
| Downstream crash handling | Behavior when the wrapped server crashes unexpectedly mid-session | Detected in ~4ms, exit code propagated correctly, clean shutdown with no hang or orphaned process (Aletheia does not auto-restart a crashed downstream — it exits alongside it, same as any stdio MCP server pair) |
| Node version floor | Whether the engines: >=18.0.0 claim is real | Full test suite (155/155) and a real proxy session against server-filesystem both verified passing on Node 18.20.8, not just the development machine's newer version |
None of this substitutes for real, unpredictable usage over time — it rules out the specific failure modes (wrong Node version, memory leak, high false-positive rate, cross-instance interference) that would make early real usage go badly, rather than proving the tool is bug-free.
[!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.
# Read-only (safe default; can inspect but not modify anything):
claude mcp add aletheia -- npx -y aletheia-mcp
# Practical default for a coding agent that needs to edit files in your project:
claude mcp add aletheia -- npx -y aletheia-mcp --allow-write --allowed-paths /path/to/your/project
Add to your claude_desktop_config.json:
{
"mcpServers": {
"aletheia": {
"command": "npx",
"args": ["-y", "aletheia-mcp", "--allow-write", "--allowed-paths", "/path/to/your/project"]
}
}
}
Wrap existing downstream MCP servers with Aletheia safety filtering:
{
"mcpServers": {
"secure-filesystem": {
"command": "npx",
"args": [
"-y",
"aletheia-mcp",
"--allow-write",
"--proxy",
"npx",
"-y",
"@modelcontextprotocol/server-filesystem",
"/path/to/allowed/dir"
]
}
}
}
| 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). ┌───────────────────────────────────────────────┐
│ Claude / Agent Host Runtime │
└───────┬───────────────────────────────┬───────┘
│ │
Mode 1: Guard Tools Mode 2: Transparent Proxy
(aletheia_intercept, (Intercepts tools/call
aletheia_safe_bash) to downstream MCPs)
│ │
▼ ▼
┌───────────────────────────────────────────────────────────────┐
│ Aletheia MCP Server │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ S3 Scope Creep Engine (<10µs) │ │
│ │ ├─ Multi-stage Token Unquoting & De-obfuscation │ │
│ │ ├─ Variable Indirection Resolver │ │
│ │ ├─ Positional IFS & Brace Expansion Normalizer │ │
│ │ ├─ Dual-Representation SQL Comment Analyzer │ │
│ │ ├─ Interpreter Escape Filter (python -c, node -e) │ │
│ │ ├─ Destructive Filter (rm -rf, fork bombs, find -del) │ │
│ │ ├─ SetUID / Privilege Escalation Guard │ │
│ │ ├─ Credential & Sensitive File Access Guard │ │
│ │ ├─ SSRF & Cloud Metadata Validator │ │
│ │ ├─ SQL DDL & Tautological Predicate Guard (WHERE 1=1) │ │
│ │ ├─ Monotonic Mandate Escalation Guard (operatorSecret) │ │
│ │ └─ S2b Adversarial Prompt Injection Filter │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Telemetry & Audit Stream (aletheia://telemetry/summary) │ │
│ └─────────────────────────────────────────────────────────┘ │
└───────────────────────────────┬───────────────────────────────┘
│
[ALLOW] │ [BLOCK]
┌───────────────────────┴───────────────────────┐
▼ ▼
Execute Tool Safely Emit Structured Policy Breach
(Explains boundary violation)
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. Signature S2b specifically is not yet part of that empirical evaluation — the paper defers it as future work, so this server's S2b filter should be read as an independent, practical heuristic motivated by the taxonomy, not as an implementation validated by the paper's own findings.
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.
FAQs
Fast deterministic MCP pre-filter that blocks known scope-creep (S3) and prompt-injection (S2b) tool-call patterns before an agent runs them. ~25 microsecond overhead, no LLM in the hot path; a first-line pre-filter, not a sandbox.
The npm package aletheia-mcp receives a total of 43 weekly downloads. As such, aletheia-mcp popularity was classified as not popular.
We found that aletheia-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Company News
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.