Vinc3nt's Life

探索AI數據互操作性:Anthropic的MCP協議實作與挑戰

2024-11-30
develop
claude
ai
model-context-protocal
最後更新:2025-01-26
10分鐘
1811字

這幾天 Claude 開源了 Model Context Protocol,這讓語言模型訪問各式資料變得更容易。本章將簡單介紹這個標準,紀錄實作過程以及遇到的問題。

什麼是 Model Context Protocol

Model Context Protocol (MCP), a new standard for connecting AI assistants to the systems where data lives, including content repositories, business tools, and development environments. Its aim is to help frontier models produce better, more relevant responses.

節錄自 Claude

簡單來說,Model Context Protocol(MCP)是一個由 Anthropic 開發的開放標準,旨在促進大型語言模型(LLM)與外部數據源和工具之間的無縫整合。這個協議的主要目的是提供一個統一的接口,使得 AI 系統能夠更有效地與各種數據系統進行互動,從而簡化 AI 應用的開發和部署過程。

MCP 的主要特點包括:

  • 開放性:MCP 是一個開源協議,任何開發者都可以使用和貢獻,這有助於促進社群的合作與創新。
  • 標準化:通過提供一個統一的標準,MCP 可以取代以往的碎片化整合方式,使得不同的 AI 系統能夠更容易地連接到數據源。
  • 靈活性:MCP 設計上考慮到多種應用場景,能夠支持各種不同的數據格式和接口,這使得開發者能夠根據具體需求進行調整。
  • 增強的互操作性:MCP 的實施可以提高不同 AI 應用之間的互操作性,讓它們能夠共享數據和功能,從而提升整體的效率和效果。

例如,Codeium 是使用 MCP 進行增強開發的公司之一,Windsurf 的 LLM 因此具備穩定的檔案讀寫能力。

MCP 如何運作

MCP 核心採用客戶端伺服器架構,主機應用程式可連線至多台伺服器:

default

  • MCP Host:Claude Desktop、IDE 或 AI 工具等希望透過 MCP 存取資源的程式。
  • MCP Client:與伺服器維持 1:1 連線的通訊協定用戶端。
  • MCP Server:透過標準化的模型上下文通訊協定揭露特定功能的輕量級程式。
  • 本地資源:MCP 伺服器可安全存取的電腦資源(資料庫、檔案、服務)。
  • 遠端資源:MCP 伺服器可連線至網際網路上的可用資源(例如,透過 API)。

MCP Service 是透過 Typescript MCP SDKPython MCP SDK 實現的,這些 SDK 可以用來實現數據存取、文件管理、和資料庫查詢等功能,讓開發者能輕鬆地將 AI 整合到各種應用場景中。

在撰文的當下有以下 MCP Service 可用:

default

官方倉庫可以參考此 Repository

實作

環境

  • OS:Windows 11
  • Terminal:Powershell
  • 專案路徑D:\workspace\claude-mcp-demo\

我們會基於 quick start 進行實作。不過,原 quick start 使用 macOS,而我這裡將使用 Windows 系統進行。macOS 和 Windows 的主要差異在於命令的格式、工具的安裝方式和路徑。

在這個實作中,我們會:

  • 使用 Claude Desktop 作為我們的 MCP Client。
  • 透過 SQLite MCP Server 提供安全的資料庫存取。

前提條件

  • 最新版本的 Claude Desktop
  • Git
  • uv 0.4.18 或更高版本(for SQLite)
  • SQLite

在 Windows 11,可以在 Powershell 執行以下指令來一次安裝:

Terminal window
1
# Using winget
2
winget install --id=Anthropic.Claude -e
3
winget install --id=astral-sh.uv -e
4
winget install git.git sqlite.sqlite

建立資料

開啟 Terminal,建立 test.db

Terminal window
1
@"
2
CREATE TABLE products (
3
id INTEGER PRIMARY KEY,
4
name TEXT,
5
price REAL
6
);
7
8
INSERT INTO products (name, price) VALUES
9
('Widget', 19.99),
10
('Gadget', 29.99),
11
('Gizmo', 39.99),
12
('Smart Watch', 199.99),
13
('Wireless Earbuds', 89.99),
14
('Portable Charger', 24.99),
15
('Bluetooth Speaker', 79.99),
14 collapsed lines
16
('Phone Stand', 15.99),
17
('Laptop Sleeve', 34.99),
18
('Mini Drone', 299.99),
19
('LED Desk Lamp', 45.99),
20
('Keyboard', 129.99),
21
('Mouse Pad', 12.99),
22
('USB Hub', 49.99),
23
('Webcam', 69.99),
24
('Screen Protector', 9.99),
25
('Travel Adapter', 27.99),
26
('Gaming Headset', 159.99),
27
('Fitness Tracker', 119.99),
28
('Portable SSD', 179.99);
29
"@ | sqlite3 ".\test.db"

確認 test.db 是否創建成功:

Terminal window
1
ls
2
###
3
4
Directory: D:\workspace\claude-mcp-demo
5
6
Mode LastWriteTime Length Name
7
---- ------------- ------ ----
8
-a---- 11/29/2024 1:33 AM 8192 test.db

配置 Claude Desktop

開啟 Claude Desktop,進入 Settings 進行設定。

