news 2026/4/16 15:15:03

Python 连接 MCP Server 全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 连接 MCP Server 全指南

Model Context Protocol (MCP) 正在重塑 LLM 应用与外部系统的交互范式。作为客户端开发者,理解如何高效、稳定地连接 MCP Server 是构建 Agent 的第一步。本文将深入剖析 Python 环境下的连接机制,重点对比 SSE 与 Streamable HTTP 两种传输协议,并提供生产级的代码示例。

1. 传输层协议:SSE vs Streamable HTTP

在 MCP 的架构中,传输层(Transport Layer)负责在 Client 和 Server 之间搬运 JSON-RPC 消息。目前主流的两种远程传输协议各有千秋。

1.1 Server-Sent Events (SSE)

SSE 是 Web 标准中用于服务器向客户端单向推送数据的技术。在 MCP 中,它通常结合 HTTP POST 使用。

  • 机制:Client 建立一个长连接(GET /sse)用于接收 Server 的消息(Events)。Client 发送消息则通过另一个独立的 HTTP POST 请求。
  • 适用场景:浏览器环境、需要穿越防火墙、标准 Web 服务。
  • 连接模型:双通道(一条长读通道,一条短写通道)。

1.2 Streamable HTTP (Chunked Transfer)

这是一种更现代、更纯粹的 HTTP 交互方式,通常基于 HTTP/1.1 的 Chunked Transfer Encoding 或 HTTP/2。

  • 机制:Client 和 Server 通过一个双向流(或长轮询变体)进行通信。在 MCP 的 Python SDK 实现中,它往往复用了底层 HTTP 客户端(如httpx)的流式能力。
  • 适用场景:Server-to-Server 通信、高性能后端服务。
  • 连接模型:单通道(或复用通道),通常更节省资源,且不需要处理跨域(CORS)的复杂性(如果在同域后端)。

2. Python 客户端实战

我们将使用官方mcpSDK 来构建客户端。无论使用哪种传输协议,核心的ClientSession逻辑是一致的,区别仅在于Transport的初始化。

2.1 依赖安装

pipinstallmcp httpx

2.2 连接建立:协议适配

方案 A:使用 SSE 连接

这是最常见的连接方式。

frommcp.client.sseimportsse_clientfrommcp.client.sessionimportClientSessionasyncdefconnect_via_sse(url:str,headers:dict=None):# sse_client 是一个 Async Context Manager# 它自动处理 EventSource 的连接与重连asyncwithsse_client(url=url,headers=headers)as(read_stream,write_stream):asyncwithClientSession(read_stream,write_stream)assession:yieldsession
方案 B:使用 Streamable HTTP 连接

这是更底层的连接方式,通常需要自行管理httpx.AsyncClient的生命周期。

importhttpxfrommcp.client.streamable_httpimportstreamable_http_clientfrommcp.client.sessionimportClientSessionasyncdefconnect_via_http(url:str,headers:dict=None):# 必须显式创建 httpx client,以便复用连接池和配置超时asyncwithhttpx.AsyncClient(headers=headers,timeout=60.0)ashttp_client:# streamable_http_client 同样返回读写流asyncwithstreamable_http_client(url=url,http_client=http_client)as(read,write,_):asyncwithClientSession(read,write)assession:yieldsession

3. 核心交互流程

一旦ClientSession建立,后续的操作就是标准的 MCP 协议交互。

3.1 握手与初始化 (Initialize)

连接建立后的第一件事必须是握手。Server 会在此时返回它的能力(Capabilities)和元数据(Server Info)。

# 初始化会话# 这一步会协商协议版本和能力init_result=awaitsession.initialize()print(f"Connected to Server:{init_result.serverInfo.name}v{init_result.serverInfo.version}")# 技巧:这里往往藏着 Server 的 System Promptifhasattr(init_result,'instructions'):print(f"Server Instructions:{init_result.instructions}")

3.2 工具发现 (List Tools)

这是 Agent “获取技能” 的关键步骤。

