技术博客
易源合一的两条集成路径:MCP 直连与 OpenAPI 导入 Postman

易源合一的两条集成路径:MCP 直连与 OpenAPI 导入 Postman

作者: 万维易源
2026-09-15
易源合一MCPOpenAPIPostmanSwagger
# 易源合一的两条集成路径:MCP 直连与 OpenAPI 导入 Postman > 集成方式:MCP 服务 / OpenAPI 3.0 | 计费:5.5 厘/次,失败不扣费 | 最后实测核对:2026-09-15 ## 核心要点 - 易源合一提供两种不写业务代码就能调起来的方式:MCP 服务(配到 AI 客户端里)和 OpenAPI 文档(导入 Postman / Swagger UI)。 - MCP 实测可用,握手分三步。**少发 `notifications/initialized` 直接调 `tools/list`,会拿到 `-32601 Method not found`**。 - MCP 返回的三个工具名是**中文**(`智能对话`、`意图分析`、`智能对话(流式)`),不是英文的接口路径。 ## MCP 服务怎么配 MCP 的地址按接口维度提供,一个地址覆盖本接口全部接入点: ```json { "mcpServers": { "showapi-mcp-3054": { "url": "http://www.showapi.com.cn/mcp/3054/{your_appKey}" } } } ``` 把 `{your_appKey}` 换成真实 AppKey,粘进 Cherry Studio、ChatBox 等支持 MCP 的客户端即可。 配完能做什么?客户端里会多出三个工具,分别是智能对话、意图分析、智能对话(流式)。对用户来说,可以直接在对话里问「帮我查快递 7788990011223」,由客户端决定调哪个工具。 ## 手动验证:三步握手 如果你配完没反应,用 curl 手工走一遍最快定位问题。2026-09-15 的完整实测过程如下。 **第一步,initialize。** ```bash curl -s -D headers.txt -X POST "http://www.showapi.com.cn/mcp/3054/YOUR_APPKEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"probe","version":"1.0"}}}' ``` 返回: ```json { "jsonrpc": "2.0", "result": { "protocolVersion": "2024-11-05", "instructions": "Hello, MCP!", "serverInfo": { "name": "lua-resty-mcp", "version": "2.0" }, "capabilities": { "prompts": { "listChanged": true }, "tools": { "listChanged": true }, "completions": {}, "resources": { "subscribe": true, "listChanged": true }, "logging": {} } }, "id": 1 } ``` **响应头里有一个必须拿到的值**: ``` Mcp-Session-Id: aqiqZQ9jy68CAJPX ``` 后续所有请求都要带上它。不带会直接收到 openresty 的 `400 Bad Request`,和 JSON-RPC 的错误格式都不一样。 **第二步,发 initialized 通知。** ```bash curl -s -X POST "http://www.showapi.com.cn/mcp/3054/YOUR_APPKEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -H "Mcp-Session-Id: 上一步拿到的值" \ -d '{"jsonrpc":"2.0","method":"notifications/initialized"}' ``` 返回 HTTP `202`,没有响应体。这一步很容易被漏掉,但漏了就调不通。 **第三步,列出工具。** ```bash curl -s -X POST "http://www.showapi.com.cn/mcp/3054/YOUR_APPKEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -H "Mcp-Session-Id: 上一步拿到的值" \ -d '{"jsonrpc":"2.0","id":3,"method":"tools/list","params":{}}' ``` 返回(SSE 格式,`data:` 后面是 JSON): ```json { "jsonrpc": "2.0", "id": 3, "result": { "tools": [ { "name": "智能对话(流式)", "description": "流式调用是一种处理连续数据流的技术……", "inputSchema": { "type": "object", "properties": { "text": { "type": "string", "description": "意图内容" }, "args_list": { "type": "array", "description": "相关内容的url或者base64,例如图片的base64" }, "content-type": { "type": "string", "description": "" } } } }, { "name": "意图分析", "description": "借助人工智能技术,对语句中的内容进行分析,以识别文本中的意图。", "inputSchema": { "type": "object", "properties": { "text": { "type": "string", "description": "意图参数" }, "content-type": { "type": "string", "description": "" } } } }, { "name": "智能对话", "description": "智能对话可识别对话中的命令或意图……", "inputSchema": { "type": "object", "properties": { "text": { "type": "string", "description": "意图内容" }, "args_list": { "type": "array", "description": "相关内容的url或者base64,例如图片的base64" }, "content-type": { "type": "string", "description": "" } } } } ] } } ``` 三个工具就是三个接入点。名称是中文,和页面上的接入点名一致。`content-type` 在 OpenAPI 里是 Header 参数,这里被展开到了 `inputSchema.properties` 里。 ## 调用工具拿真实返回 ```bash curl -s -X POST "http://www.showapi.com.cn/mcp/3054/YOUR_APPKEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -H "Mcp-Session-Id: 上一步拿到的值" \ -d '{"jsonrpc":"2.0","id":7,"method":"tools/call","params":{"name":"意图分析","arguments":{"text":"帮我查快递 7788990011223"}}}' ``` 实测返回的 `content[0].text` 里是两段拼起来的内容: ``` { "showapi_res_error": "", "showapi_res_code": 0, "showapi_fee_num": 1, "showapi_res_body": {"ret_msg":"调用成功","ret_code":0, "args":{"express_nu":"7788990011223"},"intent":"query_express", "confidence":98,"name":"快递"} } - 以下是返回参数说明 - 参数名称:ret_code, 参数类型: Number, 参数描述: 0为成功,其余为失败, 参数示例: 0 - 参数名称:confidence, 参数类型: Number, 参数描述: 置信度, 参数示例: 0.99572587013245 - 参数名称:intent, 参数类型: String, 参数描述: 意图标识, 参数示例: weather ``` 注意最后那段参数说明里的 **`confidence` 示例值是 `0.99572587013245`,而同一份返回里的真实值是 `98`**。这段说明是文档里的静态文案,会比你手上的实际数据旧。别拿示例值去写阈值判断,以实际返回为准。 ## 排错对照 | 现象 | 原因 | 处理 | |------|------|------| | `HTTP 400 Bad Request`(openresty 的 HTML 页) | 请求没带 `Mcp-Session-Id` | 用 initialize 响应头里的值补上 | | `{"error":{"code":-32601,"message":"Method not found"}}` | 还没发 `notifications/initialized` | 补发这条通知(返回 202)再调 `tools/list` | | `prompts/list` 或 `resources/list` 返回空数组 | 服务端没定义 prompt 和 resource | 正常现象,实测两个接口都返回 `[]` | | 工具名找不到 | 工具名是中文 | 用 `智能对话`、`意图分析`、`智能对话(流式)`,不要用 `3054-1` 这类路径名 | 服务端信息实测为 `lua-resty-mcp 2.0`,声明的协议版本是 `2024-11-05`,能力集包含 prompts、tools、completions、resources、logging。 ## OpenAPI 文档怎么用 文档地址: ``` https://www.showapi.com/openapi/market/3054.yaml https://www.showapi.com/openapi/market/3054.json ``` 规格是 OpenAPI 3.0.3,`servers` 只有一条 `https://route.showapi.com`。三个 path 分别是 `/3054-1`、`/3054-2`、`/3054-3`。 实测从 YAML 里读出来的几个关键点: - **三个 path 都只声明了 `post`。** 3054-2 的页面文档标注请求方式为 POST/GET,但 OpenAPI 里只有 `post` 一个方法定义。以文档页面为准时用 GET 也能通,但工具生成请求时只会给你 POST。 - **请求体是 `application/x-www-form-urlencoded`,`required` 只有 `text`。** `args_list` 是数组类型,范围标注 0~10000000。 - **鉴权定义在 query。** `securitySchemes.AppKeyAuth` 类型是 `apiKey`、位置 `in: query`、参数名 `appKey`。 - **每个 path 带扩展字段**,`x-pointCode` 是接入点序号,`x-mode` 为 `mapping`,`x-read-timeout` 分别是 60(3054-1)、50(3054-2)、60(3054-3)秒。 - **`externalDocs` 指向 `https://www.showapi.com/apiGateway/view/3054?tab=book`**,也就是页面上的帮助手册标签。 - 文件头部记录生成时间 `generated-at: 2026-09-05T19:43:09.977Z`。文档更新后这个时间会变,可以靠它判断手上的副本是不是新的。 ### 导入 Postman 或 Swagger UI **Postman:** 打开 Postman,`Import` → 选择 `File` 或直接粘贴 YAML 地址 → 导入后会自动生成三个请求模板,`appKey` 作为 query 参数出现在 URL 里,把占位值换成真实 AppKey 就能发。 **Swagger UI / Swagger Editor:** 把 YAML 内容贴进 Swagger Editor,右侧会渲染出三个可交互的接口文档,`Authorize` 里填 AppKey 之后可以直接在页面上试请求。 导入之后有几处要手工确认:`args_list` 在 Swagger UI 里可能被渲染成需要手填的 JSON 数组,中文 `text` 参数在部分客户端里要确认编码是 UTF-8。这两点踩了就会拿到一个和预期完全不同的返回。 ## FAQ **Q1:MCP 的三个工具名为什么是中文?** 服务端就是这样注册的。实测 `tools/list` 返回的 `name` 字段分别是 `智能对话(流式)`、`意图分析`、`智能对话`,与页面上的接入点名称一致。用英文或接口编号当工具名会报找不到工具。 **Q2:配好 MCP 但客户端不响应,先查什么?** 先确认 AppKey 是否放进了 URL,再确认客户端有没有发 `notifications/initialized`。服务端在没收到这条通知时会对 `tools/list` 返回 `-32601 Method not found`,表现和「工具不存在」一样,容易误判。 **Q3:MCP 调用会消耗额度吗?** 会。实测 `tools/call` 调的仍然是 3054 的接入点,返回里带 `showapi_fee_num: 1`,与直接调 HTTP 接口计费一致。 **Q4:OpenAPI 里为什么只有 POST?** 实测 YAML 里三个 path 都只定义了 `post`。3054-2 的页面文档另外标注了支持 GET,但这份机器可读的规格没有覆盖它。做自动化测试生成时按 POST 处理。 **Q5:MCP 服务有没有提供 prompt 或 resource?** 没有。实测 `prompts/list` 和 `resources/list` 都返回空数组,只有 tools 是可用的能力。服务端的能力声明里保留了 prompts 和 resources 的结构,但当前没有内容。 ## 下一步阅读 - [易源合一快速接入:用 curl 把「昆明今天天气」变成结构化数据](https://www.showapi.com/guides/united-api-quickstart-3054) - [易源合一实测能识别哪些意图:8 类 intent 编码逐一验证](https://www.showapi.com/guides/united-api-intent-list-3054) - [易源合一在对话式应用里的位置:意图层与执行层的切分方案](https://www.showapi.com/guides/united-api-dialog-architecture-3054) - **本系列共 12 篇**:查看[易源合一指南总目录](https://www.showapi.com/guides/united-api-guides-3054)