MCP 協議入門與實戰指南 2026:讓 AI 連接萬物
2024 年 11 月,Anthropic 發佈了一個開源協議——Model Context Protocol(MCP)。短短一年多時間,它已經從一個概念草案成長為 AI 工具集成領域的事實標準。到 2026 年中,MCP 生態已覆蓋 3000+ 個 Server,被 Claude Desktop、Cursor、VS Code、Zed 等主流 AI 客戶端原生支持,OpenAI 和 Google 也先後宣佈兼容 MCP 協議。
一句話理解 MCP:它就像是 AI 世界的「USB-C 接口」——不管你的數據在文件系統、數據庫、GitHub 還是瀏覽器裡,只要裝上對應的 MCP Server,AI 就能直接讀取和操作,不需要為每個工具單獨寫集成代碼。
如果你已經在使用 Claude 或 Ollama 本地大模型,但苦於 AI 只能「聊天」而不能「幹活」,那麼 MCP 就是你需要的最後一塊拼圖。本文將帶你從概念理解到實戰部署,完整掌握 MCP 的使用方法。
目錄
- MCP 是什麼:協議背景與核心概念
- 為什麼需要 MCP:傳統方案的侷限
- 環境準備:MCP 客戶端選擇與安裝
- 常用 MCP Server 實戰配置
- 本地部署 MCP Server:兩種傳輸模式
- 自定義 MCP Server 開發:從零搭建
- MCP + Ollama:讓本地大模型也能用工具
- 安全注意事項:權限控制與沙箱隔離
- MCP 生態展望:2026 年社區發展
- 常見問題與故障排查
一、 MCP 是什麼:協議背景與核心概念
1.1 協議背景
在 MCP 出現之前,讓 AI 訪問外部工具和數據源是一件很碎片化的事情:
- OpenAI 有 Function Calling,但每個工具的 schema 需要手寫,切換模型就要重寫
- Anthropic 有 Tool Use,但格式與 OpenAI 不同,生態不互通
- Google 有 Gemini Function Calling,又是一套獨立的格式
- 開發者要為 Claude、GPT、Gemini 分別維護不同的工具集成代碼
Anthropic 提出 MCP 的初衷,就是標準化 AI 與外部工具的連接方式——就像 HTTP 標準化了 Web 通信、LSP(Language Server Protocol)標準化了代碼編輯器與語言服務器的通信一樣,MCP 標準化了 AI 模型與數據源/工具之間的通信。
1.2 核心架構
MCP 採用經典的 Client-Server 架構:
┌─────────────────┐ ┌─────────────┐ ┌─────────────────┐
│ MCP Client │────▶│ MCP Server │────▶│ 數據源 / 工具 │
│ (AI 應用端) │◀────│ (中間層) │◀────│ (文件/DB/API) │
└─────────────────┘ └─────────────┘ └─────────────────┘
Claude Desktop filesystem 本地文件系統
Cursor github GitHub API
VS Code sqlite SQLite 數據庫
Zed puppeteer 瀏覽器自動化| 概念 | 說明 | 類比 |
|---|---|---|
| MCP Client | AI 應用端,負責發起請求、接收工具調用結果 | 瀏覽器 |
| MCP Server | 中間層程序,封裝具體工具的操作邏輯 | Web 服務器 |
| Transport | Client 與 Server 之間的通信方式 | HTTP / WebSocket |
| Tool | Server 暴露給 Client 的可調用函數 | API 端點 |
| Resource | Server 暴露給 Client 的可讀取數據 | 靜態資源 |
| Prompt | Server 預定義的提示詞模板 | 頁面模板 |
1.3 三大核心能力
MCP Server 可以向 Client 暴露三種類型的能力:
1. Tools(工具調用)
AI 主動調用,執行操作並返回結果
例:執行 SQL 查詢、創建 GitHub Issue、截取網頁截圖2. Resources(資源讀取)
AI 讀取數據源中的內容
例:讀取本地文件、獲取數據庫表結構、列出目錄文件3. Prompts(提示詞模板)
Server 預設的提示詞,用戶可選擇應用
例:代碼審查提示詞、SQL 優化提示詞💡 關鍵理解:MCP Server 本身不包含 AI 模型,它只是一個「工具中間層」。AI 推理仍然在 Client 端(如 Claude Desktop)完成,Server 只負責執行具體的工具調用並返回結果。
二、 為什麼需要 MCP:傳統方案的侷限
2.1 傳統 Function Calling 的痛點
| 痛點 | 說明 |
|---|---|
| 🔴 協議碎片化 | OpenAI、Anthropic、Google 各有各的 Function Calling 格式,工具代碼不通用 |
| 🔴 重複開發 | 同一個「查天氣」功能,要為 Claude、GPT、Gemini 分別寫三遍 |
| 🔴 無狀態管理 | 每次調用都是獨立的,無法維持連接狀態(如數據庫會話) |
| 🔴 無標準化發現機制 | Client 不知道 Server 有哪些工具,需要硬編碼 |
| 🔴 部署不靈活 | 工具代碼和 AI 應用耦合在一起,無法獨立部署和複用 |
2.2 MCP 的標準化優勢
| 優勢 | 說明 |
|---|---|
| 🟢 一次開發,處處可用 | 寫一個 MCP Server,所有支持 MCP 的 Client 都能用 |
| 🟢 協議統一 | 不管底層 AI 模型是 Claude、GPT 還是 Gemini,MCP 格式完全一致 |
| 🟢 動態發現 | Client 連接 Server 後自動發現可用工具,無需硬編碼 |
| 🟢 獨立部署 | Server 是獨立進程,可以單獨更新、重啟,不影響 AI 應用 |
| 🟢 雙向通信 | Server 可以主動推送通知給 Client(SSE 模式) |
| 🟢 生態複用 | 社區共享 Server,不需要重複造輪子 |
2.3 MCP vs OpenAI Plugins vs Function Calling
| 對比維度 | MCP | OpenAI Plugins (已棄用) | Function Calling |
|---|---|---|---|
| 協議標準 | ✅ 開放標準 | ❌ OpenAI 私有 | ❌ 各廠商不同 |
| 跨模型兼容 | ✅ 所有支持 MCP 的 Client | ❌ 僅 ChatGPT | ❌ 各自格式 |
| 部署方式 | 本地 / 遠程均可 | 僅雲端 | 嵌入應用代碼 |
| 工具發現 | 自動發現 | 需註冊到 OpenAI | 手動註冊 |
| 狀態管理 | ✅ 支持有狀態 | ❌ 無狀態 | ❌ 無狀態 |
| 社區生態 | 3000+ Server | 已停止維護 | 各自為政 |
| 安全性 | 本地運行,可控 | 雲端運行,不可控 | 取決於實現 |
📊 結論:OpenAI Plugins 已在 2025 年停止維護,Function Calling 仍然是各廠商的基礎能力,但 MCP 已經成為 AI 工具集成的標準協議層,建立在 Function Calling 之上。
三、 環境準備:MCP 客戶端選擇與安裝
3.1 MCP 客戶端一覽(2026 年中)
| 客戶端 | 平臺 | MCP 支持 | 推薦度 | 說明 |
|---|---|---|---|---|
| Claude Desktop | macOS / Windows | ✅ 原生 | ⭐⭐⭐⭐⭐ | Anthropic 官方客戶端,MCP 支持最完善 |
| Cursor | macOS / Windows / Linux | ✅ 原生 | ⭐⭐⭐⭐⭐ | AI 代碼編輯器,MCP 與代碼工作流深度整合 |
| VS Code + Continue | 全平臺 | ✅ 通過 Continue 插件 | ⭐⭐⭐⭐ | 通用 IDE 方案,配置靈活 |
| Zed | macOS / Linux | ✅ 原生 | ⭐⭐⭐⭐ | 高性能代碼編輯器,MCP 原生支持 |
| Cline | VS Code 插件 | ✅ 原生 | ⭐⭐⭐⭐ | 自主編程 Agent,MCP 支持完善 |
| Windsurf | 全平臺 | ✅ 原生 | ⭐⭐⭐ | Codeium 出品的 AI IDE |
| 5ire | macOS / Windows | ✅ 原生 | ⭐⭐⭐ | 通用 MCP 客戶端,不限於編程 |
3.2 Claude Desktop 安裝與配置
Claude Desktop 是體驗 MCP 最簡單的方式,適合非開發者用戶。
# macOS 安裝
brew install --cask claude
# 或從官網下載
# https://claude.ai/download配置 MCP Server:
Claude Desktop 的 MCP 配置文件位於:
# macOS
~/Library/Application Support/Claude/claude_desktop_config.json
# Windows
%APPDATA%\Claude\claude_desktop_config.json基礎配置模板:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/yourname/Documents",
"/Users/yourname/Projects"
]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token_here"
}
}
}
}⚠️ 注意:修改配置文件後需要完全退出並重啟 Claude Desktop(不只是關閉窗口,要從托盤菜單退出),MCP Server 才會生效。
3.3 Cursor 配置 MCP
Cursor 是目前 MCP 在編程場景下體驗最好的客戶端。
步驟 1:打開 Cursor → Settings → Cursor Settings → MCP
步驟 2:點擊「+ Add MCP Server」
步驟 3:填寫 Server 配置:
- Name: filesystem
- Type: stdio
- Command: npx -y @modelcontextprotocol/server-filesystem /path/to/dir
步驟 4:保存後,Cursor 會自動啟動 Server
步驟 5:在 Chat 模式中,AI 會自動使用可用的 MCP 工具Cursor 也支持直接編輯 ~/.cursor/mcp.json 配置文件:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "${workspaceFolder}"]
}
}
}3.4 VS Code + Continue 配置 MCP
// ~/.continue/config.json
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
}
}
]
}
}3.5 前置環境準備
無論使用哪個客戶端,運行 MCP Server 都需要以下環境:
# 1. Node.js 18+(大部分 MCP Server 基於 Node.js)
node --version # 確認版本 >= 18
# 2. Python 3.10+(部分 MCP Server 基於 Python)
python3 --version # 確認版本 >= 3.10
# 3. uv(Python MCP Server 的包管理器,推薦安裝)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 4. Git(GitHub MCP Server 需要)
git --version💡 國內用戶提示:如果
npx下載 MCP Server 包速度慢,可以設置國內鏡像:bashnpm config set registry https://registry.npmmirror.com
四、 常用 MCP Server 實戰配置
4.1 Filesystem(文件系統訪問)
最常用的 MCP Server,讓 AI 可以讀取、寫入、搜索本地文件。
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/yourname/Documents",
"/Users/yourname/Projects"
]
}
}
}暴露的工具:
| 工具 | 功能 |
|---|---|
read_file | 讀取指定文件內容 |
read_multiple_files | 批量讀取多個文件 |
write_file | 寫入文件(覆蓋) |
create_directory | 創建目錄 |
list_directory | 列出目錄內容 |
move_file | 移動/重命名文件 |
search_files | 遞歸搜索文件 |
get_file_info | 獲取文件元信息 |
list_allowed_directories | 列出允許訪問的目錄 |
⚠️ 安全提示:只配置你需要 AI 訪問的目錄,不要配置根目錄
/或用戶主目錄,避免 AI 讀取敏感文件。
4.2 GitHub(倉庫管理)
讓 AI 可以搜索倉庫、讀取文件、創建 Issue、管理 PR。
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token_here"
}
}
}
}獲取 GitHub Token:
步驟 1:訪問 https://github.com/settings/tokens
步驟 2:點擊「Generate new token (classic)」
步驟 3:勾選權限:repo, read:org, read:user
步驟 4:生成後複製 token,填入配置暴露的工具:
| 工具 | 功能 |
|---|---|
search_repositories | 搜索 GitHub 倉庫 |
get_file_contents | 獲取倉庫文件內容 |
create_issue | 創建 Issue |
create_pull_request | 創建 PR |
fork_repository | Fork 倉庫 |
create_branch | 創建分支 |
list_commits | 列出提交記錄 |
get_pull_request_status | 獲取 PR 狀態 |
4.3 SQLite(數據庫查詢)
讓 AI 可以直接查詢本地 SQLite 數據庫。
{
"mcpServers": {
"sqlite": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "/path/to/your/database.db"]
}
}
}暴露的工具:
| 工具 | 功能 |
|---|---|
read_query | 執行 SELECT 查詢 |
write_query | 執行 INSERT/UPDATE/DELETE |
list_tables | 列出所有表 |
describe_table | 查看錶結構 |
create_table | 創建新表 |
使用場景示例:
你:幫我看看數據庫裡有哪些表,然後查一下 users 表最近 10 條記錄
AI(自動調用 MCP):
1. 調用 list_tables → 獲取表列表
2. 調用 describe_table("users") → 瞭解表結構
3. 調用 read_query("SELECT * FROM users ORDER BY id DESC LIMIT 10")
4. 返回查詢結果並格式化展示4.4 PostgreSQL(PostgreSQL 數據庫)
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://user:password@localhost:5432/dbname"]
}
}
}⚠️ 安全建議:使用只讀數據庫用戶,避免 AI 執行危險的寫操作:
sqlCREATE USER mcp_readonly WITH PASSWORD 'your_password'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;
4.5 Brave Search(網絡搜索)
讓 AI 可以進行實時網絡搜索。
{
"mcpServers": {
"brave-search": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
"env": {
"BRAVE_API_KEY": "your_brave_api_key_here"
}
}
}
}獲取 Brave API Key:
步驟 1:訪問 https://brave.com/search/api/
步驟 2:註冊賬號,選擇 Free 計劃(每月 2000 次免費查詢)
步驟 3:在 Dashboard 中複製 API Key4.6 Puppeteer(瀏覽器自動化)
讓 AI 可以控制瀏覽器,截圖、填表、抓取網頁內容。
{
"mcpServers": {
"puppeteer": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-puppeteer"]
}
}
}暴露的工具:
| 工具 | 功能 |
|---|---|
navigate | 導航到指定 URL |
screenshot | 截取當前頁面截圖 |
click | 點擊頁面元素 |
fill | 填寫表單 |
evaluate | 執行 JavaScript |
get_page_content | 獲取頁面 HTML 內容 |
4.7 常用 Server 配置速查表
| Server | npm 包名 | 需要的憑證 | 核心功能 |
|---|---|---|---|
| Filesystem | @modelcontextprotocol/server-filesystem | 無 | 文件讀寫 |
| GitHub | @modelcontextprotocol/server-github | GitHub Token | 倉庫管理 |
| SQLite | @modelcontextprotocol/server-sqlite | 無 | 數據庫查詢 |
| PostgreSQL | @modelcontextprotocol/server-postgres | 數據庫連接串 | 數據庫查詢 |
| Brave Search | @modelcontextprotocol/server-brave-search | Brave API Key | 網絡搜索 |
| Puppeteer | @modelcontextprotocol/server-puppeteer | 無 | 瀏覽器自動化 |
| Memory | @modelcontextprotocol/server-memory | 無 | 知識圖譜記憶 |
| Fetch | @modelcontextprotocol/server-fetch | 無 | HTTP 請求 |
| Time | @modelcontextprotocol/server-time | 無 | 時間日期查詢 |
| Sequential Thinking | @modelcontextprotocol/server-sequential-thinking | 無 | 分步推理 |
五、 本地部署 MCP Server:兩種傳輸模式
MCP 支持兩種傳輸模式,適用於不同場景:
5.1 stdio 模式(本地進程)
最常用的模式。Client 啟動 Server 作為子進程,通過標準輸入/輸出通信。
┌───────────┐ stdin/stdout ┌───────────┐
│ Client │◄──────────────▶│ Server │
│ (主進程) │ (JSON-RPC) │ (子進程) │
└───────────┘ └───────────┘優點:
- 配置簡單,無需網絡端口
- 性能高,無網絡開銷
- 安全性好,通信不經過網絡
缺點:
- 僅限本地使用
- Client 關閉則 Server 也終止
配置方式(以 Claude Desktop 為例):
{
"mcpServers": {
"my-server": {
"command": "node",
"args": ["/path/to/my-server/index.js"]
}
}
}5.2 SSE 模式(遠程服務)
Client 通過 HTTP Server-Sent Events 與遠程 Server 通信。
┌───────────┐ HTTP POST ┌───────────┐
│ Client │───────────────▶│ Server │
│ │ SSE Response │ (HTTP) │
│ │◀───────────────│ │
└───────────┘ └───────────┘優點:
- 支持遠程部署,多客戶端共享
- Server 可獨立運行,不依賴 Client
- 支持負載均衡和水平擴展
缺點:
- 需要網絡配置
- 需要考慮安全性(認證、加密)
配置方式:
{
"mcpServers": {
"remote-server": {
"url": "https://my-server.example.com/sse"
}
}
}部署 SSE Server 示例:
// server.js - 基於 Express 的 SSE MCP Server
import express from 'express';
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { SSETransport } from '@modelcontextprotocol/sdk/server/sse.js';
const app = express();
const server = new McpServer({
name: "my-remote-server",
version: "1.0.0"
});
// 註冊工具
server.tool("ping", {}, async () => ({
content: [{ type: "text", text: "pong" }]
}));
app.get('/sse', async (req, res) => {
const transport = new SSETransport('/messages', res);
await server.connect(transport);
});
app.post('/messages', async (req, res) => {
// 處理 Client 發來的消息
});
app.listen(3001, () => {
console.log('MCP SSE Server running on http://localhost:3001/sse');
});5.3 兩種模式選擇建議
| 場景 | 推薦模式 | 原因 |
|---|---|---|
| 個人本地使用 | stdio | 簡單、安全、高性能 |
| 團隊共享 Server | SSE | 一處部署,多人使用 |
| 需要長時間運行的任務 | SSE | 不依賴 Client 進程 |
| 訪問本地文件/數據庫 | stdio | 避免網絡暴露敏感數據 |
| 訪問遠程 API | SSE | 部署在服務器端更穩定 |
| 開發調試 | stdio | 快速迭代,無需部署 |
六、 自定義 MCP Server 開發:從零搭建
6.1 Node.js MCP Server 開發
以一個「天氣查詢」Server 為例,教你從零開發 MCP Server。
步驟 1:初始化項目
mkdir weather-mcp-server && cd weather-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk步驟 2:編寫 Server 代碼
// index.js
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
// 創建 MCP Server 實例
const server = new McpServer({
name: "weather-server",
version: "1.0.0"
});
// 註冊工具:獲取當前天氣
server.tool(
"get_weather",
"獲取指定城市的當前天氣信息",
{
city: z.string().describe("城市名稱,如:北京、上海、東京"),
unit: z.enum(["celsius", "fahrenheit"]).optional().describe("溫度單位")
},
async ({ city, unit }) => {
// 這裡替換為真實的天氣 API 調用
// 示例使用模擬數據
const weatherData = {
city: city,
temperature: unit === "fahrenheit" ? 72 : 22,
condition: "晴",
humidity: 45,
wind: "微風 3km/h",
updated: new Date().toISOString()
};
return {
content: [{
type: "text",
text: `📍 ${city} 當前天氣\n🌡️ 溫度: ${weatherData.temperature}°${unit === "fahrenheit" ? "F" : "C"}\n🌤️ 天氣: ${weatherData.condition}\n💧 溼度: ${weatherData.humidity}%\n🌬️ 風力: ${weatherData.wind}\n🕐 更新時間: ${weatherData.updated}`
}]
};
}
);
// 註冊工具:獲取天氣預報
server.tool(
"get_forecast",
"獲取指定城市未來 3 天天氣預報",
{
city: z.string().describe("城市名稱"),
days: z.number().min(1).max(7).optional().describe("預報天數,默認 3 天")
},
async ({ city, days = 3 }) => {
const forecast = Array.from({ length: days }, (_, i) => {
const date = new Date();
date.setDate(date.getDate() + i + 1);
return {
date: date.toISOString().split('T')[0],
high: 20 + Math.floor(Math.random() * 10),
low: 10 + Math.floor(Math.random() * 5),
condition: ["晴", "多雲", "陰", "小雨"][Math.floor(Math.random() * 4)]
};
});
const text = forecast.map(f =>
`📅 ${f.date}: ${f.condition} ${f.low}°C ~ ${f.high}°C`
).join('\n');
return {
content: [{ type: "text", text: `📍 ${city} 未來 ${days} 天預報\n\n${text}` }]
};
}
);
// 啟動 Server
const transport = new StdioServerTransport();
await server.connect(transport);步驟 3:配置到 Claude Desktop
{
"mcpServers": {
"weather": {
"command": "node",
"args": ["/absolute/path/to/weather-mcp-server/index.js"]
}
}
}步驟 4:測試
重啟 Claude Desktop 後,在對話中輸入:
你:幫我查一下北京今天的天氣,還有未來 3 天的預報
AI(自動調用 MCP 工具):
1. 調用 get_weather({ city: "北京", unit: "celsius" })
2. 調用 get_forecast({ city: "北京", days: 3 })
3. 整合兩個結果返回完整天氣信息6.2 Python MCP Server 開發
如果你更熟悉 Python,可以使用官方 Python SDK。
# 安裝 SDK
pip install mcp
# 或使用 uv
uv add mcp# server.py
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Tool, TextContent
import json
import asyncio
server = Server("weather-server-python")
@server.list_tools()
async def list_tools() -> list[Tool]:
return [
Tool(
name="get_weather",
description="獲取指定城市的當前天氣信息",
inputSchema={
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名稱"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "溫度單位"
}
},
"required": ["city"]
}
)
]
@server.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
if name == "get_weather":
city = arguments.get("city", "未知")
unit = arguments.get("unit", "celsius")
# 替換為真實 API 調用
weather_text = f"📍 {city} 當前天氣\n🌡️ 溫度: 22°{'F' if unit == 'fahrenheit' else 'C'}\n🌤️ 天氣: 晴"
return [TextContent(type="text", text=weather_text)]
async def main():
async with stdio_server() as (read_stream, write_stream):
await server.run(read_stream, write_stream, server.create_initialization_options())
if __name__ == "__main__":
asyncio.run(main())配置到 Claude Desktop:
{
"mcpServers": {
"weather-python": {
"command": "python3",
"args": ["/absolute/path/to/server.py"]
}
}
}6.3 開發最佳實踐
| 實踐 | 說明 |
|---|---|
| 📝 詳細的工具描述 | 描述越清晰,AI 調用越準確 |
| 🔒 輸入參數校驗 | 使用 Zod(Node.js)或 Pydantic(Python)做參數校驗 |
| 🛡️ 錯誤處理 | 返回結構化錯誤信息,而不是拋異常 |
| 📦 最小權限原則 | 只暴露必要的工具,不要過度暴露 |
| 🧪 單元測試 | 測試工具邏輯,確保返回格式正確 |
| 📖 README 文檔 | 說明安裝步驟、配置方法、可用工具列表 |
七、 MCP + Ollama:讓本地大模型也能用工具
MCP 不僅限於 Claude——通過一些中間層工具,你可以讓 Ollama 本地部署的大模型也使用 MCP 工具。
7.1 方案一:通過 Cline(VS Code 插件)
Cline 是一個 VS Code 插件,支持連接 Ollama 本地模型並使用 MCP 工具。
步驟 1:在 VS Code 中安裝 Cline 插件
步驟 2:配置 Cline 使用 Ollama
- API Provider: Ollama
- Model: deepseek-r1:14b(或其他你本地部署的模型)
- Base URL: http://localhost:11434
步驟 3:在 Cline 設置中配置 MCP Server(同 Claude Desktop 格式)
步驟 4:開始使用,Cline 會自動將 MCP 工具注入到 Ollama 的 Function Calling 中7.2 方案二:通過 LiteLLM 代理
LiteLLM 可以將 Ollama 的 API 轉換為 OpenAI 兼容格式,配合支持 MCP 的客戶端使用。
# 安裝 LiteLLM
pip install litellm
# 啟動代理
litellm --model ollama/deepseek-r1:14b --port 4000然後在支持 OpenAI API + MCP 的客戶端中配置:
{
"apiBase": "http://localhost:4000",
"apiKey": "any-string",
"model": "ollama/deepseek-r1:14b"
}7.3 方案三:通過 mcp-cli 命令行工具
mcp-cli 是一個輕量級的命令行 MCP 客戶端,支持連接多種 AI 模型。
# 安裝
pip install mcp-cli
# 配置
# 編輯 ~/.mcp-cli/config.json{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
}
},
"models": {
"ollama": {
"type": "ollama",
"model": "deepseek-r1:14b",
"base_url": "http://localhost:11434"
}
}
}# 使用
mcp-cli chat --model ollama7.4 Ollama + MCP 的能力對比
| 能力 | Claude Desktop + MCP | Ollama + MCP |
|---|---|---|
| 工具調用準確性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐(取決於模型) |
| 複雜任務編排 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 隱私性 | ⭐⭐⭐(數據發到雲端) | ⭐⭐⭐⭐⭐(完全本地) |
| 成本 | ⭐⭐⭐(需訂閱) | ⭐⭐⭐⭐⭐(免費) |
| 響應速度 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐(取決於硬件) |
| 推薦模型 | Claude Sonnet 4 | deepseek-r1:14b / qwen3:14b |
💡 建議:對工具調用準確性要求高的任務用 Claude Desktop + MCP;對隱私要求高或離線場景用 Ollama + MCP。兩者可以互補使用。
八、 安全注意事項:權限控制與沙箱隔離
8.1 風險評估
MCP Server 擁有訪問外部資源的權限,如果配置不當可能帶來安全風險:
| 風險等級 | 場景 | 風險描述 |
|---|---|---|
| 🔴 高危 | Filesystem 配置根目錄 | AI 可讀取密碼、密鑰等敏感文件 |
| 🔴 高危 | 數據庫使用 root 用戶 | AI 可能執行 DROP TABLE 等危險操作 |
| 🟡 中危 | GitHub Token 權限過大 | AI 可能修改或刪除倉庫 |
| 🟡 中危 | 運行來源不明的 Server | Server 可能包含惡意代碼 |
| 🟢 低危 | 只讀查詢類 Server | 風險可控 |
8.2 安全最佳實踐
1. 最小權限原則
// ❌ 危險:配置整個用戶目錄
{
"args": ["@modelcontextprotocol/server-filesystem", "/"]
}
// ✅ 安全:只配置工作目錄
{
"args": ["@modelcontextprotocol/server-filesystem", "/Users/yourname/Projects/my-project"]
}2. 數據庫只讀用戶
-- 為 MCP 創建專用只讀用戶
CREATE USER mcp_readonly WITH PASSWORD 'strong_password';
GRANT CONNECT ON DATABASE mydb TO mcp_readonly;
GRANT USAGE ON SCHEMA public TO mcp_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;
-- 禁止修改和刪除
REVOKE INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public FROM mcp_readonly;3. GitHub Token 最小權限
只勾選必要的權限:
✅ repo:read(只讀倉庫訪問)
✅ read:org(讀取組織信息)
❌ repo:write(不要勾選寫權限)
❌ delete_repo(不要勾選刪除權限)4. 使用可信的 MCP Server
推薦來源:
✅ @modelcontextprotocol 官方包
✅ 知名開源項目維護的 Server
✅ 自己開發的 Server
謹慎使用:
⚠️ npm 上不知名作者發佈的 Server
⚠️ 需要過多權限的 Server
⚠️ 沒有源碼可查的閉源 Server5. 敏感信息保護
# 使用環境變量管理密鑰,不要硬編碼
# ✅ 好的做法
export GITHUB_TOKEN=ghp_xxx
# 配置文件中引用環境變量
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}" }
# ❌ 壞的做法
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxx" }8.3 審計與監控
定期檢查 MCP Server 的使用情況:
# Claude Desktop MCP 日誌位置
# macOS
~/Library/Logs/Claude/mcp-server-*.log
# 查看最近的 MCP 日誌
tail -100 ~/Library/Logs/Claude/mcp-server-filesystem.log
# 檢查哪些 Server 正在運行
ps aux | grep mcp九、 MCP 生態展望:2026 年社區發展
9.1 生態數據(2026 年中)
| 指標 | 數據 |
|---|---|
| 已註冊 MCP Server | 3,000+ |
| 支持的 AI 客戶端 | 15+ |
| GitHub MCP 相關倉庫 | 8,000+ |
| 社區貢獻者 | 2,000+ |
| 月活躍 Server 下載量 | 500 萬+ |
9.2 2026 年重要進展
| 時間 | 事件 |
|---|---|
| 2024.11 | Anthropic 發佈 MCP 協議規範 |
| 2025.01 | Claude Desktop 原生支持 MCP |
| 2025.03 | Cursor 集成 MCP 支持 |
| 2025.06 | 社區 Server 突破 1000 個 |
| 2025.09 | VS Code Continue 插件支持 MCP |
| 2025.11 | OpenAI 宣佈在 ChatGPT 中兼容 MCP |
| 2026.01 | Google 宣佈 Gemini 支持 MCP |
| 2026.03 | MCP 規範 2.0 發佈,支持流式傳輸 |
| 2026.06 | 社區 Server 突破 3000 個 |
9.3 熱門生態方向
1. 企業級 MCP Server
- Salesforce CRM 集成
- Jira 項目管理
- Slack 消息通知
- Notion 文檔管理
2. 開發者工具鏈
- Kubernetes 集群管理
- Docker 容器操作
- AWS / Azure / GCP 雲服務
- CI/CD 流水線控制
3. 數據分析
- BigQuery 數據查詢
- Elasticsearch 搜索
- Snowflake 數據倉庫
- Tableau 報表生成
4. 個人效率
- 日曆管理(Google Calendar / Apple Calendar)
- 郵件處理(Gmail / Outlook)
- 筆記同步(Obsidian / Notion)
- 知識庫檢索(Confluence / Wiki)
9.4 MCP 與 AI Agent 的關係
MCP 是 AI Agent 生態的基礎設施層。如果說 AI Agent 是「大腦」負責決策,那 MCP 就是「手和眼」負責執行和感知:
AI Agent(決策層)
↓ 調用工具
MCP Client(協議層)
↓ stdio / SSE
MCP Server(工具層)
↓ API / 文件 / 數據庫
外部世界(數據層)2026 年的趨勢是 MCP + Agent + RAG 的三位一體架構:
- MCP 提供工具調用能力
- Agent 提供自主決策能力
- RAG 提供知識檢索能力
三者結合,AI 就能真正實現「理解需求 → 檢索知識 → 調用工具 → 完成任務」的完整閉環。
十、 常見問題與故障排查
10.1 安裝與配置問題
Q1:Claude Desktop 重啟後 MCP Server 沒有生效?
排查步驟:
1. 確認完全退出 Claude Desktop(從系統托盤菜單選擇 Quit)
2. 檢查 JSON 配置文件語法是否正確(用 jsonlint.com 驗證)
3. 檢查 npx 命令是否可用:在終端運行 npx --version
4. 檢查 Node.js 版本是否 >= 18
5. 查看 Claude Desktop 日誌:
macOS: ~/Library/Logs/Claude/mcp-server-*.log
6. 確認 Server 路徑使用絕對路徑,不是相對路徑Q2:提示 "npx: command not found"?
原因:Claude Desktop 找不到 npx 的完整路徑
解決:
1. 在終端運行 which npx 獲取完整路徑
通常是 /usr/local/bin/npx 或 /opt/homebrew/bin/npx
2. 在配置中使用完整路徑:
"command": "/usr/local/bin/npx"
而不是 "command": "npx"Q3:MCP Server 啟動但工具不可見?
排查步驟:
1. 在 Claude Desktop 對話中輸入:「你有哪些可用的工具?」
2. 如果 Server 連接成功但沒有工具,可能是 Server 代碼有問題
3. 在終端手動運行 Server,檢查是否有報錯:
npx -y @modelcontextprotocol/server-filesystem /tmp
4. 確認 Server 版本是最新的:
npx -y @modelcontextprotocol/server-filesystem@latest --version10.2 使用問題
Q4:AI 調用工具時報錯?
常見錯誤及解決:
1. "Tool not found" → 檢查 Server 是否正常運行
2. "Permission denied" → 檢查文件/目錄權限
3. "API key invalid" → 檢查環境變量是否正確配置
4. "Connection timeout" → 檢查網絡連接或增加超時時間
5. "Rate limit exceeded" → API 調用頻率過高,降低頻率Q5:AI 不主動調用工具?
可能原因及解決:
1. 工具描述不夠清晰 → 在工具定義中寫更詳細的 description
2. 問題沒有觸發工具使用的意圖 → 明確告訴 AI「使用工具查詢...」
3. 模型能力不足 → 使用 Claude Sonnet 4 或更強模型
4. Server 未成功連接 → 在對話中輸入「列出你的工具」確認Q6:多個 MCP Server 之間衝突?
解決方法:
1. 確保 each Server 的 name 唯一
2. 如果工具名衝突,在工具定義中使用命名空間前綴
3. 一次不要配置太多 Server(建議不超過 10 個)
4. 按需啟用/禁用 Server10.3 性能問題
Q7:MCP Server 響應慢?
優化建議:
1. stdio 模式比 SSE 模式快,本地使用優先 stdio
2. Server 啟動有冷啟動開銷,保持 Client 長時間運行
3. 數據庫查詢添加索引,避免全表掃描
4. 網絡請求添加緩存,避免重複調用
5. 使用 npx 的 --prefer-offline 選項加速包安裝Q8:內存佔用過高?
排查方法:
1. 檢查是否有內存洩漏(Server 運行時間越長內存越高)
2. Filesystem Server 避免配置過大的目錄
3. 數據庫查詢結果限制返回行數
4. Puppeteer Server 注意關閉不需要的瀏覽器標籤頁
5. 監控 Server 進程內存:ps aux | grep mcp總結
MCP(Model Context Protocol)在 2026 年已經成為 AI 工具集成的事實標準。它的核心價值在於:
✅ 標準化:一個協議連接所有工具,無需為每個 AI 模型重複開發
✅ 開放性:開源協議,任何 AI 客戶端和工具都可以接入
✅ 安全性:本地運行,數據不經過第三方
✅ 生態豐富:3000+ 個 Server 覆蓋文件、數據庫、API、瀏覽器等場景
✅ 易於開發:Node.js / Python SDK 讓自定義 Server 開發非常簡單對於不同用戶,推薦的入門路徑:
✅ 非開發者用戶:Claude Desktop + Filesystem/GitHub Server → 讓 AI 讀寫文件和管理代碼
✅ 開發者用戶:Cursor + Filesystem/GitHub/SQLite Server → AI 編程工作流全面升級
✅ 進階開發者:自定義 MCP Server → 讓 AI 接入你的專有工具鏈
✅ 隱私優先用戶:Ollama + MCP → 完全本地的 AI + 工具調用方案MCP 讓 AI 從「只會聊天」變成「能幹活」的真正的智能助手。如果你已經在使用 Claude 或 Ollama,MCP 是釋放 AI 全部潛力的關鍵一步。
延伸閱讀
- Claude AI 完整使用指南 2026
- Ollama 本地部署進階教程 2026
- Ollama + WebUI 基礎教程
- AI Agent 終極指南 2026
- AI Coding 工具指南 2026
- DeepSeek 本地部署教程
- AI 使用教程彙總
延伸阅读
免责声明
本文仅供技术交流和学习参考。涉及第三方服务的链接可能包含 sponsored 标记,请自行核实服务条款、价格和可用性,并遵守当地法律法规。