引言
网上一直缺少一份既通俗易懂又有技术深度的MCP技术文档,所以这里通过梳理官方文档,从架构到实战,力求做到小白也能听懂。这是一个不小的挑战,如果文中间出现笔误,欢迎在评论区指正。
MCP是什么
Model Context Protocol(MCP)是 Anthropic 在2024年11月发布的一项开放标准协议,目的是给大语言模型应用提供统一的方式来连接外部数据源和工具。它被戏称为"AI的Type-C接口"。
不过,单把它类比成Type-C接口,其实有点草率。
先划重点:MCP是一种协议,一种标准!重要的事情说三遍——MCP是协议,MCP是协议,MCP是协议。
那么它到底能干什么?用大白话说:如果把LLM比作大脑,那么MCP协议就是让这个大脑长出"手脚"的通道——它能访问资源、调用工具、使用预制模板,把原本只能聊天的模型变成能干活的全能选手。
为什么这么说?回想ChatGPT刚出来那会儿,它不过是个简单的聊天机器人,靠训练时吃进去的知识库来回答问题,既不能实时访问网页资源,也碰不到你自己的知识库,更别提帮你发邮件、订航班。有了MCP之后,大家有了统一标准来做这些事。只要实现了标准MCP接口,数据的发送和接收都按相同格式解析,理论上AI应用就能帮我们做任何事(当然,物理世界的劳动暂且不讨论)。
MCP到底解决什么问题?
前面聊了MCP能实现的事情,那么它本质上解决了什么难题?难道没有MCP,我们就没法访问网页或知识库了吗?下面来细说。
传统方式也能实现类似功能,但每个企业开发的软件或应用,调取工具的接口都是自成一派,没有一个统一标准。这就导致集成工作极其繁琐。
上一段代码看看传统方式的痛点:
# 每个集成都需要自定义代码
if service == "github":
github_client = GitHubClient(token)
data = github_client.get_issues()
elif service == "slack":
slack_client = SlackClient(token)
data = slack_client.get_messages()
elif service == "database":
db_client = DatabaseClient(connection_string)
data = db_client.query("SELECT * FROM users")
# ... 每个服务都不同
用MCP统一之后:
# 统一接口,标准化协议
mcp_client = McpClient()
# 所有服务使用相同的协议
resources = mcp_client.list_resources() # 获取可用资源
tools = mcp_client.list_tools() # 获取可用工具
result = mcp_client.call_tool("search", args) # 调用工具
这里要强调MCP的三大核心能力:访问资源、调用工具、预制模板。下面对应的特点与作用如下:
| 能力 | 说明 | 控制方 | 示例 |
|---|---|---|---|
| Resources | 只读数据源 | Application | 文件内容、数据库记录、API 响应 |
| Tools | 可执行函数 | Model | 搜索航班、发送消息、创建日历事件 |
| Prompts | 预制模板 | User | 计划旅行、总结会议、起草邮件 |
理解这三大能力是开发MCP的关键基础。
MCP的架构
接下来看看MCP的整体架构。
MCP采用客户端-服务器架构,一个MCP主机(比如Claude Code、Claude Desktop这类AI应用)可以与一个或多个MCP服务器建立连接。主机为每个MCP服务器创建一个MCP客户端,每个客户端与对应的服务器保持专用连接。使用STDIO传输的本地MCP服务器通常服务于单个客户端,而使用Streamable HTTP传输的远程MCP服务器通常服务于多个客户端。架构中的关键组件包括:
- MCP 主机:协调和管理一个或多个MCP客户端的AI应用程序
- MCP 客户端:维护与MCP服务器的连接,并从服务器获取上下文供主机使用
- MCP 服务器:为客户端提供上下文信息的程序
引用官方文档中的一个例子:Visual Studio Code可以充当MCP主机。当VS Code与Sentry MCP服务器建立连接时,运行时会实例化一个MCP客户端对象来维护这个连接。随后,当VS Code再连一个本地文件系统服务器时,又会实例化另一个MCP客户端对象来维护这条新连接。
注意,MCP服务器指的是提供上下文数据的程序,不管它跑在哪里。它可以在本地运行,也可以在远程。例如Claude Desktop启动文件系统服务器时,因为用了STDIO传输,服务器就跟Claude Desktop在同一台机器上,这通常叫"本地"MCP服务器。而官方的Sentry MCP服务器运行在Sentry平台上,使用Streamable HTTP传输,这就是"远程"MCP服务器。
小结
第一篇我们先解析了MCP的概念、解决的问题以及架构。接下来会继续深入解析通信协议和数据格式等内容。
