22.1 / 30
Public leaderboard
Public assessment
RajeevSirohi/mcp-server-terraform (@rajsir/mcp-server-terraform)
What changed in the harness
Selection accuracy 98→100, token cost up 5%, unconfirmed writes 74%→68%.
Category breakdown
Where the score comes from.
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
01Safety
02Legibility
25.6 / 30
03Economics
19.5 / 20
04Discoverability
11.9 / 20
Highest-impact fix
Estimated gain +8 pointsMake target tools discoverable on the first call
Clarify tool names, decision boundaries, and required argument schemas so an agent can choose and construct the target call without exploratory steps.
Description evidence
Defects and rewrites.
8 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.
| Tool | Defect types | Suggested rewrite |
|---|---|---|
tf_validate |
no_return_description |
Validate Terraform configuration files in a directory for syntax errors and internal consistency (e.g. type mismatches, invalid references). Does not access remote state or APIs. Returns a list of validation errors and warnings, or confirmation that the configuration is valid. |
tf_preflight |
no_return_description |
Check which cloud providers are used in a Terraform workspace and verify authentication status for each. Call this before plan or apply to catch credential issues early. Returns, per detected provider, its name and whether valid credentials were found, plus any authentication errors encountered. |
tf_drift |
no_return_description |
Detect infrastructure drift — resources that were changed outside of Terraform (e.g. manually in the cloud console). Runs a refresh-only plan and reports differences between state and reality. Read-only, makes no changes. Returns a human-readable diff listing resources and attributes that differ between recorded state and actual infrastructure. |
tf_destroy |
no_return_description |
Destroy all Terraform-managed infrastructure in the workspace. TWO-STEP SAFETY FLOW: 1. Call without confirmed=true → returns the destroy plan (a list of resources that would be deleted) without making changes. 2. Call with confirmed=true after the user explicitly approves → destroys everything and returns a summary of destroyed resources. This is irreversible. Always show the plan and get explicit user approval first. |
tf_state |
no_return_description |
Manage Terraform state. Supports the following operations: - list: returns the list of resource addresses currently in state - show: returns the full attribute set of the specified resource - mv: moves/renames a resource in state and returns confirmation of the new address (use with care) - rm: removes a resource from state without destroying it and returns confirmation (destructive to state tracking) |
tf_resource |
no_return_description |
Resource-level state operations: - import: brings an existing cloud resource under Terraform management (requires address + id) and returns the imported resource's state - taint: marks a resource for recreation on next apply (requires address) and returns confirmation - untaint: removes the taint mark and returns confirmation - refresh: syncs state with real infrastructure, accepting drift into state, and returns the updated state summary |
tf_init |
no_return_description |
Initialize a Terraform working directory by downloading providers and modules. Run this before plan or apply on a fresh workspace. Returns the initialization log, including provider/module versions installed and any errors encountered. |
tf_workspace |
no_return_description |
Manage Terraform workspaces. Supports: - list: returns all workspace names and marks which one is active - show: returns the current workspace name - select: switches the active workspace and returns confirmation - new: creates a new workspace and returns confirmation |
Selection evidence
Confusable tool pairs.
6 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
tf_destroy |
tf_state |
high | A vague instruction like 'remove this resource from my Terraform setup' is ambiguous between tf_destroy (irreversibly deletes the real cloud resource) and tf_state's 'rm' operation (only stops tracking it in state, leaving the resource running) — picking the wrong one has severe, opposite-direction consequences. |
tf_drift |
tf_resource |
high | Tasks like 'sync my state with what's actually deployed' or 'reconcile drift' could map to either tf_drift (read-only report of differences) or tf_resource's 'refresh' operation (actually writes drift into state), which have very different safety implications despite similar goals. |
tf_validate |
tf_preflight |
medium | Both are described as pre-run sanity checks ('check if my Terraform is ready to apply'); tf_validate checks config syntax while tf_preflight checks cloud credentials, and a generic 'make sure everything's OK before I apply' request doesn't clearly indicate which check is meant. |
tf_plan |
tf_preflight |
medium | tf_preflight's description explicitly frames itself as a step to run 'before plan or apply', so a task like 'check everything is ready to go' could plausibly trigger either the auth-check tool or a dry-run plan instead. |
tf_validate |
tf_plan |
medium | A task such as 'check if this Terraform config will work' is ambiguous between tf_validate (syntax/consistency check) and tf_plan (a diff showing what would actually change), since both are framed as safe pre-apply checks. |
tf_state |
tf_workspace |
medium | Both tools support 'list' and 'show' operations and share the word 'state'/'current'; a request like 'show me the current state' could be misrouted to tf_workspace's 'show' (current workspace name) instead of tf_state's 'list' (resources in state), or vice versa. |
Compare the field