AI agent & MCP security
The security scanner for AI agents and MCP servers.
Attestral reads your MCP configs, system prompts, and tool descriptions, builds one system model, and reviews the agentic surfaces most scanners never look at. It models the cloud and Kubernetes your agent runs on too, so it can see the trust boundary between them. Findings map to NIST, ASVS, SOC 2, CIS, and OWASP Agentic, and land in a tamper-evident evidence chain.
Scan the MCP servers you've already installed.
No account, no API key, fully offline. It reads the MCP configs your agents already use (Claude Desktop, Cursor, .mcp.json) and reviews every server it finds.
[CRITICAL] ATL-202 Tool fleet forms an exfiltration chain (lethal trifecta) (model)
[CRITICAL] ATL-108 Agent tool calls auto-approved with no human checkpoint (mcp_server.shell)
[CRITICAL] ATL-103 Shell-capable MCP server configured (mcp_server.shell)
[HIGH ] ATL-207 Untrusted input can reach a sensitive action (model)
[HIGH ] ATL-115 Remote server holds a downstream credential (mcp_server.jira)
[HIGH ] ATL-105 MCP server auto-installs packages at launch (mcp_server.web)
[HIGH ] ATL-ML-001 Prompt-injection text hidden in a tool description (mcp_server.web)
[MEDIUM ] ATL-104 Secrets passed to MCP server via environment (mcp_server.jira)
… and 8 more
6 components · 16 findings · 4 critical, 8 high, 4 medium
A design review of the vulnerable-agent example in the repo: two small config files, sixteen design findings, zero cloud credentials required. Three are fleet-level, including a lethal trifecta that only exists once you model all the servers together, and two are the prompt-injection payloads the built-in classifier catches by default. Point it at your own machine with attestral scan --local, or add --ml for the model-grade classifier tier.
prev 000000…0000
prev 9f41c2…a07e
prev b8d005…44c1
entries 14 · verified
Each entry commits to the one before it. If anyone edits a past finding, the head stops matching, and attestral verify will catch it offline. No server involved.
The moat
It builds a model of your whole fleet, then reasons across it.
Not a config-by-config scan. Attestral ingests your MCP servers, prompts, cloud, and Kubernetes into one graph of components, edges, and trust boundaries. That is how it sees the path a single injected sentence can take: from an untrusted input, through a shell, across the boundary into your cloud. Hover a node to see its reach, or trace the attack path.
Adversarial validation · attestral validate
It no longer just flags the path. It proves it holds.
A finding is an opinion. attestral validate takes the attack path it built from your system model and walks it over the model's own edges, proving whether it actually holds: entry, pivot, impact. The proof lands in the tamper-evident evidence chain, it scores the risk with an OWASP AIVSS agentic score (AARS), and it even proves the fix - the one change that closes the path, verified by re-synthesis. Watch one prove itself below, then open the fully interactive walker.
ATL-RT-INTERNAL · a prompt injection reaches exfiltration
TRAVERSABLEchained · verify offline · OWASP AIVSS AARS 9.3
Don't take the demo's word for it. Paste your own config.
Drop in an .mcp.json or claude_desktop_config.json and seventeen of the agentic checks from the rule pack, the same typed matchers the engine runs, review it right here. Everything happens in this tab: the page makes no network request with what you paste. The CLI goes further, with the cloud packs, attack paths, prompt surfaces, and the evidence chain.
The example is examples/vulnerable-agent/.mcp.json from the repo, the same file the demo above scans.
waiting for a config. Load the example, or paste the mcpServers block your agent already uses.
Why not just Checkov or Trivy?
Keep using them. They are excellent at cloud infrastructure, and attestral is not out to replace them; it scans the same Terraform and Kubernetes with a solid CIS-grounded pack of its own. But those tools were built before agents had tools. They do not parse an .mcp.json, they cannot tell that a tool description is quietly asking the model to read your SSH key, and they have no concept of the trust boundary between an agent and the shell it can call. Attestral does one thing they structurally can't: it builds a system model of your whole agent fleet, so it catches the toxic flows that only exist across servers, where private data meets an exit and one injected sentence walks out with your secrets.
| Capability | Checkov · Trivy · tfsec | Attestral |
|---|---|---|
| Cloud IaC misconfiguration | Mature and deep. Their home turf. | ✓A CIS-grounded pack across AWS, Azure, GCP, and Kubernetes. |
| MCP server configs (shell access, transport, secrets) | Not modeled. | ✓First-class components in the system model. |
| System prompts and tool descriptions | Not parsed. | ✓Reviewed, and scored for prompt injection. |
| Agent-to-tool trust boundaries | No concept of one. | ✓The center of the graph attestral builds. |
| Prompt injection in agentic text | Out of scope. | ✓Local ML classifier, on by default, fully offline. |
| Toxic flows across the tool fleet (lethal trifecta) | No fleet model. | ✓Named source and sink servers, mapped over the graph. |
| Memory poisoning & risky agent skills | Not modeled. | ✓World-writable CLAUDE.md, vector stores, SKILL.md grants. |
| Runtime drift & tool rug-pulls | Static only. | ✓Attested design compiles to a policy; drift is caught. |
| Known MCP CVEs & hook config-injection | Not tracked. | ✓Vulnerable package versions and malicious .claude/settings.json hooks (CVE-2025-6514, CVE-2025-59536). |
| Tamper-evident audit evidence | Report only. | ✓SHA-256 evidence chain you verify offline. |
The honest version: run Checkov and Trivy for cloud depth, and run attestral for everything that lives above the infrastructure, the agent, its tools, and the prompts that drive them. It happens to cover the cloud underneath too.
183 checks, and the balance is the strategy.
We do not chase rule count. Every check earns its place with a real control and a fixture. The agentic and cross-boundary rules are the moat, the surfaces nobody else models; the cloud packs are deliberately good enough that you need no second scanner, never an arms race.
36 agentic and cross-boundary checks that are genuinely hard to copy, over 147 cloud checks across AWS, Azure, GCP, and Kubernetes, mapped to 21 framework families. Depth where it is the moat, parity where it just has to be solid.
The finding that lives in no single file.
Every server below is individually defensible, and a config-by-config scanner would wave them all through. The risk is compositional: the moment one agent session can read private data and reach an exit, a single injected sentence anywhere in its inputs becomes an exfiltration. Toggle the fleet and watch the pack's combination rules evaluate it live, using the same capability groups attestral scan applies to your real configs.
The exfiltration chain
Command and control
Fleet-level findings only: the per-server findings these toggles would also raise (a shell server is ATL-103 all by itself) are left out here to keep the composition visible. On a real scan the full attack path is also synthesized end to end, entry to pivot to impact.
Design review is where security is cheapest. It is also where the tooling is oldest.
The enterprise threat modeling market just consolidated into a single private-equity-owned vendor, priced for the Fortune 500 and built on decade-old architecture. Everyone else reviews designs in spreadsheets and wiki templates: slow, inconsistent, and with nothing to show an auditor. And the fastest-growing attack surface, AI agents and their tools, is the part legacy platforms understand least.
A security review you can't prove happened is an opinion, not a control.
For the teams who review before they ship.
Banks, insurers, and compliance teams under audit review architecture on purpose, because for them a flaw found after an agent reaches production is not a code fix. It is change management, re-certification, and an incident write-up. The same flaw caught in the design review is a one-line config change. Attestral is built for that review: it reads the agent design the way a security architect would, and it produces something an auditor can actually verify.
Named, not hypothetical
The risks are cataloged: prompt injection and excessive agency in the OWASP Agentic and LLM top-tens, adversary tactics in MITRE ATLAS, the lethal trifecta across a tool fleet, live MCP CVEs like CVE-2025-6514. Attestral checks for the specific ones your design actually exposes.
What an auditor accepts
SOC 2 and NIST 800-53 want proof a control operated, not a claim that it exists. Findings carry those references and OWASP Agentic, and the hash-chained review is the artifact you hand over. The EU AI Act and model-risk expectations both push this diligence before a system ships, not after.
And prove it stays true
A design review is only worth its paper if production still matches it. The reviewed model compiles to a runtime policy bound to the review's chain head, and attestral drift flags anything the review never saw. One attested artifact, checked at design time and verified in production.
Three layers. Nothing hidden.
Regulated buyers can't accept "the AI said so." Attestral separates what is deterministic from what is model-reasoned, and labels every finding with its origin.
Typed rules over a unified model
Terraform, Kubernetes manifests, MCP configs, agent instructions, and system prompts become one graph of components, edges, and trust boundaries. A CIS-grounded pack of typed YAML rules fires against that graph, spanning AWS, Azure, GCP, Kubernetes, and the agentic surfaces nobody else models. There is no eval anywhere in the path, and an unknown matcher simply never matches.
Local ML + LLM, clearly tagged
An optional local DeBERTa classifier scores agentic text surfaces (MCP tool descriptions, system prompts) for prompt injection, offline. A frontier model then reviews the same graph for design-level gaps rules can't express: trust-boundary violations, tool-permission escalation, handoff confusion. Both optional, both always labeled by origin.
A chain you can hand to an auditor
Findings, mitigations, and sign-offs get committed to a SHA-256 hash chain. Every finding carries its NIST 800-53, ASVS, SOC 2, and OWASP Agentic references. Export the review once and anyone can verify it offline, years later. Emit it as SARIF and the same findings land in your GitHub Security tab and right on the pull request.
[CRITICAL] ATL-003 IAM policy grants wildcard actions (aws_iam_policy.admin)
[CRITICAL] ATL-103 Shell-capable MCP server configured (mcp_server.shell)
[HIGH ] ATL-102 Filesystem MCP server rooted at a broad path (mcp_server.filesystem)
7 components · 10 findings · chain head c31f8e…9bd4
$ attestral verify review.json
chain VALID
Layer 2 · reasoning
The risk that lives in the words, not a flag.
A shell flag is a boolean any matcher can catch. A tool description that quietly tells the model to read your SSH key and post it out is language, and no rule sees it. Attestral scores agentic text surfaces for prompt injection with a local classifier: a zero-dependency heuristic by default, an ONNX or DeBERTa tier once you install it, always offline. Load a description or paste your own, and watch it score in real time.
A browser illustration of the heuristic signals. The shipped classifier is a fine-tuned DeBERTa model, see the ML layer explainer. Language risk is scored, never hard-blocked: it becomes a finding tagged origin: ml, so a human still decides.
One command, the whole loop.
From raw config to a runtime policy that catches drift. Scroll through the pipeline: every stage is a real step in a single attestral run, and nothing is hidden between them.
Built for the review board, not just the terminal.
CI on every pull request
Run the scan in CI and findings post to the GitHub Security tab and inline on the pull request as SARIF, so new risk is caught before merge instead of at the annual review.
MCP and agent coverage first
Tool servers, capability scopes, and multi-agent handoffs are first-class parts of the model, not an afterthought bolted onto a diagramming canvas.
Model import
Bring your existing threat models with you. Import from legacy platform exports and keep your review history, chain-sealed from day one. On the roadmap.
Tamper with the record. Watch it break.
Every finding commits to a SHA-256 chain: entry N hashes its own canonical JSON together with the hash of entry N-1, from a zero genesis. The head is the integrity commitment for the run. This recomputes live in your browser, the same construction attestral verify uses. Edit one entry and every hash after it stops matching.
The review is the policy. The policy is the proof.
This is the depth that makes a review audit-grade, not just a linter. Scanners stop at findings. Gateways enforce policies nobody reviewed. Attestral makes them the same artifact. The reviewed system model compiles into an mcp-guard runtime policy stamped with the review's chain head, and anything the review never saw counts as drift.
Attest
Terraform, Kubernetes, and MCP configs become one system model, reviewed against typed rules and (optionally) a local ML classifier and LLM reasoning. Findings are hash-chained.
Enforce
The reviewed model compiles to a default-deny policy. Denied capabilities carry the rule id that denied them, filesystem roots narrow to what was reviewed, and the policy header binds to the review's chain head.
Prove
Runtime telemetry gets diffed against the compiled policy. An unattested server, a denied invocation, an out-of-scope path: each one is a drift finding. Deployment and review can no longer quietly diverge.
wrote policy.yaml · default deny · 1 allowed, 3 denied
[DENY ] shell (denied by attested design review: ATL-103)
$ attestral drift policy.yaml events.jsonl --fail-on-drift
[CRITICAL] DRF-001 Unattested server observed at runtime (mcp_server.jira-sync)
[HIGH ] DRF-003 Filesystem access outside attested roots (mcp_server.docs)
DRIFT: deployment no longer matches the attested design
Then the policy watches. Drift gets caught.
The attested design compiled to a default-deny policy. Now runtime telemetry is diffed against it. Watch the events stream in: what the review saw passes, and what it never saw is drift, each tagged with the rule that caught it. This is the loop no scanner and no gateway closes on its own.
Every finding cites a real control.
A finding is not an opinion with a severity attached. Each one maps to a named framework an auditor already recognizes, so the review is evidence, not assertion. Attestral spans the agentic frameworks nobody else covers and the cloud controls everybody expects.
OWASP LLM & Agentic Top 10
Prompt injection, excessive agency, and the tool-fleet risks specific to agents.
MITRE ATLAS
Adversarial ML tactics and techniques, mapped to the surfaces Attestral reviews.
NIST 800-53
Access control, system integrity, and the control families audits are built on.
CIS Benchmarks
The essential AWS, Azure, GCP, and Kubernetes checks, each grounded in a real control.
SOC 2
Proof a control operated, not a claim it exists. The evidence chain is the artifact.
OWASP ASVS
Application security verification requirements, cited per finding where they apply.
Attestral Labs
Security built for the agentic era, not bolted onto it.
Agents got tools before anyone secured them. The industry's answer was to bolt an agent tab onto scanners built for a pre-agent world. Attestral is built the other way around: a system model of the agent, its tools, and the cloud they can reach comes first, and everything else follows from that graph.
Agentic security is our identity
MCP, prompt injection, tool poisoning, excessive agency, the OWASP Agentic and MITRE ATLAS surfaces. Depth here is the moat, and it is where we invest first.
Architecture, not a linter
One system model lets us reason about agent-to-cloud reachability, secrets crossing a boundary, proven attack paths, and compile-to-policy drift. You cannot match that by adding rules.
Your cloud, covered too
Around 150 high-signal CIS checks across AWS, Azure, GCP, and Kubernetes. Good enough that most teams need no second scanner, never an arms race.
Open source, forever. The core is Apache 2.0 and always will be. The vision is a single artifact that carries a design from review, to proof, to runtime policy, so that "is this agent safe" stops being an opinion and becomes something anyone can verify. See the work on GitHub.
Start in sixty seconds.
No account, no server, no API key. The whole attest → prove → enforce → detect loop runs on your laptop, under Apache 2.0.
$ attestral scan ./my-project # attest: one system model, reviewed
$ attestral verify review.json # prove: chain VALID
$ attestral compile ./my-project -o policy.yaml # enforce: default-deny policy
$ attestral drift policy.yaml events.jsonl # detect: runtime vs. reviewed design
Gate every deploy in CI with the GitHub Action:
- uses: attestral-labs/attestral@v1
with:
policy: policy.yaml
events: events.jsonl