Skip to main content
Glama
guilhermeyoshida

MCP Terraform Assistant

README.md
# MCP Infrastructure as Code Assistant

An MCP server for managing infrastructure as code with Terraform.

## Features

- Initialize Terraform working directories
- Generate and show execution plans
- Apply changes to infrastructure
- Destroy infrastructure
- Validate Terraform configurations
- Show current state or saved plans
- Manage Terraform workspaces

## Prerequisites

- Python 3.8 or higher
- Terraform 1.5.7 or higher
- Docker and Docker Compose (optional)

## Installation

### Local Installation

1. Clone the repository:
   ```bash
   git clone https://github.com/yourusername/mcp-iac.git
   cd mcp-iac
   ```

2. Install dependencies using uv:
   ```bash
   curl -LsSf https://astral.sh/uv/install.sh | sh
   uv pip install -e .
   ```

### Docker Installation

1. Clone the repository:
   ```bash
   git clone https://github.com/yourusername/mcp-iac.git
   cd mcp-iac
   ```

2. Build and run the Docker container:
   ```bash
   docker-compose up -d
   ```

## Usage

### Local Usage

1. Start the MCP server:
   ```bash
   python main.py
   ```

2. Use the MCP CLI to interact with the server:
   ```bash
   mcp terraform_init --working-dir ./terraform
   mcp terraform_plan --working-dir ./terraform
   mcp terraform_apply --working-dir ./terraform --auto-approve
   ```

### Docker Usage

1. Start the MCP server:
   ```bash
   docker-compose up -d
   ```

2. Use the MCP CLI to interact with the server:
   ```bash
   mcp terraform_init --working-dir ./terraform
   mcp terraform_plan --working-dir ./terraform
   mcp terraform_apply --working-dir ./terraform --auto-approve
   ```

## Example Terraform Configuration

The repository includes an example Terraform configuration that creates an EC2 instance in AWS:

```hcl
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = var.region
}

resource "aws_instance" "example" {
  ami           = var.ami_id
  instance_type = var.instance_type

  tags = {
    Name = var.instance_name
  }
}
```

## Contributing

1. Fork the repository
2. Create a feature branch
3. Commit your changes
4. Push to the branch
5. Create a Pull Request

## License

This project is licensed under the MIT License - see the LICENSE file for details.

## Available Tools

- `terraform_init`: Initialize a Terraform working directory
- `terraform_plan`: Generate and show an execution plan for Terraform
- `terraform_apply`: Apply the changes required to reach the desired state
- `terraform_destroy`: Destroy the infrastructure managed by Terraform
- `terraform_validate`: Validate the syntax and internal consistency of Terraform files
- `terraform_show`: Show the current state or a saved plan
- `terraform_workspace_list`: List Terraform workspaces
- `terraform_workspace_select`: Select a Terraform workspace

## Example Usage

Here's an example of how to use the MCP server with an AI agent:

1. Start the MCP server:
   ```bash
   python main.py
   ```

2. Connect to the server using an MCP client:
   ```bash
   mcp connect http://localhost:8000
   ```

3. The AI agent can now help you with Terraform operations. For example:
   - Initialize a Terraform working directory
   - Generate and review execution plans
   - Apply changes to infrastructure
   - Destroy infrastructure resources
   - Validate Terraform configurations

## Examples

Check out the `examples` directory for sample Terraform configurations that demonstrate how to use the MCP server:

- `examples/aws-s3`: A simple AWS S3 bucket example