MCP 协议:连接 AI 模型与外部世界的桥梁

背景

随着 AI 技术的飞速发展,大语言模型(LLM)在推理和生成质量上取得了巨大进步。然而,这些模型在实际应用中常常受限于数据孤岛和遗留系统,无法充分发挥潜力。为了解决这一问题,Anthropic 公司于 2024 年 11 月推出了模型上下文协议(MCP,Model Context Protocol),旨在通过统一的客户端-服务器架构,统一大型语言模型与外部数据源和工具之间的通信协议,解决 LLM 应用与数据源连接的难题。
MCP 可以被视为 AI 应用的“USB-C 接口”,它提供了一种标准化的方式,将 AI 模型与各种数据源和工具无缝连接。MCP 使得 AI 应用能够安全地访问和操作本地及远程数据,为 AI 应用提供了连接万物的接口。

能力

MCP 协议的核心思想是通过上下文管理来优化模型的交互过程。上下文管理包括上下文的存储、更新、传递和删除等操作。通过有效的上下文管理,模型可以在多轮对话中保持对历史信息的记忆,从而更好地理解用户的意图和需求。MCP 的核心能力还体现在以下几个方面:

  • 数据集成:连接 AI 助手与各种数据源,包括本地和远程资源,如文件、数据库、API 等。
  • 工具集成:集成 API 和其他工具,您的 AI 助手可以直接与 Git 交互、运行测试、管理问题等等,让 AI 系统能够执行更复杂的操作。
  • 模板化交互:基于提示(Prompts)提供模板化的交互方式,方便用户快速构建特定任务的交互流程。
  • 安全性:内置安全机制(MCP 服务器隔离凭据和敏感数据,交互需要显式的用户批准(除非对某些 MCP 工具启用自动批准)),保护数据和 API 密钥不被泄露,确保数据访问既可控又可审计。
  • 开发者支持:提供 SDK 和文档,支持开发者构建和测试 MCP 连接器。
  • 预构建服务器:提供预构建的 MCP 服务器,快速集成流行企业系统。
  • 上下文维护:在不同工具和数据集之间保持上下文,而不是每次都重新开始,MCP 服务器可以跨会话维护知识,创建一个真正的“项目内存”,实现更智能的任务处理。

MCP 支持通过同一协议访问本地资源(如数据库、文件)和远程资源(如 Slack、GitHub API),无需定制集成。MCP 不仅共享数据,还可公开工具和交互模板,且内置安全性,确保资源由服务器完全掌控。目前 MCP 支持本地运行,未来将引入企业级认证的远程支持,实现团队间的安全共享。通过 Claude 桌面应用,开发者可在短时间内集成 MCP,快速连接多种数据源,推动 AI 集成的标准化发展。

使用

MCP 官方文档写得挺细致的,关于使用这块也建议看一下官方文档说明

MCP 协议遵循客户端-服务器架构,规范及 SDK:

核心架构:

p-1.png

MCP 包含以下几个核心概念:

  • MCP 主机(Hosts):发起请求的 LLM 应用程序,如 Claude Desktop、IDE 或 AI 工具。
  • MCP 客户端(Clients):在主机程序内部,与 MCP 服务器保持 1:1 的连接。
  • MCP 服务器(Servers):为 MCP 客户端提供上下文、工具和提示信息。
  • 本地资源(Local Resources):本地计算机中可供 MCP 服务器安全访问的资源。
  • 远程资源(Remote Resources):MCP 服务器可以连接到的远程资源,如通过 API 访问的网络资源。
    MCP 定义了两种通信机制:
  • 本地通信:使用标准输入输出(stdio)传输数据,客户端启动服务器程序作为子进程,通过 stdin/stdout 进行消息通讯,消息格式为 JSON-RPC 2.0
  • 远程通信:客户端与服务器可以部署在任何地方,通过基于 SSE 的 HTTP 通信,消息格式同样为 JSON-RPC 2.0

快速开始

目前 MCP 有三种方式可以帮助你快速开始,PythonTypeScript 选一个自己比较熟悉的构建服务即可。

开发工具

