ManagedCode.MCPGateway 服务器端实现
使用说明内容(Markdown格式)
-
项目简介
- 这是一个基于 .NET 的 MCP 服务器实现与网关库,能够把本地 AITool 实例、HTTP/stdio/MCP 服务器以及现有 MCP 客户端整合到一个统一的执行和检索表面。核心功能包括:注册和描述工具、在需要时构建和维护工具描述索引、基于嵌入向量的向量检索、以及对 LLM 客户端发起的调用进行参数映射和输出规范化。
-
主要功能点
- MCP 服务器核心接口:提供构建索引、列出工具、执行查询和调用工具等能力,全面支持 MCP 的请求/响应流程。
- 资源与工具注册与加载:支持本地工具、HTTP 服务器、标准输入/输出的工具、以及现成的 MCP 客户端工具的注册和加载。
- 元工具与统一调用入口:可将网关本身暴露为搜索工具和调用工具,帮助模型先查询网关再执行具体工具。
- 嵌入式向量检索:可与 IEmbeddingGenerator 以及自定义的嵌入存储实现集成,进行描述描述 Documents 的向量化与相似度排名。
- 持久化与增量更新:支持通过 IMcpGatewayToolEmbeddingStore 持久化工具向量,在后续构建中仅生成缺失向量,且能感知嵌入发生变化而重新生成。
- 多源工具与多传输:支持本地、HTTP、Stdio、以及外部 MCP 客户端等多种工具源,便于搭建混合型后端。
- 基于 DI 的可扩展性与测试友好性:通过 AddManagedCodeMcpGateway 扩展方法注入配置,易于在应用程序中集成并单元测试。
-
安装步骤
- 在你的 .NET 项目中添加 NuGet 包 ManagedCode.MCPGateway:
- dotnet add package ManagedCode.MCPGateway
- 参考快速起步示例,使用依赖注入注册网关并构建索引、执行搜索与调用。
- 在你的 .NET 项目中添加 NuGet 包 ManagedCode.MCPGateway:
-
服务器配置(JSON 配置示例,供 MCP 客户端在启动服务器时读取)
- serverName: 唯一标识服务器实例的名称,例如 "ManagedCodeGatewayServer"。
- command: 启动 MCP 服务器进程所需的启动命令,例如「dotnet」。
- args: 启动命令的参数,指向实现 MCP 服务器的宿主可执行文件或入口,例如托管网关库的宿主应用入口。
- 注释说明:此配置用于 MCP 客户端在启动服务器前的准备工作,确保客户端能够根据命令与参数正确启动服务器并建立连接。实际的服务器实现可能在应用内作为库使用,需要一个宿主应用来引用并配置网关(如注册工具、服务器源等)。
- 示例字段说明(非代码形式描述):
- serverName: 用于标识该服务器实例的名称,便于在多服务器场景下区分。
- command: 启动服务器的可执行程序,例如使用 dotnet 启动一个宿主程序。
- args: 上述命令的参数,指向服务器入口点或包含必要配置的参数集合。
- 注:具体的运行方式需要你在应用中实现一个宿主来加载 ManagedCode.MCPGateway 并通过 MCPGatewayOptions 配置工具与数据源。
-
基本使用方法
- 在应用中注入 MCP 网关并进行索引构建:
- 将需要的工具通过 AddTool/AddTools 注册到网关的本地源或其他来源。
- 调用 BuildIndexAsync 构建描述符、执行向量向量化、以及将缺失向量写入存储(若配置了嵌入存储)。
- 使用 MCP 网关进行查询与调用:
- 调用 SearchAsync 进行工具发现和排序(支持向量检索、词汇回退和浏览模式)。
- 调用 InvokeAsync 进行工具执行,支持通过 ToolId、ToolName 或 ToolName+SourceId 的方式定位工具,并将查询、上下文等映射为工具的输入。
- 元工具场景:通过 CreateMetaTools 生成 gateway_tools_search 和 gateway_tool_invoke,用于在其他模型中先搜索网关工具再执行。
- 配置嵌入存储与嵌入生成器:将 IEmbeddingGenerator<string, Embedding<float>> 注册到 DI,或提供自定义的 IMcpGatewayToolEmbeddingStore 实现,以实现描述向量的持久化与增量更新。
- 在应用中注入 MCP 网关并进行索引构建:
-
运行与入口
- 实际部署时,需要一个宿主应用来加载 ManagedCode.MCPGateway 并按需注册工具、源和嵌入存储,以及对外暴露 MCP 服务端口或其他传输。
- 如需测试,可参考仓库中的测试用例与 TestMcpServerHost 实现来理解服务器端与 MCP 客户端的交互方式。