返回市场
python-mcp服务器发送事件

python-mcp服务器发送事件

作者:jayliangdl10 星标更新:2025-03-31

项目介绍

该项目于2025年3月30日构建,是MCP客户端和MCP服务器(Python版本)的一个示例实现

基于 https://github.com/sidharthrajaram/mcp-sse 的优化实现,原始项目基于(https://github.com/modelcontextprotocol/python-sdk/issues/145),更多关于原始项目的解释可以下载原始讨论。

原始版本使用了ANTHROPIC LLM进行实现,但此版本已调整为使用OpenRouter.ai的LLM中间调用平台进行实现。

基于SSE的MCP服务器和客户端

mcp_server.py 是一个基于SSE的MCP服务器,提供了一个基于Gutenberg Project API的图书搜索工具。改编自MCP文章

在文件示例STDIO服务器实现中。

client.py 是一个MCP客户端,能够连接并使用基于SSE的MCP服务器提供的工具。改编自MCP文档示例STDIO客户端实现

系统要求

  • Python 3.13或更高版本
  • UV包管理器(推荐)或pip

安装步骤

  1. 克隆项目
git clone [your-repository-url]
cd jay-py-mcp-sse
  1. 环境配置

使用UV(推荐):

# 安装uv(如果未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 创建虚拟环境并安装依赖
uv venv
uv pip install .

或者使用传统的pip:

# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate  # Linux/MacOS
# 或
.venv\Scripts\activate  # Windows

# 安装依赖
pip install .
  1. 配置环境变量

复制环境变量示例文件并填写必要的信息:

cp .env.sample .env

编辑.env文件,填写您的OpenRouter API密钥:

OPENROUTER_API_KEY=your_api_key_here

运行服务

  1. 启动服务器
uv run mcp_server.py
# 或指定主机和端口
uv run mcp_server.py --host 127.0.0.1 --port  8080
  1. 启动客户端
uv run client.py http://localhost:8080/sse

示例输出

已初始化SSE客户端...
正在列出工具...

已连接到服务器,可用工具:['search_gutenberg_books']

AI助手已启动!
输入您的问题或输入'quit'退出。

用户: 请推荐一些詹姆斯·乔伊斯的作品

AI: 让我帮您搜索詹姆斯·乔伊斯的作品...
[调用工具 search_gutenberg_books,参数:{"search_terms": ["James Joyce"]}]

找到以下作品:
- 《尤利西斯》(Ulysses)
- 《都柏林人》(Dubliners)
- 《青年艺术家的画像》(A Portrait of the Artist as a Young Man)
...

项目结构

.
├── mcp_server.py    # SSE服务器实现
├── client.py        # MCP客户端实现
├── .env.sample      # 环境变量示例
├── pyproject.toml   # 项目依赖和配置管理
└── README.md        # 项目文档

为什么选择这种方法?

这种实现意味着MCP服务器现在可以作为一个运行进程工作,而代理(客户端)可以在任何时间、任何地点连接、使用和断开连接。换句话说,基于SSE的服务器和客户端可以是解耦的过程(甚至可以在解耦的节点上运行)。这与基于STDIO的模式不同,在基于STDIO的模式中,客户端本身会启动服务器作为子进程。这种方法更适合“云原生”用例。

故障排除

如果您遇到任何问题,请检查:

  1. Python版本是否符合要求(>=3.13)
  2. 环境变量是否正确配置
  3. 所有依赖项是否正确安装
  4. 端口8080是否被占用(如果是,请使用--port参数指定其他端口)

获取帮助

如果您遇到任何问题,请:

  1. 检查项目的GitHub Issues页面
  2. 提供完整的错误信息和操作环境信息
  3. 描述重现问题的步骤