跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

MCP 发现、过滤与断线重放

分别设置启动和调用预算,检查工具可见性、服务信任与未知执行结果。

连接成功、工具出现在模型声明里、调用获准、结果成功返回是四个不同阶段。排查时按阶段处理,避免重复执行可能已经完成的写操作。

启动发现与超时

交互终端先显示 UI,再在后台发现服务,状态显示 N/M MCP servers ready。太早发提示可能只有部分工具可用。无头 --prompt、stream-json 和 ACP 会在第一条提示前等待发现收敛。

字段范围默认
discoveryTimeoutMsconnect、tools/list、prompts/list、resources/list 初始握手stdio 30 秒;HTTP/SSE 5 秒
timeout工具调用请求600,000 毫秒,即十分钟
{
  "mcpServers": {
    "slow-local": {
      "command": "node",
      "args": ["./server.js"],
      "discoveryTimeoutMs": 60000,
      "timeout": 30000
    }
  }
}

ToolSearch 预加载还有单独时序:MCP 如果在初始预加载之后才连接,可能要新会话或 /clear 才参加该预加载。服务注册就绪不等于它的全部 schema 立刻进入每个模型请求,见上下文成本。

QWEN_CODE_LEGACY_MCP_BLOCKING=1 可回到等待所有服务后显示 UI 的旧模式。官方将它作为过渡回退入口,不应依赖其永久保留。

stdio 协议协商

versionNegotiation 默认 legacy,只启动会话所需进程。设为 auto 时,会先运行一个短命副本协商协议,最多占发现预算五秒,再启动会话进程。

启动有不可重复副作用、单 owner 锁、PID 文件或很慢握手的服务应保留 legacy。auto 并不只是改变请求字段,它会额外启动一次服务进程。

服务与工具过滤

全局 mcp.allowed、mcp.excluded 按服务名称匹配,支持 * 任意字符序列、? 单字符;无通配符按完全相同名称比较,同时匹配时 excluded 优先。

每服务 includeTools 是工具允许列表,省略默认全部;excludeTools 优先于 includeTools,并让对应工具不对模型提供。筛选工具与工具调用审批不是同一设置。

trust 与断线重放

trust 默认 false。设 true 只在可信工作区跳过该服务确认。

当前调用断线后,只有服务 trust 为 true、工作区可信,而且工具明确给出 idempotentHint:true 或一致的只读注解时,Qwen 才重连并重放。只读标注与 destructiveHint:true、idempotentHint:false 冲突时不能按只读重放。

注解缺失、冲突或任一信任条件不满足,都不会透明重放。错误会提醒结果未知:服务可能已执行,只是应答丢失,应先核对实际状态再重试。

注解来自服务自身,是行为提示,不是授权证明。只有已核对服务行为和标注后才考虑 trust;不能用修改客户端 trust 来证明远端操作幂等。