tf-approval-gate
TF Approval Gate
MCP-сервер, который позволяет AI-агентам кодирования (Claude Code, Cursor и т. д.) планировать, проверять политики и оценивать стоимость изменений Terraform — но делает структурно невозможным для агента запуск terraform apply без того, чтобы реальный человек сначала нажал Approve в Slack.
Зачем
AI-агенты теперь могут писать и запускать Terraform напрямую против реальных облачных аккаунтов. Агент, способный самостоятельно выполнить terraform apply, может незаметно уничтожить или неправильно сконфигурировать продакшн-инфраструктуру без участия человека. TF Approval Gate закрывает этот разрыв: каждый apply требует подписанный одноразовый токен, который может выпустить только клик реального человека в Slack (или, в dev-режиме, реальный человек за терминалом). Собственное утверждение агента о том, что «человек одобрил», никогда не принимается на веру — сервер самостоятельно перепроверяет всё.
Related MCP server: Hivelore
Как это работает
Агент редактирует
.tf-файлы, затем вызываетtf_propose_change— запускаетterraform plan, Checkov (+ OPA, если настроен) и Infracost (если настроен) и возвращает одно объединённое предложение с рекомендацией safe/needs_review/blocked.Агент вызывает
tf_request_approval— отправляет diff + результаты проверки политик + стоимость в Slack с кнопками Approve/Reject (или выводит запрос в терминал сервера приAPPROVAL_MODE=cli). Вообще отказывается отправлять, если результаты проверки политик блокирующие.Агент опрашивает
tf_check_approval_status.Человек нажимает Approve → сервер проверяет, что клик сделан Slack-пользователем из разрешённого списка, и выпускает подписанный одноразовый токен, привязанный к контрольной сумме именно этого плана.
Агент вызывает
tf_applyс токеном. Сервер повторно проверяет подпись, срок действия, одноразовый статус, бинарную контрольную сумму плана и проверяет дрейф на стороне облака — и только затем запускаетterraform apply.
Полное описание архитектуры и модель угроз см. в docs/architecture.md и docs/security-model.md.
Быстрый старт (локально, без настройки Slack)
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 PATHТребуются Terraform и Checkov в PATH. OPA/Conftest и Infracost опциональны (если их нет, соответствующие функции мягко пропускаются). Либо пропустите установку чего-либо и используйте Docker-образ ниже — в нём уже есть все три.
Запустите его в dev-режиме (APPROVAL_MODE=cli выводит diff в терминал сервера и ждёт ответа y/n вместо отправки в Slack — подходит для первого локального теста, но даёт более слабую гарантию, чем Slack; см. docs/security-model.md):
APPROVAL_MODE=cli TF_APPROVAL_GATE_SECRET=$(openssl rand -hex 32) npm startЗатем добавьте его как MCP-сервер в Claude Code (или любой MCP-клиент):
{
"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>"
}
}
}
}Укажите вашему агенту на examples/local-demo (используются провайдеры null/random, облачные учётные данные не требуются) и попросите его выполнить tf_workspace_init → tf_propose_change → tf_request_approval → tf_apply.
Docker / devcontainer
docker build создаёт образ с предустановленными Node, Terraform, Checkov и Conftest (OPA) — помимо самого Docker, на хосте ничего настраивать не нужно.
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-gateДля Slack-режима добавьте -e SLACK_BOT_TOKEN=... -e SLACK_APP_TOKEN=... -e SLACK_APPROVAL_CHANNEL=... -e SLACK_APPROVER_USER_IDS=... и уберите APPROVAL_MODE=cli. Состояние одобрений сохраняется в томе /data (на базе SQLite, см. docs/architecture.md).
Также включён .devcontainer/devcontainer.json для VS Code / GitHub Codespaces — откройте репозиторий в контейнере, и terraform/checkov/conftest будут сразу готовы.
Настройка Slack (production-режим)
Создайте Slack-приложение из examples/slack-app-manifest.yml.
Включите Socket Mode и сгенерируйте токен уровня приложения (
xapp-...).Установите приложение в рабочее пространство и скопируйте токен бота (
xoxb-...).Задайте
SLACK_BOT_TOKEN,SLACK_APP_TOKEN,SLACK_APPROVAL_CHANNELиSLACK_APPROVER_USER_IDS(разделённые запятыми Slack ID пользователей, которым разрешено нажимать Approve/Reject) — см. .env.example.Запустите с
APPROVAL_MODE=slack(используется по умолчанию).
Полное руководство: docs/slack-setup.md.
Инструменты
Инструмент | Назначение |
| Клонирует/копирует Terraform-проект в изолированную рабочую директорию. |
| Записывает |
|
|
| Проверка Checkov (+ OPA/Conftest) по плану, объединённая в один отчёт. |
| Infracost — изменение месячной стоимости (пропускается, если не настроен). |
| Комбинированный: план + политики + стоимость в одном вызове. Вызывайте первым. |
| Отправляет запрос на одобрение человеком в Slack (или CLI). |
| Опрашивает получение подписанного токена одобрения. |
| Единственный инструмент, выполняющий |
Полная справка: docs/tool-reference.md.
Статус
Реализованы и протестированы версии v0.1–v0.4: основной путь (Checkov, Slack Socket Mode / запасной вариант CLI), OPA/Conftest, оценка стоимости Infracost и хранилище одобрений на SQLite с атомарным потреблением одноразовых токенов. Docker-образ и devcontainer собраны и проверены. Реальные сквозные запуски выполнялись как на локальном демо с null/random, так и на реальном AWS-аккаунте (examples/aws-s3-demo). Полную дорожную карту и список того, что ещё осталось до публичного анонса (демо-GIF и внешнее холодное тестирование — см. CONTRIBUTING.md), см. в docs/architecture.md.
Лицензия
MIT — см. 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