Roslyn MCP扩展——Visual Studio扩展
一个Visual Studio扩展,它公开 语义C#代码分析 通过 模型上下文协议(MCP),由 实时Roslyn工作区 在Visual Studio内部。
与创建自己的独立Roslyn MCP服务器不同 MSBuildWorkspace,此扩展使用Visual Studio的实际 VisualStudioWorkspace --允许您访问未保存的更改、实时诊断和VS已经维护的完整编译状态。
MCP工具
| 工具 | 说明 |
|---|---|
roslyn_validate_file | C#文件的编译器错误、警告和可选分析器诊断 |
roslyn_find_references | 查找整个解决方案中对符号的所有引用 |
roslyn_go_to_definition | 导航到符号的定义 |
roslyn_get_document_symbols | 列出文件中的所有符号,包括类型、修饰符和行跨度 |
roslyn_search_symbols | 在整个解决方案中按名称搜索符号声明 |
roslyn_find_dead_code | 查找可能未使用的类型、方法和字段 |
roslyn_get_symbol_info | 获取符号的详细信息和文档 |
先决条件
- Visual Studio 2022或2026
- .NET 10.0 SDK(用于服务器进程)
建筑
解决方案文件位于 src/RoslynMcpExtension.slnx。由于VSIX项目需要MSBuild,请通过Visual Studio或 msbuild:
# Full solution (requires Visual Studio / MSBuild)
msbuild src\RoslynMcpExtension.slnx
# Server and Shared projects only (dotnet CLI)
dotnet build src\RoslynMcpExtension.Server\RoslynMcpExtension.Server.csprojVSIX项目会自动将MCP服务器进程发布到其输出目录。
安装
- 在发布模式下构建解决方案
- 安装生成的
.vsix从src/RoslynMcpExtension/bin/Release/ - 重新启动Visual Studio
用法
启动服务器
加载解决方案时,服务器会自动启动(可在中配置 工具>选项>Roslyn MCP扩展).
您还可以通过以下方式手动启动/停止 工具>启动/停止Roslyn MCP服务器.
输出窗格
该扩展将所有活动记录到专用 “Roslyn MCP扩展” Visual Studio输出窗口中的窗格(查看>输出,然后从下拉列表中选择“Roslyn MCP扩展”)。这包括:
- 服务器生命周期:启动、停止、进程退出、连接状态
- 工具调用:每个MCP工具调用,包括名称和经过的时间
- RPC事件:客户端连接/断开连接,管道错误
- 异常:服务器启动、命令执行或VS交互过程中的任何错误
- MCP服务器消息:HTTP服务器进程通过RPC登录回“输出”窗格
配置
在 工具>选项>Roslyn MCP扩展:
- 港口:HTTP端口(默认值:
5050) - 服务器名称:显示给MCP客户端的名称
- 自动启动:加载解决方案时自动启动
会话恢复
服务器支持透明 会话迁移如果服务器重新启动(例如通过停止/启动命令或解决方案切换),具有过时会话ID的MCP客户端将自动迁移到新会话,无需重新启动客户端。
连接MCP客户端
克劳德桌面版
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"roslyn-mcp": {
"url": "http://localhost:5050/mcp"
}
}
}VS代码(GitHub副本)
添加到您的 .vscode/mcp.json 或用户设置:
{
"servers": {
"roslyn-mcp": {
"url": "http://localhost:5050/mcp"
}
}
}任何MCP客户端
服务器公开了两种传输方式:
- 可流式传输的HTTP:
http://localhost:5050/mcp(推荐给现代MCP客户) - 传统SSE:
http://localhost:5050/sse(为了与旧客户端向后兼容)
死代码分析
roslyn_find_dead_code 报告 可能 实时Visual Studio工作区中未使用的方法、字段和类型。它使用Roslyn语义引用加上额外的启发式方法,用于框架驱动和运行时驱动的代码路径,这些路径并不总是作为正常的源引用出现。
该分析故意保守,已经过滤了几种常见的假阳性模式:
- 测试代码:xUnit、NUnit和MSTest属性,如
Fact,Theory,Test,TestCase,TestMethod,DataTestMethod、设置/清理属性以及包含或继承测试方法的类型 - 接口契约:显式和隐式接口实现
- XAML使用:从实例化的控件和窗口的事件处理程序、代码隐藏类型、附加依赖属性和无参数构造函数
.xaml--包括派生类型为XAML激活的基类 - Visual Studio/MEF组合:
Export,Import,ImportingConstructor,以及用装饰的Visual Studio包类型PackageRegistrationAttribute - MCP工具入口点:装饰方法和类型
McpServerToolAttribute或McpServerToolTypeAttribute,由MCP框架动态调用 - 生成和互操作代码:通用生成的文件、编译器生成的成员和封送处理/
StructLayout领域 - 推广模式:静态扩展容器,经典
this扩展方法和较新的C#extension(...) { }块 - 继承的测试基类:抽象基类型,其派生类是测试容器
死代码检测永远不会完美,特别是对于反射重或外部激活的代码,因此在删除之前仍应检查结果。
示例提示
Validate the file C:\MyProject\src\UserService.cs for errors and warningsFind all references to the method ProcessOrder in C:\MyProject\src\OrderService.cs at line 42, column 20Go to the definition of the symbol at line 15, column 10 in C:\MyProject\src\OrderService.csList all symbols in C:\MyProject\src\UserService.csSearch for all symbols named "Repository" in the current solutionWhat is the symbol at line 25, column 8 in C:\MyProject\src\OrderService.cs?Find dead code in the active workspaceFind dead code including public members它与其他Roslyn MCP服务器有何不同
| 功能 | 此扩展 | 其他roslyn/mcp服务器 |
|---|---|---|
| 工作区 | 实时VS VisualStudioWorkspace | 独立 MSBuildWorkspace |
| 未保存的更改 | ✅ 查看当前编辑器状态 | ❌ 仅保存文件 |
| 查找参考文献 | ✅ 语义 SymbolFinder | ❌ 文本搜索或单独的工作区 |
| 诊断 | ✅ VS编译器直播 | ⚠️ 单独重新编译 |
| 构建集成 | ✅ 使用VS编译状态 | ❌ 单独汇编 |
| 安装 | 安装VSIX,无需配置 | 为每个项目配置解决方案路径 |
| 日志记录 | ✅ 专用输出窗格 | ❌ 控制台/文件日志 |
| 会话恢复 | ✅ 透明迁移 | ❌ 客户端必须重新连接 |
许可证
麻省理工学院
