# infracost [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/DownAtTheBottomOfTheMoleHole/infracost-mcp  
**GitHub Stars:** 0  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/infracost

## Description
MCP server for Infracost CLI integration - cloud cost estimates for Infrastructure as Code

## Tools
Capabilities this server exposes over MCP:

- **infracost_breakdown** — Monthly cost baseline for current IaC
- **infracost_diff** — Cost delta from a planned change
- **infracost_output** — Rendered table/JSON/HTML/comment output
- **infracost_comment** — PR comment with estimated impact
- **infracost_upload** — Cost report visible in Infracost Cloud
- **infracost_configure** — Persisted CLI config update/read
- **infracost_auth** — Login flow for Infracost Cloud
- **infracost_generate_usage** — Pre-filled usage file template with defaults

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "infracost": {
    "command": "npx",
    "args": ["-y","infracost"]
  }
}
```

## Documentation & README

# Infracost MCP Server

![Down At The Bottom Of The Mole Hole banner](.assets/org-banner.png)

<!-- mcp-name: io.github.downatthebottomofthemolehole/infracost -->

[![CI/Publish](https://github.com/DownAtTheBottomOfTheMoleHole/infracost-mcp/actions/workflows/publish-mcp.yml/badge.svg)](https://github.com/DownAtTheBottomOfTheMoleHole/infracost-mcp/actions/workflows/publish-mcp.yml)
[![Coverage](https://codecov.io/github/DownAtTheBottomOfTheMoleHole/infracost-mcp/graph/badge.svg?branch=main)](https://codecov.io/github/DownAtTheBottomOfTheMoleHole/infracost-mcp)
[![npm](https://img.shields.io/npm/v/@downatthebottomofthemolehole/infracost-mcp-server.svg)](https://www.npmjs.com/package/@downatthebottomofthemolehole/infracost-mcp-server)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
[![Node Version](https://img.shields.io/badge/node-%3E%3D24.14.0-brightgreen)](https://nodejs.org/)

> **Note:** This is a community-maintained MCP server. It is not an official Model Context Protocol server from Infracost.

A Model Context Protocol (MCP) server for running the [Infracost CLI](https://www.infracost.io/) to estimate, compare, and publish infrastructure cost changes from Terraform and other Infrastructure as Code projects.

## Overview

This server provides eight MCP tools across estimation, reporting, collaboration, and operations workflows:

- `infracost_breakdown` to generate baseline cost estimates.
- `infracost_diff` to compare planned cost changes.
- `infracost_output` to render existing Infracost JSON in different formats.
- `infracost_comment` to post PR comments on supported SCM platforms.
- `infracost_upload` to upload reports to Infracost Cloud.
- `infracost_configure` to get or set CLI configuration.
- `infracost_auth` to run authentication flow.
- `infracost_generate_usage` to generate usage files with sensible defaults.

### Platform Compatibility

This MCP server is platform-agnostic and works in local and CI environments:

- Local development
- GitHub Actions
- GitLab CI/CD
- Azure DevOps
- CircleCI, Jenkins, and Bitbucket Pipelines
- AI Agents and Copilot workflows

The primary requirements are Node.js and the Infracost CLI binary.

### Tool Matrix

| Tool | Category | Typical outcome |
| --- | --- | --- |
| `infracost_breakdown` | Estimation | Monthly cost baseline for current IaC |
| `infracost_diff` | Comparison | Cost delta from a planned change |
| `infracost_output` | Reporting | Rendered table/JSON/HTML/comment output |
| `infracost_comment` | Collaboration | PR comment with estimated impact |
| `infracost_upload` | Cloud Sync | Cost report visible in Infracost Cloud |
| `infracost_configure` | Configuration | Persisted CLI config update/read |
| `infracost_auth` | Authentication | Login flow for Infracost Cloud |
| `infracost_generate_usage` | Utilities | Pre-filled usage file template with defaults |

## Tools

### `infracost_breakdown`

Runs `infracost breakdown`.

Inputs:

- `workingDirectory` (string, optional): Command working directory.
- `path` (string, optional): Path to Terraform/IaC directory or plan JSON.
- `configFile` (string, optional): Path to Infracost config file.
- `usageFile` (string, optional): Path to usage file.
- `format` (string, optional): Output format. Default: `table`.
- `fields` (string[], optional): Fields to include in output.
- `showSkus` (boolean, optional): Include SKU details.
- `syncUsageFile` (boolean, optional): Sync usage file with detected resources.
- `compareTo` (string, optional): Baseline Infracost JSON path.
- `terraformWorkspace` (string, optional): Terraform workspace.
- `terraformPlanFlags` (string, optional): Flags for `terraform plan`.
- `timeoutSeconds` (number, optional): Timeout in seconds.
- `extraArgs` (string[], optional): Additional CLI arguments.

### `infracost_diff`

Runs `infracost diff`.

Inputs:

- `workingDirectory` (string, optional): Command working directory.
- `path` (string, optional): Path to Terraform/IaC directory or plan JSON.
- `configFile` (string, optional): Path to Infracost config file.
- `usageFile` (string, optional): Path to usage file.
- `format` (string, optional): Output format. Default: `table`.
- `compareTo` (string, optional): Baseline Infracost JSON path.
- `showSkus` (boolean, optional): Include SKU details.
- `syncUsageFile` (boolean, optional): Sync usage file with detected resources.
- `terraformWorkspace` (string, optional): Terraform workspace.
- `terraformPlanFlags` (string, optional): Flags for `terraform plan`.
- `timeoutSeconds` (number, optional): Timeout in seconds.
- `extraArgs` (string[], optional): Additional CLI arguments.

### `infracost_output`

Runs `infracost output`.

Inputs:

- `workingDirectory` (string, optional): Command working directory.
- `path` (string, optional): Infracost JSON file path. Auto-detected when omitted.
- `format` (string, optional): Output format. Default: `table`.
- `fields` (string[], optional): Fields to include in output.
- `showSkus` (boolean, optional): Include SKU details.
- `timeoutSeconds` (number, optional): Timeout in seconds.
- `extraArgs` (string[], optional): Additional CLI arguments.

### `infracost_comment`

Runs `infracost comment`.

Inputs:

- `workingDirectory` (string, optional): Command working directory.
- `platform` (string, optional): Platform (`github`, `gitlab`, `azure-repos`, `bitbucket`). Default: `github`.
- `path` (string, optional): Infracost JSON file path. Auto-detected when omitted.
- `repo` (string, optional): Repository (`owner/repo`).
- `pullRequest` (string, optional): Pull request number.
- `commit` (string, optional): Commit SHA.
- `token` (string, optional): Platform token.
- `tag` (string, optional): Comment tag.
- `behavior` (string, optional): Comment update behavior.
- `dryRun` (boolean, optional): Generate without posting.
- `timeoutSeconds` (number, optional): Timeout in seconds.
- `extraArgs` (string[], optional): Additional CLI arguments.

### `infracost_upload`

Runs `infracost upload`.

Inputs:

- `workingDirectory` (string, optional): Command working directory.
- `path` (string, optional): Infracost JSON file path. Auto-detected when omitted.
- `timeoutSeconds` (number, optional): Timeout in seconds.
- `extraArgs` (string[], optional): Additional CLI arguments.

### `infracost_configure`

Runs `infracost configure`.

Inputs:

- `workingDirectory` (string, optional): Command working directory.
- `set` (string, optional): Set configuration value.
- `get` (string, optional): Read configuration value.
- `timeoutSeconds` (number, optional): Timeout in seconds.
- `extraArgs` (string[], optional): Additional CLI arguments.

### `infracost_auth`

Runs `infracost auth login`.

Inputs:

- `workingDirectory` (string, optional): Command working directory.
- `timeoutSeconds` (number, optional): Timeout in seconds.
- `extraArgs` (string[], optional): Additional CLI arguments.

### `infracost_generate_usage`

Generates an Infracost usage file with sensible defaults for specified resource types. This is a utility tool that complements `infracost_configure` by providing pre-filled templates you can customize for your workloads. Returns both raw JSON and formatted guidance.

Inputs:

- `resourceTypes` (string[], required): Resource types to include (e.g., `["aws_lambda_function", "aws_s3_bucket"]`).
- `outputFilePath` (string, optional): Path where usage file should be saved (for guidance only).
- `includeGuidance` (boolean, optional): Include formatted guidance. Default: `true`.
- `onlyJson` (boolean, optional): Return only raw JSON (no guidance). Default: `false`.

Supported resource types: `aws_lambda_function`, `aws_instance`, `aws_db_instance`, `aws_s3_bucket`, `aws_dynamodb_table`, `aws_ebs_volume`, `aws_cloudfront_distribution`, `aws_lb`, `aws_nat_gateway`, `google_compute_instance`, `google_storage_bucket`, `azurerm_windows_virtual_machine`, `azurerm_linux_virtual_machine`, `azurerm_storage_account`, `azurerm_mssql_database`.

## Prompt Cookbook

Use these minimal prompts in Copilot Chat with `@infracost`.
CLI tools default to the current workspace root when no path is given.
If you add a file or folder as Copilot context (`#file` or `#folder`), reference it in your prompt and the tool will target that path.
The server auto-detects common report files (`infracost-diff.json`, `infracost-base.json`, `infracost.json`), so you usually do not need to pass `path` for `infracost_output`, `infracost_comment`, or `infracost_upload`.

