跳轉到內容

MCP 協議入門與實戰指南 2026:讓 AI 連接萬物

MCP 協議入門與實戰指南

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 就能直接讀取和操作,不需要為每個工具單獨寫集成代碼。

如果你已經在使用 ClaudeOllama 本地大模型,但苦於 AI 只能「聊天」而不能「幹活」,那麼 MCP 就是你需要的最後一塊拼圖。本文將帶你從概念理解到實戰部署,完整掌握 MCP 的使用方法。


目錄

  1. MCP 是什麼:協議背景與核心概念
  2. 為什麼需要 MCP:傳統方案的侷限
  3. 環境準備:MCP 客戶端選擇與安裝
  4. 常用 MCP Server 實戰配置
  5. 本地部署 MCP Server:兩種傳輸模式
  6. 自定義 MCP Server 開發:從零搭建
  7. MCP + Ollama:讓本地大模型也能用工具
  8. 安全注意事項:權限控制與沙箱隔離
  9. MCP 生態展望:2026 年社區發展
  10. 常見問題與故障排查

一、 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 ClientAI 應用端,負責發起請求、接收工具調用結果瀏覽器
MCP Server中間層程序,封裝具體工具的操作邏輯Web 服務器
TransportClient 與 Server 之間的通信方式HTTP / WebSocket
ToolServer 暴露給 Client 的可調用函數API 端點
ResourceServer 暴露給 Client 的可讀取數據靜態資源
PromptServer 預定義的提示詞模板頁面模板

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

對比維度MCPOpenAI 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 DesktopmacOS / Windows✅ 原生⭐⭐⭐⭐⭐Anthropic 官方客戶端,MCP 支持最完善
CursormacOS / Windows / Linux✅ 原生⭐⭐⭐⭐⭐AI 代碼編輯器,MCP 與代碼工作流深度整合
VS Code + Continue全平臺✅ 通過 Continue 插件⭐⭐⭐⭐通用 IDE 方案,配置靈活
ZedmacOS / Linux✅ 原生⭐⭐⭐⭐高性能代碼編輯器,MCP 原生支持
ClineVS Code 插件✅ 原生⭐⭐⭐⭐自主編程 Agent,MCP 支持完善
Windsurf全平臺✅ 原生⭐⭐⭐Codeium 出品的 AI IDE
5iremacOS / Windows✅ 原生⭐⭐⭐通用 MCP 客戶端,不限於編程

3.2 Claude Desktop 安裝與配置

Claude Desktop 是體驗 MCP 最簡單的方式,適合非開發者用戶。

bash
# 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

基礎配置模板:

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 配置文件:

json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "${workspaceFolder}"]
    }
  }
}

3.4 VS Code + Continue 配置 MCP

json
// ~/.continue/config.json
{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "npx",
          "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
        }
      }
    ]
  }
}

3.5 前置環境準備

無論使用哪個客戶端,運行 MCP Server 都需要以下環境:

bash
# 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 包速度慢,可以設置國內鏡像:

bash
npm config set registry https://registry.npmmirror.com

四、 常用 MCP Server 實戰配置

4.1 Filesystem(文件系統訪問)

最常用的 MCP Server,讓 AI 可以讀取、寫入、搜索本地文件。

json
{
  "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。

json
{
  "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_repositoryFork 倉庫
create_branch創建分支
list_commits列出提交記錄
get_pull_request_status獲取 PR 狀態

4.3 SQLite(數據庫查詢)

讓 AI 可以直接查詢本地 SQLite 數據庫。

json
{
  "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 數據庫)

json
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://user:password@localhost:5432/dbname"]
    }
  }
}

⚠️ 安全建議:使用只讀數據庫用戶,避免 AI 執行危險的寫操作:

sql
CREATE USER mcp_readonly WITH PASSWORD 'your_password';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;

4.5 Brave Search(網絡搜索)

讓 AI 可以進行實時網絡搜索。

json
{
  "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 Key

4.6 Puppeteer(瀏覽器自動化)

讓 AI 可以控制瀏覽器,截圖、填表、抓取網頁內容。

json
{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
    }
  }
}

暴露的工具

工具功能
navigate導航到指定 URL
screenshot截取當前頁面截圖
click點擊頁面元素
fill填寫表單
evaluate執行 JavaScript
get_page_content獲取頁面 HTML 內容

4.7 常用 Server 配置速查表

Servernpm 包名需要的憑證核心功能
Filesystem@modelcontextprotocol/server-filesystem文件讀寫
GitHub@modelcontextprotocol/server-githubGitHub Token倉庫管理
SQLite@modelcontextprotocol/server-sqlite數據庫查詢
PostgreSQL@modelcontextprotocol/server-postgres數據庫連接串數據庫查詢
Brave Search@modelcontextprotocol/server-brave-searchBrave API Key網絡搜索
Puppeteer@modelcontextprotocol/server-puppeteer瀏覽器自動化
Memory@modelcontextprotocol/server-memory知識圖譜記憶
Fetch@modelcontextprotocol/server-fetchHTTP 請求
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 為例):

