跳到主要内容

MCP (Model Context Protocol)

概述

MCP (Model Context Protocol) 是一个开放协议,用于连接 AI 助手与系统上下文(数据源、工具、环境)。它由 Anthropic 于 2024 年 11 月发布,旨在解决 AI 应用与外部系统集成的标准化问题。

官方文档https://modelcontextprotocol.io GitHubhttps://github.com/modelcontextprotocol


核心概念

1. MCP 的定义

MCP 是一种客户端-服务端协议,定义了:

  • AI 应用(客户端)如何请求数据和操作
  • 数据源/工具(服务端)如何暴露其能力
  • 消息传输的标准格式

2. 架构组件

┌─────────────────────────────────────────────────────────┐
│ MCP 架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ MCP Client │ ───────▶│ MCP Server │ │
│ │ (AI 应用) │ ◀──────│ (数据源) │ │
│ └──────────────┘ └──────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Claude Code │ │ 文件系统 │ │
│ │ Cursor IDE │ │ 数据库 │ │
│ │ Cline │ │ API 服务 │ │
│ │ 自定义应用 │ │ Git 仓库 │ │
│ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘

MCP 的核心能力

1. 资源 (Resources)

资源是服务端暴露给客户端的数据读取接口

// 资源示例
{
"uri": "file:///Users/project/README.md",
"name": "项目 README",
"description": "项目根目录的 README 文件",
"mimeType": "text/markdown"
}

常见资源类型

类型URI 示例说明
文件file:///path/to/file本地文件系统
Gitgit:///repo/fileGit 仓库内容
数据库postgres://query数据库查询结果
APIhttps://api/dataHTTP API 响应
内存memory://variable运行时数据

2. 提示词模板 (Prompts)

提示词模板是服务端提供的预定义提示词

// 提示词模板示例
{
"name": "code-review",
"description": "代码审查提示词",
"arguments": {
"file": "要审查的文件路径",
"focus": "审查重点(安全/性能/风格)"
}
}

3. 工具 (Tools)

工具是服务端暴露的可执行功能

// 工具示例
{
"name": "execute_command",
"description": "在终端执行命令",
"inputSchema": {
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "要执行的命令"
}
}
}
}

MCP 传输层

MCP 支持多种传输方式:

1. STDIO(标准输入/输出)

适用于本地进程间通信

# 通过 STDIO 启动 MCP 服务端
claude-code mcp install my-server
my-server --stdio

2. SSE(Server-Sent Events)

适用于本地 HTTP 通信

// SSE 连接
const client = new MCPClient({
url: "http://localhost:3000/sse",
transport: "sse"
});

3. 自定义传输

支持自定义 WebSocket、gRPC 等传输层。


使用场景

1. Claude Code 中的 MCP

Claude Code 原生支持 MCP,可以:

  • 通过 MCP 读取项目文件
  • 通过 MCP 执行 Git 命令
  • 通过 MCP 访问数据库
  • 通过 MCP 调用外部 API

配置示例

// .claude/mcp_config.json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/project"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}

2. Cursor IDE 中的 MCP

Cursor 支持 MCP 扩展:

  • 安装 MCP 兼容的服务端
  • Cursor 自动发现可用资源
  • 在 Chat 中引用 MCP 资源

3. Cline 中的 MCP

Cline(VS Code 插件)支持 MCP:

  • 通过 MCP 获取项目上下文
  • 通过 MCP 执行构建命令
  • 通过 MCP 访问测试结果

MCP 服务端示例

文件系统服务端

# 官方文件系统服务端
npx -y @modelcontextprotocol/server-filesystem /path/to/directory

GitHub 服务端

# 官方 GitHub 服务端
npx -y @modelcontextprotocol/server-github

数据库服务端

# PostgreSQL 服务端
npx -y @modelcontextprotocol/server-postgres "postgresql://..."

自定义服务端

// 自定义 MCP 服务端
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';

const server = new Server({
name: 'my-custom-server',
version: '1.0.0'
});

// 添加资源
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
resources: [
{
uri: 'custom://data',
name: '自定义数据',
description: '我的自定义数据源'
}
]
}));

// 启动服务端
const transport = new StdioServerTransport();
await server.connect(transport);

MCP 的优势

优势说明
标准化统一的协议,无需为每个 AI 应用单独适配
模块化数据源独立于 AI 应用,可复用
可扩展支持自定义传输层和数据源
安全性明确的权限控制和数据隔离
开放性开源协议,社区驱动发展

MCP 与其他方案的对比

方案MCPLangChain ToolsOpenAI Function Calling
标准化程度✅ 开放协议❌ 厂商特定❌ 厂商特定
传输层多种支持HTTP/RPCHTTP
AI 兼容性多模型主流 LLMOpenAI only
社区生态快速增长成熟成熟
学习曲线简单中等简单

快速开始

1. 安装 Claude Code MCP 集成

# 安装 Claude Code CLI
npm install -g @anthropic-ai/claude-code

# 初始化 MCP 配置
claude-code mcp init

2. 添加 MCP 服务端

# 添加文件系统服务端
claude-code mcp install @modelcontextprotocol/server-filesystem

# 添加 GitHub 服务端
claude-code mcp install @modelcontextprotocol/server-github

3. 在 Claude Code 中使用

@mcp://filesystem/Users/project/src 请分析这个目录下的代码结构

参考资源

官方资源

社区资源


文档更新时间:2025 年 12 月