Skip to main content
Glama

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

Как это работает

  1. Агент редактирует .tf-файлы, затем вызывает tf_propose_change — запускает terraform plan, Checkov (+ OPA, если настроен) и Infracost (если настроен) и возвращает одно объединённое предложение с рекомендацией safe/needs_review/blocked.

  2. Агент вызывает tf_request_approval — отправляет diff + результаты проверки политик + стоимость в Slack с кнопками Approve/Reject (или выводит запрос в терминал сервера при APPROVAL_MODE=cli). Вообще отказывается отправлять, если результаты проверки политик блокирующие.

  3. Агент опрашивает tf_check_approval_status.

  4. Человек нажимает Approve → сервер проверяет, что клик сделан Slack-пользователем из разрешённого списка, и выпускает подписанный одноразовый токен, привязанный к контрольной сумме именно этого плана.

  5. Агент вызывает 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_inittf_propose_changetf_request_approvaltf_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-режим)

  1. Создайте Slack-приложение из examples/slack-app-manifest.yml.

  2. Включите Socket Mode и сгенерируйте токен уровня приложения (xapp-...).

  3. Установите приложение в рабочее пространство и скопируйте токен бота (xoxb-...).

  4. Задайте SLACK_BOT_TOKEN, SLACK_APP_TOKEN, SLACK_APPROVAL_CHANNEL и SLACK_APPROVER_USER_IDS (разделённые запятыми Slack ID пользователей, которым разрешено нажимать Approve/Reject) — см. .env.example.

  5. Запустите с APPROVAL_MODE=slack (используется по умолчанию).

Полное руководство: docs/slack-setup.md.

Инструменты

Инструмент

Назначение

tf_workspace_init

Клонирует/копирует Terraform-проект в изолированную рабочую директорию.

tf_write_file

Записывает .tf/.tfvars для агентов без собственного доступа к файловой системе.

tf_plan

terraform init && plan, возвращает сводку изменений по каждому ресурсу.

tf_policy_check

Проверка Checkov (+ OPA/Conftest) по плану, объединённая в один отчёт.

tf_cost_estimate

Infracost — изменение месячной стоимости (пропускается, если не настроен).

tf_propose_change

Комбинированный: план + политики + стоимость в одном вызове. Вызывайте первым.

tf_request_approval

Отправляет запрос на одобрение человеком в Slack (или CLI).

tf_check_approval_status

Опрашивает получение подписанного токена одобрения.

tf_apply

Единственный инструмент, выполняющий terraform apply. Требует действительный токен.

Полная справка: 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.

A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    D
    maintenance
    Human-in-the-Loop authorization gateway for AI Agents. Securely pause MCP workflows and route high-risk actions to human approvers via Slack or Email.
    115
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Autonomous 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
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI coding agents to evaluate actions against team-defined policies, record decisions, and obtain human approvals for potentially risky operations.
    165
    1

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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