Skip to main content
Glama
drifthoundhq

DriftHound MCP Server

Official
by drifthoundhq
README.md
# DriftHound MCP Server

An MCP (Model Context Protocol) server that enables Claude to discover and understand IaC drift from DriftHound.

## Features

- **list_projects_with_drift** - Find all projects that have drifting environments
- **list_environments** - List environments for a project with status filtering
- **get_drift_details** - Get full Terraform plan output for drift analysis
- **get_environment_info** - Get repository, branch, and directory for remediation

## Installation

### GitHub Packages (recommended)

The package is published to GitHub Packages. Because GitHub Packages requires authentication even for public packages, you need a GitHub personal access token with the `read:packages` scope.

1. Add the following to your `~/.npmrc`:

```
@drifthoundhq:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=YOUR_GITHUB_PAT
```

2. Use `npx` directly in your MCP client config — no global install needed (see below).

### From source

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

## Configuration

### Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `DRIFTHOUND_API_URL` | Yes | Base URL of your DriftHound instance |
| `DRIFTHOUND_API_TOKEN` | Yes | API token from DriftHound admin UI |

### Claude Code Configuration

Add to your Claude Code settings (`~/.claude/settings.json`):

```json
{
  "mcpServers": {
    "drifthound": {
      "command": "npx",
      "args": ["-y", "@drifthoundhq/mcp-server"],
      "env": {
        "DRIFTHOUND_API_URL": "https://drifthound.example.com",
        "DRIFTHOUND_API_TOKEN": "your-api-token"
      }
    }
  }
}
```

### Claude Desktop Configuration

Add to your Claude Desktop config (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "drifthound": {
      "command": "npx",
      "args": ["-y", "@drifthoundhq/mcp-server"],
      "env": {
        "DRIFTHOUND_API_URL": "https://drifthound.example.com",
        "DRIFTHOUND_API_TOKEN": "your-api-token"
      }
    }
  }
}
```

## Usage

Once configured, Claude can use these tools to discover and understand drift:

### Discover Drift

```
Claude, what projects have drift?
```

Claude will use `list_projects_with_drift` to find projects needing attention.

### Investigate a Project

```
Show me the drifting environments in the EKS project
```

Claude will use `list_environments` with `status=drift` filter.

### Analyze Drift Details

```
What's causing drift in eks/production?
```

Claude will use `get_drift_details` to get the full Terraform plan output.

### Get Remediation Info

```
Where can I find the code to fix eks/production drift?
```

Claude will use `get_environment_info` to get the repository URL and directory.

## Kubernetes Deployment

A Docker image is published to `ghcr.io/drifthoundhq/mcp-server` on every release. The server runs in HTTP mode when the `PORT` environment variable is set, exposing the MCP protocol at `/mcp`.

The quickest way to deploy on Kubernetes is via the Helm chart published to the OCI registry:

```bash
helm install drifthound oci://ghcr.io/drifthoundhq/charts/drifthound-mcp-server \
  --namespace drifthound \
  --create-namespace \
  --set drifthoundApiUrl=https://your-drifthound.example.com \
  --set drifthoundApiToken=your-api-token
```

Once running, point Claude Code at the in-cluster endpoint:

```json
{
  "mcpServers": {
    "drifthound": {
      "url": "http://drifthound-drifthound-mcp-server.drifthound.svc.cluster.local:3000/mcp"
    }
  }
}
```

See the [Helm chart README](helm/drifthound-mcp-server/README.md) for the full configuration reference, external secret support, and port-forward instructions for local access.

## Development

```bash
# Run in development mode
npm run dev

# Build for production
npm run build

# Start production server
npm start
```

## API Requirements

This MCP server requires DriftHound to have the read API endpoints enabled:

- `GET /api/v1/projects` - List projects
- `GET /api/v1/projects/:key` - Get project details
- `GET /api/v1/projects/:key/environments` - List environments
- `GET /api/v1/projects/:key/environments/:key` - Get environment details
- `GET /api/v1/projects/:key/environments/:key/drift` - Get latest drift check

## License

MIT

TDQS

A4.3/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: listing projects with drift, listing environments, getting drift details, and getting environment info. No ambiguity in their roles.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (list_projects_with_drift, list_environments, get_drift_details, get_environment_info). The naming is predictable and readable.

Tool Count5/5

With 4 tools, the set is well-scoped for a drift monitoring server. Each tool covers a distinct aspect: discovery, details, and context. Not too few or too many for the domain.

Completeness4/5

The tools cover discovery and information retrieval for drift detection. However, there is no tool to trigger a drift check or perform remediation, which may be intentional but leaves a minor gap.

Maintenance

ActivityInactive
ResponsivenessNo issues