当你对Claude说“把季度报告发到Slack”,AI竟能自动完成文件读取、摘要生成、消息发送全流程!这背后是Anthropic最新推出的MCP协议在驱动——这项被誉为“AI界USB-C”的革新性技术,正悄然掀起智能应用领域的新浪潮。
实际上,MCP(Model Context Protocol,模型上下文协议)已经成为AI圈内备受关注的热门词汇。它的核心目标听起来并不复杂:为大语言模型与外部数据源、工具之间的通信,建立一套统一、标准化的交互规范。其目的在于让AI能够安全、便捷地调用本地文件、数据库、API服务等资源,且无需为每个数据源单独编写适配代码。
可以将其理解为AI世界里的一个通用“翻译官”或“万能连接器”——就像USB-C接口让手机、电脑能够连接各种键盘、硬盘等外设一样,MCP使AI模型能够无缝对接Excel、GitHub、数据库等多种工具资源。
什么是MCP协议
MCP是Anthropic推出的一项开放标准,目标十分明确:统一大型语言模型(LLM)与外部数据源、工具之间的通信协议。它旨在终结当前AI工具集成各自为政的混乱局面——不再需要为每个数据源单独开发接口适配,而是遵循一套标准化规则,让AI能够安全、高效地调用本地文件、数据库、API服务等各类资源。
打个比方:就像USB-C接口让手机、电脑可以连接各种外设(键盘、硬盘等),MCP使AI模型能够对接多样化的工具(如Excel、GitHub、区块链等)。
MCP架构解析
架构定义
MCP的架构采用经典的客户端-服务器模式,主要分为三个层级:
- 主机(Hosts) —— 即大型语言模型(LLM)应用程序本身,例如Claude Desktop或集成开发环境(IDE)。它是整个通信链路的发起方,负责初始化与外部资源的连接。
- 客户端(Clients) —— 运行在主机应用内部,每个客户端与一台服务器保持1:1的独占连接,确保会话隔离与资源权限控制。
- 服务器(Servers) —— 轻量级的服务程序,通过标准化接口向客户端提供三类核心功能:
- 上下文(Context):结构化或非结构化的数据资源,例如文件、数据库记录。
- 工具(Tools):可执行的函数接口,例如API调用、本地操作。
- 提示(Prompts):预定义的任务模板与交互逻辑。
服务器支持本地资源(如文件系统)和远程资源(如云服务)的灵活接入。
架构细节
协议分层方面:协议层基于JSON-RPC 2.0规范定义消息框架,涵盖请求、通知、结果及错误四种消息格式。传输层则支持两种通信机制:一是标准输入输出(stdio),适用于本地进程间通信;二是Server-Sent Events(SSE),用于远程实时双向交互。
连接生命周期管理:连接会经历多个阶段。初始化阶段通过initialize请求协商协议版本与功能支持范围;会话阶段的消息交换包含两种模式(请求-响应模式与单向通知模式);终止阶段则支持显式关闭或超时断开机制。
安全机制同样值得重点关注,主要包括三个方面:权限分级控制(例如限制LLM仅读取指定目录文件)、操作审批流程(敏感工具调用需用户显式授权)、凭据隔离(服务器独立管理认证信息,避免泄露至客户端)。
架构优势
这种架构设计带来了几个显著的好处:模块化扩展性强,新功能通过独立服务器部署即可实现,无需修改主机应用代码;跨平台互操作性高,标准化协议支持多种语言SDK(Python、JavaScript等),适配异构系统;实时交互能力突出,双向通信机制支持LLM主动触发服务器操作,例如代码提交或设备控制。
MCP与Function Call对比分析
Function Call同样是AI Agent中“工具使用”的重要成员,那么它与MCP协议究竟有何区别?下面这张表给出了直观的答案:
| 对比维度 | MCP协议 | Function Call |
|---|---|---|
| 通信协议 | 标准化的JSON-RPC 2.0或gRPC | 厂商自定义的HTTP/WebSocket接口 |
| 工具生命周期管理 | 支持动态加载/卸载,无需重启服务 | 需重启模型服务才能更新工具 |
| 跨平台能力 | 工具服务可部署在任何支持协议的环境(本地/远程/容器化) | 受限于模型厂商的运行时环境 |
| 安全边界 | 工具运行在独立进程/容器中,通过沙箱隔离执行风险 | 工具与模型共享进程内存空间,存在API密钥泄露风险 |
直观来看,这就像微服务架构中的微服务与单体应用中功能函数之间的区别。MCP更加灵活、安全,也更易于扩展。
MCP应用场景
MCP协议能够将大模型从一个“仅能回答”的对话系统,转变为一个真正的“执行者”。以下是一些常见的应用场景:
- 文件服务:通过Claude大模型可以对指定目录的文件进行整理归类。
- 数据查询:通过MCP服务端,可以对指定数据资源进行查询,例如MySQL、Elasticsearch、MongoDB等。
- 网络搜索:通过MCP服务端搭建网络搜索引擎,大模型即可实现网络搜索的功能。
理论上讲,在企业内部,通过MCP协议可以实现所有系统之间的互联互通。
MCP快速入门教程
下面通过一个简单的天气查询工具,基于MCP协议使用Python开发,并通过Cursor客户端进行调用,让大家直观感受MCP的实际能力。
1. 安装Python包管理工具uv
# 安装uv
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# 验证uv
uv --version
2. 初始化项目
# 初始化项目目录并使用python 3.12.0环境
uv init weather --python 3.12.0
cd weather
# 创建虚拟环境
uv venv
# 激活虚拟环境
.venv\Scripts\activate
# 安装项目依赖
uv add mcp[cli] httpx
# 创建weather.py文件
new-item weather.py
3. 编写天气查询工具服务端代码
这里使用和风天气的查询接口进行天气查询,示例代码如下:
from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP
# Initialize FastMCP server
mcp = FastMCP("weather")
# Constants
API_BASE = "https://devapi.qweather.com/v7"
API_KEY = "your api key"
async def query_weather(url: str) -> dict[str, Any] | None:
"""Make a request to the NWS API with proper error handling."""
headers = {"X-QW-Api-Key": API_KEY}
async with httpx.AsyncClient() as client:
try:
response = await client.get(url, headers=headers, timeout=30.0)
response.raise_for_status()
return response.json()
except Exception:
return None
@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
"""Get weather forecast for a location.
Args:
latitude: Latitude of the location
longitude: Longitude of the location
"""
weather_url = f"{API_BASE}/weather/7d?location={longitude},{latitude}"
weather_data = await query_weather(weather_url)
forecasts = []
for period in weather_data['daily']:
forecast = f"""
{period['fxDate']} {period['textDay']}:
Temperature: {period['tempMin']}~{period['tempMax']}°C
Wind: {period['windSpeedDay']} {period['windDirDay']}
"""
forecasts.append(forecast)
return "\n---\n".join(forecasts)
if __name__ == "__main__":
mcp.run(transport="stdio")
4. 验证服务是否正确
uv run weather.py
如果不报错,说明服务端代码暂时没问题,后续可以用Cursor进行调用测试。
5. Cursor注册MCP Server
在Cursor中打开MCP Server配置界面。
6. 添加MCP Server参数
本次演示为本地Server,所以type选择command。Command中填写weather.py的启动命令,注意weather.py所在目录要填写完整路径:
uv --directory G:\project\mcp\weather run weather.py
如果一切顺利,MCP Server应该已经成功注册到Cursor客户端。
7. 使用大模型验证天气查询工具
在Cursor的Compose模式下选择agent模式,聊天框输入“上海的天气怎么样”,模型会弹出运行天气查询工具的提示,点击运行,等待模型输出。如图所示,大模型已经正确调用了天气查询工具,并给出了具体的天气回复。至此,一个简单的天气查询工具就成功实现了。
调用流程
结语
本文主要介绍了MCP协议的核心概念与架构,同时与Function Call做了对比分析,最后通过实际操作完成了一个天气查询的Demo。希望通过本文的MCP入门讲解,大家能获得启发,理解并思考如何将MCP应用到实际业务场景中去。
