上一篇我們讓 MCP Server 可以透過 REST API 取得外部的天氣資料,也慢慢累積了幾個不同用途的 MCP Server。
到目前為止,我們已經有:
那如果今天我希望一個 Client 同時使用這些 MCP Server 呢?
這篇就來實際做看看。
如果只有一個 MCP Server,其實直接連線就可以了,但實際使用時,很可能會遇到這種情況:
┌─ File System MCP
│
Client ───────┼─ SQLite MCP
│
└─ Weather MCP
每個 MCP Server 負責不同的事情。
例如:
Client 不需要把這些功能全部寫在同一個 Server 裡,而是可以分別連接不同的 MCP Server,這也是 MCP 很重要的一個特點。
我們先建立一個簡單的 Client,讓它同時連接:
流程大概是:
multi_client.py
│
├── File System MCP
│
└── SQLite MCP
Client 會完成三件事情:
這次在 day12 裡建立 multi_client.py,我這裡有把之前做過的內容分開放在不同的資料夾,所以這次會需要使用 day8、day10,以及今天的 day12。
專案結構大概會變成:
mcp-learning/
├─ day8/
│ ├─ sandbox/
│ └─ file_server.py
│
├─ day10/
│ ├─ sqlite_server.py
│ └─ students.db
│
└─ day12/
└─ multi_client.py
接著在 multi_client.py 裡建立 MCP Client,並設定要連接的兩個 MCP Server,以下是這次的程式碼



這裡我們使用 StdioServerParameters 設定每個 MCP Server 的啟動方式,另外也設定了 cwd,讓每個 Server 都可以在自己的資料夾中執行。這一點對我們目前的專案很重要,因為 File System MCP 的 sandbox 和 SQLite MCP 的 students.db 都放在各自的資料夾裡。
接著使用 stdio_client() 分別建立兩個連線,第一個連接 File System MCP,第二個連接 SQLite MCP。這樣同一個 Client 就可以同時和兩個不同的 MCP Server 溝通。
知道有哪些 Tool 之後,就可以直接呼叫。
這次我們實際測試:
list_files
get_students
打開終端機,在day12的目錄下執行python multi_client.py

可以看到兩個 Server 的 Tool,以及各自回傳的結果,這就代表我們已經成功讓一個 Client 同時使用兩個 MCP Server。
之前我們的使用方式比較像:
Client
↓
一個 MCP Server
↓
多個 Tools
這次則變成:
┌─ File System MCP
│ ├─ list_files
│ ├─ search_files
Client ──────────┤ └─ read_file
│
└─ SQLite MCP
├─ get_students
└─ get_students_by_department
也就是一個 Client,可以同時連接多個 MCP Server,而每個 Server 又可以提供自己的 Tools。
這樣不同功能就可以分開管理,而不是全部塞進同一個 MCP Server。
今天我們實際建立了一個 MCP Client,讓它同時連接 File System MCP 和 SQLite MCP,並分別取得與呼叫兩個 Server 提供的 Tools。
這次實作也讓我比較清楚看到,MCP Server 不一定要把所有功能放在一起,而是可以把不同功能拆成不同的 Server,再由 Client 統一連接。當之後的 Tool 越來越多時,這種方式也會比較容易管理。