### Quick prompts

```text
@infracost run infracost_breakdown
@infracost run infracost_diff
@infracost run infracost_output
@infracost run infracost_comment with dryRun true
@infracost run infracost_upload
```

### Run breakdown (`infracost_breakdown`)

```text
@infracost run infracost_breakdown
```

Expected output: Baseline cost estimate with command output, exit code, stdout, and stderr.

### Run diff (`infracost_diff`)

```text
@infracost run infracost_diff
```

Expected output: Cost delta from the planned change compared to current baseline.

### Render output (`infracost_output`)

```text
@infracost run infracost_output with format html
```

Expected output: Formatted output from existing Infracost JSON (auto-detected when possible).

### Post PR comment (`infracost_comment`)

```text
@infracost run infracost_comment with repo owner/repo and pullRequest 123 and dryRun true
```

Expected output: Generated comment payload, or posted comment when not in dry-run mode. Platform defaults to `github`.

### Upload report (`infracost_upload`)

```text
@infracost run infracost_upload
```

Expected output: Upload confirmation for Infracost Cloud ingestion.

### Configure CLI (`infracost_configure`)

```text
@infracost run infracost_configure with:
- set: currency=USD
```

Expected output: Configuration update confirmation from the CLI.

### Authenticate (`infracost_auth`)

