返回市场
AzureTFMCP服务器

AzureTFMCP服务器

作者:dkooll0 星标更新:2025-11-19

项目介绍

azurerm-mcp

一个MCP(模型上下文协议)服务器,用于按需索引、分析并提供AzureRM Terraform提供商的Go源代码给兼容MCP的人工智能代理。

功能

资源发现

快速列出和搜索所有AzureRM资源和数据源,支持快速全文检索

模式检查

深入分析模式,展示属性、类型、验证、ForceNew标志、冲突和嵌套块

代码搜索

在整个提供商的Go文件中搜索模式、函数或自由文本

资源比较

并排比较两个资源以理解模式差异和相似性

更新行为分析

确定更改特定属性是否需要重新创建资源或支持就地更新

破坏性变更解释

了解为什么某些属性被标记为ForceNew,并获取迁移策略

相似资源发现

使用基于机器学习的Jaccard相似度评分找到具有相似模式的资源

验证分析

检测资源模式中的缺失或弱验证,并获取改进建议

依赖追踪

可视化属性依赖关系,包括ConflictsWith、ExactlyOneOf、AtLeastOneOf和RequiredWith

源代码访问

检索Go源代码片段,包括模式定义、CustomizeDiff逻辑、超时设置和导入器

文档访问

获取任何资源或数据源的官方提供商文档

测试发现

列出覆盖特定资源的验收测试

GitHub同步

从GitHub同步并索引提供商到本地SQLite数据库,以便快速查询。

支持增量更新,并通过解析Go抽象语法树提取模式元数据。

预备条件

Go 1.23.0或更高版本

SQLite(带有FTS5支持 - 大多数现代安装都包含此功能)

GitHub个人访问令牌(可选,用于提高速率限制),具有repo → public_repo权限。

配置

服务器标志

服务器接受命令行标志进行配置:

--org - GitHub组织名称(默认:"hashicorp")

--repo - 仓库名称(默认:"terraform-provider-azurerm")

--token - GitHub个人访问令牌(可选;提高速率限制)

--db - SQLite数据库文件路径(默认:"azurerm-provider.db")

添加到AI代理

要将此MCP服务器与AI代理(如Claude CLI、Copilot、Codex CLI或其他兼容MCP的客户端)一起使用,请将其添加到它们的配置文件中:

{
  "mcpServers": {
    "az-cn-azurerm": {
      "command": "/path/to/az-cn-azurerm-mcp",
      "args": ["--org", "hashicorp", "--repo", "terraform-provider-azurerm", "--token", "YOUR_TOKEN"]
    }
  }
}

从源代码构建

make build

示例提示

一旦配置完成,您可以向支持额外MCP服务器的任何代理询问:

更新行为及破坏性变更

我能否在不重新创建的情况下更改azurerm_resource_group的位置?如果不能,原因是什么?

更新azurerm_virtual_network上的address_space是否需要重新创建,还是可以就地更新?

为什么azurerm_kubernetes_cluster上的dns_prefix被标记为ForceNew,以及我的迁移路径是什么?

解释为什么更改azurerm_storage_account上的SKU会强制重新创建,并提出解决方法。

修改azurerm_container_group上的network_profile是否会触发重新创建?

资源比较及发现

azurerm_linux_virtual_machine和azurerm_windows_virtual_machine之间的区别是什么?

并排比较azurerm_network_security_group和azurerm_network_security_rule的模式。

显示与azurerm_kubernetes_cluster具有至少70%模式相似性的资源。

查找所有与azurerm_storage_account具有相似模式的资源,并按相似性排序。

azurerm_app_service和azurerm_function_app之间的模式重叠是什么?

模式深度探索

显示azurerm_virtual_network上所有的ForceNew属性并解释每个属性。

azurerm_storage_account上哪些属性被标记为敏感?

列出azurerm_kubernetes_cluster上的所有嵌套块及其基数。

显示azurerm_private_endpoint的完整模式,包括类型细节和验证。

azurerm_api_management_certificate属性上存在哪些冲突?

验证分析

azurerm_storage_account模式中缺少哪些验证?

分析azurerm_virtual_network是否存在弱或缺失字段验证。

azurerm_container_registry是否有适当的端口范围验证?

检查azurerm_key_vault是否具有适当的名字格式验证。

查找azurerm_postgresql_server配置中的验证差距。

依赖追踪

显示azurerm_storage_account上network_rules属性的所有依赖关系。

哪些属性与azurerm_eventhub上的connection_string冲突?

追踪azurerm_data_factory_linked_service_sftp认证的ExactlyOneOf约束。

哪些属性需要azurerm_app_service上的subnet_id?

可视化azurerm_virtual_machine_scale_set中身份块的依赖图。

提供商源代码检查

显示azurerm_virtual_network的CustomizeDiff逻辑。

azurerm_kubernetes_cluster有哪些超时配置?

