项目简介
- DMCP 服务器实现了基于 MCP(Model Context Protocol)的后端运行时,能够在 Redis 向量检索索引的辅助下,动态暴露、管理和路由工具,LLM 客户端通过 JSON-RPC 调用读取资源、执行工具、获取 Prompt 等能力。
- 核心能力包括:动态工具发现(通过 search_tools/meta-tool)、向量化语义筛选、懒加载后端 MCP 服务器、以及对工具的增删、访问控制和通知推送(list_changed)。
- 采用多种传输方式(如 stdio)实现 MCP 服务器,具备会话管理、能力声明以及跨服务的扩展能力。
主要功能点
- MCP 兼容的工具发现与调用:实现 listChanged、notifications/tools/list_changed 等 MCP 功能,动态暴露可用工具清单。
- 向量检索与语义筛选:利用 Redis VSS、ToolRet 1024维嵌入模型对工具进行语义排序与过滤,显著降低前端工具列表 token 量和选择噪声。
- 懒加载后端 MCP 服务器:只有在需要调用具体工具时才建立与后端服务器的连接(SSE 客户端传输)。
- 动态工具暴露与淘汰:基于最近使用情况与语义搜索结果,动态更新 expose 的工具集,并对不活跃工具进行逐出(eviction)。
- 工具路由与域分类:结合域分类器、领域优先级和能力聚类实现工具路由,支持租户/服务器感知路由与去重。
- 工具索引器(Indexer):独立进程从网关/配置中发现 MCP 服务器,并将工具信息和嵌入向量批量写入 Redis,以供搜索使用。
- 支持后端服务器按需连接:后端 MCP 服务器通过 SSE 连接,初始阶段不建立连接,工具调用时再建立连接以降低启动成本。
安装与运行要点
- 需要的组件:Node.js 18+、Docker 与 Docker Compose、Redis 服务、嵌入服务(Infinity Embedding)、Agent Gateway(用于配置与发现)以及开放的后端 MCP 服务器(SSE)。
- 服务器入口使用标准的 MCP 服务器实现,传输方式为 stdio(mcp-server.ts 通过 StdioServerTransport 暴露服务)。
- 索引与向量检索依赖 Redis VSS、Infinity Embedding 服务及 ToolRet 模型(默认 1024 维)。
- 运行顺序(高层次):
- 启动 Redis + 嵌入服务(可通过 docker-compose 配置一体化启动)。
- 启动 DMCP 索引器,发现并索引工具到 Redis(可选,取决于是否已有索引)。
- 启动 DMCP 服务器(stdio 传输)对外提供 MCP 服务。
- 通过 Agent Gateway 配置并将服务器信息暴露给客户端,客户端即可通过 MCP 调用工具。
服务器配置(供 MCP 客户端使用的描述性信息)
以下为服务器配置的结构说明(请以实际环境的 JSON 配置文件保存并供 MCP 客户端读取),核心字段包括服务器名称、启动命令以及参数信息等,供 MCP 客户端在建立连接时参考。注释对字段作用进行解释,实际使用时请直接提供有效的 JSON 文件给客户端使用。
{ "name": "dmcp-server", "description": "DMCP 运行时服务器,提供动态工具发现与调用,基于 Redis 向量索引进行语义筛选,后端工具在需要时才连接", "command": "node", "args": [ "<path-to-dmcp>/mcp-server/node_modules/.bin/tsx", "<path-to-dmcp>/mcp-server/src/dmcp-server.ts", "<path-to-dmcp>/gateway/mcp.json" ], "environment": { "REDIS_HOST": "localhost", // Redis 服务地址 "REDIS_PORT": "6380", // Redis 服务端口 "DMCP_TOP_K": "15", // 每次查询返回的工具数量上限 "DMCP_MIN_SCORE": "0.3" // 各工具最小相似分数阈值 }, "notes": "该配置用于 MCP 客户端连接和管理 DMCP 服务器。客户端仅需要知道服务器名称与启动参数以建立 JSON-RPC 会话,不需要额外的实现细节。" }
说明:
- 实际使用时,请将尖括号中的路径替换为你在环境中的实际路径。
- 出于安全与运维考虑,配置中的 Redis、嵌入服务、网关地址等要根据你的环境进行调整。
- 客户端连接 DMCP 服务器时会需要指定服务器名称、命令及参数以启动本地 MCP 客户端并建立与服务器的通信通道。
基本使用方法
- 通过 MCP 客户端向 DMCP 服务器发起工具发现请求(listTools),获取当前暴露的工具集合。
- 调用 mcp_dmcp_search_tools meta-tool 进行工具检索,LLM 将得到 top-K 的可用工具列表。
- 选择合适工具名称直接调用,DMCP 将按服务器、域、聚类等策略将调用路由到相应后端 MCP 服务器(如需多后端并行,则可能返回并发调用)。
- 后端工具调用采用懒连接策略,首次请求时再建立 SSE 连接,后续请求复用连接。
- 系统支持通知(list_changed),当暴露工具集合更新时,客户端可以收到变更通知。
备注
- 本实现明确包含服务端代码(dmcp-server.ts、redis-vss.ts、dmcp-indexer.ts、tool-router.ts 等),非仅示例或测试代码,且具备完整的资源管理、工具注册、后端对接以及 MCP 协议交互能力,符合 MCP 服务器实现的核心要件。
信息
分类
AI与计算