請 cloud agent「參考這個網站更新 README」時,貼上網址不代表它就能讀到網頁。它還需要合適的工具,以及允許連線的環境。
這篇文章介紹三種做法:curl 下載原始內容、Fetch MCP 擷取文件正文、Playwright MCP 讀取動態頁面。先看懂它們的分工,再依需求閱讀設定細節。
先看全貌:依內容需求選擇工具
這是三種選項,不是必須依序完成的三個步驟。已經知道網站需要執行 JavaScript,就可以直接看 Playwright MCP;只需要公開文件正文,則可以先看 Fetch MCP。
以下以 GitHub Agents tab 中的 Copilot cloud agent 與 repository 層級設定為範圍,不是本機 Copilot CLI 或 VS Code 的 agent mode。設定需要 repository 管理權限,也可能受到組織政策限制。
做法一:curl,直接下載原始內容
適合取得 HTML、Markdown、JSON,或檢查網站回傳的 HTTP 狀態。若網站有提供原始 Markdown 或 JSON,通常比自行解析 HTML 更方便。
設定與執行
前往 Settings → Copilot → Internet access,在 Copilot in the cloud 區段保留防火牆,於 Custom allowlist 加入目標網址。不要選到 code review 的設定區段。
例如要讀取 MDN 的 HTTP 文件,可加入 https://developer.mozilla.org/en-US/docs/Web/HTTP。URL 規則會限制 scheme、host 與路徑範圍;若改填 developer.mozilla.org,則會允許整個網域及其子網域。
接著讓 Agent 執行:
1 | curl --fail --silent --show-error \ |
確認成功
檢查回應標頭、頁面標題與需要的正文。HTTP 200 不等於讀到了文件,回傳內容也可能是登入頁或驗證頁。
這個範例不會自動跟隨重新導向。遇到 301、302 時,先檢查 Location,確認目的地可信且在允許範圍內,再考慮加入 --location --max-redirs 3 --proto-redir '=https'。
curl 不會執行 JavaScript;如果下載到的只是網頁外殼,就需要改用瀏覽器讀取。
做法二:Fetch MCP,直接閱讀文件正文
Fetch MCP 能將 HTML 轉成 Markdown,適合讓 Agent 閱讀公開技術文件,省去自行整理 HTML 的步驟。它不是搜尋引擎,也不會執行網頁 JavaScript。
設定與執行
前往 Settings → Copilot → MCP servers,在 MCP configuration 加入:
1 | { |
若已有其他 server,請合併到原本的 mcpServers,不要整份覆蓋。這裡的 local 指的是 Agent 的執行環境,不是你的電腦;只修改本機 .vscode/mcp.json 不會套用到 cloud agent。
環境須先備妥 uvx、相容的 Python 與套件下載條件。若需自訂環境,可依官方說明,在預設分支的 .github/workflows/copilot-setup-steps.yml 中使用 copilot-setup-steps job 準備工具。
設定完成後,Agent 可用以下參數呼叫 fetch。這是工具參數,不是另一份 MCP 設定:
1 | { |
確認成功
確認回傳的標題、來源 URL 與所需章節正確,尤其留意表格和程式碼是否被省略。內容截斷時,依回應提示調整 start_index,接續閱讀。
max_length 控制每次回傳的內容長度;raw: true 則略過 Markdown 轉換,不會讓 Fetch 具備執行 JavaScript 的能力。
做法三:Playwright MCP,讀取動態頁面
如果正文要等 JavaScript 執行後才出現,就需要瀏覽器。Playwright MCP 能載入頁面,再以可及性快照提供文字與頁面結構。
先注意一個差異:cloud agent 內建的 Playwright MCP 預設只能存取環境內的 localhost 或 127.0.0.1 網站,不是任意外部網站。只修改 curl 使用的防火牆 allowlist,不會因此解除這項限制。
設定與執行
經管理員同意後,在 Settings → Copilot → MCP servers 加入另一個 server,與內建工具區隔:
1 | { |
執行環境須備妥 Node.js、npx、瀏覽器與系統相依套件。此例只開放導覽、快照、等待及關閉;若需要點擊展開內容,再評估加入 browser_click。
這裡有兩個容易誤解的參數:
--allowed-origins限制瀏覽器請求的來源,但不涵蓋重新導向,也不是完整安全邊界。網站若依賴其他來源,須逐項評估是否放行。--isolated讓瀏覽器 profile 不持久化到磁碟,不代表作業系統沙箱或網路隔離。
確認成功
讓 Agent 導覽到核准的網址,等待目標章節出現,再取得快照,確認正文已載入;完成後關閉瀏覽器。快照不一定包含圖片或 canvas 內容,需要時才另加截圖工具。
新增設定不保證能通過登入、CAPTCHA 或網站的自動化限制。遇到阻擋時,應改用正式 API、授權匯出或可分享的文件,而不是持續放寬設定。
共通注意事項,集中看這裡
前面解決的是「怎麼讀」,啟用前還需要確認以下幾件事:
- MCP 範例要固定版本:上面的 Fetch 套件名稱與 Playwright
@latest都未固定版本。正式使用前,換成經審查與測試的版本,確認參數及工具名稱相容;JSON 儲存成功不代表環境已準備完成。 - 防火牆不是所有工具共用的開關:GitHub 的整合式防火牆套用於 Agent 經 Bash 啟動的程序,不直接套用到 MCP server 或 setup steps。MCP 的網路出口須另行評估,尤其是內網與雲端 metadata endpoint;工具清單不等於網路限制。
- 只開放需要的權限:MCP tools 可由 Agent 自主呼叫,不會逐次徵求批准。避免使用
"*"或載入私人登入狀態;repository MCP 設定也與 code review 共用,須一併確認影響範圍。 - 公開文件不需要秘密:不要配置私人 token、cookie,或把 repository 內容與秘密傳給外站。若另有授權需求,請依秘密與變數文件使用最小權限憑證,不要寫進 JSON。
- 網頁是資料,不是操作指令:即使來源在 allowlist 中,也可能含有提示注入。不要依網頁要求讀取秘密或執行無關指令;轉成 Markdown 或快照並不會消除這些風險。
另外,組織政策可能鎖定設定。組織與 repository 的 allowlist 會合併,新增較窄的規則不會抵銷既有的較寬規則。
最後,用一個小任務驗證
儲存設定後,開一個新任務,選擇公開、無須登入的文件網址,要求 Agent:
1 | 請閱讀指定網址,回報實際使用的工具、最終 URL、頁面標題, |
接著查看 session 的工具結果,而不只接受「已閱讀」的文字宣告。若失敗,可先依現象縮小範圍:
| 現象 | 優先檢查 |
|---|---|
| 工具無法啟動 | uvx、npx、瀏覽器或 MCP 設定 |
| 連線失敗 | DNS、TLS、代理伺服器與防火牆 |
| HTTP 403 或驗證頁 | 網站存取政策、登入或自動化限制,不一定是防火牆 |
| 有 HTML 卻沒有正文 | 是否需要 JavaScript 渲染 |
先依內容需求選工具,再確認它真的讀到所需內容。掌握這兩件事,就不必一開始處理所有設定,也不會把「設定完成」誤認為「讀取成功」。
參考資料
- GitHub:自訂 Copilot 防火牆
- GitHub:設定 repository MCP servers
- GitHub:MCP 與 Copilot cloud agent、預設 server 限制
- GitHub:自訂 cloud agent 開發環境
- GitHub:設定 cloud agent 的 secrets 與 variables
- Model Context Protocol:Fetch MCP Server
- Microsoft:Playwright MCP
聲明:此篇文章使用 AI 工具產生,請自行判斷文章內容的正確性。