一个提供与Terraform Registry API交互工具的Model Context Protocol (MCP)服务器。此服务器使AI代理能够查询供应商信息、资源详情和模块元数据。
[!IMPORTANT] 此项目作为新的官方Terraform MCP服务器的PoC被使用。此仓库已被存档,以支持那个项目。
要在Cursor中安装并使用此MCP服务器:
在Cursor中,打开设置(⌘+,),然后导航到“MCP”标签页。
点击“+ 添加新MCP服务器。”
输入以下内容:
点击“添加”,然后滚动到服务器并点击“禁用”以启用服务器。
如有必要,请重新启动Cursor,以确保MCP服务器正确加载。
要在Claude Desktop中安装并使用此MCP服务器:
在Claude Desktop中,打开设置(⌘+,),然后导航到“开发者”标签页。
点击窗口底部的“编辑配置”。
编辑文件(~/Library/Application Support/Claude/claude_desktop_config.json),添加以下代码,然后保存文件。
{
"mcpServers": {
"terraform-registry": {
"command": "npx",
"args": ["-y", "terraform-mcp-server"]
}
}
}
此MCP服务器提供了以下工具:
| 工具 | 描述 |
|---|---|
providerDetails | 获取Terraform提供商的详细信息 |
resourceUsage | 获取Terraform资源及其相关资源的示例用法 |
moduleSearch | 根据查询搜索并推荐Terraform模块 |
listDataSources | 列出提供商的所有可用数据源及其基本信息 |
resourceArgumentDetails | 获取资源类型参数的全面细节 |
moduleDetails | 检索Terraform模块的详细元数据 |
functionDetails | 获取Terraform提供商函数的详细信息 |
providerGuides | 列出并查看特定于提供商的指南和文档 |
policySearch | 在Terraform注册表中搜索策略库 |
policyDetails | 获取特定策略库的详细信息 |
这些工具需要Terraform Cloud API令牌(TFC_TOKEN):
| 工具 | 描述 |
|---|---|
listOrganizations | 列出认证用户有权访问的所有组织 |
privateModuleSearch | 在组织中搜索私有模块 |
privateModuleDetails | 获取私有模块的详细信息 |
explorerQuery | 查询Terraform Cloud Explorer API以分析数据 |
listWorkspaces | 列出组织中的工作区 |
workspaceDetails | 获取特定工作区的详细信息 |
lockWorkspace | 锁定工作区以防止运行 |
unlockWorkspace | 解锁工作区以允许运行 |
listRuns | 列出工作区的运行 |
runDetails | 获取特定运行的详细信息 |
createRun | 为工作区创建新的运行 |
applyRun | 应用已计划的运行 |
cancelRun | 取消正在进行的运行 |
listWorkspaceResources | 列出工作区中的资源 |
MCP服务器支持通过resources/*方法列出和读取以下资源URI:
| 资源类型 | 示例URI | 描述 |
|---|---|---|
| 提供商 | terraform:providers | 列出所有命名空间/提供商 |
terraform:provider:<namespace>/<name> | 获取特定提供商的详细信息 | |
| 提供商版本 | terraform:provider:<namespace>/<name>/versions | 列出提供商的可用版本 |
| 提供商资源 | terraform:provider:<namespace>/<name>/resources | 列出提供商的资源 |
terraform:resource:<namespace>/<name>/<resource_name> | 获取特定资源类型的详细信息 | |
| 提供商数据源 | terraform:provider:<namespace>/<name>/dataSources | 列出提供商的数据源 |
terraform:dataSource:<namespace>/<name>/<data_source_name> | 获取特定数据源的详细信息 | |
| 提供商函数 | terraform:provider:<namespace>/<name>/functions | 列出提供商的函数 |
terraform:function:<namespace>/<name>/<function_name> | 获取特定函数的详细信息 |
服务器还支持resources/templates/list以提供创建模板:
terraform:providerterraform:resourceterraform:dataSource以下提示可用于生成上下文响应:
| 提示 | 描述 | 必需参数 |
|---|---|---|
migrate-clouds | 生成迁移基础设施之间的Terraform代码 | sourceCloud, targetCloud, terraformCode |
generate-resource-skeleton | 帮助用户快速搭建新的Terraform资源,并遵循最佳实践 | resourceType |
optimize-terraform-module | 提供改进Terraform代码的实际建议 | terraformCode |
migrate-provider-version | 协助进行提供商版本升级和破坏性更改 | providerName, currentVersion, targetVersion, terraformCode(可选) |
analyze-workspace-runs | 分析最近的运行失败,并为Terraform Cloud工作区提供故障排除指导 | workspaceId, runsToAnalyze(可选,默认值:5) |
注意:getPrompt功能存在已知问题,可能导致服务器崩溃。服务器可以正确注册提示并列出它们,但直接使用getPrompt方法可能会导致连接问题。这正在调查中,可能与SDK兼容性或实现细节有关。在解决之前,请使用listPrompts来查看可用提示,避免直接调用getPrompt。
服务器使用stdio传输进行MCP通信:
npm install
npm start
服务器可以通过环境变量进行配置:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
TERRAFORM_REGISTRY_URL | Terraform Registry API的基础URL | https://registry.terraform.io |
DEFAULT_PROVIDER_NAMESPACE | 提供商的默认命名空间 | hashicorp |
LOG_LEVEL | 日志级别(error, warn, info, debug) | info |
REQUEST_TIMEOUT_MS | API请求超时时间(毫秒) | 10000 |
RATE_LIMIT_ENABLED | 启用API请求速率限制 | false |
RATE_LIMIT_REQUESTS | 时间窗口内允许的请求数量 | 60 |
RATE_LIMIT_WINDOW_MS | 速率限制的时间窗口(毫秒) | 60000 |
TFC_TOKEN | Terraform Cloud API令牌,用于访问私有注册表(可选) |
使用环境变量的示例:
# 设置环境变量
export LOG_LEVEL="debug"
export REQUEST_TIMEOUT_MS="15000"
export TFC_TOKEN="your-terraform-cloud-token"
# 运行服务器
npm start
关于测试此项目的更多信息,请参阅TESTS.md文件。