项目简介
这是一个使用 Java 和 SSE (Server-Sent Events) 实现的 MCP (Model Context Protocol) 服务器演示项目。它提供了一个简单的天气查询工具,可以根据经纬度获取天气预报。该项目旨在展示如何构建一个基于 MCP 协议的后端服务,为 LLM (大型语言模型) 应用提供上下文信息和工具能力。
主要功能点:
- MCP 服务器核心功能: 实现了 MCP 协议的关键特性,包括工具注册和调用。
- 天气查询工具: 提供一个 'weather' 工具,接受经纬度作为参数,返回天气预报信息。
- SSE 传输: 使用 SSE 作为 MCP 服务器与客户端之间的通信协议,支持实时数据推送。
- JSON-RPC 协议: 通过 JSON-RPC 协议处理客户端请求和服务器响应。
- 能力声明: 声明服务器支持资源 (Resources)、工具 (Tools) 和 Prompt 模板 (Prompts) 功能。
- 日志记录: 支持服务器端日志记录。
安装步骤:
- 安装 Java 和 Maven: 确保你的开发环境已安装 Java Development Kit (JDK) 和 Maven。
- 下载仓库代码: 从 GitHub 仓库 'https://github.com/stantonk/mcp-server-java-sse-http-demo' 克隆或下载源代码。
- 编译项目: 在项目根目录下,打开终端并执行以下 Maven 命令进行编译打包:
编译成功后,会在 'mcp-server/target/' 目录下生成 'mcp-server-1.0-SNAPSHOT.jar' 文件。mvn clean package
服务器配置:
MCP 服务器是为 MCP 客户端提供服务的后端应用,客户端需要配置服务器的连接信息才能与其通信。对于本示例,客户端 (例如 'fast-agent-mcp') 需要在配置中指定以下服务器信息以连接到天气 MCP 服务器。
以下是一个 MCP 客户端 (如 'fast-agent-mcp') 的服务器配置示例 (通常在客户端的配置文件如 'fastagent.config.yaml' 中配置):
{ "mcp": { "servers": { "weather": { "transport": "sse", "read_timeout_seconds": 10, "url": "http://localhost:8080/sse" } } } }
配置参数说明:
- '"weather"': 服务器名称,客户端用此名称引用该服务器。
- '"transport": "sse"': 指定客户端与服务器之间使用 SSE 协议进行通信。
- '"read_timeout_seconds": 10': 设置读取超时时间为 10 秒。
- '"url": "http://localhost:8080/sse"': MCP 服务器的 SSE 地址。客户端通过此 URL 与服务器建立 SSE 连接。请注意,如果服务器运行在不同的主机或端口,需要相应修改此 URL。
启动服务器:
在 'mcp-server/target/' 目录下,执行以下命令启动 MCP 服务器:
java -jar mcp-server-1.0-SNAPSHOT.jar
服务器默认监听 'http://localhost:8080/sse' 地址,等待客户端连接。
基本使用方法:
- 启动 MCP 服务器 (按照上述 "启动服务器" 步骤)。
- 配置并运行 MCP 客户端: 使用支持 MCP 协议的客户端 (例如 'fast-agent-mcp'),并按照客户端的文档配置连接到本天气 MCP 服务器 (参考 "服务器配置" 部分)。
- 客户端调用 'weather' 工具: 在客户端应用中,可以调用名为 'weather' 的工具,并传递 'latitude' 和 'longitude' 参数来查询天气信息。具体的调用方式取决于所使用的 MCP 客户端的 API。
例如,使用 curl 测试 SSE 连接:
打开另一个终端窗口,使用 curl 命令连接到 SSE 流:
curl -v -H "Accept: text/event-stream" "http://localhost:8080/sse"
这将建立一个 SSE 连接,服务器会将 MCP 通知消息推送到此连接。
发送 JSON-RPC 消息测试 (需要 Session ID):
首先通过 SSE 连接获取 Session ID (在 SSE 连接的初始消息中会包含 'sessionId')。 然后使用 curl 发送 JSON-RPC 消息到 '/mcp/message' 端点,例如:
curl -X POST "http://localhost:8080/mcp/message?sessionId=YOUR_SESSION_ID" -d '{"jsonrpc": "2.0", "method": "server.info", "id": 1}' | jq .
将 'YOUR_SESSION_ID' 替换为实际的 Session ID。 这个命令会发送一个 'server.info' 的 JSON-RPC 请求到服务器,并使用 'jq' 工具美化 JSON 输出。
请注意,这只是一个简单的演示项目,更完整的功能和更强大的 LLM 应用集成需要参考 MCP 协议和相关 SDK 的文档进行开发。
信息
分类
网页与API