Roslyn CodeLens MCP服务器
 ](https://www.nuget.org/packages/RoslynCodeLens.Mcp)    ](https://github.com/sponsors/MarcelRoozekrans)
基于Roslyn的MCP服务器,为AI代理提供深入的语义理解。NET代码库——类型层次结构、调用图、DI注册、诊断、重构等等。
______________________________________________________________________
托管部署
托管部署可在 Frontier AI.
特性
- 查找实现 --查找实现接口或扩展类的所有类/结构
- find_callers --查找方法、属性或构造函数的每个调用点
- find_event_订阅者 --事件符号的每个+=/-=站点,具有已解析的处理程序和订阅/取消订阅标签
- find_tests_for_symbol --列出执行生产符号的xUnit/NUnit/MSTest方法;选择可传递的遍历助手
- get_test_summary --每个项目的测试方法清单,包括框架、属性类型、数据行数、位置和引用的生产符号
- 查找未覆盖的符号 --没有测试可传递达到的公共方法和属性;按圈复杂度排序以确定优先级
- 发电机测试骨架 --为方法或类型发出可编译的测试类骨架(作为文本)。自动检测xUnit/NUnit/MSTest;表面构造函数依赖关系为TodoNotes;返回建议的文件路径。使用以下命令关闭循环
find_uncovered_symbols - get_type层次结构 --遍历基类、接口和派生类型
- get_d_注册 --扫描DI服务注册
- get_项目依赖关系 --获取项目参考图
- get_symbol_text --任何类型的一次性上下文转储
- get_public_api_surface --枚举生产项目中的每个公共/受保护类型和成员;适用于API审查或突破变更基线的平面、确定排序列表。
- 查找_破坏_更改 -将当前API与基线JSON或DLL进行比较;报告删除了具有中断/非中断严重性的成员、类型更改和可访问性更改。
- find_reflection \_用法 --检测基于动态/反射的使用情况
- 查找引用 --查找对任何符号(类型、方法、属性、字段、事件)的所有引用
- go_to_定义 --找到定义符号的源文件和行
- get_诊断学 --列出编译器错误、警告和Roslyn分析器诊断
- get_code_fixes --通过结构化文本编辑获取任何诊断的可用代码修复
- 搜索_符号 --按名称搜索模糊工作空间符号
- get_nuget_依赖关系 --列出每个项目的NuGet包引用
- 查找属性信息 --查找用特定属性装饰的类型和成员
- find_obsolet_use --每一个
[Obsolete]按弃用消息和严重性分组调用站点,错误优先;用于规划迁移 - 查找循环依赖关系 --检测项目或命名空间依赖关系图中的周期
- get_complexity_metrics --每种方法的圈复杂度分析
- find_naming_违规 --检查一下。NET命名约定合规性
- 查找_同步_违规 --异步同步,
async void误用、失踪等待、即发即弃任务;根据严重程度的违规报告 - find_disposable_misuse —
IDisposable/IAsyncDisposable未包装的实例using/await using/返回/分配到现场;严重性错误/每次违规警告。 - find_large_classes --按成员或行数查找超大字体
- find_god_objects --结合高大小和高跨命名空间耦合的类型;SRP违规信号比原始大小更清晰
- 查找未使用的符号 --通过参考分析进行死码检测
- get_project_health --复合审计聚合了每个项目的7个质量维度(复杂性、大类、命名、未使用的符号、反射、异步违规、一次性误用),并内联了计数和前N个热点
- get_source_generator --列出每个项目的源生成器及其输出
- get_generated_code --检查源代码生成器生成的源代码
- 检查外部组件 --从闭源NuGet包和引用的程序集中浏览类型、成员和XML文档
- peek_il --将任何方法从闭源代码或生成的程序集中分解为ilasm风格的IL字节码
- get_code_actions --在任何位置发现可用的重构和修复(提取方法、重命名、内联变量等)
- 应用程序_代码_操作 --使用预览模式按标题执行任何Roslyn重构(在写入磁盘之前返回一个diff)
- list_解决方案 --列出所有已加载的解决方案以及当前处于活动状态的解决方案
- set_active_解决方案 --按部分名称切换活动解决方案(所有后续工具都对其进行操作)
- load_解决方案 --在运行时加载额外的.sln/.slnx,并使其成为活动解决方案
- unload_解决方案 --卸载已加载的解决方案以释放内存
- 重建_解决方案 --强制完全重新加载分析的解决方案
- analyze_data_flow --语句范围内的变量读/写/捕获分析(声明、读、写、始终分配、捕获、流入/流出)
- 分析控制流 --语句范围内的分支/循环可达性分析(开始/结束可达性、返回语句、退出点)
- 分析变更影响 --显示受更改符号影响的所有文件、项目和调用站点——结合了find_references和find_callers
- get_type_overview --复合工具:在一次调用中实现类型上下文+层次结构+文件诊断
- 分析方法 --复合工具:一次调用中的方法签名+调用者+传出调用
- 过载 --在一次调用中,方法/构造函数(源+元数据)的每个重载都包含完整的参数和修饰符细节
- get_operators --具有种类、签名、参数和源位置的类型(源+元数据)上的每个用户定义运算符和转换运算符。包括合成记录相等性和。NET 7+检查变量
- get_call_graph --方法的传递调用方/被调用方图,具有循环检测的深度限制
- 获取文件概览 --复合工具:在一个调用中定义文件类型+文件范围的诊断
外部组件
元数据源符号(来自NuGet包和引用的程序集)是一级公民:
- 第1层——导航 (
find_references,find_callers,find_implementations):接受闭源类型和成员名称。从程序集元数据中解析它们,并报告所有源代码级使用情况站点。 - 第2级——检查 (
inspect_external_assembly):从任何引用的程序集中浏览命名空间、类型、成员和XML文档注释,而无需反编译。 - 第3级——IL (
peek_il):使用ICSharpCode将特定方法分解为带注释的ilasm样式IL。反编译器——有助于理解NuGet库的内部。
位置返回结果包括 Origin 现场(source 或 metadata)和a IsGenerated 标志,用于区分手写代码和闭源代码或生成的输出。
安全性:信任模型
get_diagnostics 和 get_code_fixes 可以加载Roslyn分析器——在进程内执行的DLL。为了防止不受信任的分析器自动运行,此服务器使用VS/Rider风格的信任模型:
- 解决方案在启动时通过CLI传递 对当前会话自动信任。
- 其他解决方案 必须通过明确信任
trust_solutionMCP工具。 - 分析器DLL 必须来自用户的NuGet全局包文件夹、dotnetSDK安装目录或解决方案自己的
bin/obj。跳过其他路径。
使用 list_trusted_paths 和 revoke_trust 用于检查和管理信任状态的工具。持久信任存储在 %APPDATA%\roslyn-codelens\trust.json.
看 安全.md 对于完整的威胁模型。
快速开始
VS代码/Visual Studio(通过dnx)
添加到MCP设置(.vscode/mcp.json 或VS设置):
{
"servers": {
"roslyn-codelens": {
"type": "stdio",
"command": "dnx",
"args": ["RoslynCodeLens.Mcp", "--yes"]
}
}
}Claude代码插件
claude install gh:MarcelRoozekrans/roslyn-codelens-mcp.NET全局工具
dotnet tool install -g RoslynCodeLens.Mcp然后添加到您的MCP客户端配置中:
{
"mcpServers": {
"roslyn-codelens": {
"command": "roslyn-codelens-mcp",
"args": [],
"transport": "stdio"
}
}
}用法
服务器自动发现 .sln 从当前目录向上移动文件。您还可以直接传递一个或多个解决方案路径:
# Single solution
roslyn-codelens-mcp /path/to/MySolution.sln
# Multiple solutions — switch between them with set_active_solution
roslyn-codelens-mcp /path/to/A.sln /path/to/B.sln加载多个解决方案时,使用 list_solutions 看看有什么可用的 set_active_solution("B") 切换上下文。默认情况下,第一条路径处于活动状态。
演出
所有类型查找都使用预构建的反向继承映射、成员索引和属性索引进行O(1)访问。以i9-12900HK为基准。NET 10.0.7:
| 工具 | 延迟 | 内存 |
|---|---|---|
go_to_definition | 2.1µs | 576 B |
find_implementations | 2.5µs | 720 B |
get_project_dependencies | 2.8µs | 1.5 KB |
get_type_hierarchy | 3.5µs | 1.3 KB |
find_circular_dependencies | 3.7µs | 2.7 KB |
get_symbol_context | 4.1µs | 1.0 KB |
get_source_generators | 16µs | 23 KB |
analyze_data_flow | 19µs | 1.6 KB |
find_attribute_usages | 72µs | 904 B |
get_generated_code | 78µs | 24 KB |
analyze_control_flow | 115µs | 14 KB |
inspect_external_assembly (摘要) | 159µs | 35 KB |
find_large_classes | 265µs | 3.5 KB |
get_di_registrations | 478µs | 16 KB |
inspect_external_assembly (命名空间) | 564µs | 259 KB |
find_reflection_usage | 705µs | 19 KB |
get_complexity_metrics | 781µs | 25 KB |
get_code_actions | 792µs | 54 KB |
get_file_overview | 797µs | 101 KB |
get_diagnostics | 822µs | 99 KB |
get_nuget_dependencies | 849µs | 48 KB |
get_public_api_surface | 885µs | 247 KB |
get_type_overview | 1.1毫秒 | 104 KB |
peek_il | 1.1毫秒 | 34 KB |
find_disposable_misuse | 3.5毫秒 | 286 KB |
find_uncovered_symbols | 3.8毫秒 | 224 KB |
search_symbols | 3.9毫秒 | 557 KB |
analyze_method | 5.8毫秒 | 333 KB |
find_async_violations | 7.0毫秒 | 335 KB |
find_tests_for_symbol (直接) | 8.4毫秒 | 396 KB |
find_callers | 10毫秒 | 337 KB |
find_tests_for_symbol (可传递) | 12毫秒 | 399 KB |
find_naming_violations | 15毫秒 | 788 KB |
find_unused_symbols | 23毫秒 | 1.0 MB |
find_references | 28毫秒 | 1013 KB |
analyze_change_impact | 33毫秒 | 1.3 MB |
| 解决方案加载(一次性) | ~4.1秒 | 16 MB |
热重新加载
服务器监视 .cs, .csproj, .props,以及 .targets 更改文件。当检测到更改时,受影响的项目会在下一个工具查询中延迟重新编译——只有过时的项目及其下游依赖项会被重新编译,而不是完整的解决方案。
位置返回工具包括 IsGenerated 用于区分源代码生成器输出和手写代码的标志。
需求
- .NET 10 SDK
- A.NET解决方案,具有可编译项目
发展
dotnet build
dotnet test
dotnet run --project benchmarks/RoslynCodeLens.Benchmarks -c Release第三方许可证
- ICSharpCode。反编译 --MIT许可证(v8+)。用于拆卸IL
peek_il工具。
许可证
麻省理工学院
