前面幾天,我們逐步完善了 MCP Agent 的功能,從任務規劃、任務日誌、錯誤處理,到不同 MCP Server 的整合,讓 Agent 可以根據使用者的需求,自行選擇工具並完成多個步驟。
今天則是把專案再整理一下,補上 Gmail 寄信功能與多行任務輸入,接著整合之前實作的功能,完成一次完整的任務測試。
我們之前的 Agent 已經能查詢資料庫、搜尋知識庫和操作檔案,不過如果希望將執行結果交給使用者,還可以加入郵件寄送功能。
因此,這次新增 Gmail MCP Server,透過 send_email Tool 寄送郵件,我們之前已經做過 REST API 的實作,讓 Agent 可以透過 Weather API 取得天氣資訊。這次則沿用類似的整合方式,將 Gmail API 包裝成 MCP Tool,讓 Agent 可以寄送郵件。
Gmail 使用 Google 提供的 Gmail API,需要先完成 Google Cloud 專案設定與 OAuth 授權。這部分在我之前的 n8n 的文章裡面有,可以去翻翻看,不過實際使用的 OAuth 用戶端類型與設定,還是要依照目前 Python 程式的授權流程確認。
設定完成後,就可以讓 Agent 根據任務結果整理郵件內容,再透過 Tool 寄送,不過,寄信會產生實際影響,因此我也保留了高風險操作的確認機制。在執行寄信前,程式會先顯示收件人、主旨與郵件內容,只有輸入 CONFIRM 才會繼續執行。
隨著任務越來越複雜,直接在終端機輸入完整指令也變得不太方便。
因此,我在 main.py 加入多行輸入功能,讓使用者可以直接貼上完整的任務描述,啟動程式後,輸入 multiline,接著就能貼上分段的任務內容,完成後輸入 END,Agent 就會開始執行,如果想取消輸入,則可以輸入 CANCEL。
這個功能主要是改善操作方式,讓複製貼上更輕鬆,不會改變原本 Agent 的任務規劃與工具執行流程。
經過前面幾天的實作,目前的 MCP Agent 已經包含以下功能:
| 功能 | 用途 |
|---|---|
| MCP Tool | 讓 AI 呼叫外部功能 |
| 多個 MCP Server | 整合不同服務與工具 |
| Tool Selection | 根據任務選擇適合的 Tool |
| Agent Loop | 根據工具結果繼續執行 |
| Agent Memory | 保留對話中的相關資訊 |
| RAG | 搜尋自建知識庫 |
| SQLite | 查詢資料庫 |
| File System | 搜尋、讀取與寫入檔案 |
| Resource | 取得 MCP Server 提供的資料 |
| Prompt | 使用可重複利用的提示範本 |
| Sampling | 測試由 MCP Server 請求模型生成內容 |
| 任務規劃 | 將複雜需求拆解成多個步驟 |
| 錯誤處理 | 處理工具失敗與適當重試 |
| 任務紀錄 | 保存執行過程與結果 |
| 安全確認 | 在高風險操作前要求使用者確認 |
| Gmail | 將任務結果寄送給使用者 |
這些功能分別由不同的程式與 MCP Server 負責,再由 Agent 根據使用者的需求進行整合,接下來就用一個完整任務來測試這些功能。
這次的任務是製作一份 CS 系學生的學習分析報告,並將結果寄送到 Gmail,最後查詢任務紀錄,以下是我的任務:
請幫我完成一份 CS 系學生的學習分析報告,請根據實際查詢結果依序完成以下工作:
1. 查詢資料庫中所有 CS 系學生的資料,找出成績低於 60 分的學生,並計算 CS 系學生的平均成績。
2. 到知識庫搜尋與學生學習改善、成績提升相關的建議,整理出適合放進報告的內容。
3. 綜合學生資料與知識庫內容,產生一份完整的學習分析報告,至少包含學生名單、成績分析、需要加強的地方,以及改善建議。
4. 將報告儲存為 sandbox 中的 `final_report.txt`。
5. 確認檔案寫入成功後,整理報告重點,寄送到我的 Gmail ian7ko@gmail.com,主旨為「MCP Agent 專案最終成果報告」,郵件內容包含 CS 系平均成績、不及格學生名單,以及主要改善建議。
請根據工具實際回傳的資料進行分析,不要自行編造數據。如果某個步驟失敗,請先判斷原因,不要直接假裝成功。
寄信前必須顯示收件人、主旨與郵件內容,並等待我明確輸入 `CONFIRM` 才能寄出。若未獲得確認,不得執行寄信。
先使用 multiline 把分段任務放入並執行

Agent 首先呼叫 get_students_by_department,查詢 CS 系學生的資料。

根據查詢結果,Bob 與 David 的成績低於 60 分,而 CS 系學生的平均成績為 69.4 分。
接著,Agent 呼叫 search_knowledge_base 搜尋學習改善相關內容,之後取得學生資料與知識庫搜尋結果後,Agent 呼叫 write_file,將報告儲存為 final_report.txt。


不過這次搜尋到的資料主要是 MCP 與 AI Agent 的介紹,沒有直接提供學生學習策略或成績提升方法,因為我忘記把建議放進 rag 了,所以 Agent 會在報告中如實說明知識庫目前缺乏相關建議,但這還是能看出 Agent 是有正確執行操作的,不影響這次測試。
在我們確認高風險操作後繼續執行寫入final_report.txt,寫入完成後,再呼叫 read_file 讀取檔案,確認報告內容已經成功儲存。


最後,Agent 整理報告重點,準備寄送郵件,在執行 send_email 前,程式顯示了收件人、主旨與郵件內容,並一樣有確認高風險操作的提示

確認後寄信工具成功執行,寄出了郵件

從查詢資料、搜尋知識、產生報告,到確認檔案與寄送郵件,整個任務順利完成,最後查詢一下紀錄

可以看到 Agent 完美執行了本次任務。
今天主要完成了 Gmail 寄信功能與多行任務輸入,並將前面的工具全部整合了,雖然沒辦法靠一個任務把全部功能都展示,但前幾篇有確認過那些工具是否有成功整合,像 resource 和 prompt 之類的,可以不用但不能沒有對吧
透過最後的測試,我們成功讓 Agent 從一段完整的使用者需求出發,依序查詢資料、搜尋知識、產生報告、驗證檔案,最後寄送郵件、查詢任務。
這次測試也讓我確認,目前的專案已經能把多個 MCP 工具串成一個完整的任務流程,至於這 30 天的學習過程、遇到的困難,以及對 MCP 和 AI Agent 的想法,我就留到下一篇再來整理。