json
{
  "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
  • 支持負載均衡和水平擴展

缺點

  • 需要網絡配置
  • 需要考慮安全性(認證、加密)

配置方式

json
{
  "mcpServers": {
    "remote-server": {
      "url": "https://my-server.example.com/sse"
    }
  }
}

部署 SSE Server 示例

javascript
// 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簡單、安全、高性能
團隊共享 ServerSSE一處部署,多人使用
需要長時間運行的任務SSE不依賴 Client 進程
訪問本地文件/數據庫stdio避免網絡暴露敏感數據
訪問遠程 APISSE部署在服務器端更穩定
開發調試stdio快速迭代,無需部署

六、 自定義 MCP Server 開發:從零搭建

6.1 Node.js MCP Server 開發

以一個「天氣查詢」Server 為例,教你從零開發 MCP Server。

步驟 1:初始化項目

bash
mkdir weather-mcp-server && cd weather-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk

步驟 2:編寫 Server 代碼

javascript
// 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

json
{
  "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。

bash
# 安裝 SDK
pip install mcp

# 或使用 uv
uv add mcp
python
# 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

json
{
  "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 的客戶端使用。

bash
# 安裝 LiteLLM
pip install litellm

# 啟動代理
litellm --model ollama/deepseek-r1:14b --port 4000

然後在支持 OpenAI API + MCP 的客戶端中配置:

json
{
  "apiBase": "http://localhost:4000",
  "apiKey": "any-string",
  "model": "ollama/deepseek-r1:14b"
}

7.3 方案三:通過 mcp-cli 命令行工具

mcp-cli 是一個輕量級的命令行 MCP 客戶端,支持連接多種 AI 模型。

bash
# 安裝
pip install mcp-cli

# 配置
# 編輯 ~/.mcp-cli/config.json
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"
    }
  }
}
bash
# 使用
mcp-cli chat --model ollama

7.4 Ollama + MCP 的能力對比

能力Claude Desktop + MCPOllama + MCP
工具調用準確性⭐⭐⭐⭐⭐⭐⭐⭐(取決於模型)
複雜任務編排⭐⭐⭐⭐⭐⭐⭐⭐
隱私性⭐⭐⭐(數據發到雲端)⭐⭐⭐⭐⭐(完全本地)
成本⭐⭐⭐(需訂閱)⭐⭐⭐⭐⭐(免費)
響應速度⭐⭐⭐⭐⭐⭐⭐⭐⭐(取決於硬件)
推薦模型Claude Sonnet 4deepseek-r1:14b / qwen3:14b

💡 建議:對工具調用準確性要求高的任務用 Claude Desktop + MCP;對隱私要求高或離線場景用 Ollama + MCP。兩者可以互補使用。


八、 安全注意事項:權限控制與沙箱隔離

8.1 風險評估

MCP Server 擁有訪問外部資源的權限,如果配置不當可能帶來安全風險:

風險等級場景風險描述
🔴 高危Filesystem 配置根目錄AI 可讀取密碼、密鑰等敏感文件
🔴 高危數據庫使用 root 用戶AI 可能執行 DROP TABLE 等危險操作
🟡 中危GitHub Token 權限過大AI 可能修改或刪除倉庫
🟡 中危運行來源不明的 ServerServer 可能包含惡意代碼
🟢 低危只讀查詢類 Server風險可控

8.2 安全最佳實踐

1. 最小權限原則

json
// ❌ 危險:配置整個用戶目錄
{
  "args": ["@modelcontextprotocol/server-filesystem", "/"]
}

// ✅ 安全:只配置工作目錄
{
  "args": ["@modelcontextprotocol/server-filesystem", "/Users/yourname/Projects/my-project"]
}

2. 數據庫只讀用戶

sql
-- 為 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
⚠️ 沒有源碼可查的閉源 Server

5. 敏感信息保護

bash
# 使用環境變量管理密鑰,不要硬編碼
# ✅ 好的做法
export GITHUB_TOKEN=ghp_xxx
# 配置文件中引用環境變量
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}" }

# ❌ 壞的做法
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxx" }

8.3 審計與監控

定期檢查 MCP Server 的使用情況:

bash
# 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 Server3,000+
支持的 AI 客戶端15+
GitHub MCP 相關倉庫8,000+
社區貢獻者2,000+
月活躍 Server 下載量500 萬+

9.2 2026 年重要進展

時間事件
2024.11Anthropic 發佈 MCP 協議規範
2025.01Claude Desktop 原生支持 MCP
2025.03Cursor 集成 MCP 支持
2025.06社區 Server 突破 1000 個
2025.09VS Code Continue 插件支持 MCP
2025.11OpenAI 宣佈在 ChatGPT 中兼容 MCP
2026.01Google 宣佈 Gemini 支持 MCP
2026.03MCP 規範 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 --version

10.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. 按需啟用/禁用 Server

10.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 從「只會聊天」變成「能幹活」的真正的智能助手。如果你已經在使用 ClaudeOllama,MCP 是釋放 AI 全部潛力的關鍵一步。


延伸閱讀



延伸阅读

免责声明

本文仅供技术交流和学习参考。涉及第三方服务的链接可能包含 sponsored 标记,请自行核实服务条款、价格和可用性,并遵守当地法律法规。

最後更新於: