项目简介

  • 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 维)。
  • 运行顺序(高层次):
    1. 启动 Redis + 嵌入服务(可通过 docker-compose 配置一体化启动)。
    2. 启动 DMCP 索引器,发现并索引工具到 Redis(可选,取决于是否已有索引)。
    3. 启动 DMCP 服务器(stdio 传输)对外提供 MCP 服务。
    4. 通过 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与计算