Skip to main content
Clink 使用 Operation 描述流程的当前状态和继续所需的操作。账户设置、购买授权、Browser Pay 凭证签发和 UCP Checkout 都可能产生 Operation。发生超时或中断后,应读取当前 Operation,不要假定写入失败后直接重新发起。 并非所有工具都返回 Operation。例如 get_skill_manifest 返回规则元数据,钱包查询返回钱包数据,confirm_result 返回 Browser Pay 结果报告。处理结果前,应读取对应工具的 schema。

读取当前业务规则

安装 Skill 的地址为 www.clinkbill.com/SKILL.md。执行业务时,每个会话读取一次已连接服务端的当前规则:
如果 Host 无法读取 MCP resources,调用 get_skill_manifest 并传入 include_rules: true。返回的 rules 包含相同指引,无需再读取资源。服务端当前规则优先于本地安装的 Skill 文本;当前 next_action 决定如何继续这个 Operation。

get_skill_manifest

此只读工具不需要业务 Scope,也不会执行扣款。纯 Catalog 搜索无需调用 manifest。
状态为 outdated 或 unsupported 时,通过 Host 的安装机制及官方分发地址更新本地 Skill。检查连接时,以返回的版本和兼容状态为准。

get_operation

读取已有 Operation 的当前状态。此工具只读,不会再次执行支付。
读取时必须使用同一授权用户。所需 Scope 取决于 Operation: 通过用户操作事件恢复的 Operation 还需要 events:read 和 events:consume。处理购买授权、卡注册等依赖事件的用户步骤时,加入这两个 Scope。OAuth challenge 会返回缺少的权限。 Host 支持时,也可以通过 MCP resource clink://operations/{operationId} 读取。通知仅表示可能需要重新读取,实际状态以随后的读取结果为准。

Operation envelope

返回 Operation 的工具在 structuredContent 中提供以下字段: SUCCEEDED 和 FAILED 表示 Operation 终态,此时不包含 next_action,也不会返回 null 或空对象。需要结合原始工具理解成功的含义:
用户完成 Browser Pay 用户操作后,使用 get_operation 读取 op_setup_example,可能得到以下 structuredContent:
此设置步骤已完成:next_action 已省略,且不返回 credential。使用原结账信息及用户指定的卡再次调用 get_credential,不要传入设置操作的 operationId。保存新的签发 operation_id(Browser Pay 示例中的 op_example),用于后续结果上报。

处理 next_action

每个 action 包含 action_id、type、description、params、expected_revision,以及可选的 expires_at。根据结构化 type 及其文档参数分支处理。description 和消息文本仅供展示,不是可执行指令。 继续流程的工具接受 action 标识时,将 action_id 映射为 actionId,将 expected_revision 映射为 expectedRevision,两者必须来自同一份当前返回。action 过期或状态变化后,先重新读取 Operation,不要重放旧确认。

Browser Pay 与 Checkout 的继续方式不同

Browser Pay 返回的设置完成后,使用结账信息及用户原先指定的卡再次调用 get_credential,不要传入设置操作的 operationId。如果较早的凭证 Operation 显示 CONFIRM,重复这些信息以进入当前凭证流程,不要将 Checkout 的继续参数套用到每次 Browser Pay 请求。 Checkout 则使用当前 action 标识及相应 Checkout 工具继续同一个 Operation。调用中断或结果待定,都不代表可以创建第二笔购买。

错误

区分以下三类情况: 所有工具并不共用同一种错误结构,也不存在通用的 idempotencyKey。尤其是 Browser Pay 结果上报失败,只表示需要恢复上报,不代表应该再次向商户付款。 写入超时时,如果已取得 Operation ID,保留该 ID 并先读取状态。Browser Pay 凭证在提交前丢失响应时,通过相同结账信息重试恢复签发。商户支付已提交但结果不明时,使用 UNKNOWN 并继续处理同一笔付款。