LLM—— 基于 MCP 协议(SSE 模式)的工具调用实践

在上一篇博客中,我们介绍了 基于 MCP 协议(Stdio 模式)的工具调用实践。本文我们将聚焦于MCP协议(SSE模式)的工具调用实践,了解SSE模式下,客户端与服务端的交互方式,并通过实际的案例加深对该模式下交互的体验,那就让我们开始吧!

一、什么是 MCP 的 SSE 模式?

MCP 提供了统一的工具注册、结构化参数传输和调用机制,而 SSE(Server-Sent Events) 是一种基于 HTTP 的、用于服务器向客户端单向推送事件的通信机制。

使用 MCP SSE 模式的好处:

  • ✅ 使用 HTTP 建立连接,适合公网 / 跨网络部署
  • ✅ 使用 SSE 从服务器向客户端推送异步响应
  • ✅ 支持分布式架构,工具运行在远程容器或服务中

典型场景:远程工具服务注册在某台服务器上,客户端通过 HTTP+SSE 长连接进行调用,实现跨主机 / 跨区域的 Agent 工具执行系统

二、示例项目

项目包含服务端(工具注册)与客户端(工具调用)两部分,使用HTTP + SSE 长连接进行通信。

服务端(注册工具并提供 SSE 连接)

python 复制代码
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("MyServer", host="127.0.0.1", port=8050)

@mcp.tool()
def say_hello(name: str) -> str:
    return f"Hello, {name}! Nice to meet you!"

@mcp.tool()
def add(a: int, b: int) -> int:
    return a + b

if __name__ == "__main__":
    mcp.run(transport="sse")
  • MCP 会监听 /sse 路由,提供 Server-Sent Event 长连接
  • 所有工具通过 @mcp.tool() 装饰器注册,具备参数/类型/描述信息

客户端(连接远程服务并调用工具)

python 复制代码
import asyncio

from mcp import ClientSession
from mcp.client.sse import sse_client


async def main():
    # Connect to the server using SSE
    async with sse_client("http://localhost:8050/sse") as (read_stream, write_stream):
        async with ClientSession(read_stream, write_stream) as session:
            # Initialize the connection
            await session.initialize()

            # List avaliable tools
            tools_result = await session.list_tools()
            print("Available tools:")
            for tool in tools_result.tools:
                print(f"- {tool.name}: {tool.description}")

            # Call our calculator tool
            result = await session.call_tool("add", arguments={"a": 1, "b": 2})
            print(f"1 + 2 = {result.content[0].text}")


if __name__ == "__main__":
    asyncio.run(main())
  • 客户端使用 aiohttp 发起 SSE 连接
  • ClientSession 支持工具发现、函数调用等能力

运行结果:

交互流程时序图

三、总结

MCP 协议结合 SSE 模式,为构建可远程部署、异步交互、安全解耦的工具调用系统提供了完整的底层能力:

  • 模型通过标准 HTTP 建立连接
  • 工具通过结构化参数远程调用
  • 服务器通过 SSE 通道推送返回结果
  • 非常适合构建远程智能体、插件化执行平台和 LLM 工具桥接系统

如果你正在开发一个跨网络的智能工具执行系统,或希望将 LLM 系统与现有微服务桥接,那么MCP将是一个非常值得选择的选项。

相关推荐
深海潜水员18 分钟前
【Python】 切割图集的小脚本
开发语言·python
276695829240 分钟前
东方航空 m端 wasm req res分析
java·python·node·wasm·东方航空·东航·东方航空m端
星月昭铭2 小时前
Spring AI调用Embedding模型返回HTTP 400:Invalid HTTP request received分析处理
人工智能·spring boot·python·spring·ai·embedding
Dreamsi_zh2 小时前
Python爬虫02_Requests实战网页采集器
开发语言·爬虫·python
weixin_448617053 小时前
疏老师-python训练营-Day30模块和库的导入
开发语言·python
程序员三藏4 小时前
Web UI自动化测试之PO篇
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
缘友一世4 小时前
LangGraph智能体(天气和新闻助手)开发与部署
语言模型·langchain·大模型·llm·langgraph
WSSWWWSSW4 小时前
华为昇腾NPU卡 文生视频[T2V]大模型WAN2.1模型推理使用
人工智能·大模型·音视频·显卡·文生视频·文生音频·文生音乐
旧时光巷4 小时前
【Flask 基础 ①】 | 路由、参数与模板渲染
后端·python·零基础·flask·web·模板渲染·路由系统
java1234_小锋5 小时前
【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博评论IP地图可视化分析实现
python·自然语言处理·flask