MCP SSE Sample

MCP SSE Sample

好的,这是 MCP 服务器的 SSE(Server-Sent Events)实现的示例,包含代码和解释: **概念解释** * **SSE (Server-Sent Events):** 一种服务器向客户端推送数据的单向通信协议。客户端通过 HTTP 连接到服务器,服务器可以随时向客户端发送更新,而无需客户端发起新的请求。这非常适合实时更新,例如股票行情、新闻提要、聊天应用等。 * **MCP Server:** 我假设你指的是一个基于 Minecraft 协议 (MCP) 的服务器。虽然 MCP 本身不直接涉及 SSE,但你可以将 SSE 集成到你的服务器中,以向连接的客户端发送游戏状态或其他信息。 **示例代码 (Python + Flask)** 这个例子使用 Python 和 Flask 框架来创建一个简单的 SSE 服务器。 ```python from flask import Flask, Response, render_template import time import random app = Flask(__name__) # 模拟游戏状态数据 game_state = { "player_count": 0, "server_load": 0.0, "latest_news": "Server is online!" } def update_game_state(): """模拟更新游戏状态""" global game_state game_state["player_count"] = random.randint(0, 100) game_state["server_load"] = round(random.uniform(0.0, 1.0), 2) game_state["latest_news"] = f"Player joined! (Current: {game_state['player_count']})" def event_stream(): """生成 SSE 事件流""" while True: update_game_state() yield f"data: {game_state}\n\n" # 构建 SSE 格式的数据 time.sleep(1) # 每秒更新一次 @app.route('/') def index(): return render_template('index.html') # 渲染一个简单的 HTML 页面 @app.route('/stream') def stream(): return Response(event_stream(), mimetype="text/event-stream") if __name__ == '__main__': app.run(debug=True) ``` **解释:** 1. **导入必要的库:** * `flask`: 用于创建 Web 应用。 * `Response`: 用于构建 SSE 响应。 * `time`: 用于控制更新频率。 * `random`: 用于模拟游戏状态变化。 2. **`game_state` 字典:** * 存储模拟的游戏状态数据。你可以根据你的 MCP 服务器的需求修改这些数据。 3. **`update_game_state()` 函数:** * 模拟更新游戏状态。 在实际应用中,你需要从你的 MCP 服务器获取真实的数据。 4. **`event_stream()` 函数:** * **关键部分:** 这是一个生成器函数,它无限循环并产生 SSE 事件。 * `yield f"data: {game_state}\n\n"`: 这行代码构建了 SSE 格式的数据。 * `data:` 是 SSE 协议要求的字段,表示要发送的数据。 * `{game_state}`: 将 `game_state` 字典转换为字符串。 **重要:** 你可能需要使用 `json.dumps(game_state)` 将字典转换为 JSON 字符串,以便客户端更容易解析。 * `\n\n`: 两个换行符表示一个 SSE 事件的结束。 * `time.sleep(1)`: 暂停 1 秒,控制更新频率。 5. **`@app.route('/stream')` 路由:** * 当客户端访问 `/stream` 路径时,这个路由会被调用。 * `Response(event_stream(), mimetype="text/event-stream")`: 创建一个 `Response` 对象,将 `event_stream()` 生成器作为数据源,并将 `mimetype` 设置为 `text/event-stream`。 **`text/event-stream` 是 SSE 协议要求的 MIME 类型。** 6. **`index()` 函数和 `index.html` (可选):** * 提供一个简单的 HTML 页面,用于测试 SSE 连接。 **客户端代码 (JavaScript)** ```html <!DOCTYPE html> <html> <head> <title>SSE Example</title> </head> <body> <h1>Game State</h1> <div id="game-state"></div> <script> var eventSource = new EventSource('/stream'); // 连接到 SSE 端点 eventSource.onmessage = function(event) { var gameState = JSON.parse(event.data); // 解析 JSON 数据 document.getElementById('game-state').innerText = JSON.stringify(gameState, null, 2); // 显示格式化的 JSON }; eventSource.onerror = function(error) { console.error("SSE error:", error); }; </script> </body> </html> ``` **解释:** 1. **`new EventSource('/stream')`:** 创建一个 `EventSource` 对象,连接到服务器的 `/stream` 端点。 2. **`eventSource.onmessage`:** 定义一个事件处理函数,当服务器发送新数据时,这个函数会被调用。 * `event.data`: 包含服务器发送的数据。 * `JSON.parse(event.data)`: 将 JSON 字符串解析为 JavaScript 对象。 * `document.getElementById('game-state').innerText = JSON.stringify(gameState, null, 2)`: 将游戏状态数据显示在页面上。 `JSON.stringify(gameState, null, 2)` 用于格式化 JSON 输出,使其更易于阅读。 3. **`eventSource.onerror`:** 定义一个错误处理函数,当发生错误时,这个函数会被调用。 **如何运行:** 1. **安装 Flask:** `pip install flask` 2. **保存代码:** 将 Python 代码保存为 `app.py`,将 HTML 代码保存为 `templates/index.html` (需要在 `app.py` 所在的目录下创建一个名为 `templates` 的文件夹)。 3. **运行服务器:** `python app.py` 4. **在浏览器中打开:** `http://127.0.0.1:5000/` **重要注意事项:** * **JSON 序列化:** 在实际应用中,强烈建议使用 `json.dumps()` 将 Python 字典转换为 JSON 字符串,以便客户端更容易解析。 修改 `event_stream()` 函数如下: ```python import json def event_stream(): while True: update_game_state() yield f"data: {json.dumps(game_state)}\n\n" time.sleep(1) ``` * **错误处理:** 在客户端和服务器端添加适当的错误处理代码。 * **数据格式:** 根据你的 MCP 服务器的需求,调整 `game_state` 字典中的数据。 * **身份验证:** 如果需要,可以添加身份验证机制来保护 SSE 端点。 * **性能:** 对于高并发的场景,可能需要考虑使用更高效的异步框架,例如 `asyncio` 和 `aiohttp`。 * **MCP 集成:** 将 `update_game_state()` 函数修改为从你的 MCP 服务器获取真实的游戏状态数据。 这可能需要你使用 MCP 协议库来与服务器通信。 **总结:** 这个例子提供了一个基本的 SSE 实现,你可以根据你的 MCP 服务器的需求进行修改和扩展。 记住要使用 JSON 序列化,添加错误处理,并根据你的数据格式进行调整。 希望这个例子能帮助你理解如何在 MCP 服务器中实现 SSE。 **中文总结:** 这个例子展示了如何使用 Python 和 Flask 创建一个简单的服务器推送事件 (SSE) 服务器。 服务器模拟游戏状态数据,并通过 `/stream` 端点以 SSE 格式发送给客户端。 客户端使用 JavaScript 的 `EventSource` API 连接到服务器,接收并显示游戏状态数据。 关键点包括:使用 `text/event-stream` 作为 MIME 类型,使用 `data:` 字段格式化 SSE 数据,以及使用 `json.dumps()` 将 Python 字典转换为 JSON 字符串。 你需要根据你的 MCP 服务器的实际情况修改代码,例如从 MCP 服务器获取真实数据,并添加错误处理和身份验证。

iuill

开发者工具
访问服务器

README

推荐服务器

Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
MCP Package Docs Server

MCP Package Docs Server

促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。

精选
本地
TypeScript
Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
mermaid-mcp-server

mermaid-mcp-server

一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。

精选
JavaScript
Jira-Context-MCP

Jira-Context-MCP

MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

精选
TypeScript
Linear MCP Server

Linear MCP Server

一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

精选
JavaScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Curri MCP Server

Curri MCP Server

通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。

官方
本地
JavaScript