eMed MCP 服务端实现

使用说明内容(Markdown格式)

  • 项目简介

    • 本仓库实现一个基于 MCP 的后端服务器,允许 LLM 客户端通过 JSON-RPC 与服务器交互,注册并执行工具、检索知识库、存储潜在客户线索等操作。服务器采用无状态设计,支持通过不同传输方式与客户端通信,示例实现使用 Express + StreamableHTTPServerTransport。
  • 主要功能点

    • MCP 核心能力
      • 注册并暴露工具(如 search_knowledge_base、save_lead),支持输入校验与结果封装。
      • 通过 MCP 客户端执行工具并将结果回传给对端,支持多轮对话中的工具调用循环。
      • 提供知识库向量检索能力,结合 Elasticsearch 存储的文本片段和嵌入向量进行检索。
    • 资源与数据访问
      • 通过工具接口访问并操作 Elasticsearch 索引:knowledge base(emed-kb)和 leads(emed-leads)。
    • 安全与可扩展性
      • 采用无状态服务器实例(每个请求新建 McpServer),便于水平扩展;提供简单的授权头校验入口。
    • 兼容性与传输
      • 具备与 MCP 客户端的传输适配示例,支持通过 StreamableHTTPTransport 与客户端交互。
  • 安装步骤

    1. 安装依赖:在仓库根目录执行 pnpm install。
    2. 配置环境:复制并修改 .env 文件,例如 OPENAI_API_KEY、ELASTICSEARCH_URL 等。
    3. 启动 Elasticsearch:按照项目说明使用 docker Compose 启动本地 Elasticsearch。
    4. Ingest 知识库:执行 kb:_ingest 将 knowledge-base 目录中的文本分块、嵌入并索引到 Elasticsearch。
    5. 启动 MCP 服务器:进入 apps/mcp,执行轮廓命令启动(如 pnpm dev)。
    6. 启动前端应用(可选):进入 apps/web,执行 pnpm dev 启动前端界面。
  • 服务器配置 MCP 客户端连接服务器需要的配置信息(json 格式,包含 server name、command、args 等)示例说明如下,请按实际环境填写: { "serverName": "emed-mcp", "workingDirectory": "apps/mcp", "command": "pnpm", "args": ["dev"], "notes": "在仓库根目录执行 pnpm install 后,进入 apps/mcp 目录运行 pnpm dev 即可启动 MCP 服务。该配置用于客户端建立与 MCP 服务器的连接。" }

  • 基本使用方法

    • 启动与连接
      • 启动 MCP 服务器后,确保允许来自客户端的请求(如需要授权 token,请在环境变量中配置 MCP_AUTH_TOKEN)。
      • 客户端通过配置的服务器地址建立连接,并在需要时调用工具(如 search_knowledge_base、save_lead)执行对应操作。
    • 对话流程
      • LLM 通过工具调用向 MCP 服务器发起请求,服务器执行工具并返回结果,LLM 基于结果生成最终回答。
    • 安全与运维
      • 服务器为无状态实例,确保横向扩展时每个请求都能被独立处理;如需认证,可以通过 MCP_AUTH_TOKEN 控制访问。

服务器信息