使用说明
项目简介
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 错误处理和协议版本验证,确保通信的稳定性和合规性。
安装步骤
-
添加到依赖: 在你的 Elixir Phoenix 或 Plug 应用的 'mix.exs' 文件中,将 'mcp_sse' 添加到依赖列表中:
def deps do [ {:mcp_sse, "~> 0.1.0"} ] end然后运行 'mix deps.get' 获取依赖。
-
配置 MCP 服务器: 在 'config/config.exs' 文件中,配置你的 MCP 服务器实现。你可以使用默认的 'MCP.DefaultServer' 或自定义的服务器模块:
config :nws_mcp_server, :mcp_server, MCP.DefaultServer # 使用默认服务器 # config :nws_mcp_server, :mcp_server, YourApp.YourMCPServer # 使用自定义服务器 -
配置路由: 在你的 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 的生成和管理方式需要根据你的具体应用场景进行设计。
基本使用方法
-
启动 Elixir 应用: 启动你的 Phoenix 或 Plug 应用,该应用集成了 'mcp_sse' 库并配置了路由。例如,对于 Phoenix 应用,运行 'mix phx.server'。
-
客户端连接 SSE 端点: 在 MCP 客户端中,使用 'EventSource' 或其他 SSE 客户端库连接到 'sseEndpoint' 配置的 URL,并替换 'YOUR_SESSION_ID' 为实际的会话 ID。
-
接收 'endpoint' 事件: 客户端连接成功后,服务器可能会通过 SSE 连接发送 'endpoint' 事件,其中包含消息处理端点的地址。客户端可以监听 'endpoint' 事件获取 'messageEndpoint'。
-
发送 JSON-RPC 请求: 客户端使用 'messageEndpoint' 配置的 URL,通过 HTTP POST 请求发送 JSON-RPC 消息到服务器,例如 'initialize'、'listTools'、'callTool' 等。请求体需要符合 JSON-RPC 2.0 规范,并根据 MCP 协议定义方法和参数。
通过以上步骤,你就可以使用 'mcp_sse' 库构建一个基本的 MCP 服务器,并与 MCP 客户端进行通信,实现基于上下文的 LLM 应用功能。
信息
分类
AI与计算