显示azurerm_storage_account的导入器函数。

显示azurerm_private_endpoint的完整Go模式定义。

azurerm_app_service定义了哪些状态升级器?

搜索与发现

搜索提供商代码中suppress.CaseDifference的用法。

查找所有使用validation.IntBetween进行端口验证的资源。

显示具有超过8个ForceNew属性的资源。

列出查询网络相关Azure资源的数据源。

查找具有CustomizeDiff逻辑的计算服务中的资源。

发布与版本控制

最新的AzureRM提供商发布是什么?总结新特性、增强功能和错误修复。

v4.48.0发布了什么内容?包括标签范围和发布日期。

显示azurerm_windows_web_app在v4.52.0中添加virtual_network_image_pull_enabled的代码差异。

显示新资源azurerm_api_management_workspace_api_version_set在v4.52.0中的代码变化。

比较v4.51.0 → v4.52.0并列出任何新资源和显著修复。

如果某个版本尚未被索引,回填v4.48.0并总结它。

测试与文档

列出azurerm_kubernetes_cluster的所有验收测试。

显示azurerm_virtual_network文档中的Example Usage部分。

哪些测试涵盖了azurerm_storage_account的blob功能?

获取azurerm_private_endpoint的完整文档,包括参数。

显示虚拟机部署的提供商示例。

跨参考WAM MCP

如果将wam模块agw mcp与terraform提供商mcp资源azurerm_application_gateway进行比较,模块示例中是否存在任何缺失的关键事项或功能?

CloudNation vnet模块暴露了哪些azurerm_virtual_network未通过验证强制执行的内容?

比较WAM中的kv模块示例与azurerm_key_vault模式,模块使用的属性是否存在弱验证?

查看WAM中的redis模块,它是否使用了azurerm_redis_cache中标记为ForceNew的属性,这是否会阻止就地更新?

azurerm_storage_account有哪些必需属性是CloudNation存储模块未作为变量暴露的?

WAM pe模块是否处理了azurerm_private_endpoint中存在的所有ConflictsWith约束?

检查CloudNation aks模块示例是否使用了任何在更改时会触发重新创建的azurerm_kubernetes_cluster属性。

agw模块实现了哪些验证模式应该也存在于azurerm_application_gateway模式中?

azurerm_container_registry中是否存在敏感属性而acr模块未将其标记为敏感?

比较CloudNation func模块中的默认值与azurerm_function_app模式中的默认值。

同步与维护

运行提供商的完整同步并报告作业ID;然后显示该作业ID的同步状态。

运行增量同步(仅更新)并报告作业ID;然后显示该作业ID的同步状态。

当前提供商同步状态是什么?

提示

对于模式检查,使用compact: true以获取项目符号列表而不是完整表格。

使用类似["force_new"]或["required", "sensitive"]的标志来过滤属性。

对于相似资源发现,调整similarity_threshold(0.0-1.0)以更严格或宽松。

资源比较在比较同一服务区域内的资源时效果最佳。

破坏性变更解释包括技术原因和Azure API限制。

注意事项

GitHub令牌是可选的;没有它,同步仍然有效,但可能会遇到较低的API速率限制。传递--token以提高限制。

初始完整同步大约需要20秒,并索引9,000多个Go文件。后续增量同步速度更快。

删除数据库文件将在下次调用服务器时导致完全重建。

解析器通过Go抽象语法树分析准确提取模式元数据。

发布摘要默认保留最近40个版本;当需要时,可以按需回填旧标签。

直接数据库访问

索引数据存储在一个启用FTS5的SQLite数据库文件中。您可以直接查询它进行临时检查:

sqlite3 azurerm-provider.db "SELECT name, kind FROM provider_resources LIMIT 10"

sqlite3 azurerm-provider.db "SELECT name FROM provider_resources WHERE name LIKE '%network%' AND kind = 'resource'"

sqlite3 azurerm-provider.db " SELECT r.name, COUNT(a.id) as force_new_count FROM provider_resources r JOIN provider_resource_attributes a ON r.id = a.resource_id WHERE a.force_new = 1 AND r.kind = 'resource' GROUP BY r.id ORDER BY force_new_count DESC LIMIT 10"

sqlite3 azurerm-provider.db " SELECT r.name, a.name as attribute FROM provider_resources r JOIN provider_resource_attributes a ON r.id = a.resource_id WHERE a.sensitive = 1 ORDER BY r.name"

贡献者

我们欢迎来自社区的贡献!无论是报告错误、建议新功能还是提交拉取请求,您的意见都非常宝贵。

更多详情,请参阅我们的贡献指南<br><br>

<a href="https://github.com/dkooll/aztfmcp/graphs/contributors"> <img src="https://contrib.rocks/image?repo=dkool/aztfmcp" /> </a>

许可证

MIT许可。详情请参阅LICENSE