```text
@infracost run infracost_auth
```

Expected output: Authentication flow prompt or login success details.

### Generate usage file (`infracost_generate_usage`)

```text
@infracost run infracost_generate_usage with:
- resourceTypes: ["aws_lambda_function", "aws_s3_bucket", "aws_dynamodb_table"]
- outputFilePath: ./infracost-usage.json
- includeGuidance: true
```

Expected output: Pre-filled usage file JSON with sensible defaults, plus guidance on customization and usage. Use `onlyJson: true` to return only the JSON for programmatic handling.

## Dependencies

### System Dependencies

- Node.js `>=24.14.0`
- npm (bundled with Node.js)
- Infracost CLI installed and available in `PATH` (or via `INFRACOST_BINARY_PATH`)

### npm Dependencies

Runtime:

- `@modelcontextprotocol/sdk` (MCP server SDK)

Development:

- `typescript` (build/compile)
- `tsx` (development runner)
- `vitest` (unit test runner)
- `@types/node` (Node.js typings)

### Environment Variables

- `INFRACOST_API_KEY`: Infracost API key for cloud-backed features.
- `INFRACOST_BINARY_PATH`: Override path to Infracost binary.

## Installation

```bash
npm install
npm run build
```

## Configuration

### Usage with VS Code Copilot Chat