# 获取工具列表list_tools_result=awaitsession.list_tools()tools=list_tools_result.toolsfortoolintools:print(f"Found Tool:{tool.name}")print(f"Description:{tool.description}")print(f"Schema:{tool.inputSchema}")# JSON Schema 格式的参数定义

工程提示:在实际应用中,你需要将这里的inputSchema转换为你的 LLM 框架(如 LangChain 或 OpenAI SDK)所需的格式。对于 LangChain,可以使用pydantic.create_model动态生成参数模型。

3.3 工具调用 (Call Tool)

当 LLM 决定调用工具时,Client 负责转发请求。

frommcp.typesimportCallToolResult tool_name="get_repo_list"arguments={"owner":"nvd11","limit":5}try:# 发送调用请求result:CallToolResult=awaitsession.call_tool(tool_name,arguments=arguments)# 解析结果# MCP 支持 Text 和 Image 两种内容类型output_text=""forcontentinresult.content:ifcontent.type=="text":output_text+=content.textelifcontent.type=="image":print(f"[Image Content:{content.mimeType}]")print(f"Tool Output:{output_text}")exceptExceptionase:print(f"Tool execution failed:{e}")

4. 常见问题 (FAQ)

Q: 我可以用aiohttp代替httpx吗?

A: 不可以直接替换。
mcp.client.streamable_http.streamable_http_client显式依赖于httpx.AsyncClient的接口。由于mcpSDK 本身就将httpx作为核心依赖,建议遵循官方实践使用httpx,以避免不必要的适配工作。

5. 总结

特性SSEStreamable HTTP

5. 总结

特性SSEStreamable HTTP
底层实现EventSource + POSTHTTP Streaming / Chunked
SDK 模块mcp.client.ssemcp.client.streamable_http
依赖管理SDK 内部管理需外部注入httpx.AsyncClient
适用性浏览器友好,兼容性高后端服务间通信,性能更优

对于大多数 Python 后端服务(如 Agent 平台),Streamable HTTP提供了更好的控制力(如自定义 Timeout、Proxy 配置),是更为推荐的选择。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 15:07:01

通信原理篇---最佳接收机

让我们把“最佳接收机”变成一个破案游戏,你完全不需要任何数学公式就能理解它的精髓。第一幕:犯罪现场——嘈杂的通信现场想象一下,你是一个情报员,你的上线要通过一个非常嘈杂的公共频道(比如一个人声鼎沸的菜市场&a…

作者头像 李华
网站建设 2026/4/15 21:56:17

货币型VS净值型:收益风控认知全解析

货币型资产与净值型资产在收益特征、风控难点、投资者认知上存在本质差异。以下从三个核心问题系统解析:一、收益差异:稳定性 vs 波动性维度货币型资产净值型资产收益形式固定净值 收益率展示• 单位净值恒为 1.0000• 收益以 “每万份收益”&#xff0…

作者头像 李华
网站建设 2026/4/16 15:07:05

DeepSeek写的论文太AI了?推荐3款降重工具一键搞定

DeepSeek写的论文太AI了?推荐3款降重工具一键搞定 TL;DR:用DeepSeek写论文虽然效率高,但AI率容易飙到70%以上,被学校查出来就麻烦了。本文推荐3款专业降AI工具——嘎嘎降AI、比话降AI和AIGCleaner,能帮你把DeepSeek生成…

作者头像 李华
网站建设 2026/4/12 1:35:32

救命神器2026最新!8款AI论文平台测评:本科生毕业论文全攻略

救命神器2026最新!8款AI论文平台测评:本科生毕业论文全攻略 2026年AI论文平台测评:为什么你需要这份榜单? 随着人工智能技术的不断进步,越来越多的本科生开始依赖AI工具辅助毕业论文写作。然而,面对市场上琳…

作者头像 李华
网站建设 2026/4/16 12:57:24

显卡市场四强格局解析:技术革新驱动品牌竞争新阶段

2025年显卡市场最新数据显示,一线品牌华硕、技嘉、微星、七彩虹占据中国市场出货量前四位,形成稳定的行业领先阵营,共同引领技术创新与市场发展方向。随着新一代GPU产品的陆续上市,全球独立显卡市场在2025年上半年呈现出显著增长。…

作者头像 李华