Skip to main content

MCP Tool Reference

Terraback's MCP server exposes six tools. Every tool that touches a cloud provider takes a provider argument (aws, azure, or gcp) and a scope argument whose meaning depends on the provider:

providerscope means
awsan AWS region, e.g. "us-east-1"
azurean Azure subscription ID
gcpa GCP project ID

AWS tools additionally accept an optional profile (a named AWS CLI profile). Azure/GCP scope resolution does not currently accept a sub-scope (Azure resource group, GCP zone) through the MCP layer — scans run against the whole subscription/project.

Terraback authenticates using each provider's normal ambient credential chain; none of the tools accept credentials as arguments. See Security and Credentials for the recommended read-only roles.


scan_infrastructure​

Run a read-only inventory scan of live cloud infrastructure.

Read-only guarantee: never writes Terraform files, never touches state, never imports anything.

Parameters​

NameTypeRequiredDefaultDescription
providerstring (aws | azure | gcp)yes-Cloud provider to scan.
scopestringyes-Scan boundary: AWS = region (e.g. "us-east-1"), Azure = subscription ID, GCP = project ID.
typesarray<string> | nullnonullOptional list of resource type names to restrict the scan to, e.g. ["ec2", "aws_vpc"]. Bare names and full registry keys are both accepted. Omit to scan every type registered for the provider.
tag_filtersobject | nullnonullOptional tag key/value pairs a resource must match on (all pairs required). Resources with no discoverable tags are excluded whenever this is supplied.
workdirstring | nullnonull (a directory under the system temp directory)Directory for scratch scan output and the full inventory JSON file.
profilestring | nullnonullAWS named profile to use. Ignored for azure/gcp.

Returns​

A summary of the scan: summary.total and summary.counts_by_type. The full resource list is inlined in the response only up to 200 entries; for larger inventories the result instead points at an inventory_file on disk — read that JSON file to see individual resources. See Troubleshooting for the large-inventory pattern.

Example call​

{
"provider": "aws",
"scope": "us-east-1",
"types": ["ec2", "aws_vpc"]
}

detect_unmanaged​

Diff a live cloud inventory against local Terraform state to find unmanaged resources.

Read-only guarantee: nothing is written to state and nothing is imported.

Parameters​

NameTypeRequiredDefaultDescription
providerstring (aws | azure | gcp)yes-Cloud provider to scan.
scopestringyes-Scan boundary: AWS = region, Azure = subscription ID, GCP = project ID.
state_filesarray<string>yes-Paths to one or more LOCAL Terraform state JSON files (e.g. a checked-out terraform.tfstate, or terraform state pull > state.json). Remote backends are not read directly in v1.
typesarray<string> | nullnonullOptional list of resource type names to restrict the scan to.
workdirstring | nullnonullDirectory for scratch scan output and the inventory file.

Returns​

The resources found in the live scan that are not present in the given state_files — the unmanaged resources an agent should target next in the import loop. Work only on what this tool reports; never touch resources already present in state.

v1 reads local state file paths only. For remote backends (S3, azurerm, GCS, Terraform Cloud/Enterprise), run terraform state pull > state.json first and pass that path — see Troubleshooting.

Example call​

{
"provider": "azure",
"scope": "00000000-0000-0000-0000-000000000000",
"state_files": ["./state.json"]
}

codify_resource​

Generate Terraform HCL and an import block for exactly one resource.

Read-only guarantee: does not import into state - generates code only.

Parameters​

NameTypeRequiredDefaultDescription
providerstring (aws | azure | gcp)yes-Cloud provider.
scopestringyes-AWS = region, Azure = subscription ID, GCP = project ID.
typestringyes-Resource type name, bare (e.g. "ec2") or full registry key (e.g. "aws_ec2"). Call list_supported_resources to see valid types.
resource_idstringyes-The cloud-provider ID (or ARN) of the resource to codify.
output_dirstringno"./generated"Directory to write the generated Terraform into.
profilestring | nullnonullAWS named profile to use. Ignored for azure/gcp.

Returns​

The generated Terraform HCL and its import block for the single requested resource, written to output_dir. Not subject to the Community license cap — use this tool freely for one-off resources even on the free tier.

Example call​

{
"provider": "aws",
"scope": "us-east-1",
"type": "aws_instance",
"resource_id": "i-0123456789abcdef0",
"output_dir": "./generated"
}

codify_batch​

Scan and generate Terraform HCL and import blocks for a batch of resources.

Read-only guarantee: does not import into state - generates code only.

Parameters​

NameTypeRequiredDefaultDescription
providerstring (aws | azure | gcp)yes-Cloud provider.
scopestringyes-AWS = region, Azure = subscription ID, GCP = project ID.
typesarray<string> | nullnonullOptional list of resource type names to restrict the batch to.
tag_filtersobject | nullnonullOptional tag key/value pairs a resource must match on (all pairs required).
output_dirstringno"./generated"Directory to write the generated Terraform into.
exclude_managedbooleannofalseWhen true and state_files are given, resources already present in state are fully excluded from the generated output. Requires state_files; if omitted, a warning is returned and nothing is excluded.
state_filesarray<string> | nullnonullPaths to LOCAL Terraform state JSON files (v1: local paths only, no remote backends).
profilestring | nullnonullAWS named profile to use. Ignored for azure/gcp.

Returns​

Generated Terraform HCL and import blocks for the matched batch of resources, written to output_dir.

On the Community (free) tier, a single call is capped at 25 total resources (counted after tag_filters are applied, before exclude_managed is applied). If the requested scope has more resources than that, the tool returns an error and writes nothing to output_dir:

{
"error": "resource_cap_exceeded",
"total": 143,
"cap": 25,
"counts_by_type": {"aws_ec2": 40, "aws_ebs_volume": 103},
"hint": "..."
}

Narrow the request with types or tag_filters, or upgrade to Professional to lift the cap — see Licensing and Limits.

Example call​

{
"provider": "gcp",
"scope": "my-project",
"types": ["google_storage_bucket"],
"tag_filters": {"env": "prod"},
"output_dir": "./generated"
}

verify_plan​

Run a read-only terraform plan against a generated directory and report drift.

Read-only guarantee: never applies, imports, or otherwise mutates state.

Parameters​

NameTypeRequiredDefaultDescription
terraform_dirstringyes-Directory containing the generated .tf files.

Returns​

A drift status of "none", "drift_detected", or "plan_failed", plus a summary object with imports, adds, changes, and destroys counts, and per-resource lists (change_resources, add_resources, destroy_resources) for triaging what to fix. Pending imports are expected and are not drift; adds, changes, and destroys indicate the generated configuration does not yet match the live resource and should be fixed before importing.

Requires Terraform 1.5 or newer on PATH — import blocks require Terraform 1.5+. verify_plan itself needs no cloud credentials beyond what a normal terraform plan requires, since Terraform re-reads live resource state as part of planning.

Example call​

{
"terraform_dir": "./generated"
}

list_supported_resources​

List resource types Terraback can scan and codify, grouped by provider.

Read-only guarantee: does not touch any cloud provider.

Parameters​

NameTypeRequiredDefaultDescription
providerstring | null (aws | azure | gcp | null)nonullRestrict the listing to one provider. Omit to list all three.

Returns​

The resource type names Terraback can scan and codify, grouped by provider. Use the returned type names in the types argument of scan_infrastructure, detect_unmanaged, and codify_batch, and in the type argument of codify_resource.

Example call​

{
"provider": "aws"
}

Omit provider (or pass {}) to list resource types for all three clouds.