MSBuild项目图MCP服务器
    
LLM驱动的编码助手的MSBuild解决方案的预构建静态分析。 在构建之前,通过自然语言分析项目依赖关系、检测构建问题、检查共享导入和比较配置。
没有现有的MCP服务器提供预构建项目图分析。这填补了这一空白。
它的作用
问你的人工智能助手关于你的自然问题。NET/C++解决方案:
- *“显示此解决方案的依赖关系图”* → 具有拓扑排序的完整DAG
- *“是否存在TFM不匹配?”* → 查找引用net8.0库的net6.0项目
- *“Directory.Build.props会影响什么?”* → 显示导入每个共享文件的所有项目
- *“比较调试与发布”* → 物业和套餐参考差异
- *“LangVersion是从哪里来的?”* → 目录跟踪。Build.props第3行
工具
| 工具 | 说明 |
|---|---|
analyze_solution | Parse.sln/.slnx/.slnf--项目、TFM、输出类型、配置 |
get_project_graph | 使用拓扑排序和图度量构建完全依赖DAG |
find_shared_imports | 查找目录。构建.props/.targets和其他共享导入 |
detect_build_issues | 查找循环deps、TFM不匹配、孤立项目、平台不匹配 |
analyze_project_properties | 使用源代码跟踪检查评估的属性(哪个文件,哪个行) |
compare_configurations | 调试与发布(或任意两个配置)的差异——属性、包、引用 |
analyze_impact | “如果我删除项目X,会有什么问题?”--直接+传递依赖项 |
check_package_versions | NuGet包版本一致性、CPM检测、版本覆盖跟踪 |
get_build_order | 具有关键路径长度的轻量级构建顺序(拓扑排序) |
list_projects | 无需MSBuild评估即可快速列出项目——即时响应 |
支持的客户
✅ 适用于
| 客户端 | 配置文件 | 详细信息 |
|---|---|---|
| VS代码+GitHub副本 | .vscode/mcp.json | 副驾驶代理模式直接调用MCP工具 |
| VS代码+继续开发 | .vscode/mcp.json | 适用于Claude、GPT或任何LLM后端 |
| 光标 | .cursor/mcp.json | 内置AI原生调用MCP工具 |
| Windsurf | 设置UI | 通过stdio传输支持原生MCP |
| 克劳德桌面 | claude_desktop_config.json | 全工具+即时支持 |
| 克劳德代码(终端) | CLI: claude mcp add | 与终端工作流程保持一致 |
| Visual Studio 2026+复制品 | .mcp.json 在解决方案目录中 | VS 2026预览版中的原生MCP支持 |
❌ 不支持
| 客户 | 原因 |
|---|---|
| Visual Studio 2022 | VS 2022中的复制副本不支持MCP协议 |
| ChatGPT | OpenAI使用不同的协议(函数调用,而不是MCP) |
| Gemini | 谷歌使用不同的协议(不是MCP) |
快速开始
安装
dotnet tool install -g MsBuildGraphMcp配置
克劳德桌面 --添加到 %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"msbuild-graph": {
"command": "msbuild-graph-mcp"
}
}
}克劳德代码:
claude mcp add msbuild-graph -- msbuild-graph-mcpVS Code --添加到 .vscode/mcp.json:
{
"servers": {
"msbuild-graph": {
"type": "stdio",
"command": "msbuild-graph-mcp"
}
}
}光标 --添加到 .cursor/mcp.json:
{
"mcpServers": {
"msbuild-graph": {
"command": "msbuild-graph-mcp"
}
}
}需求
- .NET SDK 8.0+(或Visual Studio 2022+)
- Windows(MSBuildLocator发现VS/.NET SDK安装)
输出示例
get_project_graph
{
"metrics": {
"nodeCount": 4,
"edgeCount": 3,
"uniqueProjectCount": 4,
"maxDepth": 2,
"constructionTimeMs": 297
},
"projects": [
{
"name": "WebApp",
"targetFrameworks": ["net8.0"],
"outputType": "Exe",
"isRoot": true,
"references": ["DataLib\\DataLib.csproj", "CoreLib\\CoreLib.csproj"]
}
],
"topologicalOrder": [
"CoreLib\\CoreLib.csproj",
"DataLib\\DataLib.csproj",
"WebApp\\WebApp.csproj"
]
}detect_build_issues
{
"totalIssues": 2,
"frameworkMismatches": [{
"project": "OldApp.csproj",
"projectTfm": "net6.0",
"dependency": "NewLib.csproj",
"dependencyTfm": "net8.0",
"reason": "net6.0 cannot consume net8.0"
}],
"orphanProjects": [{
"name": "UnusedLib",
"reason": "Library with no referencing projects"
}]
}特性
- 预构建分析 --无需生成,直接评估MSBuild项目文件
- .sln/.slnx/.slnf --支持所有解决方案格式,包括新的.slnx(VS 17.10+)
- 多目标识别 --通过外部/内部构建重复数据删除正确处理TargetFrameworks(复数)
- TFM兼容性 --NuGet。基于框架的检查(net8.0-windows与net8.0、netstandard2.0与net48等)
- 财产来源追踪 --显示定义每个MSBuild属性的文件和行号
- 配置差异 --比较任意两种配置(调试/发布、自定义配置)
- 循环依赖检测 --捕获MSB4251和循环依赖异常
- 共享导入发现 --标识目录。Build.props,目录。构建目标,目录。包装.props
- CPM检测 --识别中央包管理(ManagePack VersionsCentrally)
安全
所有工具都是 只读 --不会触发任何构建,也不会修改任何文件。
| 度量 | 描述 |
|---|---|
IsBuildEnabled = false | 在评估期间阻止MSBuild目标执行 |
MSBUILDENABLEALLPROPERTYFUNCTIONS guard | 如果设置了此危险的环境变量,服务器将拒绝启动 |
| 路径验证 | UNC路径被拒绝、扩展白名单、存在性检查 |
| 每次调用都有新鲜的ProjectCollection | 工具调用之间没有状态泄漏 |
| try/finally cleanup | 即使出现异常,项目也始终处于卸载状态 |
重要提示: MSBuild属性函数在评估期间执行(按设计)。功能如下 $([System.IO.File]::ReadAllText(...)) 加载项目时运行。只分析你信任的项目。建筑
┌──────────────────┐ stdio (JSON-RPC) ┌─────────────────────┐
│ Claude / Copilot │◄──────────────────────►│ msbuild-graph-mcp │
│ VS Code / Cursor │ │ │
└──────────────────┘ │ MSBuildLocator │
│ ► ProjectGraph │
│ ► ProjectCollection │
│ ► SolutionPersist │
└─────────────────────┘关键架构决策:
- MSBuildLocator JIT陷阱模式 --Main()中的RegisterInstance(),MSBuild类型仅在\[NoInline\]方法中
- 评估背景。共享 通过ProjectInstanceFactoryFunc--大型解决方案的2-5倍加速
- 平行度上限为8 --防止高核心计算机上的内存耗尽
- 微软。版本17.13.9 使用ExcludeAssets=“runtime”--避免17.14.8依赖项发布错误
测试
35个测试文件中的333个测试,来自5轮互联网研究,涵盖20多个来源:
dotnet test tests/MsBuildGraphMcp.Tests/
# Passed! - Failed: 0, Passed: 333, Skipped: 0, Total: 333, Duration: 12s测试类别:验证、核心工具、TFM兼容性、安全性(OWASP/CVE)、解决方案格式、生产弹性、并发性、路径边缘情况、JSON序列化、真实场景。
在测试过程中发现并修复了8个生产错误。
补充工具
此服务器提供 预生成 分析。对于 后期生成 分析(需要完整的构建),请参阅:
- BinlogInsights。模型上下文协议(Model Context Protocol) --26个MCP工具+13个CLI命令,用于MSBuild二进制日志分析(构建时间、错误、性能、分析器)
- baronel/mcp binlog工具 --MSBuild二进制日志分析(生成时间、错误、目标)
贡献
看 贡献.md 作为指导方针。
许可证
麻省理工学院 -弗洛林·维卡
