使用说明

项目简介

mcp_sse 是一个 Elixir 库,用于构建基于 Server-Sent Events (SSE) 的 Model Context Protocol (MCP) 服务器。它旨在为 LLM 客户端提供标准化的上下文信息和功能,例如资源管理、工具调用和 Prompt 模板。该库简化了 MCP 服务器的开发过程,提供了会话管理、消息路由、协议版本验证和错误处理等功能。

主要功能点

  • MCP 协议实现: 完整实现了 Model Context Protocol 协议,支持客户端与服务器之间的标准化通信。
  • SSE 连接管理: 通过 Server-Sent Events (SSE) 管理客户端连接,实现实时的双向通信。
  • JSON-RPC 消息处理: 处理基于 JSON-RPC 协议的请求和响应,用于客户端与服务器之间的方法调用和数据交换。
  • 工具注册与执行: 允许开发者注册和执行工具,供 LLM 客户端调用以扩展功能。
  • 会话管理: 支持基于 Session ID 的会话管理,确保客户端请求的上下文关联性。
  • 自动心跳保活: 通过定时发送心跳消息保持 SSE 连接的活跃状态。
  • 错误处理与验证: 内置 JSON-RPC 错误处理和协议版本验证,确保通信的稳定性和合规性。

安装步骤

  1. 添加到依赖: 在你的 Elixir Phoenix 或 Plug 应用的 'mix.exs' 文件中,将 'mcp_sse' 添加到依赖列表中:

    def deps do
      [
        {:mcp_sse, "~> 0.1.0"}
      ]
    end

    然后运行 'mix deps.get' 获取依赖。

  2. 配置 MCP 服务器: 在 'config/config.exs' 文件中,配置你的 MCP 服务器实现。你可以使用默认的 'MCP.DefaultServer' 或自定义的服务器模块:

    config :nws_mcp_server, :mcp_server, MCP.DefaultServer # 使用默认服务器
    # config :nws_mcp_server, :mcp_server, YourApp.YourMCPServer # 使用自定义服务器
  3. 配置路由: 在你的 Phoenix 应用的 'router.ex' 或 Plug 应用的 'router.ex' 中,配置路由以暴露 SSE 和消息处理端点。例如,在 Phoenix 应用中:

    pipeline :sse do
      plug :accepts, ["sse"]
    end
    
    scope "/" do
      pipe_through :sse
      get "/sse", SSE.ConnectionPlug, :call # SSE 连接端点
      pipe_through :api
      post "/message", SSE.ConnectionPlug, :call # 消息处理端点
    end

客户端端点信息

MCP 客户端需要配置以下端点信息以连接到 mcp_sse 服务器。假设服务器运行在 'http://localhost:4000'。

{
  "serverName": "mcp_sse_server",
  "command": null,
  "args": null,
  "sseEndpoint": "http://localhost:4000/sse?sessionId=YOUR_SESSION_ID",
  "messageEndpoint": "http://localhost:4000/message?sessionId=YOUR_SESSION_ID",
  "description": "mcp_sse 服务器端点,用于建立 SSE 连接和发送 JSON-RPC 消息。请将 YOUR_SESSION_ID 替换为实际的会话ID。"
}

配置说明:

  • 'serverName': 服务器名称,可以自定义,用于客户端标识。
  • 'command': 对于库类型的 MCP 服务器,通常不需要配置启动命令,因为它是集成在应用内部运行的。因此设置为 'null'。
  • 'args': 启动参数,同理,库类型的服务器通常不需要额外的启动参数,设置为 'null'。
  • 'sseEndpoint': SSE 连接端点 URL。客户端需要连接到此 URL 建立 SSE 长连接。请务必将 'YOUR_SESSION_ID' 替换为客户端生成的或服务器预期的会话 ID。会话 ID 通常通过查询参数 'sessionId' 传递。
  • 'messageEndpoint': 消息处理端点 URL。客户端通过 POST 请求向此 URL 发送 JSON-RPC 消息。同样需要替换 'YOUR_SESSION_ID'
  • 'description': 端点描述信息,方便客户端开发者理解端点用途。

注意: 实际部署时,'http://localhost:4000' 需要替换为你的 mcp_sse 服务器的实际地址和端口。会话 ID 的生成和管理方式需要根据你的具体应用场景进行设计。

基本使用方法

  1. 启动 Elixir 应用: 启动你的 Phoenix 或 Plug 应用,该应用集成了 'mcp_sse' 库并配置了路由。例如,对于 Phoenix 应用,运行 'mix phx.server'。

  2. 客户端连接 SSE 端点: 在 MCP 客户端中,使用 'EventSource' 或其他 SSE 客户端库连接到 'sseEndpoint' 配置的 URL,并替换 'YOUR_SESSION_ID' 为实际的会话 ID。

  3. 接收 'endpoint' 事件: 客户端连接成功后,服务器可能会通过 SSE 连接发送 'endpoint' 事件,其中包含消息处理端点的地址。客户端可以监听 'endpoint' 事件获取 'messageEndpoint'。

  4. 发送 JSON-RPC 请求: 客户端使用 'messageEndpoint' 配置的 URL,通过 HTTP POST 请求发送 JSON-RPC 消息到服务器,例如 'initialize'、'listTools'、'callTool' 等。请求体需要符合 JSON-RPC 2.0 规范,并根据 MCP 协议定义方法和参数。

通过以上步骤,你就可以使用 'mcp_sse' 库构建一个基本的 MCP 服务器,并与 MCP 客户端进行通信,实现基于上下文的 LLM 应用功能。

信息

分类

AI与计算