tf-approval-gate
TF Approval Gate
AIコーディングエージェント(Claude Code、Cursor など)が Terraform の変更を計画・ポリシーチェック・コスト見積もりできるようにする MCP サーバーでありながら、実際の人間が Slack で Approve をクリックしない限り、エージェントが terraform apply を実行することを 構造的に不可能 にします。
なぜ
AIエージェントは現在、実際のクラウドアカウントに対して直接 Terraform を記述・実行できます。単独で terraform apply を実行できるエージェントは、人間が介在しないまま、本番インフラを静かに破壊したり誤設定したりする可能性があります。TF Approval Gate はそのギャップを埋めます。すべての apply には、実際の人間の Slack クリック(または開発モードではターミナルにいる人間)だけが発行できる、署名付きの使い捨てトークンが必要です。「人間が承認した」というエージェント自身の主張は決して信頼されず、サーバーがすべてを自ら再検証します。
Related MCP server: Hivelore
動作の仕組み
エージェントは
.tfファイルを編集し、tf_propose_changeを呼び出します。terraform plan、Checkov(設定されていれば OPA)、Infracost(設定されていれば)を実行し、safe/needs_review/blocked の推奨事項を含む1つのバンドルされた提案を返します。エージェントは
tf_request_approvalを呼び出します。diff + ポリシー検出結果 + コストを、Approve/Reject ボタン付きで Slack に投稿します(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 PATHPATH に Terraform と Checkov が必要です。OPA/Conftest と Infracost はオプションです(存在しない場合は機能が自動的にスキップされます)。または、何もインストールせずに、以下の Docker image を使用できます。これには3つすべてがバンドルされています。
開発モードで実行します(APPROVAL_MODE=cli は、diff をサーバーのターミナルに出力し、Slack に投稿する代わりに y/n の入力を待ちます。最初のローカルテストに適していますが、Slack よりも保証が弱いため、docs/security-model.md を参照してください):
APPROVAL_MODE=cli TF_APPROVAL_GATE_SECRET=$(openssl rand -hex 32) npm start次に、Claude Code(または任意の MCP クライアント)で 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-gateSlack モードの場合は、-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 を参照)。
VS Code / GitHub Codespaces 用の .devcontainer/devcontainer.json も含まれています。リポジトリをコンテナで開くと、terraform/checkov/conftest がすぐに利用できます。
Slackのセットアップ(本番モード)
examples/slack-app-manifest.yml から Slack アプリを作成します。
Socket Mode を有効にし、アプリレベルトークン(
xapp-...)を生成します。アプリをワークスペースにインストールし、ボットトークン(
xoxb-...)をコピーします。SLACK_BOT_TOKEN、SLACK_APP_TOKEN、SLACK_APPROVAL_CHANNEL、SLACK_APPROVER_USER_IDS(Approve/Reject をクリックできるカンマ区切りの Slack ユーザー ID)を設定します。.env.example を参照してください。APPROVAL_MODE=slack(デフォルト)で実行します。
詳細な手順: docs/slack-setup.md。
ツール
Tool | Purpose |
| Terraform プロジェクトをサンドボックス化された作業ディレクトリにチェックアウト/コピーします。 |
| ネイティブなファイルシステムアクセスを持たないエージェント向けに |
|
|
| プランに対する Checkov(+ OPA/Conftest)を実行し、1つのレポートに統合します。 |
| Infracost による月額コスト差分(未設定の場合はスキップ)。 |
| 複合ツール: プラン + ポリシー + コストを1回の呼び出しで実行。最初にこれを呼び出してください。 |
| 人間の承認を求めて 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