How to build an AI Agent and MCP Server (step-by-step)
三句話摘要
示範如何透過 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 只會顯示它真正能驗證的內容。


