tf-approval-gate
This server lets AI agents safely manage Terraform changes by planning, policy-checking, and cost-estimating them, while making it impossible to apply without a real human's explicit approval.
Initialize or write Terraform files in a sandboxed workspace (
tf_workspace_init,tf_write_file)Run
terraform planand get a resource-level change summary (tf_plan)Run policy checks with Checkov and OPA/Conftest (
tf_policy_check)Estimate monthly cost changes with Infracost (
tf_cost_estimate)Get a combined proposal with plan, policy, and cost plus a safe/needs_review/blocked recommendation (
tf_propose_change)Request human approval via Slack buttons or server-terminal CLI prompt (
tf_request_approval)Poll for approval status and receive a signed, single-use approval token only after a human approves (
tf_check_approval_status)Run
terraform applyonly with a valid approval ID and token, which the server verifies for signature, expiry, single-use, plan checksum, and drift (tf_apply)Optionally override blocking policy verdicts if explicitly enabled server-side
Provides monthly cost estimates for Terraform changes as part of the proposed plan, used when Infracost is configured.
Posts proposed Terraform changes to Slack with Approve/Reject buttons and only allows approval from allow-listed Slack users, minting a token for terraform apply.
Runs Terraform plan, policy checks, and cost estimation in a sandboxed workdir, and gates terraform apply behind a signed, single-use approval token.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tf-approval-gatePlan my Terraform changes, run policy checks, and request approval."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TF Approval Gate
An MCP server that lets AI coding agents (Claude Code, Cursor, etc.) plan,
policy-check, and cost-estimate Terraform changes -- but makes it
structurally impossible for the agent to run terraform apply without a
real human clicking Approve in Slack first.
Why
AI agents can now write and run Terraform directly against real cloud
accounts. An agent that can terraform apply on its own can silently
destroy or misconfigure production infrastructure with no human in the loop.
TF Approval Gate closes that gap: every apply requires a signed, single-use
token that only a real human's Slack click (or, in dev mode, a real human at
a terminal) can mint. The agent's own claim that "the human approved" is
never trusted -- the server re-verifies everything itself.
Related MCP server: Hivelore
How it works
Agent edits
.tffiles, then callstf_propose_change-- runsterraform plan, Checkov (+ OPA if configured), and Infracost (if configured), and returns one bundled proposal with a safe/needs_review/blocked recommendation.Agent calls
tf_request_approval-- posts the diff + policy findings + cost to Slack with Approve/Reject buttons (or prompts on the server's terminal inAPPROVAL_MODE=cli). Refuses to post at all if policy findings are blocking.Agent polls
tf_check_approval_status.A human clicks Approve → the server verifies the click came from an allow-listed Slack user and mints a signed, single-use token bound to that exact plan's checksum.
Agent calls
tf_applywith the token. The server re-verifies signature, expiry, single-use status, the plan's binary checksum, and checks for cloud-side drift -- only then does it runterraform apply.
See docs/architecture.md and docs/security-model.md for the full design and threat model.
Quick start (local, no Slack setup needed)
git clone https://github.com/SORABH13/tf-approval-gate.git
cd tf-approval-gate
npm install
npm run build
npm run check-binaries # confirms terraform + checkov are on PATHRequires Terraform and
Checkov on
PATH. OPA/Conftest and Infracost are optional (features soft-skip if
missing). Or skip installing anything and use the
Docker image below, which bundles all three.
Run it in dev mode (APPROVAL_MODE=cli prints the diff to the server's
terminal and waits for a y/n instead of posting to Slack -- good for a first
local test, weaker guarantee than Slack, see
docs/security-model.md):
APPROVAL_MODE=cli TF_APPROVAL_GATE_SECRET=$(openssl rand -hex 32) npm startThen add it as an MCP server in Claude Code (or any MCP client):
{
"mcpServers": {
"tf-approval-gate": {
"command": "node",
"args": ["/absolute/path/to/tf-approval-gate/dist/index.js"],
"env": {
"APPROVAL_MODE": "cli",
"TF_APPROVAL_GATE_SECRET": "<same secret as above>"
}
}
}
}Point your agent at examples/local-demo (uses the null/random
providers, no cloud credentials required) and ask it to run
tf_workspace_init → tf_propose_change → tf_request_approval →
tf_apply.
Docker / devcontainer
docker build produces an image with Node, Terraform, Checkov, and
Conftest (OPA) preinstalled -- no host setup beyond Docker itself.
docker build -t tf-approval-gate .
docker run --rm -it \
-e APPROVAL_MODE=cli \
-e TF_APPROVAL_GATE_SECRET=$(openssl rand -hex 32) \
-v "$(pwd)/examples/local-demo":/examples/local-demo:ro \
-v tf-approval-gate-data:/data \
tf-approval-gateFor Slack mode, add -e SLACK_BOT_TOKEN=... -e SLACK_APP_TOKEN=... -e SLACK_APPROVAL_CHANNEL=... -e SLACK_APPROVER_USER_IDS=...
and drop APPROVAL_MODE=cli. Approval state persists in the /data volume
(SQLite-backed, see docs/architecture.md).
A .devcontainer/devcontainer.json is
also included for VS Code / GitHub Codespaces -- open the repo in a
container and terraform/checkov/conftest are ready immediately.
Slack setup (production mode)
Create a Slack app from examples/slack-app-manifest.yml.
Enable Socket Mode, generate an app-level token (
xapp-...).Install the app to your workspace, copy the bot token (
xoxb-...).Set
SLACK_BOT_TOKEN,SLACK_APP_TOKEN,SLACK_APPROVAL_CHANNEL, andSLACK_APPROVER_USER_IDS(comma-separated Slack user IDs allowed to click Approve/Reject) -- see .env.example.Run with
APPROVAL_MODE=slack(the default).
Full walkthrough: docs/slack-setup.md.
Tools
Tool | Purpose |
| Checks out/copies a Terraform project into a sandboxed workdir. |
| Writes |
|
|
| Checkov (+ OPA/Conftest) against the plan, merged into one report. |
| Infracost monthly cost delta (skipped if unconfigured). |
| Composite: plan + policy + cost in one call. Call this first. |
| Posts to Slack (or CLI) for human approval. |
| Poll for the signed approval token. |
| The only tool that runs |
Full reference: docs/tool-reference.md.
License
MIT -- see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceHuman-in-the-Loop authorization gateway for AI Agents. Securely pause MCP workflows and route high-risk actions to human approvers via Slack or Email.1151MIT
- AlicenseAqualityAmaintenanceEnforces team knowledge and workflow policies for AI coding agents by providing context, decisions, and gates before code changes are made.2151Apache 2.0
- AlicenseNot gradedqualityBmaintenanceAutonomous multi-agent pipeline that analyzes Terraform files for cost, governance, and compliance issues, providing real-time remediation and XAI console for human-in-the-loop approval.MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI coding agents to evaluate actions against team-defined policies, record decisions, and obtain human approvals for potentially risky operations.1651
Related MCP Connectors
Human-in-the-loop for AI coding agents — ask questions, get approvals via Slack.
See, price, and control every tool call your AI agents make: policy checks, cost, and audit tools.
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SORABH13/tf-approval-gate'
If you have feedback or need assistance with the MCP directory API, please join our Discord server