default

default

也可以直接使用以下指令編輯文件:

Terminal window
1
notepad $env:USERPROFILE\AppData\Roaming\Claude\claude_desktop_config.json

新增以下設定,讓 Claude Desktop 可以讀取剛剛建立的 SQLite DB:

1
{
2
"mcpServers": {
3
"sqlite": {
4
"command": "uvx",
5
"args": [
6
"mcp-server-sqlite",
7
"--db-path",
8
"D:/workspace/claude-mcp-demo/test.db"
9
]
10
}
11
}
12
}

重新開啟 Claude Desktop,Claude 會自動開啟 CMD 終端,執行 MCP Server。

等待一段時間,如果連線成功,會在畫面中看到以下內容:

default

default

測試看看:

default

除錯

就這段時間測試下來,除錯可以分為下列三種情境以:

Claude Desktop MCP Client 除錯

使用 Claude Desktop 連線 MCP Server,會在以下位置產生 Log:

Terminal window
1
# 會產生 mcp 為開頭的 log 檔,不過主要 log 在 `mcp.log` 檔案
2
C:\Users\<username>\AppData\Roaming\Claude\logs

如果需要像 Linux 中使用 Tail -f 來持續監看 Log,可以在 Powershell 使用以下命令:

Terminal window
1
Get-Content "$env:USERPROFILE\AppData\Roaming\Claude\logs\mcp.log" -Tail 20 -Wait

Claude Desktop 前端除錯

在 Claude Desktop 中,從選單中開啟開發者模式後,可以使用組合鍵 Ctrl + Shift + Alt + i 呼叫 Developer Tools:

default

MCP Server 除錯

官方提供 Inspector 工具,可以測試如何與 MCP Server 連線,以及該 Server 提供哪些方法。我使用起來感覺缺失的內容還挺多。

如何使用 Inspector

打開 Powershell,使用以下指令執行 Inspector:

Terminal window
1
npx @modelcontextprotocol/inspector

結果如下:

Terminal window
1
Starting MCP inspector...
2
3
🔍 MCP Inspector is up and running at http://localhost:5173 🚀
4
New SSE connection
5
Query parameters: {
6
transportType: 'stdio',
7
command: 'npx',
8
args: '@modelcontextprotocol/server-filesystem D:\\workspace\\claude-mcp-demo',
9
env: '{...}'
10
}
11
[...]

沒有錯誤,代表 Inspector 正在運行。

訪問 http://localhost:5173,Inspector 的畫面如下:

default

讓我們用上面的 SQLite 進行演示。

將指令和參數填入左方的欄位,點擊 Connect:

default

連線成功,就能在右邊畫面進行操作:

default

default

左下欄位會顯示 Error log,也可以當作偵錯的手段之一。

實作:其他資料源

我另外還嘗試使用其他幾個資料源,但它們不是無法使用,就是有些小問題。

filesystem

添加以下內容到 Claude Desktop 設定檔:

1
{
2
"mcpServers": {
3
"filesystem": {
4
"command": "npx",
5
"args": [
6
"-y",
7
"@modelcontextprotocol/server-filesystem",
8
"D:\\workspace\\claude-mcp-demo\\"
9
]
10
}
11
}
12
}

經過查看原始碼和測試,我發現 server-filesystem 只能接受資料夾路徑。

先使用 Inspector 測試連線:

default

連線成功。

但透過 Claude Desktop 連線,儘管 MCP Server 保持運行,Claude MCP Client 依然無法連線:

default

Git

添加以下內容到 Claude Desktop 設定檔:

1
{
2
"mcpServers": {
3
"git": {
4
"command": "uvx",
5
"args": [
6
"mcp-server-git",
7
"--repository",
8
"D:/workspace/vinny987-blog"
9
]
10
}
11
}
12
}

這是我部落格的 git 專案,我們來測試看看。

先使用 Inspector 測試連線,並觀察有什麼方法:

default

看起來有 git_log 可用,切換到 Claude Desktop 進行問答:

default

明明官方的 Readme 有提到可以帶入 Path,但 MCP Server 程式卻沒有載入並紀錄,只能在對話中聲明路徑。

PostgreSQL

我使用之前文章實作中建立的 PostgreSQL,其結構如下:

default

添加以下內容到 Claude Desktop 設定檔:

1
{
2
"mcpServers": {
3
"postgres": {
4
"command": "npx",
5
"args": [
6
"-y",
7
"@modelcontextprotocol/server-postgres",
8
"postgresql://similar_x_user:<password>@127.0.0.1:5432/similar_x_db"
9
]
10
}
11
}
12
}

先使用 Inspector 測試連線,並觀察它的資源:

default

連線成功,也可以正確找到 public 中的 table。

開啟 Claude Desktop ,它也遇到無法連線的問題:

default

總結

MCP 在企業應用、數據存取和文件管理等領域有巨大的潛力,尤其是在簡化 AI 系統與現有工具整合方面。然而,現階段這個標準以及配套的工具還存在不少問題,例如穩定性和互操作性不足。希望官方和社群能加速改進,進一步提升使用體驗和應用範圍。

參考

本文標題:探索AI數據互操作性:Anthropic的MCP協議實作與挑戰
文章作者:Vincent Lin
發布時間:2024-11-30