代码分析MCP
一种模型上下文协议(MCP)服务器,为提供代码分析功能。NET C#项目和使用Roslyn的monorepos。此服务使AI代理能够检测未引用的代码,分析解决方案结构,并执行其他代码质量检查。
特性
- 未引用代码检测:查找代码库中从未引用过的类、方法、属性和字段
- 可配置范围:分析整个解决方案、特定项目或按文件路径筛选
- 入口点意识:可选择从分析中排除入口点(主要方法、测试方法、控制器)
- 公共成员筛选:选择是否将公共成员纳入分析
- 详细结果:获取包含文件路径、行号、成员类型和可访问性级别的综合报告
可用工具
1.分析解决方案
分析a。NET解决方案文件(.sln),用于未引用的代码成员。
参数:
solutionPath(string,必填):.sln文件的完整路径includePublicMembers(bool,可选,默认值:true):在结果中包含公共成员includeEntryPoints(bool,可选,默认值:false):在结果中包含入口点projectFilter(字符串,可选):以逗号分隔的项目名称筛选器列表fileFilter(字符串,可选):逗号分隔的文件路径筛选器列表
2.分析项目
分析单个。NET项目文件(.csproj),用于未引用的代码成员。
参数:
projectPath(string,必填):.csproj文件的完整路径includePublicMembers(bool,可选,默认值:true):在结果中包含公共成员includeEntryPoints(bool,可选,默认值:false):在结果中包含入口点fileFilter(字符串,可选):逗号分隔的文件路径筛选器列表
3.溶解阴离子
获取中项目的摘要信息。NET解决方案。
参数:
solutionPath(string,必填):.sln文件的完整路径
需求
- .NET 9.0或更高版本
- MSBuild(包含在Visual Studio或.NET SDK中)
建筑
dotnet build作为MCP服务器运行
该服务器通过stdio进行通信,旨在与MCP兼容的AI客户端一起使用。
dotnet runClaude桌面配置
添加到您的Claude Desktop配置文件中:
视窗: %APPDATA%\Claude\claude_desktop_config.json macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"code-analysis": {
"command": "dotnet",
"args": [
"run",
"--project",
"C:\\path\\to\\CodeAnalysisMCP\\CodeAnalysisMCP.csproj"
]
}
}
}示例用法
配置后,您可以让Claude分析您的代码:
- “分析C:\\MyProject\\MyProject.sln中的解决方案,并找到所有未引用的代码”
- “检查项目C:\\MyProject\\MyLib\\MyLib.csproj中未使用的私有方法”
- “在MyProject.sln中查找未引用的代码,但排除测试项目”
- “C:\\MyProject\\MyProject.sln中的解决方案包含哪些项目?”
运作原理
- 工作区加载:使用Roslyn的
MSBuildWorkspace加载解决方案和项目 - 符号分析:遍历语法树以查找所有声明的符号
- 参考文献检索:用途
SymbolFinder.FindReferencesAsync查找每个符号的所有引用 - 过滤:为公共成员、入口点、项目和文件应用可配置的筛选器
- 结果:返回包含成员信息和统计信息的详细JSON
建筑
- 模型:用于分析选项和结果的数据传输对象
- 服务:
- WorkspaceLoader:通过Roslyn处理解决方案和项目的加载 - UnreferencedCodeAnalyzer:执行实际代码分析
- 工具:向AI代理公开分析功能的MCP工具定义
局限性
- 仅分析C#代码(通过Roslyn)
- 要求项目可构建(MSBuild必须能够还原和处理它们)
- 对于非常大的解决方案,分析可能很慢(考虑使用项目或文件过滤器)
- 不检测不可访问的代码(返回语句后的代码等)-仅检测未引用的符号
未来的增强功能
未来版本的潜在功能:
- 死代码检测(无法访问的代码)
- 圈复杂度分析
- 代码重复检测
- 依赖图分析
- 交叉引用报告
许可证
有关详细信息,请参阅LICENSE.md。
