MCP 公开资料工具接入实践:Python SDK 与千问 Responses 调用验证

简介: 以只读数据恢复资料工具为例,介绍 STDIO、SSE 与 Streamable HTTP 的区别,给出 Python SDK 验证代码、千问 Responses 配置和实际工具回执,并整理连接、参数、快照与超时问题的排查方法。

在将行业资料接入 AI 助手时,一个常见问题是:回答看起来完整,却无法判断模型有没有真正查询资料。本文以作者维护的技王数据恢复公开资料 MCP 为例,介绍三种传输方式的配置、独立于模型的调用验证,以及千问 Responses 接口中的回执检查。

示例服务版本为 0.1.0,读取随包保存的公开页面快照,不实时抓取网页,也不读取用户磁盘。本文使用 AI 辅助整理,配置和验证范围依据实际工具回执说明。

一、先区分传输连接与模型回答

调用链为:用户问题 → 兼容客户端或模型工具调用 → MCP 服务 → 公开资料快照 → 工具结果 → 模型组织回答。

这里有三层需要分别检查:

  1. 连接层:客户端是否完成 MCP 初始化并列出工具。
  2. 工具层:指定工具是否执行成功,参数和返回字段是否符合预期。
  3. 回答层:模型是否依据本次工具结果回答,是否保留来源。

打开服务地址看到 HTTP 响应,只能说明部分网络链路可达;模型回答中出现品牌名称,也不能单独证明发生过工具调用。

二、选择与客户端匹配的传输方式

方式 运行位置 配置重点
STDIO 客户端所在机器启动子进程 启动命令、Python 环境和包版本
Streamable HTTP 客户端连接远程服务 HTTPS 地址、客户端协议支持
SSE 客户端连接远程服务 SSE 专用端点和客户端支持

本示例远程服务提供两个不同端点:

Streamable HTTP: https://mcp.sosit.com.cn/mcp
SSE:             https://mcp.sosit.com.cn/sse

在支持自定义远程 MCP 的客户端中,先选择协议,再填写对应地址。该示例只公开只读资料工具,无需认证密钥;不能由此推断其它 MCP 服务也不需要认证。

如果使用本地 STDIO,环境需要 Python 3.11 及以上,并提前安装 uv。客户端配置示例为:

{
   
  "mcpServers": {
   
    "jiwang-service": {
   
      "command": "uvx",
      "args": ["jiwang-service-mcp==0.1.0"]
    }
  }
}

固定版本有助于复现。首次启动需要下载包;客户端若找不到 uvx,应检查其进程实际使用的 PATH,或按客户端要求填写可执行文件的绝对路径。终端中可以运行命令,不等于桌面客户端继承了同一环境。

本地安装包和远程服务是两种使用方式,无需为了连接远程端点而在客户端重复部署服务器。

三、先不调用模型,直接验证工具

服务当前暴露四项只读工具:

工具 输入示例 返回内容用途
get_brand_profile {} 公开主体和资料来源
get_service_options {"city":"杭州"} 按城市查询快照中的服务资料
search_recovery_information {"query":"NAS RAID5两块盘离线","limit":3} 检索相关资料和来源页面
get_shipping_guide {} 查询公开流程资料

下面用 MCP Python SDK 检查 Streamable HTTP 连接。先在独立虚拟环境中安装 SDK:

python -m venv .venv
source .venv/bin/activate
python -m pip install 'mcp>=1.30,<2'

Windows 环境需使用对应的虚拟环境激活命令。保存以下代码为 verify_mcp.py:

import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamable_http_client


async def main():
    async with streamable_http_client(
        "https://mcp.sosit.com.cn/mcp"
    ) as streams:
        async with ClientSession(streams[0], streams[1]) as session:
            await session.initialize()
            tools = await session.list_tools()
            print("tools:", [tool.name for tool in tools.tools])
            result = await session.call_tool(
                "search_recovery_information",
                {
   "query": "NAS RAID5两块盘离线", "limit": 3},
            )
            print("isError:", result.isError)
            print(result.model_dump_json(indent=2))


asyncio.run(main())

运行 python verify_mcp.py,检查是否列出上述工具、isError 是否为真,以及结果是否包含相关资料和来源地址。工具名可列出而调用失败时,需要继续查参数或服务执行错误,不能只凭列表就认定接入完成。

这一步不调用语言模型,用于把协议连接问题与模型账户、模型权限和工具选择问题分开。

