Skip to main content

MCP-backed Terraform assistant with ephemeral-values compliance.

Project description

Terraform Guardrail MCP

CI

Terraform Guardrail MCP (Model Context Protocol) is a governance control plane for Infrastructure as Code. It runs outside Terraform and gives AI assistants and platform teams real provider context, policy intelligence, and auditable guardrails so every change is safer by default. The result is a cleaner state, fewer failures, and a shorter path from idea to production.

This product is built for teams shipping infrastructure at scale who need speed without sacrificing safety. Guardrail enforces non-negotiable platform invariants, allows composable product constraints, and produces human-readable reports that make decisions obvious and defensible.

Live app: https://terraform-guardrail.streamlit.app/

Design Principle

Non-negotiable safety floor, composable freedom above it. Guardrails live outside Terraform.

User Perspective (High-Level)

flowchart LR
    USER[Platform + Product Teams] --> CHANNELS[CLI • Streamlit • REST API • MCP]
    CHANNELS --> GUARDRAIL[Terraform Guardrail MCP]
    GUARDRAIL --> REPORTS[Readable Guidance + Evidence]
    GUARDRAIL --> TERRAFORM[Safer Terraform Applies]

Ways Developers Use Guardrail

flowchart LR
    DEV[Developer] --> CLI[CLI]
    DEV --> UI[Streamlit UI]
    DEV --> API[REST API]
    DEV --> MCP[MCP for AI Assistants]
    DEV --> CI[GitHub Action]
    DEV --> ADO[Azure DevOps]
    CLI --> GUARDRAIL
    UI --> GUARDRAIL
    API --> GUARDRAIL
    MCP --> GUARDRAIL
    CI --> GUARDRAIL
    ADO --> GUARDRAIL

Current Capabilities

  • Multi-file scanning with summaries and CSV export
  • Secret hygiene checks across .tf, .tfvars, and .tfstate
  • Schema-aware validation with Terraform CLI integration
  • Provider metadata lookup via Terraform Registry
  • MCP tools for scan, metadata, and snippet generation
  • Streamlit and web UI for instant reporting
  • Dockerized REST API for CI/CD adoption
  • Docker Compose dev stack (API + UI + policy registry, optional analytics)

Supported Providers

  • AWS
  • Azure
  • GCP
  • Kubernetes
  • Helm
  • OCI
  • Vault
  • Alicloud
  • vSphere

Feature Matrix

Area CLI Web UI / Streamlit
Config scan (.tf, .tfvars, .hcl) Yes Yes
State leak scan (.tfstate) Yes Yes
Schema-aware validation Yes Yes
CSV export No Yes
Provider metadata Yes Yes
Snippet generation Yes No
Multi-file scan Yes (directory) Yes (upload up to 10)
Human-readable report Yes Yes

Architecture (High-Level)

flowchart TB
    subgraph Interfaces
        CLI([CLI])
        MCP([MCP Server])
        WEB([Web UI])
        API([REST API])
        STL([Streamlit App])
    end

    subgraph Core
        SCAN((Compliance Engine))
        GEN[[Snippet Generator]]
        POLICY{Policy Layering}
    end

    subgraph Integrations
        TF[/Terraform CLI/]
        REG[(Terraform Registry)]
    end

    CLI --> SCAN
    WEB --> SCAN
    API --> SCAN
    STL --> SCAN
    MCP --> SCAN
    MCP --> GEN
    SCAN --> POLICY --> TF
    GEN --> REG

    classDef interface fill:#e3f2fd,stroke:#1e88e5,stroke-width:1px,color:#0d47a1;
    classDef core fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px,color:#1b5e20;
    classDef integration fill:#fff3e0,stroke:#ef6c00,stroke-width:1px,color:#e65100;

    class CLI,MCP,WEB,API,STL interface;
    class SCAN,GEN,POLICY core;
    class TF,REG integration;

Architecture (Detailed Flow)

flowchart TB
    INPUTS[Inputs: .tf, .tfvars, .tfstate] --> PARSE[Parse & Normalize]
    PARSE --> SCHEMA[Provider Schema + Metadata]
    SCHEMA --> RULES[Apply Guardrail Rules]
    RULES --> REPORT[Findings + Summary]
    REPORT --> OUTPUTS[CLI JSON • UI • MCP • REST]

Note: Mermaid diagrams render on GitHub and in the Wiki. PyPI will show the raw blocks.

Roadmap (Major Releases)

Legend: ✅ Delivered🚧 Under construction

Deliverable v1.0 Foundation v2.0 Enterprise v3.0 Ecosystem v4.0 Intelligent
Dockerized MCP + REST API ✅ Delivered (0.2.x)
CLI-first install ✅ Delivered (0.2.x)
Docker Compose local stack (API + UI + registry) ✅ Delivered (0.2.x)
GitHub Action pre-apply / PR checks 🚧 Planned
Azure DevOps / Pipeline extension 🚧 Planned
Policy layering model (base → env → app) 🚧 Planned
Policy metadata + rich failure messages 🚧 Planned
Drift-prevention rules before apply 🚧 Planned
Central guardrail registry 🚧 Planned
Policy versioning + audit trail 🚧 Planned
Contributor governance + public roadmap 🚧 Planned
Reference implementations across tools 🚧 Planned
Cross-provider invariant enforcement 🚧 Planned
Context-aware evaluation 🚧 Planned
Suggested fixes + recommendations 🚧 Planned

Comparison with Other Tools

Terraform Guardrail MCP takes a fundamentally different approach to IaC governance than traditional scanning or linting tools. Guardrail is delivered as a Model Context Protocol (MCP) server with a CLI and web UI. It runs outside Terraform, exposing provider metadata, scanning configs and state for sensitive values, and producing human-readable reports. Its rules engine focuses on secret hygiene and write-only arguments and lets platform teams publish non-negotiable guardrails while product teams compose contextual constraints.

By contrast, existing tools such as Checkov, TFLint and OPA/Conftest operate mainly as static code analyzers embedded in CI pipelines. They scan Terraform files or plans for misconfigurations but do not provide a centralized control plane or cross-provider context. The table below summarizes the key differences:

Category Guardrail MCP Checkov TFLint OPA/Conftest
Primary purpose External IaC governance control plane Static multi-IaC security scanner Terraform linter General policy engine (Rego)
IaC support Terraform + multi-cloud providers (AWS, Azure, GCP, Kubernetes, Helm, OCI, Vault, vSphere, Alicloud) Terraform, CloudFormation, Kubernetes, Helm, ARM, Serverless Terraform (HCL) Any domain via Rego policies
Policy model Central guardrail registry; platform invariants + product constraints; versioned and auditable Built-in rules (Python/Rego) + custom policies Provider-specific rule plugins; experimental Rego plugin Rego rules only
Enforcement stage Pre-apply; prevents bad state and drift; uses provider schemas Pre-apply scan of templates and plans Pre-apply linting for errors and best-practice drifts Pre-apply checks (via Conftest) – outcome depends on integration
Governance & audit Org-level guardrail registry, ownership boundaries, audit trail No policy lifecycle management No policy registry No governance features
Developer experience CLI/Server/Web UI; human-readable reports & fix suggestions CLI with JSON/SARIF/JUnit output and graph insights CLI with JSON/SARIF/JUnit output; configurable warnings CLI library; steep learning curve

Why Guardrail complements scanners

Checkov provides a vast policy library and graph-based resource analysis to catch misconfigurations early, and TFLint offers pluggable, provider-aware linting rules to detect invalid types, deprecated syntax and best-practice drifts. These tools remain valuable for static analysis of Terraform code. Guardrail MCP builds upon them by acting as a higher-order control plane: it uses provider metadata to validate schema usage, prevents secret leakage and drift before Terraform mutates state, and separates platform-owned safety floors from product-level constraints. In practice, teams often run TFLint or Checkov in their CI to catch coding errors while Guardrail serves as the last line of defense to enforce organizational guardrails and deliver contextual guidance.

Quickstart

python -m venv .venv
source .venv/bin/activate
pip install -e "[dev]"

# CLI scan
terraform-guardrail scan examples

# snippet generation
terraform-guardrail generate aws aws_s3_bucket --name demo

# MCP server (stdio)
terraform-guardrail mcp

# Web UI
terraform-guardrail web

Install from PyPI

pip install terraform-guardrail

PyPI: https://pypi.org/project/terraform-guardrail/ (latest: 0.2.8)

CLI examples

# scan a directory
terraform-guardrail scan ./examples --format json

# scan state files too
terraform-guardrail scan ./examples --state ./examples/sample.tfstate

