所有節目›AI Engineer Europe 2026World's Fair 2026World's Fair 線上軌AI in HealthcareSoftware Factories
Why MCP and ChatGPT Apps Use Double Iframes在 YouTube 看這一場

AI Engineer Europe 2026 · 演講 · 2026-06-15 · 20 分

MCP 應用的雙層 iframe

Why MCP and ChatGPT Apps Use Double Iframes · Frédéric Barthelet,Alpic

Alpic 的 CTO 拆解 ChatGPT 為何要把第三方 MCP 應用放進兩層 iframe:單層做法各卡在哪、雙層如何解,以及開發者該宣告哪些網域。

聊天框之外看原片 ↗

概要

  • UI 進入對話的方式MCP 應用的介面叫 view,是 tool call 結果的呈現層,本質上是一份含 JS 與 CSS 的 HTML。host 會建一個 iframe 顯示它,並把 tool result 注入進去。
  • srcdoc 兩頭不討好用 srcdoc 灌內容,iframe 會與 host 同源、受同一份 CSP 管,腳本被擋;放寬 CSP 又會讓 app 讀到 host 的 local storage 與 cookie。
  • sandbox 與 src 也走不通sandbox 之後是 null origin,用不了 local storage 與 cookie,補上 allow-same-origin 又回到原點。改用 src 指向各 app 的網址,則 host 得一直更新 frame-src,或自己代管所有第三方 UI。
  • 雙層 iframe 的做法外層從獨立網域載入一支小腳本,由它取回資源,再開內層 iframe 用 srcdoc 放內容;外層還按 app 拆子網域,彼此讀不到對方的儲存資料。
  • 開發者的功課把 app 依賴的網域都宣告在 MCP app 規格的 metadata 裡,否則內層的 CSP 不會放行。Fred 說 GPT app store 的送審退件,不少就是漏了這件事。

原話

  • “deep diving into why the decision was made to do this kind of inception nesting of iFrames”

    深入看當初為什麼會決定做這種盜夢空間式的 iframe 巢狀結構

    ▶ 03:58
  • “Doing so, you effectively need to put in motion an infrastructure where your domain hosts external third-party UI from all apps that will be submitted on your store, which is not a very good position to be into”

    這樣做等於得自己搭一套基礎設施,在自己的網域上代管所有送審 app 的第三方 UI,這不是個好處境

    ▶ 11:29
  • “So you want app abc123 not to be able to access local storage from app abc456, for example.”

    所以你要讓 app abc123 讀不到 app abc456 的 local storage,舉例來說

    ▶ 12:56
  • “This is the actual solution that I implemented into production.”

    這就是我實際上線的解法

    ▶ 13:28
  • “we've seen a lot of rejection coming from the gpt app store submission because of missing csp and app not working in production because of missing csp domains”

    我們看到很多 GPT app store 送審被退,也有 app 在正式環境壞掉,原因都是漏了 CSP 網域

    ▶ 19:04

延伸

  • MCP 應用的介面最早是用 MCP UI 做的,之後 OpenAI 在去年十月推出 apps SDK,再由 MCP 第一個官方 extension(app extension)統一成跨 client 的標準。
  • 談 host 自己代管第三方 UI 的做法時,Fred 舉 OpenAI 實際用來放使用者內容的網域 openai-user-content.com 為例:要另外架一台伺服器,從 MCP server 下載 HTML 再用子網域分流到各個 app。

章節

點時碼直接跳到原片的那一段。

  1. 自我介紹與主題Fred 是 Alpic 的 CTO 與共同創辦人,Alpic 是 MCP 託管公司;這場要深入看 ChatGPT 與 MCP app 的雙層 iframe 機制。
  2. MCP 應用是什麼MCP 應用是企業對外提供產品與服務的新管道,有兩個重點:能在 ChatGPT 與 Claude 這類通用 agent 裡被發現,以及在原本只有文字的對話裡加入互動介面。
  3. view 如何運作view 永遠是 tool call 的結果,server 可在 tool 的 metadata 指定用哪個 view 顯示;所有 view 在對話開頭的 tool list 就已描述。
  4. 發現雙層 iframeFred 去看 ChatGPT 的 DOM,發現 iframe 裡還巢著一層 iframe,成了這場的起點;Claude.ai 上也是一樣。
  5. CSP 與 iframe 基礎CSP 是 server 隨文件回傳的指令,限定瀏覽器能載入、執行什麼;其中 frame-src 與 script-src 最關鍵。iframe 有 src 與 srcdoc 兩種放內容的方式。
  6. srcdoc 行不通srcdoc 的 iframe 與 host 同源、共用 CSP,ChatGPT 要求每支腳本帶 nonce,app 的 JS 全被擋;放寬 CSP 則 app 能讀到 host 的 local storage 與 cookie。
  7. sandbox 的代價sandbox 讓 iframe 變成 opaque origin(約等於 null),不能用 local storage、IndexedDB 與 cookie;加上 allow-same-origin 又會回到可逃出沙箱的狀態。
  8. src 做法的成本讓每個 app 把 view 當成自己 server 的 endpoint,host 就得不斷更新 frame-src;改由 host 自己的網域代管,等於替所有送審的第三方 UI 提供託管。
  9. 雙層 iframe 的解法外層 iframe 載入一支小腳本,取回資源後開內層 iframe,用 srcdoc 放內容;外層放在與 ChatGPT 不同的專屬網域,維持隔離。
  10. 子網域與 app 自己的 CSP同一支腳本放在不同子網域,避免 app 之間共用 local storage 或 cookie;app 自己的 CSP 則透過第一層 iframe 裡的 meta tag 提供。
  11. 上線做法與歷史Fred 說這是自己實際上線的做法,也不是新發明,早年 Facebook 遇到同樣的第三方 UI 問題時就做過。
  12. 開發者要宣告的網域開發者要把 app 依賴的網域都寫進 MCP app 規格的 metadata,才會被正確改寫進內層;例如對外抓資料的網域要放進 connect-src。
  13. CSP 的痛點Fred 把 CSP 比作自己 2016 年剛入行時被 CORS 折磨的日子。OpenAI 的開發者模式直到最近都會把 CSP 全部拿掉,漏列的網域要到上線才發現。
  14. Skybridge 框架Alpic 做的開源框架,疊在官方 app SDK 之上:MCP server 與 app 之間的端到端型別安全、各 host 專屬 API 的 polyfill,以及開發環境工具。
  15. 示範:CSP Inspector以新專案內建的範例(一個有 25 種預設答案的神奇八號球 app)示範開發工具:列出 tool、執行並即時預覽 view;CSP Inspector 比對 metadata 宣告的網域與 view 實際呼叫的網域。
  16. 為什麼做這個工具Fred 說他們在 GPT app store 的送審裡看到很多退件,原因是漏列 CSP 網域,也有 app 因此在正式環境壞掉。

名詞

Alpic
Fred 任職的公司,自稱 MCP 託管公司,也是 Skybridge 的開發者
MCP app
在 MCP 上提供介面的應用,經由 app extension 這個 MCP 第一個官方 extension 標準化
view
顯示在對話裡的一小塊 HTML 介面,永遠是某次 tool call 的結果
CSP
Content Security Policy,server 隨文件回傳的指令,限定能載入、執行與連線的來源
srcdoc
iframe 的屬性,把內容直接推進去,不另外載入網址;iframe 會與 host 同源
sandbox
iframe 的屬性,讓它進入 opaque origin,不與父頁面共用來源
Skybridge
Alpic 的開源框架,疊在官方 app SDK 上,附 CSP Inspector 等開發工具

相關影片 同屬「聊天框之外」