在为 Claude 构建任务面板时,我发现了 MCP App... 笔记

在为 Claude 构建任务面板时,我发现了 MCP Apps 中的两个未记录缺陷

作者开发了 Wingman,这是一个开源的 MCP 服务器,可在 Claude 对话中显示一个持久任务面板。该工作利用了 MCP Apps 及其相关 SDK,作者认为其稳健可靠。然而,两个未记录的严重缺陷耗费了大量开发时间。第一个缺陷涉及 `resourceUri` 的位置:它必须位于 `CallToolResult` 对象顶层的 `_meta` 中,而不能置于 `structuredContent` 内。若工具返回一个普通字典,可能导致 `_meta` 被错误嵌套,致使主机无法找到用于渲染的资源。 修复方法是返回一个结构正确的 `CallToolResult` 对象,并将 `_meta` 置于正确位置。第二个主要缺陷源于 CSS 特异性问题覆盖了 `[hidden]` 属性。自定义样式表中的显式 `display` 规则阻止了元素按 JavaScript 意图被隐藏。仅添加一行代码,在 `[hidden]` 的 CSS 规则中加入 `!important`,便同时解决了三个独立的 UI 问题。 此外,作者在 MCP Apps 主机中遇到了三个 iframe 沙箱限制:`confirm()` 静默失败,`navigator.clipboard.writeText` 不可用,且 `Blob`/`URL.createObjectURL` 的下载被阻止。这些限制需要变通方案,例如使用内联确认并通过 `sendMessage` 路由内容。作者强调,这些 API 故障通常导致静默不操作而非抛出错误,因而难以诊断。最终,这两个主要缺陷均涉及距初始检查点仅一层之遥的问题,凸显了在调试过程中检查这些中间层的重要性。Wingman 采用 MIT 许可证,并可在 PyPI 上获取。