跳转到内容

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 标记,请自行核实服务条款、价格和可用性,并遵守当地法律法规。