
Любой, кто просил ChatGPT или Claude накидать конфиг Terraform, знает этот жанр: модель уверенно пишет HCL, который был актуален год назад. acl = "private" прямо внутри aws_s3_bucket, аргументы, которые провайдер депрекейтнул ещё в четвёртой мажорной версии, ссылки на ресурсы, переименованные пару релизов назад. Причина простая — у модели знания на момент обучения, а реестр провайдеров живёт своей жизнью и меняется каждую неделю.
11 июня 2026 HashiCorp (теперь уже под крылом IBM) перевела в GA свой ответ на эту боль — Terraform MCP Server 1.0. Это официальный MCP-сервер, который даёт AI-ассистенту прямой доступ к Terraform Registry: актуальная документация провайдеров, модули, политики — в момент запроса, а не из training data.
Разберём, что он реально умеет, как поднять стенд за пять минут и где категорически нельзя пускать агента к инфраструктуре без поводка.
Зачем вообще прокладка между LLM и реестром
MCP (Model Context Protocol) — открытый стандарт от Anthropic, по которому модель ходит во внешние инструменты. Тут теории достаточно: есть хост (Claude Desktop, Cursor, VS Code), есть MCP-клиент внутри него, и есть сервер, который отдаёт инструменты. Всё.
Важно другое — что именно сервер кладёт модели в контекст. Terraform MCP Server не «применяет Terraform за вас». Он отдаёт модели набор tools, которыми та сама пользуется, когда вы просите написать или поправить конфиг:
search_providers— найти провайдера в реестре;get_provider_details— вытащить актуальную документацию по ресурсам и аргументам;get_latest_provider_version— проверить свежую версию;search_modules/get_module_details— модули с их inputs/outputs и примерами;поиск Sentinel-политик для governance и compliance.
Инструменты сгруппированы в три toolset’а — registry, registry-private и terraform — и включаются/отключаются флагом --toolsets. Это удобно: для локальной разработки достаточно публичного registry, а terraform (операции над workspace в HCP/TFE) можно вообще не поднимать.
Без MCP против с MCP
Самый честный способ показать ценность — один и тот же промпт на свежий ресурс.
Классический пример — S3-бакет. Модель без доступа к реестру с большой вероятностью выдаст старый стиль:
# то, что напишет LLM по памяти — стиль, депрекейтнутый в AWS provider v4 resource "aws_s3_bucket" "data" { bucket = "my-data" acl = "private" versioning { enabled = true } }
Тут двойная беда. Во-первых, acl и versioning внутри aws_s3_bucket депрекейтнуты и вынесены в отдельные ресурсы ещё в четвёртой версии провайдера. Во-вторых, и это любят забывать: с 2023 года S3 по умолчанию отключает ACL (Bucket Owner Enforced), приватность — это и так дефолт, а отдельный aws_s3_bucket_acl с private на свежем бакете просто упадёт.
Модель, сходив через MCP в search_providers и get_provider_details за актуальной документацией, ACL для приватного бакета не пишет вообще. Корректный современный конфиг — без ACL-ресурса, с вынесенным версионированием и явным блоком публичного доступа:
resource "aws_s3_bucket" "data" { bucket = "my-data" } resource "aws_s3_bucket_versioning" "data" { bucket = aws_s3_bucket.data.id versioning_configuration { status = "Enabled" } } resource "aws_s3_bucket_public_access_block" "data" { bucket = aws_s3_bucket.data.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true }
Разница не в том, что модель «поумнела». Она перестала угадывать и сходила за фактами. Для редких провайдеров и свежих мажорных версий, где обучающих данных мало, эффект заметнее всего.
Стенд за пять минут
Сервер ездит в Docker-контейнере и поддерживает два транспорта: stdio (локально) и streamable-http (удалённо). Для публичного реестра токен не нужен вообще.
Локальный запуск под stdio:
docker run -i --rm hashicorp/terraform-mcp-server
Подключение в хост (пример для конфигов на базе MCP — Claude Desktop, Cursor, VS Code agent mode):
{ "mcpServers": { "terraform": { "command": "docker", "args": ["run", "-i", "--rm", "hashicorp/terraform-mcp-server"] } } }
Всё — дальше модель сама находит и вызывает нужные tools, когда вы просите HCL.

