Roslyn MCP服务器

一个为AI代理提供.NET解决方案语义层支持的Roslyn MCP服务器,支持工作区同步和代码分析。

  • by akushnikov
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 akushnikov/roslyn-mcp-server

使用说明

roslyn mcp服务器

Roslyn支持的MCP服务器,供AI代理使用。NET解决方案。

该项目提供了一个同步感知语义层 MSBuildWorkspace,因此MCP客户端可以:

  • 显式加载解决方案
  • 检查项目和源文件
  • 导航符号和参考
  • 查询诊断和语义关系
  • 使工作区状态与外部文件编辑保持一致

服务器目标。NET 9,同时支持两者 stdio 以及HTTP传输。

它做什么

当前的实现侧重于代理工作流的只读Roslyn工具。

工作区和服务器工具

  • server_info 返回基本服务器和运行时信息。
  • workspace_context 从显式解析工作区上下文 solutionPath.
  • diagnose 检查环境就绪性、MSBuild可用性和解决方案加载运行状况。
  • load_solution 加载a .sln, .slnx,或 .csproj 进入Roslyn的实时工作空间。
  • get_workspace_state 返回当前加载的工作区状态和缓存的解决方案摘要。
  • get_project_structure 返回已加载解决方案的项目和源文档(可选)。

导航工具

  • get_document_outline 返回C#源文件的结构大纲。
  • get_file_overview 返回源文件的简明概述,包括其主要声明。
  • get_type_overview 返回已解析类型的简洁概述。
  • get_type_members 返回在解析类型上声明的成员。
  • search_symbols 在加载的解决方案中搜索源声明。
  • get_symbol_info 解析文件位置的语义符号信息。
  • get_symbol_attributes 返回应用于已解析符号的属性。
  • go_to_definition 返回已解析符号的源定义位置。
  • get_method_signature 返回文件位置处可调用成员的签名。
  • get_method_source 返回文件位置处可调用成员的源正文。
  • find_references 查找已解析符号的源引用。

分析工具

  • get_diagnostics 返回解决方案或特定文件的编译器诊断。
  • validate_code 返回基于编译器诊断的轻量级有效性摘要。
  • find_implementations 查找接口、抽象类型和虚拟成员的实现。
  • get_type_hierarchy 返回已解析类型的基类型、派生类型和接口。
  • find_callers 查找可调用符号的调用者位置。
  • get_outgoing_calls 返回可调用成员的传出调用边。
  • analyze_method 返回方法级数据流、控制流、签名和传出调用信息。
  • analyze_change_impact 返回符号的尽力影响摘要,包括引用和实现。
  • check_type_compatibility 检查两个解析的类型是否兼容。

工作空间同步

该服务器设计用于长时间运行的代理会话,其中文件可能在Roslyn API之外更改。

它维护一个实时工作区同步管道,该管道:

  • 监视工作区文件的外部更改
  • 尽可能增量更新Roslyn文档
  • 当项目结构更改需要时重新加载工作区
  • 确保语义查询使用当前 Workspace.CurrentSolution

在实践中,这意味着以下工具 find_references, analyze_method,以及 get_diagnostics 可以反映所做的编辑:

  • 由IDE中的用户执行
  • 由代理通过直接文件编辑
  • 通过其他工具更改磁盘上的文件

运行服务器

构建解决方案:

dotnet build .\roslyn-mcp-server.sln -v minimal

跑吧 stdio 主机:

dotnet run --project .\src\RoslynMcpServer.Host.Stdio\RoslynMcpServer.Host.Stdio.csproj

运行HTTP主机:

dotnet run --project .\src\RoslynMcpServer.Host.Http\RoslynMcpServer.Host.Http.csproj -- --urls http://localhost:3001

HTTP主机

HTTP主机公开:

  • GET /health
  • MCP端点位于 /mcp

写入HTTP请求和服务器日志:

  • 到控制台
  • 在以下位置滚动日志文件 src/RoslynMcpServer.Host.Http/logs

与MCP检查器一起使用

当HTTP主机在上运行时 http://localhost:3001,将检查器连接到:

  • http://localhost:3001/mcp

典型手动流程:

  1. 呼叫 server_info
  2. 呼叫 workspace_context
  3. 呼叫 diagnose
  4. 呼叫 load_solution
  5. 呼叫 get_workspace_state
  6. 呼叫 get_project_structure
  7. 使用导航或分析工具

示例 load_solution 请求:

{
  "solutionPath": "D:\\Projects\\opensource\\roslyn-mcp-server\\roslyn-mcp-server.sln",
  "forceReload": false
}

当前范围

当前服务器有意设置为只读。

在查询和同步层完全稳定后,计划重构、代码生成、预览/应用工作流和其他变异工具。

致谢

该项目借鉴了以下方面的想法和实施模式:

这些参考文献对工具库存计划、Roslyn第一工作流和MCP服务器人机工程学特别有用。