前面我們從 MCP 的基礎概念開始,逐步實作了不同的 MCP Server,也讓 AI Agent 能夠使用這些工具完成任務。
從最初的 Calculator、File System,到後來加入 SQLite、RAG,我們已經有了不同用途的工具;接著又實作 Agent Loop、Tool Selection、Memory、多步驟任務與錯誤處理,讓 Agent 能夠根據使用者的需求選擇工具,並嘗試完成較複雜的工作。
不過,這些功能是隨著前面的文章逐步建立的。如果希望做出一個真正有用途的 AI 助手,就不能只停留在個別功能的測試,而是要把它們整合起來,建立一個比較完整的專案。
因此,接下來這幾天,我們就以之前完成的功能為基礎,逐步打造自己的 MCP Agent,今天先整理專案架構,統一管理不同的 MCP Server,並加入任務執行紀錄,為後續的任務規劃與整體流程整合做準備。
這次不需要重新實作前面已經完成的 MCP Server,而是直接沿用它們,目前專案會使用四種 MCP Server:
這些工具各自負責不同的工作,而 Agent 則負責理解使用者的需求,並決定什麼時候需要呼叫哪些 Tool,為了避免像之前那樣把所有連線與工具管理的程式都寫在同一個檔案中,我們將專案拆成幾個部分:
| 檔案 | 負責的工作 |
|---|---|
config.py |
設定 MCP Server 路徑與執行限制 |
mcp_manager.py |
建立 Server 連線、整理 Tools、呼叫對應工具 |
agent.py |
與 Gemini 溝通,判斷並執行 Tool Call |
task_logger.py |
記錄任務執行過程與結果 |
main.py |
啟動整個程式並接收使用者輸入 |
這樣拆分之後,每個檔案都有自己的責任。未來即使要新增 MCP Server,也不需要把所有程式重新寫過。
在之前的實作中,我們曾經讓 Client 連接多個 MCP Server。這次則進一步把連線管理集中到 mcp_manager.py。
程式啟動後,MCP Manager 會依照 config.py 的設定,逐一連接 SQLite、Calculator、RAG 與 File System,並取得各個 Server 提供的 Tools。
接著,Agent 就能透過統一的介面呼叫工具,而不需要自己處理每個 Server 的連線細節,這裡並不是重新發明一套工具呼叫機制,而是把之前已經完成的功能整理成更容易管理的架構。
當多個 Server 都整合完成後,我們還需要知道 Agent 執行任務時實際做了什麼,例如,Agent 呼叫了哪個 Tool?工具是否成功執行?如果發生錯誤,又該如何追查?
因此,這次加入 task_logger.py,用來記錄任務內容、Tool 名稱、執行狀態與回傳結果。每次 Agent 呼叫 Tool 後,就將結果交給 Logger 記錄;當任務結束,程式便會整理出執行摘要,統計成功與失敗的次數。
這讓我們除了能看到 Agent 最後的回答,也能檢查它在過程中實際呼叫了哪些工具,以及工具回傳了什麼結果。
完成整合後,我先確認四個 MCP Server 都能正常連線,並測試不同工具是否可以透過 MCP Manager 呼叫

接著讓 Agent 執行一個簡單的資料查詢任務,請查詢 CS 系的學生名單,列出每位學生的姓名與成績。


可以看到 Agent 成功選擇 SQLite 的 get_students_by_department,取得學生資料後,再交由 Gemini 整理成文字回答,任務結束時,程式也會顯示執行摘要,記錄這次使用的 Tool、執行狀態與回傳結果。
這代表原本分散在不同實作中的 MCP Server,現在已經可以由同一個 Agent 統一使用,而且每次 Tool 呼叫也有對應的執行紀錄。
我們將 MCP Server 連線管理、Agent 執行流程與任務紀錄分開處理,讓整體架構更清楚,也更方便後續擴充。
目前 Agent 已經可以使用多個 MCP Server 完成任務,但如果任務變得更複雜,仍然需要進一步改善任務規劃、執行狀態管理與結果驗證,接下來,我們會繼續完善這個專案,讓 Agent 不只會選擇工具,也能更有條理地規劃與追蹤任務。