Install
$ agentstack add mcp-alphacrack-iac-scanner ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ● Shell / process execution Used
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
IaC Scanner
[](https://pypi.org/project/iac-scanner/) [](https://pypi.org/project/iac-scanner/) [](https://pypi.org/project/iac-scanner/) [](https://pypi.org/project/iac-scanner/) [](https://github.com/alphacrack/iac-scanner/actions/workflows/ci.yml) [](https://github.com/alphacrack/iac-scanner/actions/workflows/codeql.yml) [](https://securityscorecards.dev/viewer/?uri=github.com/alphacrack/iac-scanner) [](LICENSE) [](https://developercertificate.org/)
Python CLI that scans Terraform and AWS CDK Infrastructure-as-Code, reports security + best-practice findings, and writes the fix. Runs locally, keylessly, or grounded by Checkov.
iac-scanner complements rule-based scanners like Checkov, tfsec, and KICS — it doesn't replace them. Its differentiator is AI-generated fixes alongside findings, and keyless operation via GitHub Models, Ollama, or an MCP server.
> AI-generated output — review before applying. Fixed code is written to scan-output/fixed/ and must be human-reviewed before overwriting your working tree. No auto-apply.
License: [Apache License 2.0](LICENSE).
Quickstart (30 seconds, no cost)
Pick whichever path matches your setup:
GitHub Models (free for any GitHub user)
pip install iac-scanner
export GITHUB_TOKEN=$(gh auth token)
iac-scan scan ./my-tf --provider github -o ./out
Ollama (fully local, offline, free)
pip install iac-scanner[local]
ollama pull qwen2.5-coder:7b-instruct # first run only
iac-scan scan ./my-tf --provider ollama -o ./out
MCP server — drive from Claude Desktop / Cursor
pip install iac-scanner[mcp]
# Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
# "mcpServers": { "iac-scanner": { "command": "iac-scan-mcp" } }
# Then in Claude: "Scan the Terraform in ~/work/infra"
OpenAI / Anthropic (bring your own key)
pip install iac-scanner
export OPENAI_API_KEY=sk-...
iac-scan scan ./my-tf --provider openai -o ./out
# or: iac-scan scan ./my-tf --provider auto (picks ollama → github → openai → anthropic)
No-network demo (no AI, just parse)
iac-scan scan ./samples/tf -o ./out --scan-only
Every mode writes scan-report.json (findings) and, when AI is enabled, fixed/ (corrected code).
Input (CLI)
- Terraform: a directory containing
main.tf, or the path tomain.tfitself. Sibling.tffiles are included. - CDK: a directory containing
index.ts/index.js, or the path to that file.lib/andbin/subdirectories are included.
What we skip (automatic)
terraform.tfstate*, *.tfvars, .env*, *.pem, *.key, id_rsa*, .terraform/, node_modules/, cdk.out/. See [SECURITY.md](SECURITY.md) for the full skip-list and threat model.
Process
- Factory creates the right scanner (
TerraformScannerorCdkScanner) from the given path. - Scan: load entry file(s), apply the skip-list, redact obvious secrets, enforce the 200 KB input cap.
- (Optional) Rule engine pre-pass (
--rules-engine=checkov) adds framework-mapped findings with CWE/CIS/NIST tags. - Analysis (LLM, structured output): findings as a Pydantic-validated JSON array with severity + location.
- Fix (LLM, text output): regenerates corrected code with a mandatory
AI-generated — review before applyingbanner. - Output: JSON and/or SARIF 2.1.0 report; fixed files under
fixed/.
Output
- JSON report (
scan-report.json):iac_type,entry_path,findings,metadata,provider,analysis_model,fix_model,prompt_version. - SARIF 2.1.0 (
--format sarif|both): consumed by GitHub Code Scanning, GitLab Security Dashboards, SonarQube. - Fixed code (
fixed/): multi-file output preserves the original layout; each file starts with the AI-generated banner.
Usage
# Basic scan (analysis + fix)
iac-scan scan ./my-tf-dir
# No-AI parse only (no keys needed)
iac-scan scan ./my-tf-dir --scan-only
# Findings only, skip fix generation
iac-scan scan ./my-tf-dir --no-fix
# Output SARIF for GitHub Code Scanning
iac-scan scan ./my-tf-dir --format sarif -o ./out
# Or both at once
iac-scan scan ./my-tf-dir --format both -o ./out
# Choose a provider explicitly
iac-scan scan ./my-tf-dir --provider github
iac-scan scan ./my-tf-dir --provider ollama
iac-scan scan ./my-tf-dir --provider openai
# Ground the LLM with Checkov rule findings (hybrid mode)
pip install iac-scanner[rules]
iac-scan scan ./my-tf-dir --rules-engine checkov
# CI gate: exit non-zero on any HIGH or CRITICAL finding
iac-scan scan ./my-tf-dir --fail-on high
# Cost cap: abort if projected LLM cost exceeds $0.50
iac-scan scan ./my-tf-dir --max-spend 0.50
# Force-refresh: skip the response cache for this run
iac-scan scan ./my-tf-dir --no-cache
Environment variables
| Variable | Purpose | |-----------------------|-------------------------------------------------------------------------------------------| | IAC_PROVIDER | openai \| anthropic \| github \| ollama (overrides auto-detect). | | OPENAI_API_KEY | Required when --provider=openai. | | ANTHROPIC_API_KEY | Required when --provider=anthropic. | | GITHUB_TOKEN | Required when --provider=github. Any gh auth token works (free tier). | | OLLAMA_HOST | Ollama endpoint. Default: http://localhost:11434. | | IAC_ANALYSIS_MODEL | Override analysis model (e.g. gpt-4o, claude-3-5-sonnet-20241022). | | IAC_FIX_MODEL | Override fix model. | | IAC_MAX_SPEND_USD | Hard dollar cap per run. Abort if projected cost exceeds it. | | IAC_MAX_INPUT_BYTES | Input size cap (default 200 KB, floored to 1 KB, ceilinged to 10 MB). | | IAC_NO_CACHE | When set, skip the content-addressed response cache. | | IAC_NO_REDACT | Disable secret redaction (not recommended — see SECURITY.md). | | IAC_CACHE_DIR | Override cache directory (default ~/.cache/iac-scanner/). | | IAC_OUTPUT_FORMAT | Default output format (json \| sarif \| both). |
Install
# Base install — includes OpenAI and Anthropic providers + GitHub Models
pip install iac-scanner
# With optional extras
pip install iac-scanner[local] # Ollama local-LLM provider
pip install iac-scanner[mcp] # MCP server mode for Claude Desktop / Cursor
pip install iac-scanner[rules] # Checkov hybrid mode
pip install iac-scanner[all] # all of the above
# From source
git clone https://github.com/alphacrack/iac-scanner
cd iac-scanner
pip install -e ".[dev]"
Blog and tutorial
Articles and a step-by-step tutorial are published on GitHub Pages at https://alphacrack.github.io/iac-scanner/. Source lives under [docs/](docs/).
Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, test strategy, and the release process (Trusted Publishing + SBOM + Sigstore signing).
Governance & support
- [GOVERNANCE.md](GOVERNANCE.md) — roles, decision-making, branch protection policy.
- [MAINTAINERS.md](MAINTAINERS.md) — canonical list of maintainers.
- [SUPPORT.md](SUPPORT.md) — where to ask questions, file bugs, and request features.
- [CODEOFCONDUCT.md](CODEOFCONDUCT.md) — Contributor Covenant 2.1.
Security
See [SECURITY.md](SECURITY.md) for the threat model (prompt injection, secret exposure, hallucinated fixes, supply-chain, cost abuse) and private disclosure channel.
Project layout
src/iac_scanner/
cli.py # CLI entry (click)
factory.py # create_scanner(path) → TerraformScanner | CdkScanner
models.py # Pydantic: Finding, FindingsList, ScanReport, VerificationResult
cache.py # content-addressed SHA-256 response cache
cost.py # tiktoken preflight + IAC_MAX_SPEND_USD enforcement
mcp_server.py # iac-scan-mcp entry — MCP server for host LLMs
scanners/
base.py # IacScanner (abstract), ScanResult
_filters.py # skip-list, secret redaction, input size cap
terraform.py # TerraformScanner (main.tf)
cdk.py # CdkScanner (index.ts / index.js)
llm/
providers.py # LLMClient + OpenAI / Anthropic / GitHub Models / Ollama
orchestration/
tasks.py # analysis + fix LangChain tasks (structured output, XML fencing)
runner.py # run_pipeline: scan → cache → cost check → LLM → result
hybrid.py # rule-pre-pass + LLM augment + dedupe
rules/
engine.py # rule-engine dispatcher
checkov.py # Checkov subprocess adapter with CWE/CIS/NIST mapping
output/
report.py # write_report_and_fixes — JSON + fixed/ banner
sarif.py # SARIF 2.1.0 emitter
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: alphacrack
- Source: alphacrack/iac-scanner
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.