Skip to main content
WorldMonitor 通过 io.modelcontextprotocol/ui 扩展支持 MCP Apps。当前阵容提供 MCP Apps:自包含的 ui:// HTML 资源,MCP Apps 宿主可在关联的工具调用后内联渲染它们。 本页面是交互式接口的权威指南。请与 MCP Server 概述配合使用,以了解认证、配额、传输和一般 JSON-RPC 行为。
MCP Apps 在托管工具调用后,把 WorldMonitor UI 渲染到 MCP 宿主内部。WebMCP 则让浏览器智能体操作当前标签页中已有的 WorldMonitor 网站。WebMCP 不是 MCP App,也不会取代这些资源背后的托管 MCP 服务器。

契约

三个发现信号必须保持一致:

阵容

运行时流程

  1. 宿主对 https://worldmonitor.app/mcp 调用 initialize
  2. WorldMonitor 返回正常的 MCP 能力,外加 capabilities.extensions["io.modelcontextprotocol/ui"]
  3. 宿主调用 tools/list。关联 UI 的工具携带 _meta.ui.resourceUri 以及已弃用的扁平别名 _meta["ui/resourceUri"]
  4. 宿主调用 resources/list 并看到 ui:// 应用资源。每个 UI 条目包含 mimeType: text/html;profile=mcp-app_meta.ui.csp
  5. 宿主对选定的 ui:// URI 调用 resources/read。此次读取是公开且不计配额的,因为它只返回一个静态的、不含数据的模板。
  6. 宿主对关联工具执行正常的、经过身份验证的 tools/call。这是唯一获取实时数据并消耗适用配额的步骤。
  7. 宿主将返回的 HTML 嵌入一个沙盒化的 iframe,并交换 MCP Apps 消息:
视图本身从不获取实时的 WorldMonitor 数据。实时数据始终在正常的工具调用之后通过宿主到达应用。

资源读取与配额

resources/list 暴露具体的公开资源,包括所有 ui:// 模板。resources/templates/list 暴露参数化的数据资源。 所有方法仍计入每密钥、每用户或匿名 IP 每分钟 60 次的速率限制器。

视图安全

应用外壳被刻意设计得静态且受限:
  • 它们是自包含的 HTML:没有外部脚本、样式、图像、iframe、字体或网络获取。
  • 渲染使用 DOM 构造和 textContent,绝不使用 innerHTML
  • 链接仅通过 http:https: URL 解析被允许,并以 rel="noopener noreferrer" 渲染。
  • 共享外壳在初始化后以及每次渲染后报告尺寸,以便宿主调整 iframe 大小。
  • 软错误信封(_budget_exceeded_jmespath_error 以及顶层字符串 error)会渲染为可见的错误消息,而非空白的成功状态。
  • 该 HTML 包含一个 meta CSP,设置了 default-src 'none'、限定范围的内联脚本/样式许可、锁定的 form-actionbase-uri,以及镜像 _meta.ui.csp.connectDomains 策略的 connect-src。
重要限制:meta CSP 中的 frame-ancestors 仅为建议性。浏览器仅从 HTTP Content-Security-Policy 响应头强制执行 frame-ancestors。该 meta 指令保留在外壳中,供静态扫描器和意图文档使用;请勿将其视为浏览器级别的点击劫持防护。

添加新的 MCP App

  1. api/mcp/ui/*-app.ts 下添加自包含的应用外壳。
  2. 复用 api/mcp/ui/shell.ts 中的 buildAppHtml(),除非有协议方面的理由不这样做。
  3. api/mcp/ui/registry.ts 中添加规范的 *_UI_URI 常量和注册表条目。
  4. api/mcp/registry/rpc-tools.tsapi/mcp/registry/cache-tools.ts 中,恰好为一个后备工具设置 _uiResourceUri
  5. 更新 docs/mcp-apps.mdx、简短的 MCP 概述以及 public/.well-known/mcp/server-card.json
  6. 运行 npm run docs:stats 以刷新 docs/generated/stats.json
  7. 运行 npm run docs:check 以及针对性的 MCP 资源/工具测试。
docs-stat 门禁从 api/mcp/ui/registry.ts 和工具注册表派生应用清单。它在以下情况失败:
  • docs/mcp-apps.mdxdocs/mcp-overview.mdxpublic/mcp-server.md 遗漏了某个关联工具或 ui:// URI。
  • public/.well-known/mcp/server-card.json.metadata.mcpApps 与代码派生的应用列表、规范版本或 MIME 类型不一致。
  • docs/docs.json 将本页面从导航中移除。
  • 文档记录的 MCP 工具数量与服务器卡片的工具清单不一致。

源文件