本文將為你介紹 Anthropic 於 2024 年末在其官方部落格上提出的一項重要概念:模型上下文協定(Model Context Protocol,MCP)。你將可以了解 MCP 的核心概念、重要性以及其應用方式。無論是開發者還是非開發者都適合閱讀,讓你初步掌握 MCP 的基礎知識。
什麼是 MCP 協定?
根據 MCP 技術文件的解釋,MCP 可以被簡單地定義為:一種標準化的方式,讓AI模型連結到不同資料來源和工具。從概念上來說,MCP 就像電腦上的 USB-C 連接阜,可以讓電腦連結並使用不同的裝置擴增自身能力,例如 HDMI 轉接器或 10 Gbps 高速乙太網路轉接器。
圖片來源:What is Model Context Protocol (MCP)?
MCP 核心模組
MCP 協定提出了一種由三個模組組合而成的架構,讓AI模型使用外部工具和存取外部資料。這三個模組分別為:
- MCP 載體(MCP Host):支持 MCP 協定的應用程式,例如 Claude Desktop 或安裝了 Cline 的 Visual Studio Code。基本上,它就是一個 AI Agent,使用者會對它發出任務請求。
- MCP 客戶端(MCP Client):向 AI 模型詢問何種工具適合解決使用者的需求,並向 MCP 伺服端發出對應的任務請求。
- MCP 伺服端(MCP Server):根據 MCP 客戶端傳遞的參數,具體執行任務,並且回傳結果。一個MCP伺服端會包含多個工具,因此一個MCP伺服端就是一組特定的工具集,用來完成特定的任務。例如,SQLite MCP Server包含了一系列的工具,允許對資料庫進行各種操作,包含:資料的增加、刪除、修改和查詢。在概念上, 每個工具都可以被視為是一個獨立的函式,如函式呼叫(Function Calling)機制中的函式。這些工具可以被 MCP 客戶端調用,以完成特定的任務和操作。
從上面的架構圖可以看出,MCP 協定主要涉及到 MCP 客戶端和 MCP 伺服端之間的交互,而不包含 MCP 客戶端與 AI 模型之間的協作細節。這個架構提供了一種靈活和模組化的方式,讓 AI 模型可以輕鬆地連結到不同的資料來源和工具,從而擴增其能力。
MCP 模組協作流程
下面是 MCP 載體、MCP 客戶端、MCP 伺服端和 AI 模型如何共同合作來滿足使用者需求的詳細流程:
- 使用者輸入:MCP 客戶端接收到 MCP 載體的使用者輸入,例如,
現在幾點了?
。 - 工具列表說明:MCP 客戶端將使用者輸入和 MCP 伺服端的工具列表傳給 AI 模型,讓其決定使用哪一個工具或不使用。
- AI 模型建議:AI 模型會跟 MCP 客戶端建議使用哪一個工具,例如 MCP 伺服端中的
get_current_time
工具。如果 AI 模型沒有建議使用任何的工具,就會直接跳到步驟八。 - 工具執行請求__:MCP 客戶端請求 MCP 伺服端執行
get_current_time
工具。 - 執行結果:MCP 伺服端回傳當前時間給 MCP 客戶端。
- 結果傳遞:把當前時間和先前所有的使用者輸入傳給 AI 模型。
- AI 模型整合輸出結果:AI 模型整合使用者需求和當前時間,把總結的結果回傳給 MCP 客戶端,例如,
現在是標準時間下午15:30
。 - 結果顯示:MCP 客戶端把結果再傳給 MCP 載體,讓它顯示給使用者看。
MCP 的重要性
MCP 是一個革命性的技術,主要在幫助開發者連結 AI 模型與外部工具和資料。它提供了三個主要好處:
- 彈性擴充:MCP 允許開發者建構一個可以彈性擴充的 AI Agent,讓外部工具和資料成為一個又一個的獨立模組。這使得開發者可以輕鬆地添加或移除功能,從而提高 AI Agent 的靈活性和可擴充性。
- AI 模型低耦合性:MCP 提供了一種通用的方式,讓開發者可以自由更換各種 AI 模型,而不需要特定模型的支援。這使得開發者可以選擇最適合的AI模型,從而提高 AI Agent 的性能和準確性。
- 安全性和最佳實踐:MCP 提供了各種最佳實踐,幫助開發者開發可安全運行的 AI Agent,保護資料安全,也確保外部工具不會造成使用者的危害。這使得開發者可以信心地部署 AI Agent,從而提高使用者的信任和滿意度。
MCP 是一個強大的工具,能夠幫助開發者打造更聰明、更安全和更靈活的 AI Agent。
上手 MCP:AI 模型存取資料庫
我們將展示如何使用 MCP 讓 AI 模型存取資料庫。為了方便示範,我們將使用 Northwind 範例資料庫,一個名為 Northwind 的食品公司的資料庫,包含其員工、客戶、產品以及與客戶的交易紀錄。你可以在這裡下載這個資料庫。
我們需要進行以下的步驟讓 MCP 載體去連結一個 MCP Server:
- 安裝 Visual Studio Code:這是一個 MCP 載體。
- 安裝 Cline 插件:這個插件有內建 MCP 客戶端,可以去呼叫 MCP 伺服端的工具。
- 設定 Cline 插件的 AI 模型:讓 Cline 可以去驅動 AI 模型。
- 安裝 SQLite MCP Server:提供資料庫存取的功能。
- 設定 SQLite MCP Server:讓資料庫可以透過 MCP 協定被 AI 模型存取。
由於步驟一至步驟三是常規的操作,這裡不再復述,我們將著重說明步驟四和步驟五。下面,我們將詳細介紹如何安裝和設定 SQLite MCP Server。
安裝 SQLite MCP Server
在開始安裝 SQLite MCP Server 之前,請確保你的本地環境已經安裝 Python 3.10 或更高的版本,以及 Python 套件管理工具 uv
。你可以使用以下指令在 MacOS 或 Linux 上安裝 uv
:
curl -LsSf https://astral.sh/uv/install.sh | sh
這將確保你的環境已準備好安裝 SQLite MCP Server。
下一步,下載名為 servers
的程式碼倉庫(Repository),其包含多個 MCP server。假設你有一個名為 mcp
的資料夾,位於 /Users/id/path/to/mcp
。請點擊 Download ZIP 下載其 zip 檔案,並解壓縮至 /Users/id/path/to/mcp/servers-main
。你可以在 /Users/id/path/to/mcp/servers-main/src/sqlite
資料夾找到 SQLite MCP Server 專案,這個資料夾包含了 SQLite MCP Server 的相關程式碼和資源。
設定 SQLite MCP Server
在設置 SQLite MCP Server 之前,先下載 Northwind 資料庫到你覺得適合的地方。方便起見,我會把它下載到 /Users/id/path/to/mcp/servers-main/src/sqlite
,跟 SQLite MCP Server 同一個資料夾。
接下來至 Visual Studio Code 的 Cline 設定 SQLite MCP Server。選擇 Cline 頁面並且點擊上緣工具列中的 MCP Servers,再把下面的設定加入 cline_mpc_settings.json
設定檔中的 mcpServers
屬性中即可。
{
"sqlite": {
"disabled": false,
"timeout": 60,
"command": "uv",
"args": [
"--directory",
"/Users/id/path/to/mcp/servers-main/src/sqlite",
"run",
"mcp-server-sqlite",
"--db-path",
"/Users/id/path/to/mcp/servers-main/src/sqlite/northwind.db"
],
"transportType": "stdio"
}
}
如果設置成功的話,sqlite 旁的綠燈就會亮起,如下圖。
自然語言查詢資料庫
傳統來說,要查詢關聯式資料庫都需要使用 SQL 語言。進行複雜查詢時,即使是軟體開發人員,如果缺乏足夠的經驗,也需要查閱 SQL 技術文件以拼湊出正確的 SQL 語句。在 Agentic AI 的時代,搭配對應的 MCP Server,任何人都可以用簡單的自然語言清楚地描述自己需要什麼樣的資料,AI 就會幫忙寫出對應的 SQL 查詢語句,並把執行結果直接回傳給使用者查看,非常方便簡單。
現在,我們來進行一個稍微複雜的 SQL 查詢。假設我們想要了解 Northwind 公司 2021 年至 2022 年的成長狀況,我們可以請求 AI 列出 Northwind 公司相較於前一年度於 2022 年度總銷售額成長度最高的三樣產品,並顯示該年度的成長比例和總銷售額
。
AI 模型根據上述的提示詞生成一個複雜的 SQL 查詢語句。以下這個語句超過 1,000 個字元,難以用人工撰寫:
SELECT
p.ProductName,
CASE
WHEN SUM(CASE WHEN strftime('%Y', o.OrderDate) = '2021' THEN od.UnitPrice * od.Quantity * (1 - od.Discount) ELSE 0 END) = 0 THEN NULL -- Avoid division by zero, handle infinite growth separately if needed
ELSE ((SUM(CASE WHEN strftime('%Y', o.OrderDate) = '2022' THEN od.UnitPrice * od.Quantity * (1 - od.Discount) ELSE 0 END) - SUM(CASE WHEN strftime('%Y', o.OrderDate) = '2021' THEN od.UnitPrice * od.Quantity * (1 - od.Discount) ELSE 0 END)) * 100.0 / SUM(CASE WHEN strftime('%Y', o.OrderDate) = '2021' THEN od.UnitPrice * od.Quantity * (1 - od.Discount) ELSE 0 END))
END AS GrowthPercentage,
SUM(CASE WHEN strftime('%Y', o.OrderDate) = '2022' THEN od.UnitPrice * od.Quantity * (1 - od.Discount) ELSE 0 END) AS TotalSales2022
FROM Orders AS o
JOIN "Order Details" AS od ON o.OrderID = od.OrderID
JOIN Products AS p ON od.ProductID = p.ProductID
WHERE strftime('%Y', o.OrderDate) IN ('2021', '2022')
GROUP BY p.ProductID, p.ProductName
HAVING SUM(CASE WHEN strftime('%Y', o.OrderDate) = '2022' THEN od.UnitPrice * od.Quantity * (1 - od.Discount) ELSE 0 END) > 0 -- Only include products with sales in 2022
ORDER BY GrowthPercentage DESC
LIMIT 3;
然後自動執行生成的 SQL 語句,並顯示結果給使用者,如下:
相較於前一年度,Northwind 公司於 2022 年度總銷售額成長度最高的三樣產品如下:
1. Louisiana Fiery Hot Pepper Sauce: 成長比例: 6.02%, 2022 年總銷售額: 391403.7
2. Schoggi Schokolade: 成長比例: 4.79%, 2022 年總銷售額: 842353.2
3. Filo Mix: 成長比例: 4.59%, 2022 年總銷售額: 130102.0
總結
- 標準化工具使用方式:MCP 協定提供了一種標準化的方式,讓 AI 模型可以連結到不同資料來源和工具。
- 彈性擴充和安全運行:MCP 協定幫助開發者建構可彈性擴充、更換模組並安全運行的 AI 代理人。
- 簡化資料庫查詢:利用 SQLite MCP Server,使用者可以用簡單的自然語言替代極其複雜的 SQL 查詢語句,大大增加資料分析的效率。