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