在将行业资料接入 AI 助手时,一个常见问题是:回答看起来完整,却无法判断模型有没有真正查询资料。本文以作者维护的技王数据恢复公开资料 MCP 为例,介绍三种传输方式的配置、独立于模型的调用验证,以及千问 Responses 接口中的回执检查。
示例服务版本为 0.1.0,读取随包保存的公开页面快照,不实时抓取网页,也不读取用户磁盘。本文使用 AI 辅助整理,配置和验证范围依据实际工具回执说明。
一、先区分传输连接与模型回答
调用链为:用户问题 → 兼容客户端或模型工具调用 → MCP 服务 → 公开资料快照 → 工具结果 → 模型组织回答。
这里有三层需要分别检查:
- 连接层:客户端是否完成 MCP 初始化并列出工具。
- 工具层:指定工具是否执行成功,参数和返回字段是否符合预期。
- 回答层:模型是否依据本次工具结果回答,是否保留来源。
打开服务地址看到 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 用户获得该工具,也不代表公共模型完成训练、搜索引擎完成收录或产生自然推荐。
参考资料
示例为作者维护的技王数据恢复公开资料工具。文中仅讨论协议接入、资料查询与回执验证。