使用postman测试自己编写的mcp服务

MCP 使用 SSE(Server-Sent Events)协议,需要两步配合。

第一步:建立 SSE 连接(GET)

在 Postman 中新建一个 GET 请求:

bash 复制代码
GET http://localhost:8888/api/mcp

发送后会一直挂着(长连接),你会看到类似这样的 SSE 事件:

bash 复制代码
event: endpoint
data: /api/mcp/message?sessionId=6dd06aab-01c5-44f4-a80a-d616aac5e273

复制这个 sessionId 值,第二步要用。

不要关闭这个请求 tab,保持连接。

第二步:发送 JSON-RPC 请求(POST)

新建一个 POST 请求:

bash 复制代码
POST http://localhost:8888/api/mcp/message?sessionId=6dd06aab-01c5-44f4-a80a-d616aac5e273

sessionId 用第一步拿到的实际值替换。

Headers:

bash 复制代码
Content-Type: application/json

先发 initialize(必须先发这个)

Body → raw → JSON:

bash 复制代码
{
  "jsonrpc": "2.0",   // 固定值,声明使用 JSON-RPC 2.0 版本
  "id": 0,          // 请求编号,用于匹配请求和响应(1对1)
  "method": "initialize",   // 要执行的方法名
  "params": {               //params(MCP 特有的参数)大括号内的都不需要改
    "protocolVersion": "2024-11-05",//客户端支持的 MCP 协议版本号
    "capabilities": {},     //客户端声明自己支持哪些 MCP 功能
    "clientInfo": {         
      "name": "postman-test",// 客户端名称
      "version": "1.0.0"    //客户端版本
    }
  }
}

点发送后,回到第一步的 GET 请求 tab ,应该能看到返回的 SSE 事件,里面有 serverInfo

返回结果

bash 复制代码
{
    "jsonrpc": "2.0",
    "id": 0,
    "result": {
        "protocolVersion": "2024-11-05",
        "capabilities": {
            "completions": {},
            "logging": {},
            "prompts": {
                "listChanged": true
            },
            "resources": {
                "subscribe": false,
                "listChanged": true
            },
            "tools": {
                "listChanged": true
            }
        },
        "serverInfo": {
            "name": "foss-mcp-server",
            "version": "1.0.0"
        }
    }
}

再发 initialized 通知

bash 复制代码
{
  "jsonrpc": "2.0",
  "method": "notifications/initialized"
}

查看工具列表

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

GET tab 里应该返回:

bash 复制代码
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "tools": [
            {
                "name": "helloWord",
                "description": "搜索开源软件信息",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "name": {
                            "type": "string",
                            "description": "群聊的id"
                        }
                    },
                    "required": [
                        "name"
                    ],
                    "additionalProperties": false
                }
            },
            {
                "name": "hello",
                "description": "搜索开源软件信息",
                "inputSchema": {
                    "type": "object",
                    "properties": {
                        "name": {
                            "type": "string"
                        }
                    },
                    "required": [
                        "name"
                    ],
                    "additionalProperties": false
                }
            }
        ]
    }
}

调用工具

bash 复制代码
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "hello",
    "arguments": {
      "name": "世界"
    }
  }
}

GET tab 返回:

bash 复制代码
{
    "jsonrpc": "2.0",
    "id": 2,
    "result": {
        "content": [
            {
                "type": "text",
                "text": "\"Hello, 世界! 调用成功啦!\""
            }
        ],
        "isError": false
    }
}

Server 日志应该输出:

复制代码
>>> [TOOL EXEC] 收到工具调用!参数 name=世界
>>> [TOOL EXEC] 执行完毕,返回:Hello, 世界! 调用成功啦!

完整操作流程图

复制代码
Postman Tab 1 (GET)          Postman Tab 2 (POST)
─────────────────            ─────────────────────
GET /api/mcp                 
  → 挂起,拿 sessionId  ───→  POST /api/mcp/message?sessionId=xxx
  ← 返回 SSE 事件        ←──  Body: initialize
  ← 返回 SSE 事件        ←──  Body: notifications/initialized
  ← 返回 SSE 事件        ←──  Body: tools/list
  ← 返回 SSE 事件        ←──  Body: tools/call

关键点:GET 请求必须一直保持连接,POST 的响应是通过 GET 的 SSE 流返回的。

相关推荐
一个有温度的技术博主5 小时前
Lua语法详解:从变量声明到循环遍历的避坑指南
redis·缓存·lua
我的xiaodoujiao6 小时前
API 接口自动化测试详细图文教程学习系列9--Requests模块
python·学习·测试工具·pytest
oi..6 小时前
《Web 安全入门|XSS 漏洞原理、CSP 策略与 HttpOnly 防护实践》
前端·网络·测试工具·安全·web安全·xss
上海合宙LuatOS6 小时前
LuatOS扩展库API——【exmodbus】MODBUS协议
物联网·lua·luatos
一个有温度的技术博主7 小时前
Lua语法进阶:函数封装与条件控制的艺术
redis·分布式·缓存·lua
我的xiaodoujiao7 小时前
API 接口自动化测试详细图文教程学习系列10--Requests模块2--举例说明
python·学习·测试工具·pytest
橘子编程8 小时前
软件测试全流程实战指南
java·功能测试·测试工具·junit·tomcat·压力测试·可用性测试
RunningBComeOn8 小时前
如何通过wireshark抓取802.11无线网络的数据包
网络·测试工具·wireshark
llilian_161 天前
选择北斗导航卫星信号模拟器注意事项总结 北斗导航卫星模拟器 北斗导航信号模拟器
功能测试·单片机·嵌入式硬件·测试工具·51单片机·硬件工程