选择正确的接口
WebMCP 不是 MCP 传输、MCP Apps 扩展、发现服务器或嵌入机制。托管 MCP 和 MCP Apps 无需打开 WorldMonitor 标签页;WebMCP 则描述并操作当前实时前端。
可用性
生产 Origin Trial
WorldMonitor 为以下精确生产源的顶层/、/dashboard 和 /dashboard.html 路由注册 Origin Trial:
https://www.worldmonitor.apphttps://tech.worldmonitor.apphttps://finance.worldmonitor.apphttps://commodity.worldmonitor.apphttps://happy.worldmonitor.apphttps://energy.worldmonitor.app
/?mode=agent 是独立的机器可读 JSON 接口,不是 WebMCP 路由。预览部署和文档路由未注册。
Origin Trial 令牌有时限。发布检查必须验证实际部署的响应头,不得假设先前提交的令牌仍被浏览器接受。
本地开发
使用 Chrome 149 或更高版本:- 打开
chrome://flags/#enable-webmcp-testing。 - 将 WebMCP for testing 设为 Enabled。
- 完全重新启动 Chrome。
- 本地启动 WorldMonitor。打开
/dashboard检查含八个工具的仪表板;不要使用/embed。若要检查含两个工具的静态首页,请先运行npm run build:pro,再打开/pro/welcome.html。本地 Vite 的/会加载仪表板 SPA,只有生产环境才把/重写到欢迎页。 - 在 DevTools 中确认特性检测:
如果浏览器没有当前 API,包括未暴露 WebMCP 的 Tauri 桌面 WebView,WorldMonitor 会安全地不执行任何操作。它不会安装浏览器 polyfill,也不会退回旧草案 API。
工具清单
工具取决于页面和当前状态。运行时权威来源是await document.modelContext.getTools(),不是在其他页面缓存的旧清单。
首页工具
静态https://www.worldmonitor.app/ 欢迎页会在仪表板 SPA 加载前注册两个命令式工具:
仪表板命令式工具
六个仪表板变体都注册相同的八个命令式工具。登录和权益变化不会改变注册集合;每次调用都会重新检查实时状态。search_dashboard 返回精简描述符,不暴露隐藏仪表板状态。不透明结果键只能使用一次,两分钟后过期,最多保留最近 64 个;相关运行时、认证、权益、变体或组件访问发生变化时也会失效。过期或无效键会被拒绝,不会被当作 URL 或命令执行。
声明式采购工具
全球采购面板可以暴露一个声明式 WebMCP 工具:
表单的精确描述是 “Search official global procurement opportunities using visible filters.”。它使用
toolautosubmit 和用户看到的同一组控件。调用会让表单显示激活状态,经普通请求路径应用筛选,并以受限摘要返回匹配数、可用性、覆盖范围、已应用筛选及来源状态,而不返回招标描述或隐藏提交数据。重置或取消会中止请求并恢复可见表单状态。数据契约见全球采购情报。
人工控制与 UI 行为
- 命令式工具在启动时同步注册,但会等待所需 UI 或地图渲染器。销毁应用会中止待处理工作并注销工具;同文档重新初始化不会产生重复注册。
- 动作经过与人工控件相同的 UI、agent-bus、面板和地图路径,不调用具有额外权限的后端捷径。
- 每次调用时都会评估认证、订阅权益、仪表板变体、面板挂载状态、图层策略和渲染器就绪状态。登录时发现的工具不能在退出或降级后保留访问权。
- 成功变更保持可见:面板打开、搜索界面出现、地图状态变化,声明式采购表单显示激活/等待状态。
- 被拒绝、无效、跳过、不可用和过期操作返回受限结果或安全错误,不会静默绕过锁定,也不会虚构结果。
- 用户可以继续操作页面;已有的重置、关闭、导航和取消控件始终具有最终控制权。
安全与隐私
WorldMonitor 遵循浏览器的源隔离和同源模型:- 生产仪表板响应包含
Origin-Agent-Cluster: ?1,且Permissions-Policy包含tools=(self)。 - WorldMonitor 不通过
fromOrigins、exposedTo或 iframe 的allow="tools"委派向其他源开放 WebMCP。 /embed和/embed.html明确发送tools=()。即使父页面拥有 WebMCP,嵌入的 WorldMonitor 面板也不得暴露任何工具。- WebMCP 复用用户现有浏览器会话,不通过工具参数接受新的 API 密钥,也不会弱化面板和数据权益。
- 仪表板搜索结果按不可信内容处理,并在选择前重新验证。
- 仪表板运行遥测严格受限:
webmcp-registered记录toolCount、pageSurface和 API 类别;webmcp-registration-failed记录工具及稳定原因;webmcp-tool-invoked记录工具、结果和终态原因。仪表板搜索还可以记录查询长度、结果数及允许列表内的结果类型类别。这些 WebMCP 专用自定义属性不得包含参数、搜索文本、结果键、返回内容、URL、招标内容或用户身份。事件仍使用 WorldMonitor 常规的 Umami 页面与会话外层信息,其中包含页面上下文,并可能与已登录的仪表板身份关联;受限路径只会省略自动内容归因属性,不会移除常规分析会话元数据。
使用浏览器 API 调试
使用document 上的当前 API。旧的 navigator.modelContext 从 Chrome 150 起已弃用,已移除的 provideContext 草案 API 不受支持。
getTools() 按字母顺序返回当前页面授权的工具。在当前 Chrome 版本中,返回描述符的 inputSchema 是 JSON 字符串:
chrome://flags/#enable-webmcp-testing 和 chrome://flags/#devtools-webmcp-support。
发布冒烟检查清单
必须测试将要发布的精确提交。记录其 40 字符 Git SHA,并从同一 checkout 执行本地证明:本地,相同 SHA
WM_WEBMCP_DEPLOYED_SHA 后,本地证据产物会记录该 SHA;套件无法独立证明部署与 SHA 的对应关系。套件会启用 Chrome WebMCP 测试特性,并测试这个干净 checkout。除自动化证明外,如果发布修改了相关接口,还要用 getTools() 或 Inspector 检查每个仪表板变体以及采购工具可见/隐藏状态。如果发布修改了首页,请先运行 npm run build:pro,再检查 /pro/welcome.html。
生产,相同 SHA
首先在部署控制平面确认目标 URL 确实提供预期 SHA。运行器会把WM_WEBMCP_DEPLOYED_SHA 记录在证据中,但无法独立推导或证明 URL 与 SHA 的对应关系。
执行可选的有头生产套件;它不启用本地测试 flag,因此会测试真实 Origin Trial:
Origin-Trial、Origin-Agent-Cluster 和 Permissions-Policy 响应头、工具清单与 schema、一次免费上下文调用、一次不可用面板拒绝及取消,并写出 JSON 证据产物。请把这些产物与发布证据一起保存。其门禁有意只接受规范目标 https://www.worldmonitor.app。对于其他已注册源,应手动检查响应头,并使用 getTools() 或 Inspector 验证清单和行为;只有另行评审并添加专用冒烟目标后,才可自动化测试这些源。
还要确认 /embed 与 /embed.html 返回 tools=(),且 /?mode=agent、预览部署、文档和嵌入页面没有获得顶层清单。部署控制平面的 SHA 检查、响应头、清单、UI 行为和终态结果应视为独立断言;仅有部署成功或注册日志不等于验收通过。
兼容与移除策略
WorldMonitor 以当前document.modelContext.registerTool() API 为目标并进行特性检测。它不提供 navigator.modelContext、provideContext 或草案兼容 shim。
如果未来浏览器迁移确实需要临时 fallback,该变更必须:
- 明确具体浏览器/API 缺口,并保持当前 API 为首选路径。
- 保持同源策略、可见 UI 行为、认证/权益检查、受限输出、隐私规则和取消能力。
- 同时为原生与 fallback 路径提供契约测试,并指定移除负责人及 Chrome 里程碑或生产验证条件。
- 当前支持 API 在生产验证后立即移除;fallback 绝不能成为未记录的永久 API。
