Skip to main content
Glama

terraform-cloud-mcp

server.py5.49 kB
#!/usr/bin/env python3 """ Terraform Cloud MCP Server """ import logging from fastmcp import FastMCP # Import environment configuration from terraform_cloud_mcp.utils.env import should_enable_delete_tools # Import tools and models from terraform_cloud_mcp.tools import account from terraform_cloud_mcp.tools import workspaces from terraform_cloud_mcp.tools import runs from terraform_cloud_mcp.tools import organizations from terraform_cloud_mcp.tools import plans from terraform_cloud_mcp.tools import applies from terraform_cloud_mcp.tools import projects from terraform_cloud_mcp.tools import cost_estimates from terraform_cloud_mcp.tools import assessment_results from terraform_cloud_mcp.tools import state_versions from terraform_cloud_mcp.tools import state_version_outputs from terraform_cloud_mcp.tools import variables # Configure logging logging.basicConfig(level=logging.DEBUG) # Create server instance mcp: FastMCP = FastMCP("Terraform Cloud MCP Server") # Check if delete tools should be enabled enable_delete_tools = should_enable_delete_tools() # Register account management tools mcp.tool()(account.get_account_details) # Register workspace management tools mcp.tool()(workspaces.list_workspaces) mcp.tool()(workspaces.get_workspace_details) mcp.tool()(workspaces.create_workspace) mcp.tool()(workspaces.update_workspace) mcp.tool( enabled=enable_delete_tools, annotations={"destructiveHint": True, "readOnlyHint": False}, )(workspaces.delete_workspace) mcp.tool( enabled=enable_delete_tools, annotations={"destructiveHint": True, "readOnlyHint": False}, )(workspaces.safe_delete_workspace) mcp.tool()(workspaces.lock_workspace) mcp.tool()(workspaces.unlock_workspace) mcp.tool()(workspaces.force_unlock_workspace) # Register run management tools mcp.tool()(runs.create_run) mcp.tool()(runs.list_runs_in_workspace) mcp.tool()(runs.list_runs_in_organization) mcp.tool()(runs.get_run_details) mcp.tool()(runs.apply_run) mcp.tool()(runs.discard_run) mcp.tool()(runs.cancel_run) mcp.tool()(runs.force_cancel_run) mcp.tool()(runs.force_execute_run) # Register organization management tools mcp.tool()(organizations.get_organization_details) mcp.tool()(organizations.get_organization_entitlements) mcp.tool()(organizations.list_organizations) mcp.tool()(organizations.create_organization) mcp.tool()(organizations.update_organization) mcp.tool( enabled=enable_delete_tools, annotations={"destructiveHint": True, "readOnlyHint": False}, )(organizations.delete_organization) # Register plan management tools mcp.tool()(plans.get_plan_details) mcp.tool()(plans.get_plan_json_output) mcp.tool()(plans.get_run_plan_json_output) mcp.tool()(plans.get_plan_logs) # Register apply management tools mcp.tool()(applies.get_apply_details) mcp.tool()(applies.get_errored_state) mcp.tool()(applies.get_apply_logs) # Register project management tools mcp.tool()(projects.create_project) mcp.tool()(projects.update_project) mcp.tool()(projects.list_projects) mcp.tool()(projects.get_project_details) mcp.tool( enabled=enable_delete_tools, annotations={"destructiveHint": True, "readOnlyHint": False}, )(projects.delete_project) mcp.tool()(projects.list_project_tag_bindings) mcp.tool()(projects.add_update_project_tag_bindings) mcp.tool()(projects.move_workspaces_to_project) # Register cost estimates tools mcp.tool()(cost_estimates.get_cost_estimate_details) # Register assessment results tools mcp.tool()(assessment_results.get_assessment_result_details) mcp.tool()(assessment_results.get_assessment_json_output) mcp.tool()(assessment_results.get_assessment_json_schema) mcp.tool()(assessment_results.get_assessment_log_output) # Register state version tools mcp.tool()(state_versions.list_state_versions) mcp.tool()(state_versions.get_current_state_version) mcp.tool()(state_versions.get_state_version) mcp.tool()(state_versions.create_state_version) mcp.tool()(state_versions.download_state_file) # Register state version outputs tools mcp.tool()(state_version_outputs.list_state_version_outputs) mcp.tool()(state_version_outputs.get_state_version_output) # Register variable management tools # Workspace Variables mcp.tool()(variables.list_workspace_variables) mcp.tool()(variables.create_workspace_variable) mcp.tool()(variables.update_workspace_variable) mcp.tool( enabled=enable_delete_tools, annotations={"destructiveHint": True, "readOnlyHint": False}, )(variables.delete_workspace_variable) # Variable Sets mcp.tool()(variables.list_variable_sets) mcp.tool()(variables.get_variable_set) mcp.tool()(variables.create_variable_set) mcp.tool()(variables.update_variable_set) mcp.tool( enabled=enable_delete_tools, annotations={"destructiveHint": True, "readOnlyHint": False}, )(variables.delete_variable_set) mcp.tool()(variables.assign_variable_set_to_workspaces) mcp.tool()(variables.unassign_variable_set_from_workspaces) mcp.tool()(variables.assign_variable_set_to_projects) mcp.tool()(variables.unassign_variable_set_from_projects) # Variable Set Variables mcp.tool()(variables.list_variables_in_variable_set) mcp.tool()(variables.create_variable_in_variable_set) mcp.tool()(variables.update_variable_in_variable_set) mcp.tool( enabled=enable_delete_tools, annotations={"destructiveHint": True, "readOnlyHint": False}, )(variables.delete_variable_from_variable_set) def main() -> None: """Run the Terraform Cloud MCP server.""" mcp.run(transport="stdio") if __name__ == "__main__": main()

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/severity1/terraform-cloud-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server