Skip to main content
Glama
drifthoundhq

DriftHound MCP Server

Official
by drifthoundhq

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

Related MCP server: Infracost MCP Server

Installation

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
  1. Use npx directly in your MCP client config — no global install needed (see below).

From source

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):

{
  "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):

{
  "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:

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:

{
  "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.

Development

# 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

Available Tools

4 tools
get_drift_detailsA

Get the latest drift check details for an environment including the full Terraform/Terragrunt plan output (raw_output). This shows exactly what resources will be added, changed, or destroyed. Essential for understanding what needs to be fixed.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_keyYesThe unique key identifier for the project
environment_keyYesThe unique key identifier for the environment (e.g., "production", "staging")

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description clearly conveys that the tool returns the latest drift check details including plan output, showing resource changes. It does not elaborate on side effects, permissions, or cost, but for a read operation it is sufficiently transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no fluff. The first sentence states the purpose and output, the second explains what it shows, and the third highlights importance. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the output contents (plan output, resources added/changed/destroyed), which compensates for the lack of an output schema. It does not mention format or pagination, but is sufficient for an agent to understand what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description does not add additional meaning beyond the schema's parameter descriptions, which already clearly define project_key and environment_key.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'get' and clearly identifies the resource as 'drift check details' for an environment, including the full plan output. It distinguishes from siblings like get_environment_info and list_environments by focusing on drift-specific information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly states it's essential for understanding what needs to be fixed, but lacks explicit guidance on when to use this tool versus alternative siblings like get_environment_info or list_projects_with_drift. No when-not or prerequisite information is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_environment_infoA

Get detailed information about an environment including its GitHub repository URL, branch, and directory path. Use this to know where to find and clone the IaC code for remediation.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_keyYesThe unique key identifier for the project
environment_keyYesThe unique key identifier for the environment

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavioral traits. It correctly describes the tool as returning information (read-only), but it does not mention any potential limitations, permissions, or side effects. The description is straightforward but lacks deeper behavioral context beyond the output fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, each serving a distinct purpose: stating functionality and providing usage guidance. It is front-loaded, efficient, and contains no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, no output schema, no annotations), the description is reasonably complete. It specifies key return fields and the intended use case. However, it could be more complete by mentioning potential error cases or the output format, but the existing information suffices for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, setting baseline at 3. The description does not add any additional meaning to the parameters (project_key, environment_key) beyond what the schema already provides. It focuses on output fields instead of input semantics, so no extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get detailed information about an environment') and specifies the returned data (GitHub URL, branch, directory path). It distinguishes well from sibling tools like list_environments (which lists all) and get_drift_details (which returns drift), making the tool's unique purpose evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case: 'Use this to know where to find and clone the IaC code for remediation.' It implies when to use this tool (for detailed environment info) but does not explicitly contrast with alternatives or state when not to use it. The sibling context helps, but direct exclusions are missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_environmentsA

List all environments for a specific project with their current status (ok, drift, error, unknown). Optionally filter by status to find only drifting environments. Returns environment keys, names, directories, and last drift check summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_keyYesThe unique key identifier for the project (e.g., "eks", "vpc")
statusNoOptional filter to show only environments with this status

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description covers core behavior (listing, filtering, return fields) but omits potential side effects, permissions, or limitations like pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with front-loaded primary action and efficient additional details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 parameters, no output schema), the description sufficiently covers purpose, filter, and return fields; minor omission of pagination or limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters with descriptions; description adds value by explaining the status filter's purpose and listing return fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all environments for a specific project with their status, and distinguishes from siblings like get_drift_details or list_projects_with_drift.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides guidance on when to use the status filter to find drifting environments, but lacks explicit exclusions or when-not-to-use advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projects_with_driftA

List all projects that have environments with drift or error status. Returns project keys, names, repositories, branches, and the number of environments in drift or error state. Use this to discover which projects need attention.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the description indicates a read-only listing operation and specifies output fields. It lacks details on potential side effects, rate limits, or pagination, which are minimal for this tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loads the main action, and contains no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no output schema, and no annotations, the description adequately covers what the tool does and returns. It is slightly lacking on ordering or filtering details but is sufficient for the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and 100% schema coverage, the description adds value by explaining the tool's purpose and output, earning the baseline 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies listing projects with drift or error status and details the returned fields, clearly distinguishing it from sibling tools like get_drift_details or list_environments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states 'Use this to discover which projects need attention', implying a monitoring use case, but does not explicitly contrast with alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 4 tool updatesv1.0.3
    • First observedget_drift_details
    • First observedget_environment_info
    • First observedlist_environments
    • First observedlist_projects_with_drift

TDQS

A4.3/5.0
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
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    🌍 Terraform Model Context Protocol (MCP) Tool - An experimental CLI tool that enables AI assistants to manage and operate Terraform environments. Supports reading Terraform configurations, analyzing plans, applying configurations, and managing state with Claude Desktop integration. ⚡️
    371
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables Claude to interact with Infracost for Terraform cost estimation and cloud governance. Supports generating cost breakdowns, comparing configurations, creating tagging policies, setting up cost guardrails, and posting cost comments to PRs.
    16
    2
    MIT

Latest Blog Posts

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/drifthoundhq/mcp-server'

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