惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
T
Threatpost
N
News and Events Feed by Topic
PCI Perspectives
PCI Perspectives
V2EX - 技术
V2EX - 技术
D
Docker
G
Google Developers Blog
Microsoft Security Blog
Microsoft Security Blog
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
The GitHub Blog
The GitHub Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Y
Y Combinator Blog
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
T
Troy Hunt's Blog
Webroot Blog
Webroot Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
量子位
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
F
Full Disclosure
B
Blog
O
OpenAI News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园_首页
Google DeepMind News
Google DeepMind News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
Forbes - Security
Forbes - Security
Know Your Adversary
Know Your Adversary
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
Scott Helme
Scott Helme
T
The Exploit Database - CXSecurity.com
博客园 - 聂微东
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
Recorded Future
Recorded Future
IT之家
IT之家
Project Zero
Project Zero
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
Attack and Defense Labs
Attack and Defense Labs
L
Lohrmann on Cybersecurity
SecWiki News
SecWiki News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

Wayne的博客

大模型缓存技术工程指南(下):面向缓存命中的 Prompt 与 Agent 工程实践 大模型缓存技术工程指南(上):从价格信号到推理缓存机制 | Wayne的博客 面向 AI / Agent 友好的 CLI 开发建议 【笔记】Harness Engineering(驾驭工程) | Wayne的博客 【笔记】location.href 和 location.assign 进行页面 URL 跳转 【工具】ZeroClaw配置项(config.toml)说明 | Wayne的博客 【工具】ZeroClaw配置项(config.toml)说明 | Wayne的博客 Skills 技术深度解析:AI Agent 能力扩展的新范式 | Wayne的博客 【笔记】浏览器PNA/LNA策略——记一次iframe中CORS报错的问题排查经历 | Wayne的博客 【工具】spec驱动开发解析 | Wayne的博客 Agent设计模式 | Wayne的博客 【工具】2025年AI Coding部分产品技术分析——ClaudeCode和CodexCLI | Wayne的博客 【工具】设计-开发-测试的AIGC产品清单梳理 | Wayne的博客 近期关于AI浪潮下的搜索引擎、SEO和GEO思考 | Wayne的博客 【工具】AI Common Notify:统一 AI 编程工具通知服务 21st.dev:让AI生成的页面告别"塑料感"的专业解决方案 | Wayne的博客 【笔记】Figma和AIGC(持续) | Wayne的博客 【笔记】State-Of-Ai 报告信息 | Wayne的博客 【笔记】web 黑夜模式通用适配方案 | Wayne的博客 【笔记】19届阿里D2终端技术大会纪要 | Wayne的博客 【笔记】Lovable提示词指南 | Wayne的博客 【调研】AI 编程工具WindSurf使用技巧——WindsurfRules配置 | Wayne的博客 AI 前端编程工具的一个得力助手——CopyCoder | Wayne的博客
【AI】【笔记】MCP 协议:连接 AI 模型与外部世界的桥梁 | Wayne的博客
2025-01-05 · via Wayne的博客

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

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

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 生态系统。


相关链接