# enable schema-aware validation (requires terraform CLI + initialized workspace)
terraform-guardrail scan ./examples --schema

Web UI

Visit http://127.0.0.1:8000 and upload a Terraform file to view a compliance report.

Streamlit App

streamlit run streamlit_app.py

Live app: https://terraform-guardrail.streamlit.app/

Streamlit Cloud deployment

  1. Push this repo to GitHub.
  2. Create a new Streamlit Cloud app.
  3. Set the main file path to streamlit_app.py.
  4. Deploy (Streamlit will install from requirements.txt).

REST API (Docker)

Build and run the API server:

docker build -t terraform-guardrail .
docker run --rm -p 8080:8080 terraform-guardrail

API endpoints:

  • GET /health
  • GET /metrics
  • POST /scan
  • POST /provider-metadata
  • POST /generate-snippet

Example request:

curl -X POST http://localhost:8080/scan \\
  -H "Content-Type: application/json" \\
  -d '{"path":"./examples","use_schema":false}'

Container Image

Pull the published container image (built on release tags):

docker pull ghcr.io/huzefaaa2/terraform-guardrail:v0.2.8

Run it:

docker run --rm -p 8080:8080 ghcr.io/huzefaaa2/terraform-guardrail:v0.2.8

Docker Compose Stack (Local Dev)

Bring up API + Streamlit UI + policy registry:

docker compose up --build

Enable optional analytics (Prometheus + Grafana):

docker compose --profile analytics up --build

Service URLs:

flowchart LR
    subgraph ComposeStack[Docker Compose Stack]
        UI([Streamlit UI])
        API([REST API])
        REG[(Policy Registry)]
        PROM[[Prometheus]]
        GRAF[[Grafana]]
    end
    UI --> API
    API -.-> REG
    API --> PROM
    PROM --> GRAF

    classDef core fill:#e8f5e9,stroke:#2e7d32,stroke-width:1px,color:#1b5e20;
    classDef optional fill:#fff3e0,stroke:#ef6c00,stroke-width:1px,color:#e65100;
    class UI,API,REG core;
    class PROM,GRAF optional;

Release Links

Deployment Guide

See docs/streamlit_cloud.md for a detailed Streamlit Cloud walkthrough.

Release Checklist

  • Update version in pyproject.toml.
  • Update RELEASE_NOTES.md and CHANGELOG.md.
  • Commit changes and push to main.
  • Create and push a tag: git tag -a vX.Y.Z -m "vX.Y.Z" then git push origin vX.Y.Z.
  • Confirm GitHub Actions release workflow completed successfully.

Changelog Automation

This repo uses git-cliff to generate CHANGELOG.md.

git cliff -o CHANGELOG.md

Or run:

make changelog

Release Helpers

make release-dry VERSION=0.2.8
make version-bump VERSION=0.2.8

MCP tools (current)

  • scan_terraform: Run compliance checks over a path and optional state file.
  • get_provider_metadata: Fetch provider metadata from Terraform Registry.
  • generate_snippet: Generate Terraform snippets for common resources.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

terraform_guardrail-0.2.8.tar.gz (23.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

terraform_guardrail-0.2.8-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

File details

Details for the file terraform_guardrail-0.2.8.tar.gz.

File metadata

  • Download URL: terraform_guardrail-0.2.8.tar.gz
  • Upload date:
  • Size: 23.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for terraform_guardrail-0.2.8.tar.gz
Algorithm Hash digest
SHA256 df53a68b066f651cc26569b3efe3285b151e2e355a791832fd95bf0e924dc220
MD5 56480bfc9a39bb9f1d991ba5cb437819
BLAKE2b-256 7395244115c0e06d27bf3fd78da18b5e87dc1f9526438ee7e548536f8e5544b8

See more details on using hashes here.

File details

Details for the file terraform_guardrail-0.2.8-py3-none-any.whl.

File metadata

File hashes

Hashes for terraform_guardrail-0.2.8-py3-none-any.whl
Algorithm Hash digest
SHA256 c1abfb29b97b0eae8c7b0e61bb218db36b1a6a4011738c22fdb5cf09a69e4693
MD5 28765c3d3419413fa06acd17d857faed
BLAKE2b-256 e0ab8371e7e509fec99d6e39ded95e1a119a307f7e5056415e8704b59e371d78

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page