An MCP (Model Context Protocol) server that enables Claude to discover and understand IaC drift from DriftHound.
- 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
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.
- Add the following to your
~/.npmrc:
@drifthoundhq:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=YOUR_GITHUB_PAT
- Use
npxdirectly in your MCP client config — no global install needed (see below).
npm install
npm run build| Variable | Required | Description |
|---|---|---|
DRIFTHOUND_API_URL |
Yes | Base URL of your DriftHound instance |
DRIFTHOUND_API_TOKEN |
Yes | API token from DriftHound admin UI |
Add to your Claude Code settings (~/.claude/settings.json):
{
"mcpServers": {
"drifthound": {
"command": "npx",
"args": ["-y", "@drifthoundhq/mcp-server"],
"env": {
"DRIFTHOUND_API_URL": "https://drifthound.example.com",
"DRIFTHOUND_API_TOKEN": "your-api-token"
}
}
}
}Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"drifthound": {
"command": "npx",
"args": ["-y", "@drifthoundhq/mcp-server"],
"env": {
"DRIFTHOUND_API_URL": "https://drifthound.example.com",
"DRIFTHOUND_API_TOKEN": "your-api-token"
}
}
}
}Once configured, Claude can use these tools to discover and understand drift:
Claude, what projects have drift?
Claude will use list_projects_with_drift to find projects needing attention.
Show me the drifting environments in the EKS project
Claude will use list_environments with status=drift filter.
What's causing drift in eks/production?
Claude will use get_drift_details to get the full Terraform plan output.
Where can I find the code to fix eks/production drift?
Claude will use get_environment_info to get the repository URL and directory.
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:
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-tokenOnce running, point Claude Code at the in-cluster endpoint:
{
"mcpServers": {
"drifthound": {
"url": "http://drifthound-drifthound-mcp-server.drifthound.svc.cluster.local:3000/mcp"
}
}
}See the Helm chart README for the full configuration reference, external secret support, and port-forward instructions for local access.
# Run in development mode
npm run dev
# Build for production
npm run build
# Start production server
npm startThis MCP server requires DriftHound to have the read API endpoints enabled:
GET /api/v1/projects- List projectsGET /api/v1/projects/:key- Get project detailsGET /api/v1/projects/:key/environments- List environmentsGET /api/v1/projects/:key/environments/:key- Get environment detailsGET /api/v1/projects/:key/environments/:key/drift- Get latest drift check
MIT