cloud-audit
Quick Start
pip install cloud-audit
cloud-audit scanUses your default AWS credentials and region. Try without an AWS account:
cloud-audit demoRelated MCP server: agent-bom
Why It's Different
Most scanners give you findings. cloud-audit helps you decide what to fix first.
+---- Attack Chains (5 detected) -----------------------------------+
| CRITICAL Internet-Exposed Admin Instance |
| i-0abc123 - public SG + admin IAM role + IMDSv1 |
| |
| CRITICAL IAM Privilege Escalation via iam:PassRole |
| ci-deploy-role - 3-step path to admin |
| |
| CRITICAL CI/CD to Admin Takeover |
| github-deploy - OIDC no sub + admin policy |
+--------------------------------------------------------------------+
+---- Remediation Plan -------------------------------------------+
| Fix 4 root causes, break 22 attack chains |
| |
| Quick Wins (effort: LOW, chains broken: 14): |
| 1. Restrict SG ingress on sg-0abc123 -> breaks 8 chains |
| 2. Add OIDC sub condition -> breaks 6 chains |
+--------------------------------------------------------------------+Other tools give you 200 findings sorted by severity. cloud-audit groups them by root cause, shows which single fixes collapse the most attack paths, and lets you simulate the impact before you touch anything:
cloud-audit simulate --fix aws-vpc-002
# Score: 34 -> 58 (+24) | Chains broken: 8 of 22 | Findings resolved: 1194 checks across 23 AWS services. Every finding includes copy-paste AWS CLI + Terraform remediation.
What's New in 2.0
Feature | What it does |
IAM Privilege Escalation | 61 escalation methods across 9 categories, including lateral movement detection via AssumeRole graph traversal. PMapper has been dead since 2022 -- this is its open-source replacement, and it covers paths PMapper never did. |
What-If Simulator |
|
Root Cause Grouping | "Fix 4 things, break 22 chains." Groups findings by shared root cause and ranks by impact. |
Security Posture Trend |
|
AI-SPM | First open-source Bedrock + SageMaker scanner. 5 checks, 3 attack chains (model theft, LLMjacking, data poisoning). |
Features
Attack Chain Detection
31 rules correlate individual findings into exploitable attack paths.
Internet --> Public SG --> EC2 (IMDSv1) --> Admin IAM Creds --> Account Takeover
aws-vpc-002 aws-ec2-004 Detected: AC-01, AC-02Chain | What it catches |
IAM Privilege Escalation | iam:PassRole + lambda:Create + iam:Attach = 3-step path to admin |
Internet-Exposed Admin | Public SG + admin IAM role + IMDSv1 = account takeover |
CI/CD to Admin Takeover | OIDC without sub condition + admin policy = pipeline hijack |
LLMjacking | Bedrock no logging + no guardrails = undetected model abuse |
Based on MITRE ATT&CK Cloud and pathfinding.cloud. See all 31 rules.
Remediation + Simulator
Every finding includes AWS CLI, Terraform HCL, and docs links. Export all fixes:
cloud-audit scan --export-fixes fixes.shSimulate before applying:
cloud-audit simulate --fix aws-vpc-002
# Score: 34 -> 58 (+24) | Chains broken: 8 of 22 | Findings resolved: 11
cloud-audit simulate --fix aws-vpc-002,aws-ct-001,aws-iam-007
# Score: 34 -> 82 (+48) | Chains broken: 19 of 22Trend Tracking
cloud-audit diff yesterday.json today.json # Catches ClickOps drift
cloud-audit trend # Posture over time6 Compliance Frameworks
CIS AWS v3.0 - 62 controls, 55 automated (89%)
SOC 2 Type II - 43 criteria, 24 automated (56%)
BSI C5:2020
Beta- 134 criteria, 57 automated/partialISO 27001:2022
Beta- 93 controls, 47 automated/partialHIPAA Security Rule
Beta- 47 specs, 29 automated/partialNIS2 Directive
Beta- 43 measures, 33 automated/partial
Breach Cost Estimation
Every finding and chain includes a dollar-range risk estimate based on IBM/Verizon breach data, with source links.
MCP Server for AI Agents
claude mcp add cloud-audit -- uvx --from cloud-audit cloud-audit-mcp6 tools: scan_aws, get_findings, get_attack_chains, get_remediation, get_health_score, list_checks. Free and standalone.
How It Compares
Prowler is the AWS security standard: 572 checks across 83 services, 41 compliance frameworks (CIS, PCI-DSS, HIPAA, SOC2, NIST 800, ISO 27001, GDPR, FedRAMP, NIS2, MITRE ATT&CK and more), 55 auto-remediation fixers, and graph-based attack path analysis in the Prowler App (Cartography + Neo4j). It also covers Azure, GCP, Kubernetes, M365, and 10+ other providers.
cloud-audit is AWS-only and intentionally narrower (94 curated checks). It goes deep where Prowler goes wide: attack chain correlation and IAM escalation detection run in the free CLI with zero infrastructure, every finding ships with reviewable Terraform + AWS CLI remediation, and scan diff / drift tracking is built into the CLI.
Feature | Prowler | cloud-audit |
AWS checks | 572 across 83 services | 94 across 23 services |
Compliance frameworks (AWS) | 41 (CIS, PCI-DSS, HIPAA, SOC2, NIST, ISO 27001, GDPR, FedRAMP, NIS2, ...) | 6 (CIS v3.0, SOC 2, BSI C5, ISO 27001, HIPAA, NIS2) |
Auto-remediation | 55 fixers across 17 AWS services (direct API calls) | 94/94 findings with CLI + Terraform output (reviewable, you apply) |
Attack path / graph analysis | Prowler App (Cartography + graph queries) | CLI-native (31 rules, no infra) |
IAM privilege escalation graph | Prowler App | CLI-native (61 methods + AssumeRole graph) |
What-If remediation simulator | No | Yes |
AI/ML security checks (Bedrock + SageMaker) | ~20 checks | 5 checks + 3 attack chain rules |
Scan diff / drift tracking | Prowler App | Built-in CLI ( |
Breach cost estimates (USD) | No | Per-finding + per-chain |
MCP Server | Free | Free |
Multi-cloud | AWS + 13 others | AWS only |
License | Apache 2.0 | MIT |
Use Prowler for compliance breadth, multi-cloud coverage, and graph-based attack path analysis. Use cloud-audit for fast CLI-native attack chain detection, reviewable Terraform remediation, and CI/CD drift tracking. They are complementary, not competitors - a common setup is Prowler for quarterly compliance evidence plus cloud-audit daily in CI/CD.
Prowler stats verified from github.com/prowler-cloud/prowler (April 2026). cloud-audit snapshot as of v2.0.1.
Reports
cloud-audit scan --format html -o report.html # Client-ready HTML
cloud-audit scan --format json -o report.json # Machine-readable
cloud-audit scan --format sarif -o results.sarif # GitHub Code Scanning
cloud-audit scan --format markdown -o report.md # PR commentsInstallation
pip install cloud-audit # pip (recommended)
pipx install cloud-audit # pipx (isolated)
docker run ghcr.io/gebalamariusz/cloud-audit scan # DockerDocker with credentials:
docker run -v ~/.aws:/home/cloudaudit/.aws:ro ghcr.io/gebalamariusz/cloud-audit scanUsage
cloud-audit scan -R # Show remediation
cloud-audit scan --profile prod --regions eu-central-1 # Specific profile/region
cloud-audit scan --regions all # All enabled regions
cloud-audit scan --min-severity high # Filter by severity
cloud-audit scan --role-arn arn:aws:iam::...:role/audit # Cross-account
cloud-audit scan --quiet # Exit code only (CI/CD)
cloud-audit simulate --fix aws-vpc-002 # What-If simulator
cloud-audit trend # Posture over time
cloud-audit list-checks # List all checksExit code | Meaning |
0 | No findings |
1 | Findings detected |
2 | Scan error |
Create .cloud-audit.yml in your project root:
provider: aws
regions:
- eu-central-1
- eu-west-1
min_severity: medium
exclude_checks:
- aws-eip-001
suppressions:
- check_id: aws-vpc-001
resource_id: vpc-abc123
reason: "Legacy VPC, migration planned for Q3"
accepted_by: "jane@example.com"
expires: "2026-09-30"
- check_id: "aws-cw-*"
reason: "CloudWatch alarms managed by separate team"
accepted_by: "ops@example.com"Variable | Example |
|
|
|
|
|
|
|
|
Precedence: CLI flags > env vars > config file > defaults.
CI/CD
- run: pip install cloud-audit
- run: cloud-audit scan --format sarif --output results.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarifReady-to-use workflows: basic scan, daily diff, post-deploy.
AWS Permissions
cloud-audit requires read-only access. Attach SecurityAudit (covers all checks including IAM escalation analysis):
aws iam attach-role-policy --role-name auditor --policy-arn arn:aws:iam::aws:policy/SecurityAuditcloud-audit never modifies your infrastructure. The simulate command runs locally against scan data -- it does not call AWS APIs.
What It Checks
94 checks across IAM, S3, EC2, VPC, RDS, EIP, EFS, CloudTrail, GuardDuty, KMS, CloudWatch, Lambda, ECS, SSM, Secrets Manager, AWS Config, Security Hub, Account, AWS Backup, Amazon Inspector, AWS WAF, Amazon Bedrock, and Amazon SageMaker.
See all 94 checks by service or run cloud-audit list-checks locally.
Documentation
Full docs at haitmg.pl/cloud-audit:
Getting Started - installation, quick start, demo mode
Attack Chains - all 31 rules with MITRE ATT&CK references
IAM Escalation - 61 methods, 9 categories (action-based + lateral AssumeRole graph)
What-If Simulator - simulate remediation impact
Compliance - 6 frameworks: CIS, SOC 2, BSI C5, ISO 27001, HIPAA, NIS2
All 94 Checks - full check reference by service
What's Next
Multi-account scanning (AWS Organizations)
SCP + permission boundary evaluation in IAM escalation
Terraform drift detection
Past releases: CHANGELOG.md
Development
git clone https://github.com/gebalamariusz/cloud-audit.git
cd cloud-audit
pip install -e ".[dev]"
pytest -v # 496 tests
ruff check src/ tests/ # lint
mypy src/ # type checkSee CONTRIBUTING.md for how to add a new check.
License
Available Tools
7 toolsget_agent_blastA
What can a hijacked AI agent reach in this AWS account?
For every Bedrock Agent, AgentCore runtime, gateway or sandbox found by the
last scan (or the one matching agent by name, id or ARN substring),
returns a Markdown report under two threat models: identity takeover (the
attacker holds the agent role's credentials) and behaviour takeover (prompt
injection steering the agent's tools, bounded by the tools' execution
roles), with data, secret, lateral and code-execution reach and OWASP
Agentic / MITRE ATLAS tags. Computed from the saved scan, no AWS calls.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden, and it does so well: it discloses 'no AWS calls,' 'computed from the saved scan,' the Markdown output format, the two threat models, and the scoping rule by last scan or agent substring. Minor gaps remain around what happens if no saved scan exists or whether the agent parameter filters or overrides, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a useful framing question and then a dense, content-rich sentence. Every clause adds diagnostic value: scope, threat models, reach categories, tags, and the no-AWS-calls guarantee. It is slightly long but not padded, and the structure helps an agent parse the tool's purpose quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, return-value details are already covered. The description provides the essential context: source of data, scoping, threat models, output format, and the fact that no AWS calls are made. The only meaningful omission is explicit prerequisite/error behavior when no saved scan exists, but this is adequately implied by 'last scan.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must document the single 'agent' parameter. It does: 'matching ``agent`` by name, id or ARN substring' explains how the value is interpreted, and the overall phrasing implies the default unfiltered case covers all agents found by the last scan. It does not explicitly state empty-string behavior, but it mostly compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: it 'returns a Markdown report' of what a hijacked Bedrock Agent can reach, under two named threat models. It clearly separates itself from scan_aws by stating 'no AWS calls' and from sibling get_* tools by focusing specifically on agent blast radius. An agent can tell exactly what this tool computes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: after a scan exists, when you want agent-centred reach analysis, because it is 'computed from the saved scan' and makes 'no AWS calls.' However, it never names alternatives such as get_attack_chains, get_findings, or get_remediation, nor does it state when not to choose this tool. Context is clear, but exclusions and alternatives are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attack_chainsA
Get all detected attack chains from the last scan.
Attack chains are correlated findings that form exploitable attack paths. Each chain includes a narrative, priority fix, and breach cost estimate.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description bears full burden. It discloses the return contents but does not mention any behavioral traits like temporary exclusivity, authorization requirements, or potential staleness. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. Front-loads the core action and then clarifies what attack chains are. Very efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, presence of output schema, and no annotations, the description covers the return value sufficiently. Minor gaps: no mention of ordering, limit, or whether chains from multiple scans are aggregated, but 'from the last scan' provides temporal context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Baseline for zero parameters is 4, and description adds no extra param info, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets all detected attack chains from the last scan, defines attack chains as correlated findings forming exploitable paths, and distinguishes from siblings like get_findings by specifying the unique content (narrative, priority fix, breach cost estimate).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage after a scan but does not provide explicit guidance on when to use this tool instead of siblings like get_findings or scan_aws. No exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_findingsA
Get findings from the last scan, optionally filtered.
Each finding includes check ID, severity, resource, description, and estimated breach cost.
Args: severity: Filter by severity (critical, high, medium, low) service: Filter by AWS service prefix (e.g. "iam", "s3", "ec2", "vpc") limit: Maximum number of findings to return (default: 20)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| service | No | ||
| severity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes output fields but does not disclose behavioral traits such as whether results are cached, what happens if no scans exist, or read-only nature. Mutation or destructive potential is not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description includes a docstring-style Args section which is clear but slightly verbose. It could be more concise by integrating parameter info into a single sentence. Still, it is structured and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is an output schema, the description need not explain return format entirely, but it does list output fields. It lacks details on pagination, error handling, or behavior when filters are omitted. Overall, it is mostly complete for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains each parameter: severity filter, service filter, and limit with default. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves findings from the last scan with optional filters, and lists specific data fields. This distinguishes it from sibling tools like get_health_score or list_checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating optional filters but provides no explicit guidance on when to use this tool versus alternatives like get_attack_chains or get_remediation. Sibling tools are listed but not compared.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_health_scoreA
Get the current health score and risk exposure summary.
Returns the 0-100 health score, finding counts by severity, attack chain count, and total estimated risk exposure in USD.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description acknowledges it is a read operation returning data, but does not disclose potential side effects or requirements (e.g., authentication, data freshness). It is acceptable for a simple read-only tool but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant information. Front-loaded with the action, then specifies outputs. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and presence of output schema, the description covers basic purpose and returns. However, it misses context like whether the health score is real-time or cached, or if prior scanning (via 'scan_aws') is necessary. Adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so the description cannot add param info. It does add value by explaining the return structure, which is helpful given an output schema exists, earning a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the current health score and risk exposure summary, listing specific outputs (score, finding counts, attack chain count, estimated risk). This distinguishes it from sibling tools that focus on individual components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus siblings like 'get_findings' or 'get_attack_chains'. It does not mention prerequisites, such as whether a scan is required first, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_remediationA
Get remediation details (CLI command + Terraform code) for a specific check.
Returns copy-paste ready AWS CLI command and Terraform HCL snippet to fix the finding.
Args: check_id: The check ID (e.g. "aws-iam-001", "aws-s3-001", "aws-vpc-002")
| Name | Required | Description | Default |
|---|---|---|---|
| check_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description details the output format (copy-paste ready CLI and HCL). It does not disclose error handling, authentication needs, or behavior on invalid IDs, but it is adequate for a straightforward read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loads the purpose, and provides examples without superfluous information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown), the description sufficiently explains what the tool returns. It covers the essential context for a simple retrieval tool, though it could mention the output format types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds concrete examples for check_id (e.g., 'aws-iam-001'), clarifying the expected format beyond the schema's type definition alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool's purpose: retrieving remediation details (CLI command + Terraform code) for a specific check. It distinguishes from sibling tools like list_checks and get_findings by focusing on remediation actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool is used for a specific check ID, providing examples. While it does not explicitly state when not to use it or compare to alternatives, the context is clear for a simple retrieval tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_checksA
List all available security checks (no AWS credentials needed).
Returns check IDs with their categories and services.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that no AWS credentials are needed (auth requirement) and that the return includes check IDs, categories, and services. This is fairly transparent for a read-only list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The key information is front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no annotations, and an output schema (not detailed here but exists), the description is largely complete. It covers purpose, auth requirements, and return content. Could potentially mention that the response is not paginated or that results are static, but these are minor omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% coverage, so the description need not add parameter information. Baseline 3 applies, and the description does not add meaningful parameter semantics beyond what the schema shows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all available security checks, specifies no AWS credentials are needed, and indicates the return content (check IDs, categories, services). It distinguishes from sibling tools like scan_aws or get_findings by being a simple listing operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for browsing available checks but does not explicitly provide when-to-use or when-not-to-use guidance, nor does it compare with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_awsA
Run an AWS security scan and return a summary.
Scans your AWS account for security misconfigurations, detects attack chains, and estimates breach cost risk.
Args: profile: AWS CLI profile name (default: "default") regions: Comma-separated AWS regions to scan (default: profile region) min_severity: Minimum finding severity: critical, high, medium, low
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | default | |
| regions | No | ||
| min_severity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the scan scope (misconfigurations, attack chains, breach cost) but omits potential side effects, authentication needs, or rate limits. It implies a read-only operation but does not explicitly state it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with purpose and includes an Args section. It is relatively concise, though the Args list could be integrated into a single paragraph to reduce redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown) and 0 required parameters, the description covers the main purpose well. However, it lacks details on the summary content and how it relates to sibling tools, slightly reducing completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds full meaning: profile as AWS CLI profile, regions as comma-separated, min_severity with value list. This compensates completely for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Run an AWS security scan and return a summary', specifying it scans for misconfigurations, attack chains, and breach cost. This differentiates from siblings like get_findings or get_attack_chains which are more granular.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs siblings. The description implies it's for a broad scan, but does not mention when not to use it or suggest alternatives like get_findings for specific details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v2.5.0- Added
get_agent_blast
6 tool updates
v2.2.1- Added
get_attack_chains - Added
get_findings - Added
get_health_score - Added
get_remediation - Added
list_checks - Added
scan_aws
6 tool updates
v2.2.0- Removed
get_attack_chains - Removed
get_findings - Removed
get_health_score - Removed
get_remediation - Removed
list_checks - Removed
scan_aws
6 tool updates
v1.0.1- First observed
get_attack_chains - First observed
get_findings - First observed
get_health_score - First observed
get_remediation - First observed
list_checks - First observed
scan_aws
TDQS
Scored across 7 tools
Each tool has a clear, distinct role: scanning, listing checks, retrieving findings, health scores, attack chains, remediation, and agent blast radius. No two tools overlap in purpose; even get_health_score and get_findings differ (summary vs. detailed list).
All tools follow a consistent verb_noun pattern: scan_aws, list_checks, get_findings, get_health_score, get_attack_chains, get_remediation, get_agent_blast. The verbs (scan, list, get) are used predictably, and the nouns clearly indicate the resource.
Seven tools is ideal for the domain of AWS security scanning: they cover the entire workflow from initiating a scan to viewing results, details, and remediation. Each tool is necessary and there is no bloat.
The tool set covers the full lifecycle: scan, list checks, get findings, get health score, get attack chains, get remediation, and even a specialized agent blast tool. The only minor gap is that there is no direct tool to initiate a specific check or re-scan a particular resource, but the existing tools allow agents to achieve the core goals.
Maintenance
Related MCP Connectors
AWS cloud security scanners for AI agents — S3, IAM, EC2, EKS, RDS, CloudTrail, CloudWatch Logs
CloudOracle - 14-tool multi-cloud compliance MCP: AWS, Azure, GCP posture, IAM, configs.
Zero-config MCP security scanner for AI-generated apps. 25K+ vulnerability patterns.
IaC attack-path auditor: finds internet-to-crown-jewel chains in Terraform/CFN/K8s.
Related MCP Servers
- AlicenseAqualityCmaintenanceA local-first AWS security tool that uses graph theory to discover attack paths (e.g., Internet → Role → DB) and prioritize remediations. It allows agents to perform read-only security audits and generate Terraform fixes without data exfiltration.1539 PyPI4Apache 2.0
- AlicenseAqualityAmaintenanceagent-bom is an open security scanner and self-hosted control plane for AI, MCP, and cloud infrastructure. The default scan profile in MCP server mode exposes 8 MCP tools. Additional profiles provide inventory, findings, compliance, graph, and runtime workflows. See the published Glama release for its packaged version.831Apache 2.0
- AlicenseBqualityAmaintenanceSecurity MCP server with 300+ rules for AI-generated code. Scans Next.js, Supabase, Clerk, Stripe, Prisma, Hono, GraphQL and 20+ modules. Zero config, runs locally.391,496 npm6Apache 2.0
- AlicenseAqualityAmaintenanceMCP server for automated AWS security scanning — 19 modules, risk scoring, zero write operations.3626 npmMIT