MSBuild项目图分析服务

为LLM驱动的编码助手提供MSBuild解决方案的预构建静态分析,包括项目依赖分析、构建问题检测、共享导入检查和配置比较。

  • by FlorinVica
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 FlorinVica/msbuild-graph-mcp

使用说明

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-mcp

VS 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个生产错误。

补充工具

此服务器提供 预生成 分析。对于 后期生成 分析(需要完整的构建),请参阅:

贡献

看 贡献.md 作为指导方针。

许可证

麻省理工学院 -弗洛林·维卡