DriftHound MCP Server
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@DriftHound MCP Serverlist projects with drift"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
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.
Add the following to your
~/.npmrc:
@drifthoundhq:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=YOUR_GITHUB_PATUse
npxdirectly in your MCP client config — no global install needed (see below).
From source
npm install
npm run buildConfiguration
Environment Variables
Variable | Required | Description |
| Yes | Base URL of your DriftHound instance |
| 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 projectClaude 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-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.
Development
# Run in development mode
npm run dev
# Build for production
npm run build
# Start production server
npm startAPI Requirements
This 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
License
MIT
Available Tools
4 toolsget_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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_key | Yes | The unique key identifier for the project | |
| environment_key | Yes | The unique key identifier for the environment (e.g., "production", "staging") |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_key | Yes | The unique key identifier for the project | |
| environment_key | Yes | The unique key identifier for the environment |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_key | Yes | The unique key identifier for the project (e.g., "eks", "vpc") | |
| status | No | Optional filter to show only environments with this status |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v1.0.3- First observed
get_drift_details - First observed
get_environment_info - First observed
list_environments - First observed
list_projects_with_drift
TDQS
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.
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.
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.
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
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
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
Unified API to query AWS, GCP, Azure and generate Terraform/CLI execution kits for AI agents.
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenance🌍 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. ⚡️371MIT
- AlicenseAqualityDmaintenanceEnables 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.162MIT
- FlicenseBqualityDmaintenanceEnables AI assistants to interact with Terraform Cloud workspaces and runs, including checking run status, listing workspaces, and retrieving detailed information about workspaces and runs.4-
- AlicenseNot gradedqualityFmaintenanceEnables management of Facets Control Plane projects, resources, environments, and deployments through Claude, offering secure infrastructure automation workflows.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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