KeyFrame內部研究專用

How to build an AI Agent and MCP Server (step-by-step)

Google Cloud Tech·6月18日週四·7 min英文

三句話摘要

示範如何透過 MCP(Model Context Protocol)將 ADK 部落格撰寫 Agent 連接到 Google Trends 外部工具,讓 Agent 具備即時資料查詢能力。 MCP 讓 Agent 以標準、隔離、語言無關的方式連接任意外部工具,而 ADK 的 `FunctionTool` 讓接入成本降到幾乎只需撰寫一個普通 Python 函式。 MCP 是工具與 Agent 之間的標準協議:Agent 本身無法直接執行外部查詢,MCP 作為中間層,讓工具以獨立 Process 運行,Agent 透過 stdio 詢問「有哪些工具」再呼叫,結果以 JSON 回傳,雙方完全解耦。

重點整理

重點
  • 1

    MCP 是工具與 Agent 之間的標準協議:Agent 本身無法直接執行外部查詢,MCP 作為中間層,讓工具以獨立 Process 運行,Agent 透過 stdio 詢問「有哪些工具」再呼叫,結果以 JSON 回傳,雙方完全解耦。

  • 2

    隔離性與互通性是 MCP 的核心優勢:工具可以用 Python、Go 或 Node.js 撰寫,Agent 不需知道實作細節;工具崩潰不會拖垮 Agent,且工具可隨時新增、替換或版本化,無需改寫 Agent 主程式碼。

  • 3

    ADK FunctionTool 自動化 Schema 生成:只需撰寫標準 Python 函式並加上 Docstring,ADK 的 `FunctionTool` 裝飾器會自動解析 Signature,產生符合 MCP 規範的工具 Schema,省去手動定義模型的步驟。

  • 4

    整合只需在 Agent.py 新增一個工具參考:從 Agent 的角度,呼叫 MCP 工具與呼叫本地函式完全相同,只需將 `trends_mcp` 加入 Root Agent 的工具清單,Agent 即可在撰寫部落格時自動查詢當前 Google Trends 趨勢。

實用技巧與重點

乾貨
  • 協議名稱:MCP(Model Context Protocol)
  • 框架:ADK(Agent Development Kit)
  • 工具:Google Trends(透過 MCP 串接)
  • 通訊方式:stdio(標準輸入輸出),非 HTTP
  • 結果格式:JSON
  • 核心檔案:`server.py`(MCP Server)、`Agent.py`(Root Agent)
  • 關鍵 ADK 類別:`FunctionTool`、`adk_mcp_tool`(將 ADK meta data 轉換為 MCP Tool Schema)
  • 兩個必要 Handler:`list_tools`(回傳工具清單與 Schema)、`call_tool`(執行工具並回傳結果)
  • 錯誤處理:呼叫失敗時回傳 JSON 格式錯誤訊息,並將詳細內容輸出至 stderr
  • 啟動方式:主程式呼叫 `asyncio.run()`,ADK 可直接開啟該 Process 並使用工具
  • UI:ADK Web UI 可視化測試 Agent 與 MCP Server 的連線

結論

結論

MCP 讓 Agent 以標準、隔離、語言無關的方式連接任意外部工具,而 ADK 的 `FunctionTool` 讓接入成本降到幾乎只需撰寫一個普通 Python 函式。

完整解析

詳細

這部影片的核心問題是:一個純靠語言模型運作的 Agent,雖然能根據主題規劃並撰寫部落格文章,但它不知道外部世界正在發生什麼。為了讓文章更貼近當下,講者決定將 Agent 連接到 Google Trends 的即時資料,而連接的橋樑就是 MCP——Model Context Protocol。

MCP 的概念其實很直觀。Agent(大腦)無法直接執行查詢 Trends 資料庫這類操作,因此需要一個標準化的中介層。MCP 讓外部工具以獨立 Process 的形式運行,透過 stdio 與 Agent 溝通:Agent 先問「你有哪些工具?」,工具回傳名稱、參數與回傳型別的 Schema;Agent 再說「用這些參數呼叫這個工具」,工具執行後以 JSON 回傳結果。整個設計的精髓在於隔離——工具用什麼語言撰寫、用了什麼 Library 都無所謂,只要遵守 MCP 協議即可;工具崩潰也不會影響 Agent 主程式,且工具可隨時新增或替換,不須重寫 Agent。

