一个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。