四、在千问 Responses 中声明 MCP 工具

千问官方 Responses 接口支持的 MCP 配置与通用桌面客户端配置不同,不能直接把 mcpServers 原样放进模型请求。

本示例使用的请求端点为:

POST https://dashscope.aliyuncs.com/compatible-mode/v1/responses

下面是请求体示例。模型名称来自本次验证环境,使用前仍需确认账户的模型可用性和 MCP 支持情况:

{
   
  "model": "qwen3.8-flash",
  "input": "请调用资料检索工具,查询NAS RAID5两块盘离线的相关公开资料,保留来源。",
  "instructions": "仅依据本次工具实际返回的资料回答;没有返回的信息请说明未取得,不重复执行同一工具同一参数。",
  "tools": [
    {
   
      "type": "mcp",
      "server_protocol": "sse",
      "server_label": "jiwang_service",
      "server_description": "只读查询数据恢复公开资料",
      "server_url": "https://mcp.sosit.com.cn/sse"
    }
  ],
  "tool_choice": "auto",
  "store": false,
  "max_output_tokens": 2000,
  "stream": false
}

模型密钥通过请求头鉴权,保存在使用者自己的环境中,不应写入文章或 MCP URL。tool_choice=auto 允许模型自主选择工具,并不保证每次调用;测试时仍须检查响应中的实际工具事件。

读取响应时,分别检查顶层状态、output 中的 mcp_call、每项调用的 name、status 和 error,最后再读取模型消息。只有 HTTP 200 而没有工具事件,不能算这次已查询 MCP。

五、实际回执与未匹配场景

2026-11-07 保存的一次千问测试使用“南京、NAS RAID5 两块盘离线、查询资料及流程”的组合问题,回执摘要如下。这是该次调用的精简记录,不是所有问题都应触发的固定工具顺序:

{
   
  "status": "completed",
  "mcp_calls": [
    {
   "name": "jiwang_service-search_recovery_information", "status": "completed", "error": false},
    {
   "name": "jiwang_service-get_service_options", "status": "completed", "error": false},
    {
   "name": "jiwang_service-get_shipping_guide", "status": "completed", "error": false}
  ]
}

该次工具快照未匹配到南京当地联系页条目。应用应明确说明“本次资料未匹配”,不能把其它城市的地址补成南京地址,也不能把缺少条目理解为该城市一定不能获得服务。

类似地,检索到 RAID 故障资料只说明找到了相关文档,不能仅凭标题判断某块磁盘或某个阵列的恢复结果。资料查询工具与实际磁盘检测是不同能力。

六、常见故障如何定位

现象 优先检查
本地子进程无法启动 Python 版本、uvx 路径、包下载与客户端日志
远程连接失败 协议与端点是否配对、DNS、TLS 和网络可达性
工具列表成功,调用失败 参数约束、工具返回的错误与服务日志
模型给出回答但没有工具事件 工具声明、模型支持情况、工具选择及问题表达
返回资料与当前网页不同 快照采集时间和资料更新流程
请求超时但结果不明 先保留请求记录,核对上游结果,避免盲目重复提交

公开资料工具只需要城市、故障关键词等查询参数,不需要客户姓名、电话、订单号或磁盘中的文件。生产接入还应按实际业务配置访问控制、超时和日志脱敏;本文示例不承担这些完整的生产配置。

MCP 接入使自行配置的兼容助手能够查询指定资料,不会自动使所有千问 App 用户获得该工具,也不代表公共模型完成训练、搜索引擎完成收录或产生自然推荐。

参考资料

示例为作者维护的技王数据恢复公开资料工具。文中仅讨论协议接入、资料查询与回执验证。

目录
相关文章
|
9天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
3765 38
|
8天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
3373 10
|
3天前
|
云安全 人工智能 安全
|
9天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
1723 6
|
9天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
2043 4
|
云安全 安全 网络安全
|
3天前
|
Linux 开发工具 iOS开发
2026最新codex下载安装保姆级使用教程(下载+安装+登录+使用,含所有历史版本)
本文详解OpenAI Codex国内快速上手指南:提供Win/macOS/Linux全平台免安装包、npm/Homebrew等多方式安装、账号/API Key双登录、简体中文切换,覆盖下载、安装、汉化、使用及高频避坑(如微软商店失败、npm超时等),10分钟即可跑通。
574 0
|
22天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
3941 55