實作層面,講者在專案中建立 `server.py`,撰寫一個標準 Python 函式 `trends`,接收 JSON 格式的語言參數並回傳 JSON。接著用 ADK 的 `FunctionTool` 包裝這個函式——ADK 會自動讀取函式的 Signature 與 Docstring,產生完整的工具 Schema,無需手動定義模型。MCP Server 物件作為工具與 Agent 之間的小型中介,實作兩個關鍵 Handler:`list_tools` 在 Agent 連線時回傳工具清單(透過 `adk_mcp_tool` helper 將 ADK meta data 轉換為 MCP 格式),`call_tool` 則驗證工具名稱後直接呼叫 `FunctionTool` 的 `run_async` 方法,成功時回傳 JSON 文字內容,失敗時回傳結構化錯誤訊息並將詳細資訊輸出至 stderr。最後以 `asyncio.run()` 啟動整個服務。

完成 Server 端後,Agent.py 的改動極為精簡:只需在 Root Agent 的工具清單中加入 `trends_mcp`。從 Agent 的角度,呼叫這個 MCP 工具與呼叫本地函式沒有任何差異,但背後卻已串接到真實的外部資料流。開啟 ADK Web UI 後,Agent 便能在撰寫文章前先查詢當前 Google Trends,讓部落格內容錨定在真實趨勢上。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「AI 技術」的內容

Between Two Nerds: Attribution is dead, long live attribution
32 min
AI 技術英文PODCAST8月25日

Between Two Nerds: Attribution is dead, long live attribution

Risky Business

  • 工具成本的破壞性下降 — 傳統上,攻擊者必須重複使用昂貴自製的惡意軟體或工具組,因為開發和維護成本極高。這種成本結構使得安全研究人員可以通過工具特徵和程式碼簽名來追蹤攻擊者。LLM 自動化了代碼生成與維護工作流,使得攻擊者可以輕易為每個目標生成新工具,或改用通用系統工具,導致傳統的工具特徵分析失效。
  • 所有取證證據都在攻擊者掌控之中 — 無論是使用的 IP 位址、惡意軟體類型或戰術流程,這些都是攻擊者的主動選擇。即使看似是隨機巧合,攻擊者仍有能力在事前決定留下什麼痕跡。因此,所有可恢復的取證證據本質上都是攻擊者願意暴露的信息。
  • LLM 削弱工具簽名但保留高階行為特徵 — LLM 經過公開駭客技術訓練,使不同使用者產生相似的攻擊模式。然而,勒索軟體集團、國家級行為者的受害者選擇、贖金要求方式或目標模式等高階特徵仍具有識別價值。例如,鎖定加密交易所的攻擊幾乎只能指向朝鮮。
Everything Goldman Sachs Taught Me About AI (In 10 minutes)
AI 技術英文8月24日

Everything Goldman Sachs Taught Me About AI (In 10 minutes)

Nate Herk

  • 驗證優於相信:看起來完整的AI輸出不等於正確答案,需在提示中要求模型重新檢查數字、引用來源,並對無把握的部分標記。
  • 區分AI與自動化:確定步驟且答案已知的任務用傳統自動化更便宜快速;只在需要判斷力、靈活性或處理複雜資訊時才用AI,兩者結合效果最佳。
  • 以問題驅動選型:先寫清楚「要解決的問題是什麼、成功的樣子是什麼」,再決定用什麼工具,許多失敗項目是從技術而非問題出發。
Mu: a self-hosted personal agent where the interface is an email address you can write to
AI 技術英文8月23日

Mu: a self-hosted personal agent where the interface is an email address you can write to

GitHub Awesome

  • Mu 是自主代理人系統,具有實際網址與獨立伺服器,用戶可透過多種方式與其互動——網頁應用、電子郵件或程式化介面。
  • 架構完整覆蓋日常工作流程的多個層面,整合郵件收發(SMTP/IMAP)、檔案管理、行事曆、新聞聚合、市場數據與搜尋功能於一個 Go 伺服器內。
  • 支援自帶模型與多種通訊協定,用戶可選擇不同的 AI 模型,並透過 MCP、HTTP API 或命令列工具整合到其他系統。