把 MCP 拆开看:一条请求在 host、server 与 iframe 之间怎么走
来源:mcp-explained.com — 2026-11-05
📋 概述
这是一个交互式讲解站,用一次「查里斯本天气」的完整请求,把 MCP 的每个环节画成时序图。模型只看到 get_forecast 这一个工具,UI 专用的 refresh_day 被设为对应用可见、对模型隐藏;host 在调用开始的同时把返回的 HTML 模板放进沙箱 iframe 渲染,iframe 的源必须与宿主页面不同,CSP 由 host 根据应用声明的域名收窄而成,未声明时默认 connect-src 'none'。应用与 server 之间没有直接连接,所有 tools/call 都要经 host 转发并校验,host 可以拒绝也可以先问用户。用户点击某一天后,应用请求调用 app-only 工具,结果只回给界面、不进模型上下文;随后应用用 ui/update-model-context 告诉模型「用户正在看什么」,这条上下文在下一轮才随用户消息一起送出。
🔑 核心要点
- UI 专用工具对模型隐藏,只对应用可见;应用与 server 之间不直连,全部经 host 转发与校验。
- MCP App 的 HTML 跑在与宿主不同源的沙箱 iframe 里,CSP 由 host 从声明的域名收窄生成。
- 界面交互的结果不进模型上下文,需要时用 ui/update-model-context 把「用户在看什么」显式告知。
- 宿主可以在转发前拦截或征求用户同意,也应当记录应用发起的调用。
💡 金句
The model only sees get_forecast. It calls it, and the host runs the call while it starts the UI.
👍 0
👎 0
← 返回 Hacker News 首页