关于 chat-apps-ui-sdk
面向交互式聊天应用的设计与审查参考技能,基于 MCP Apps 整理了 46 条规则,涵盖工具设计、UI 接线、宿主桥接、安全与跨宿主适配。
主要功能
- 01分为 8 类的 46 条规则
- 02MCP 工具与 UI 资源设计
- 03宿主与组件桥接指南
- 04响应式布局与状态模式
- 05安全与跨宿主适配
适用场景
- 01设计 MCP 工具及其 UI 契约
- 02将工具连接到交互式 UI 资源
- 03审查 ChatGPT-app、Claude-app 或 MCP-UI 代码
MCP 相关
围绕 MCP Apps 标准提供指南,说明如何将 MCP 工具与 UI 资源结合,包括工具到资源的关联及宿主与组件间通信。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill chat-apps-ui-sdk安装后在 Claude Code 中输入/chat-apps-ui-sdk确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdbridge-call-tools-app-visibility.mdbridge-followup-vs-silent-call.mdbridge-handle-all-mcpui-actions.mdbridge-render-from-notifications.mdbridge-use-host-apis.mdbridge-validate-postmessage-origin.mddesign-inherit-native-typography.mddesign-limit-actions-hierarchy.mddesign-meet-wcag-contrast.mddesign-render-loading-empty-error.mddesign-respect-reduced-motion.mddesign-restrain-brand-color.mddisplay-avoid-nested-scroll.mddisplay-pick-the-right-mode.mddisplay-report-intrinsic-height.mddisplay-request-mode-with-fallback.mddisplay-respect-theme.mddisplay-responsive-breakpoints.mddist-build-on-mcp-apps-standard.mddist-degrade-without-ui.mddist-feature-detect-host-apis.mddist-provide-submission-metadata.mdsec-avoid-frame-domains.mdsec-declare-csp-allowlist.mdsec-enforce-server-side-auth.mdsec-minimize-restricted-data.md详细介绍
聊天应用 UI SDK 最佳实践
一份参考指南,介绍如何构建精美、可供审核的应用,并在 ChatGPT 和 Claude 的聊天界面中呈现交互式 UI。截至 2026 年 1 月,这些平台共享同一基础——MCP Apps 标准(@modelcontextprotocol/ext-apps),由 Claude、ChatGPT、VS Code 和 Goose 呈现。OpenAI Apps SDK 是一个超集,增加了 window.openai 桥接;而 MCP-UI(@mcp-ui/server / @mcp-ui/client)则是社区实现。本技能包含 8 个类别中的 46 条规则,并按影响程度排序,让最具杠杆效应的决策优先呈现。
思维模型:应用首先是一个 MCP 工具,其次才是 UI。模型调用工具;工具返回数据以及指向 UI 资源的链接;宿主在沙盒 iframe 中呈现该资源;iframe 通过定义好的桥接进行回传。链路前段的错误会导致无法呈现任何内容;后段的错误则会让内容呈现异常、不安全或不够完善。
适用时机
在以下情况下参考这些指南:
- 为聊天应用设计 MCP 工具以及
structuredContent/content/_meta契约 - 将工具连接到组件(
_meta.ui.resourceUri、text/html;profile=mcp-appMIME 类型、ui://方案) - 编写 iframe 组件及其桥接(
window.openai、ui/notifications/*、MCP-UIonUIAction) - 选择显示模式、组件状态、主题和响应式布局
- 强化聊天应用安全性(CSP、沙盒、密钥、OAuth),或准备提交到目录
- 审查或重构现有的 ChatGPT 应用 / Claude 应用 / MCP-UI 代码
按优先级划分的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | MCP 工具与发现设计 | CRITICAL | tool- |
| 2 | UI 资源连接与模板 | CRITICAL | wire- |
| 3 | 宿主与组件之间的数据桥接 | HIGH | bridge- |
| 4 | 显示模式与响应式布局 | HIGH | display- |
| 5 | 状态与模型上下文 | HIGH | state- |
| 6 | 安全与数据边界 | HIGH | sec- |
| 7 | 视觉设计与 UX 润色 | MEDIUM-HIGH | design- |
| 8 | 分发与跨宿主可移植性 | MEDIUM | dist- |
快速参考
1. MCP 工具与发现设计(CRITICAL)
tool-structured-content-contract- 在 structuredContent、content 和 _meta 之间拆分输出tool-specific-verb-names- 使用具体的动作动词命名工具tool-output-schema-validation- 为 structuredContent 声明输出架构tool-safety-annotations- 准确设置 readOnlyHint 和 destructiveHinttool-minimal-scoped-inputs- 仅请求最少且与任务相关的工具输入tool-feed-widget-in-response- 在一次响应中返回组件所需的全部内容tool-honest-descriptions- 撰写诚实的工具描述和状态文本
2. UI 资源连接与模板(CRITICAL)
wire-resource-uri-link- 使用 resourceUri 将每个工具连接到其 UIwire-mcp-app-mimetype- 使用 mcp-app MIME 类型提供 UI 资源wire-ui-scheme-and-handler- 将 ui:// URI 与已注册资源相匹配wire-version-uri-cache-key- 将资源 URI 版本化,以用作缓存键wire-inline-self-contained-bundle- 将组件包内联到资源中wire-set-ui-domain- 为组件设置唯一的 ui.domain
3. 宿主–组件数据桥接(高)
bridge-render-from-notifications- 根据工具输出渲染,而不是在首次绘制时渲染bridge-call-tools-app-visibility- 调用工具前,先将工具提供给应用bridge-followup-vs-silent-call- 选择后续消息或静默工具调用bridge-validate-postmessage-origin- 在宿主中验证 postMessage 来源bridge-handle-all-mcpui-actions- 处理每一种 MCP-UI onUIAction 类型bridge-use-host-apis- 使用宿主桥接 API,而不是重新实现
4. 显示模式与响应式布局(高)
display-pick-the-right-mode- 选择适合任务的显示模式display-request-mode-with-fallback- 请求全屏,但先以内嵌方式渲染display-report-intrinsic-height- 报告固有高度并遵循 maxHeightdisplay-avoid-nested-scroll- 避免在内嵌卡片中嵌套滚动display-respect-theme- 遵循宿主主题和配色方案display-responsive-breakpoints- 在小屏幕上灵活调整布局
5. 状态与模型上下文(高)
state-separate-three-stores- 分离组件、服务端和模型状态state-persist-widget-state- 通过 setWidgetState 持久化 UI 状态state-no-secrets-in-state- 不要将机密信息和个人身份信息放入组件状态state-update-model-context- 将用户决策推送到模型上下文state-keep-state-small- 保持组件状态精简且可序列化
6. 安全与数据边界(高)
sec-declare-csp-allowlist- 为组件声明 CSP 许可列表sec-avoid-frame-domains- 避免在组件中使用嵌套框架域名sec-no-secrets-in-payloads- 绝不要在包或有效负载中嵌入机密信息sec-enforce-server-side-auth- 在服务端强制执行授权sec-signal-oauth-challenge- 使用 www-authenticate 挑战指示身份验证sec-minimize-restricted-data- 尽量减少并避免输入受限数据
7. 视觉设计与 UX 润色(中高)
design-inherit-native-typography- 沿用原生字体并限制字号design-restrain-brand-color- 品牌色仅用于点缀design-render-loading-empty-error- 渲染加载、空内容和错误状态design-meet-wcag-contrast- 满足 WCAG AA 对比度要求并提供替代文本design-limit-actions-hierarchy- 限制操作数量并保持清晰的层级design-respect-reduced-motion- 遵循减少动态效果偏好
8. 分发与跨宿主可移植性(中等)
dist-build-on-mcp-apps-standard- 基于共享的 MCP Apps 标准构建dist-degrade-without-ui- UI 不受支持时返回文本备用内容dist-provide-submission-metadata- 提供准确的提交元数据dist-feature-detect-host-apis- 使用前检测宿主功能
使用方法
阅读各个参考文件,了解完整说明以及错误与正确的代码示例。从顶部开始——类别 1(tool-)和类别 2(wire-)决定内容是否能够渲染,因此应先解决这两类问题,再处理显示或设计。
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和影响级别排序 |
| assets/templates/_template.md | 新规则模板 |
| metadata.json | 版本和参考 URL |
相关技能
build-mcp-server— 用于设计 MCP 服务结构(部署模型、工具模式)的入口,本技能的 UI 规则基于此构建。