T learn.traeai

第 5 节 · 本站原创中文课程 · 建议 25 分钟

从 MCP 发现到可靠工具观察

学完能做:适配远程工具,区分连接、发现、业务错误与授权。

连接与工具调用不是同一步

pi-mcp 的 McpClient 负责协议初始化、请求关联、超时和取消;transport 负责 framing 与 I/O,可选 stdio 或 Streamable HTTP。示例先 connect,再 listTools,再 callTool,最后 close。生产适配器需要 finally 清理,并把断连、取消与业务错误分别记录。OAuth 与凭证存储是独立职责,网站学习练习无需提交任何真实密钥。

暴露策略影响上下文

coding-agent 的 MCP 工具名是 mcp__server__tool。direct 声明给模型;默认 codemode 让脚本按需发现而不把全部工具塞进声明;deferred 经 tool_search 加载后再声明;hidden 不可调用。这些是工具可达性和发现策略,不是自动实现的业务权限。大量工具先按名称空间发现、查看 schema,再调用,比一次塞入全部描述更可控。

不要漏掉 isError

README 的 AgentTool 适配把 MCP CallToolResult 转成模型内容,同时映射 isError。业务失败可能是正常协议响应,所以只写 try/catch 不够。structuredContent 可以提供结构化结果,content 承载文本与图片;要保留足够证据解释下一步。1.0 的 OAuth 修复不改变这个区分:身份验证成功也不说明任意工具操作已成功。

授权超时覆盖整个登录

1.1 的 pi mcp login --timeout 把 AbortSignal.timeout(timeoutMs) 传给整个 signInMcpServer 流程,覆盖授权服务器请求,而不只是等待浏览器返回。超时或取消返回登录未完成的结果,不能当作工具 isError。练习用假计时与 AbortSignal 区分授权超时、取消和工具业务失败。

单次请求还有独立预算

OAuth 的 timedFetch 用 15 秒请求预算与调用方 signal 合并,因此整体登录预算和单次请求预算是两个限制。登录界面每个阶段可用 Esc 取消,会话关闭也会中止登录;取消信号应一直传到授权流程。阅读 timedFetch 后继续定位 signInMcpServer 的 signal 传递,验证请求中止没有被误报为工具业务失败。

这是本站独立编写的讲解与示例,并非官方课程逐字翻译。理解之后,请完成下面的练习、自测和笔记。

参考来源:Pi v1.1.0 官方源码与文档

动手,把理解变成成果

本节练习

正在读取本机草稿…

实现或设计 MCP→AgentTool 适配器,保留 signal、content、structuredContent 和 isError。给成功、业务失败、断连三个假响应,并选择工具暴露方式。

33 / 6000 字。本页不执行代码;可下载后在本地运行,或用 Agent 获取定性建议。

给我一个提示

模拟一个 JSON-RPC 成功但 isError:true 的返回值。

查看参考思路(本站预写,非实时 Agent)

适配器转发 signal,返回文本/结构化内容并保留 isError。断连抛连接错误;业务失败写入观察。大量只读工具使用 codemode 按需发现,执行权限仍由服务器控制,finally 关闭连接。

人工自评:逐项核对自己的作品

这些勾选由你确认,不是自动测试结果。遇到待测项,请在作品里明确注明。

理解自测

MCP 返回 isError:true 应如何处理?

自己的学习笔记

0 / 3000 字 · 仅保存在此浏览器

围绕当前章节学习

Agent 答疑与作品评价

正在检查连接…

本站讲解、提示、参考思路和自测可独立使用。连接模型服务后,才能实时提问或评价;这里不会把预写内容伪装为 Agent 回答。

走完学习闭环

完成本节

保留练习、勾选人工自评并通过自测后,可记录完成。修改作品或答案会重新打开本节。

课程进度:0 / 6 · 本机记录,不是外部官方证书

← 上一节:用 Codemode 编排工具