This workspace is preconfigured in `.vscode/mcp.json`:

```json
{
  "servers": {
    "infracost": {
      "type": "stdio",
      "command": "node",
      "args": ["./dist/index.js"]
    }
  }
}
```

Reload VS Code (`Cmd+Shift+P` -> `Developer: Reload Window`) after changing MCP configuration.

Then query the server from Copilot Chat with `@infracost`, for example:

```text
@infracost run infracost_breakdown
@infracost run infracost_diff
```

### Usage with Other MCP Clients

Use stdio transport with the built entrypoint:

```json
{
  "name": "infracost-mcp-server",
  "type": "stdio",
  "command": "node",
  "args": ["/absolute/path/to/infracost-mcp/dist/index.js"]
}
```

Build first with `npm run build`, then start your MCP client.

## Running

```bash
npm start
```

Development mode:

```bash
npm run dev
```

Built mode:

```bash
npm run start
```

## Debugging

Use `.vscode/launch.json`:

- `Debug MCP Server` (runs `npm run dev`)
- `Debug MCP Server (Built)` (runs `dist/index.js` after build)

Set breakpoints in `src/index.ts`, then press `F5`.

## Testing

See [docs/TESTING.md](./docs/TESTING.md) for Copilot Chat scenarios, manual JSON-RPC checks, and troubleshooting guidance.

Quick validation prompt in Copilot Chat:

```text
@infracost run infracost_breakdown
```

## Interactive VS Code Workflows

### 1. PR Cost Impact Review

1. Generate a baseline:

```text
@infracost run infracost_breakdown with:
- path: .
- format: json
```

1. Generate a diff:

```text
@infracost run infracost_diff with:
- path: .
- format: diff
```

1. Draft a PR comment:

```text
@infracost run infracost_comment with:
- platform: github
- path: infracost-diff.json
- repo: owner/repo
- pullRequest: 123
- dryRun: true
```

### 2. Reporting Pipeline Setup

1. Render a report for humans:

```text
@infracost run infracost_output with:
- path: infracost-diff.json
- format: html
```

1. Upload for centralized tracking:

```text
@infracost run infracost_upload with:
- path: infracost-diff.json
```

### 3. Environment Bootstrap

1. Configure defaults:

```text
@infracost run infracost_configure with:
- set: currency=USD
```

1. Authenticate:

```text
@infracost run infracost_auth
```

### Best Practices

- Keep `workingDirectory` explicit when running inside monorepos.
- Use `--format json` for machine processing and `--format table` for human triage.
- Keep `timeoutSeconds` high enough for large Terraform plans.
- Prefer `infracost_comment` with `dryRun=true` before posting to production PR threads.
- Use `infracost_upload` for historical visibility in Infracost Cloud.

## Additional Use Cases

- Pre-merge cost gates in pull requests.
- Scheduled baseline cost snapshots in CI.
- Cost delta reporting for release trains.
- Team-level FinOps dashboards based on uploaded reports.

## Related Projects

### Infracost Resources

- [Infracost website](https://www.infracost.io/)
- [Infracost documentation](https://www.infracost.io/docs/)
- [Infracost CLI repository](https://github.com/infracost/infracost)

### Model Context Protocol

- [MCP official documentation](https://modelcontextprotocol.io/)
- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)
- [MCP servers registry](https://github.com/mcp)

## Community and Contributing

- [Contributing Guide](./CONTRIBUTING.md)
- [Code of Conduct](./CODE_OF_CONDUCT.md)
- [Security Policy](./SECURITY.md)
- [Testing Guide](./docs/TESTING.md)
- [Maintainer Guide](./docs/MAINTAINERS.md)

## Attribution and License

Maintained by Carl Dawson under the [Down At The Bottom Of The Mole Hole](https://github.com/downatthebottomofthemolehole) organization.

## Development

```bash
npm run lint
npm test
npm run build
```

## License

Licensed under the MIT License.

