使用原生http请求mcp服务器示例

使用原生http请求mcp服务器示例

本文使用PostMan直接发送http请求来访问mcp服务器,以从底层了解mcp生命周期和通信机制。mcp服务端使用spring-ai搭建,PostMan请下载最新版本。

一、SSE

服务端搭建

完整代码仓库地址:https://gitee.com/heartdance/spring-ai-mcp-server-demo

请求示例

整体结构为长连接接收响应+短连接发送请求模式。

  • 连接a为长连接,客户端发送GET请求到服务端sse端点建立,建立后持续监听sse响应流。
  • 连接b、c、d...为短连接,客户端发送POST请求到服务端消息端点,服务端收到请求后,返回空响应,并将实际请求结果通过sse推送给连接a。

下面是一个请求工具列表并执行工具的示例。

  1. GET请求访问sse端点,建立sse长连接
    GET /sse

    可见服务端通过sse推送endpoint事件,后续POST请求的端点使用此事件值。

  2. POST请求发送初始化请求
    POST /mcp/message?sessionId=a1fb597d-11bf-48da-b66d-0729982daa2f

    json 复制代码
    {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"ExampleClient","version":"1.0.0"}}}

    发送初始化请求后,服务端返回空响应,并推送实际初始化结果到sse长连接。切换到sse长连接,可见已经收到服务端发来的初始化结果推送,如下所示。

    1. POST请求发送初始化完成通知请求
      POST /mcp/message?sessionId=a1fb597d-11bf-48da-b66d-0729982daa2f
    json 复制代码
    {"jsonrpc":"2.0","method":"notifications/initialized"}

    通知类请求不会有实际结果,所以sse长连接不会收到新的推送。

  3. POST请求发送获取工具列表请求
    POST /mcp/message?sessionId=a1fb597d-11bf-48da-b66d-0729982daa2f

    json 复制代码
    {"jsonrpc":"2.0","id":1,"method":"tools/list"}

    发送获取工具列表请求后,服务端返回空响应,并推送工具列表结果到sse长连接。切换到sse长连接,可见已经收到服务端发来的工具列表,包含getCurrentDateTime工具,如下所示。

  4. POST请求发送执行工具请求
    POST /mcp/message?sessionId=a1fb597d-11bf-48da-b66d-0729982daa2f

    json 复制代码
    {"jsonrpc":"2.0","id":2,"method":"tools/call","params": {"name": "getCurrentDateTime"}}

    发送执行工具getCurrentDateTime请求后,服务端返回空响应,并推送执行结果到sse长连接。切换到sse长连接,可见已经收到服务端发来的执行结果,类型为text,值为"2025-09-25T11:32:14.310873100+08:00[Asia/Shanghai]",如下所示。

至此,已经完成整个生命周期的请求示例,后续只要sse长连接未断开,可以继续通过POST发送请求并通过sse长连接接收响应。但是到这里应该也能够看出sse模式的局限性了,比如需要维持长连接占用服务器资源、强制使用会话id不利于水平拓展、请求响应分属不同连接增加客户端复杂度等,所以更高效的Streamable HTTP模式应运而生。

二、Streamable HTTP

由于spring-ai正式版尚未支持Streamable HTTP,等待1.1.0正式版发布后再更新这部分。

三、参考文献

  1. mcp官方文档,https://modelcontextprotocol.io/
  2. spring-ai官方文档,https://docs.spring.io/spring-ai/reference/api/mcp/mcp-overview.html
相关推荐
doiito16 小时前
【Agent Harness】Gliding Horse 的 L2 作战地图:让多 Agent 协作从“摸黑”变成“透明”
ai·rust·架构设计·系统设计·ai agent
xiezhr16 小时前
逛GitHub发现一款免费带有AI功能的数据库管理工具DBX
ai·开源软件·自然语言·数据库管理工具
垚森2 天前
我用 GLM-5.2 造了个炸裂主题后台:16 套主题随心切,可在线体验
ai·react
doiito3 天前
【Agent Harness】Gliding Horse 工具结果压缩体系:如何用“指针”驯服上下文膨胀
ai·rust·架构设计·系统设计·ai agent
doiito4 天前
【Agent Harness】Gliding Horse 上下文动态感知与智能压缩:让 Agent 真正“听得进”每一句话
ai·rust·架构设计·系统设计·ai agent
探索云原生5 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
Zy宇5 天前
从养 OpenClaw 到养社区 AI:一套 Multi-Agent 社区的设计思路
人工智能·ai
doiito5 天前
【Agent Harness】Gliding Horse 记忆系统深度剖析:像 CPU 一样思考的 AI 记忆架构
ai·rust·架构设计·系统设计·ai agent
mobility5 天前
免费AI视频生成器:我如何用零成本做出带旁白字幕的多场景AI视频
ai·vibe coding
doiito5 天前
【Agent Harness】Gliding Horse 给 Agent OS 装上双曲空间引擎与默克尔树边云同步
ai·rust·架构设计·系统设计·ai agent