CSharpMCP Roslyn-based MCP Server
使用说明内容(Markdown 格式)
-
项目简介
- CSharpMCP 是一个基于 Roslyn 的 MCP 服务器实现,提供对 C# 代码的语义分析、符号查询、继承层次、调用图等能力,并以 MCP 标准通过 JSON-RPC 与客户端通信。服务器主要职责包括注册和执行 Tools、管理工作区(workspace)、以及提供可渲染的提示信息与输出,帮助 LLM 客户端在对 C# 代码进行理解和操作时获得丰富上下文。
-
主要功能点
- 资源与数据访问:提供对代码工作区及符号信息的访问能力(包括符号、诊断、继承、调用图等)。
- 工具注册与执行:通过 MCP Tool 机制注册多种工具(GetSymbols、FindReferences、GetInheritanceHierarchy 等),可对外暴露为可调用的 JSON-RPC 工具集。
- 提示渲染与输出:工具输出以 Markdown 形式渲染,便于直接展示给 LLM 客户端。
- JSON-RPC 与传输协议:基于 MCP 的 JSON-RPC 交互,初始传输以标准输入输出(stdio)为主,未来可扩展到 SSE、WebSocket 等。
- 会话与工作区管理:支持加载解决方案/项目、自动加载工作区以及对工作区变更的感知与异步刷新。
-
安装与运行步骤
- 确保开发环境具备 .NET 10.0 及相关依赖(仓库中提供了 .NET 项目结构和快速开始说明)。
- 构建并运行服务器:
- 使用命令:dotnet run --project src/CSharpMcp.Server/CSharpMcp.Server.csproj
- 第一次启动时,服务器会通过默认行为尝试从当前工作目录加载工作区(如果设定了环境变量 CSHARPMCP_WORKSPACE,则会优先使用该路径加载工作区)。
- 运行后,服务器将通过标准错误输出日志,且通过标准输出返回 MCP 的 JSON-RPC 消息(满足 MCP 服务器的通信格式要求)。
- 客户端连接配置(后续步骤请参照配置信息)。客户端通常需要一个 MCP 服务器配置对象,其中包含服务器名称、启动命令及参数等信息,以便建立连接和调用工具。
-
服务器配置(MCP 客户端所需的启动配置,JSON 结构描述,供参考,不作为代码块展示)
- serverName: 服务器名称,用于标识该 MCP 服务,例如 "CSharpMCP"。
- command: 启动服务器所用的命令,例如 "dotnet"。
- args: 启动命令的参数数组,例如 ["run", "--project", "src/CSharpMcp.Server/CSharpMcp.Server.csproj"]。
- transport: 传输协议,默认使用 stdio(JSON-RPC 通过标准输入/输出交换)。
- 备注: MCP 客户端需要上述配置信息以建立连接,实际的使用细节在客户端实现中处理。
示例(以文本描述形式呈现,请理解为结构字段说明,而非直接代码块):
- serverName: "CSharpMCP"
- command: "dotnet"
- args: ["run", "--project", "src/CSharpMcp.Server/CSharpMcp.Server.csproj"]
- transport: "stdio"
- 说明: MCP 客户端将通过该配置信息启动服务器并与之通过 JSON-RPC 进行通信。
-
基本使用方法
- 启动后,先通过 LoadWorkspaceTool(或等效机制)加载一个 C# 解决方案或项目,以建立工作区环境。
- 使用工具(如 GetSymbols、FindReferences、GetInheritanceHierarchy、GetCallGraph 等)来获取符号信息、引用、继承关系、调用图等分析结果,输出将以 Markdown 形式返回,便于直接展示给 LLM。
- 通过自动加载工作区与文件监控,服务器能够在检测到文件变更后刷新工作区状态,确保分析结果的时效性。
- 客户端可通过标准 MCP 请求调用工具方法,传入相应参数(如文件路径、符号名称、行号等),获取统一格式化的输出。
-
额外信息
- 服务器示例启动与测试在仓库的 README 与测试用例中可查看到,实际部署时建议结合具体工作区路径与工作流进行配置。