开发 MCP 服务器或将其与应用程序集成时,有效的调试至关重要。所以 MCP 提供了几种不同层次的调试工具:

  • MCP 检查器(MCP Inspector):交互式调试界面;直接服务器测试
  • Claude 桌面开发工具(Claude Desktop Developer Tools):集成测试;日志收集;Chrome DevTools 集成
  • 服务器日志(Server Logging):自定义日志记录实现;错误追踪;性能监控

示例

以下是一个极简单的 MCP 协议使用示例:

  • 安装预构建的 MCP 服务器:通过 Claude Desktop 应用程序安装预构建的 MCP 服务器。
  • 编写 Server 端代码:根据 MCP 协议定义,创建一个 MCP 服务器,提供资源、工具或提示词。
  • 编写 Client 端代码:创建一个 MCP 客户端,与服务器建立连接,并请求使用服务器提供的资源或工具。

以下是一个使用 TypeScript 实现的简单 MCP 协议示例,展示了如何创建一个 MCP 服务器和客户端,并通过它们进行通信。

环境要求:

  • Node.js (v18+)
  • Python (v3.8+)

1. 创建 MCP 服务器

首先,安装必要的依赖项:

1
npm install @modelcontextprotocol/sdk

然后,创建一个简单的 MCP 服务器,该服务器提供一个工具,用于计算两个数字的和:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// server.ts
import { Server, StdioServerTransport } from '@modelcontextprotocol/sdk/server/index.js';
import {
CallToolRequestSchema,
ListToolsRequestSchema,
McpError,
ErrorCode,
} from '@modelcontextprotocol/sdk/types.js';

const server = new Server(
{
name: 'mcp-server',
version: '1.0.0',
},
{
capabilities: {
tools: {},
},
}
);

// 列出可用工具
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: 'calculate_sum',
description: 'Add two numbers together',
inputSchema: {
type: 'object',
properties: {
a: { type: 'number' },
b: { type: 'number' },
},
required: ['a', 'b'],
},
},
],
};
});

// 处理工具调用
server.setRequestHandler(CallToolRequestSchema, async request => {
if (request.params.name === 'calculate_sum') {
const { a, b } = request.params.arguments;
return { toolResult: a + b };
}
throw new McpError(ErrorCode.ToolNotFound, 'Tool not found');
});

const transport = new StdioServerTransport();
await server.connect(transport);

2. 创建 MCP 客户端

接下来,创建一个 MCP 客户端,用于调用服务器提供的工具:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// client.ts
import { Client, StdioClientTransport } from '@modelcontextprotocol/sdk/client/index.js';
import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';

const transport = new StdioClientTransport({
command: 'node',
args: ['server.js'], // 确保服务器脚本路径正确
});

const client = new Client(
{
name: 'mcp-client',
version: '1.0.0',
},
{
capabilities: {
tools: {},
},
}
);

await client.connect(transport);

// 列出工具
const tools = await client.request({ method: 'tools/list' }, ListToolsRequestSchema);
console.log('Available Tools:', tools);

// 调用工具
const result = await client.request(
{
method: 'tools/call',
params: {
name: 'calculate_sum',
arguments: { a: 5, b: 3 },
},
},
CallToolRequestSchema
);
console.log('Tool Result:', result);

3. 运行示例

  • 启动服务器:运行node server.js启动 MCP 服务器。
  • 启动客户端:运行node client.js启动 MCP 客户端。
  • 观察输出:客户端会列出可用工具,并调用calculate_sum工具,输出结果。

4. 集成到Claude Desktop

如果需要将 MCP 服务器集成到Claude Desktop,可以在claude_desktop_config.json中添加服务器配置:

1
2
3
4
5
6
7
8
{
"mcpServers": {
"mcp-server": {
"command": "node",
"args": ["/path/to/your/mcp-server/build/index.js"]
}
}
}

应用

工具平台结合

如 Cline 的结合:

p-2.png

社区插件应用

如:

总结

MCP 协议为 AI 模型与外部数据源和工具的集成提供了一种标准化、安全且灵活的解决方案。通过客户端-服务器架构和 JSON-RPC 2.0 通信机制,MCP 能够实现本地和远程资源的无缝访问。随着越来越多的应用接入 MCP 协议,未来有望构建一个更加互联、高效的 AI 生态系统。


相关链接