HCP Terraform и Enterprise: приватный registry в контексте модели
Публичный реестр — это приятно, но настоящая ценность для команд в приватной части. Подключив TFE_TOKEN и TFE_ADDRESS, вы пробрасываете в контекст модели свой приватный registry: внутренние модули с их документацией, провайдеры, организации и workspace.
docker run -i --rm \ -e TFE_ADDRESS=https://app.terraform.io \ -e TFE_TOKEN=*** \ hashicorp/terraform-mcp-server
В режиме HCP/TFE доступны операции над workspace, переменными, тегами и run’ами. И вот тут принципиальный момент: деструктивные операции по умолчанию выключены. Apply, destroy, auto-approve и часть run-операций спрятаны за флагом ENABLE_TF_OPERATIONS — по дефолту он false, и это правильный дефолт. Но не обманывайтесь: что агент в принципе может читать и менять, определяется правами самого TFE_TOKEN, а не только этим флагом. Так что least privilege на токене — не опция.
Безопасность: где поводок обязателен
HashiCorp в документации честно перечисляет модель угроз, и её стоит прочитать до того, как подключать сервер к боевому токену. Помимо обычных галлюцинаций, там: prompt injection, tool poisoning, rug pull (инструмент меняет поведение после доверия) и tool shadowing. То есть это не «безопасно by design», а инструмент, который надо ограничивать.
Практический чеклист, если не хочется однажды объяснять, почему агент снёс staging:
Минимальные права токена.
TFE_TOKENдолжен видеть ровно то, что нужно ассистенту, и ничего сверх. Никакого «дам админский, потом разберусь».ENABLE_TF_OPERATIONS=false, пока вы осознанно не решите иначе. Деструктивные операции — отдельный разговор и отдельный токен.Не светить приватный registry в общий агент. Внутренние модули — это карта вашей инфраструктуры.
Никогда
TFE_SKIP_TLS_VERIFY=trueв проде.Remote — только
streamable-httpс обвязкой: TLS (MCP_TLS_CERT_FILE/MCP_TLS_KEY_FILE), строгий CORS, IP allowlist, встроенные rate limit’ы (MCP_RATE_LIMIT_GLOBALпо умолчанию10:20,MCP_RATE_LIMIT_SESSION—5:10). Локально же хватает stdio или127.0.0.1.
Отдельно про наблюдаемость: в streamable-http режиме сервер умеет отдавать OTel-метрики (OTEL_METRICS_ENABLED) — объём вызовов tools, latency, ошибки. Для прод-разворота это не опция, а гигиена.
Подводные камни
Контекст пухнет. Документация жирных провайдеров вроде AWS — это много токенов. Агент, который активно ходит в реестр, ест контекст и деньги быстрее, чем кажется.
Rate limit самого Registry. Зациклившийся в поиске агент упрётся в лимиты API реестра.
Привязка к экосистеме HashiCorp. Сервер официально заточен под Terraform Registry и HCP/TFE. OpenTofu как поддерживаемый сценарий не заявлен — хотя provider/module-документация из реестра по-прежнему полезна и для HCL-совместимых конфигов.
Итог
Terraform MCP Server не «отдаёт инфраструктуру ИИ» и не «лечит галлюцинации» — так формулировать неправильно. Он делает одну важную вещь: убирает устаревание контекста, чтобы модель писала HCL по актуальной схеме провайдера, а не по памяти годичной давности. Code review при этом никто не отменял.
Для девопса это редкий случай, когда AI-инструмент попадает ровно в рабочий процесс, а не в демо. Поднять стенд — пять минут и один docker run. Главное — держать агента на коротком поводке: минимальные права, выключенные по умолчанию деструктивные операции и threat model, прочитанная заранее, а не после инцидента.
А вы бы пустили агента в свой приватный registry — и на каких правах?
