我构建了一个能够理解你的 MSBuild 项目图的 MCP 服务器——在你构建之前
Source: Dev.to
(请提供需要翻译的正文内容,我才能为您进行简体中文翻译。)
介绍
让你的 AI 编码助手查询你的 .NET 解决方案结构,你会看到它产生幻觉。它会猜测项目引用,遗漏 TFM 不匹配,并自信地告诉你不真实的内容——因为它根本无法真正评估你的 MSBuild 项目文件。
现有工具如 BinlogInsights 需要先进行构建,然后分析二进制日志。这很有用,但这意味着在提问之前必须先成功构建。若你的解决方案已损坏怎么办?如果你只是想在迁移前了解依赖图怎么办?
我构建了 MSBuild Graph MCP Server 来填补这一空白。它直接评估 MSBuild 项目文件——无需构建——并通过 10 个 MCP 工具公开结果,任何 AI 助手都可以调用。
它的功能
将其安装为 .NET 全局工具:
dotnet tool install -g MsBuildGraphMcp然后向你的助手提出自然语言问题:
- “显示此解决方案的依赖图” → 完整的有向无环图并进行拓扑排序
- “是否存在 TFM 不匹配?” → 查找引用
net8.0库的net6.0项目 - “如果我移除 CoreLib,会有什么破坏?” → 对所有直接 + 传递依赖进行 BFS 遍历
- “比较 Debug 与 Release” → 属性和包引用差异
- “LangVersion 从哪里来?” → 追溯到
Directory.Build.props第 3 行
10 个工具,按用途分组
理解结构
analyze_solution— 解析.sln、.slnx、.slnf,并获取完整的项目元数据get_project_graph— 依赖有向无环图(DAG),拓扑排序,图指标find_shared_imports— 发现Directory.Build.props/.targetslist_projects— 快速列出项目,无需 MSBuild 评估开销
查找问题
detect_build_issues— 检测 TFM 不匹配、孤立项目、循环依赖、平台冲突check_package_versions— 检查 NuGet 版本一致性、CPM 检测、VersionOverride
分析影响
analyze_impact— 分析“如果我修改项目 X,会导致什么破坏?”get_build_order— 获取构建顺序,进行带关键路径长度的拓扑排序
比较与检查
compare_configurations— 比较任意两个构建配置的差异analyze_project_properties— 分析项目属性值,并追踪来源文件和行号
Guided prompts
project-health-check— 对解决方案进行 1‑10 的健康评分migration-readiness— 评估 .NET 版本升级的可行性
预构建 vs 后构建 分析
| 特性 | MSBuild Graph MCP | 典型 Binlog 工具 |
|---|---|---|
| 需要构建 | 否 | 是 |
| 在损坏的解决方案上工作 | 是 | 否 |
| 依赖分析 | 完整有向无环图 | 受限 |
| TFM 兼容性检查 | 是(NuGet.Frameworks) | 否 |
| 影响分析 | 是 | 否 |
| 配置差异 | 是 | 否 |
预构建分析直接通过 MSBuild 的 ProjectGraph API 对项目文件进行评估,这在规划迁移、加入大型代码库或调试尚未能够编译的解决方案时至关重要。
Security: 15 Measures, Zero Side Effects
所有工具都是只读的:不会触发构建,不会修改文件,不会发起网络请求,也不会执行任意命令。
关键防护措施:
- 启动守护阻止
MSBUILDENABLEALLPROPERTYFUNCTIONS– 缓解 CVE‑2025‑21172(属性函数远程代码执行) - 预评估 XML 扫描器在 MSBuild 评估项目文件之前检测项目文件中对
System.IO.File、System.Net、System.Diagnostics的使用 - 对所有
ProjectCollection实例设置IsBuildEnabled = false– 防止目标执行 - 拒绝 UNC 路径、扩展名白名单、符号链接检测、输入长度上限
- 错误净化会从响应中剥离用户路径和堆栈跟踪
- 允许的目录可通过环境变量
MSBUILD_MCP_ALLOWED_PATHS配置
MSBuild 属性函数在评估期间执行,这是设计如此——其信任模型与在 Visual Studio 中打开项目相同。请仅分析您信任的项目。
测试套件
测试套件针对 real MSBuild APIs(无 mock)运行。TempSolutionBuilder fixture 在临时目录中为每个场景创建实际的 .sln/.slnx/.csproj 文件。
结果:
- 333 tests 在 CI 上约 12 秒内通过
- 捕获了 8 个生产缺陷,包括:
CircularDependencyException未被捕获(MSBuild 将其单独抛出,而不是MSB4251)- 对重复的
PackageReference使用ToDictionary导致崩溃(需先GroupBy) - 异常路径上的资源泄漏(添加
try/finally清理) - 在 64 核机器上出现无限并行(限制为 8)
入门
安装
dotnet tool install -g MsBuildGraphMcp配置 AI 助手
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"msbuild-graph": {
"command": "msbuild-graph-mcp"
}
}
}VS Code (.vscode/mcp.json)
{
"servers": {
"msbuild-graph": {
"type": "stdio",
"command": "msbuild-graph-mcp"
}
}
}Claude Code
claude mcp add msbuild-graph -- msbuild-graph-mcp该服务器同样支持 Cursor、Windsurf 和 Visual Studio 2026 Preview。
要求: .NET SDK 8.0+ 且运行在 Windows(MSBuildLocator 会发现 VS/.NET SDK 安装)。
试一试
- 安装工具(见上文)。
- 将你的 AI 助手指向一个 .NET 解决方案。
- 提问:“对该解决方案运行项目健康检查。”
project-health-check 提示会运行所有 10 个工具,并生成带有可操作建议的评分报告。
链接
- GitHub: https://github.com/FlorinVica/msbuild-graph-mcp
- NuGet: https://www.nuget.org/packages/MsBuildGraphMcp
MIT 许可证。欢迎贡献。