专栏名称: 架构师
架构师云集,三高架构(高可用、高性能、高稳定)、大数据、机器学习、Java架构、系统架构、大规模分布式架构、人工智能等的架构讨论交流,以及结合互联网技术的架构调整,大规模架构实战分享。欢迎有想法、乐于分享的架构师交流学习。
目录
相关文章推荐
北京本地宝  ·  重磅!2025版中国龙银质纪念币正式发行!销 ... ·  3 天前  
最爱大北京  ·  周杰伦方紧急声明! ·  2 天前  
最爱大北京  ·  春分不养生,来年把病生!春分三宜三忌三秘诀 ·  2 天前  
51好读  ›  专栏  ›  架构师

深入浅出理解MCP:从技术原理到实战落地

架构师  · 公众号  ·  · 2025-03-08 22:32

正文

架构师(JiaGouX)
我们都是架构师!
架构未来,你来不来?



引言:当AI开始"动手"

近期,随着 Manus 的爆火,一个名为 MCP(模型上下文协议) 的技术术语频繁出现在开发者社区。这项由Anthropic公司(Claude的创造者)于2024年11月推出的开放协议,正在重新定义AI与数字世界的交互方式。如果说ChatGPT打开了智能对话的大门,那么MCP则正在为AI装上"操作现实的双手"。
想象这样一个场景:当你对AI说"整理我电脑里上周的会议记录",它往往只能“动嘴”而不能“动手”。MCP 的出现,正是为了让 AI 从“智能回答者”变成“智能执行者”,它不再只是回复操作步骤,而是直接调取你的文件系统,完成分类归档、生成摘要,甚至将待办事项同步到你的日历——这就是MCP带来的变革。
本文将带您穿透技术迷雾,从协议设计到代码实操,从技术原理到实战落地,完整解析这项可能改变人机交互规则的核心技术。全面理解 MCP:它是什么、如何工作、能做什么,以及如何快速上手甚至构建自己的 MCP 服务器。
无论你是技术爱好者还是普通用户,这篇深入浅出的指南都将为你揭开 MCP 的神秘面纱。

MCP 是什么?

MCP(Model Context Protocol)是一种开放标准协议,旨在让大型语言模型(LLM)与外部工具和数据源无缝通信。用个简单的比喻,MCP 就像是 AI 的“通用翻译器”,让它能安全、可控地访问你的文件、应用或网络服务,并执行具体任务。

MCP 的三大核心组件

  • MCP 主机 :你与 AI 互动的应用程序,比如 Claude Desktop,相当于 AI 的“大本营”。

  • MCP 服务器 :专门的小程序,提供特定功能(如访问文件或调用 API),就像为 AI 服务的“专业导游”。

  • MCP 客户端 :连接主机和服务器的桥梁,确保通信顺畅,通常无需用户直接操作。

通过这种设计,MCP 让 AI 助手从单纯的对话工具,进化成能操作现实世界的强大助手。


MCP 与 API 的区别

你可能会问:API 不也能让 AI 调用外部服务吗?为什么需要 MCP?答案在于,MCP 不仅实现了 API 的功能,还带来了更高的标准化和灵活性:

特性 API MCP MCP 优势
安全性 依赖开发者实现,规则不统一 标准化访问控制,用户明确授权 更安全可控
通信方式 通常单向获取数据 支持双向交互,可操作数据 功能更强大
AI 优化 返回原始数据,需额外处理 提供 AI 友好的工具和提示 更易于 AI 处理
灵活性 偏向远程服务,需网络支持 支持本地和远程资源 适用场景更广
集成复杂度 每个服务需定制代码 统一协议,即插即用 开发更简单

举个例子 :用 API 获取天气数据,AI 得解析复杂的 JSON;而用 MCP 天气服务器,AI 直接拿到简洁的预报结果,还能顺手帮你记录下来。MCP 的标准化和双向性,让 AI 的操作更高效、更自然。

以下是一个简单的表格,展示了两者在不同场景下的表现:


双向交互闭环

传统API的"一问一答"模式在复杂场景中捉襟见肘,而MCP支持多轮交互:


# MCP工具定义示例




    

@server.call_tool()
async def handle_call_tool(name, args):
if name == "book_meeting":
# 第一步:查询日历空闲时段
slots = get_calendar_slots(args["duration"])
# 第二步:生成可选时间列表
return show_time_picker(slots)
# 第三步:接收用户选择并创建会议
confirm_selection(args["time"])


MCP 的工作原理和架构


在学习如何使用 MCP 之前,了解它的工作原理和架构非常重要。MCP 建立在灵活、可扩展的客户端-服务器架构之上,让 LLM 与外部资源无缝通信。

核心架构

MCP 遵循客户端-服务器模型:

  • 宿主 :启动连接的 LLM 应用程序,如 Claude Desktop 或 AI IDE。

  • 客户端 :在宿主内部与服务器保持 1:1 连接,负责通信协调。

  • 服务器 :为客户端提供上下文、工具和提示,执行具体任务。

核心组件

1. 协议层

协议层处理消息的格式和通信逻辑,包括:

  • 消息帧 :定义消息的结构。

  • 请求/响应链接 :确保请求和回应一一对应。

  • 高级通信模式 :支持复杂交互。

核心类包括 Protocol Client Server ,通过类型安全的接口处理请求和通知。例如:


class Protocol<Request, Notification, Result> {
request<T>(request: Request, schema: T): Promise<T>; // 发送请求并等待响应
notification(notification: Notification): Promise<void>; // 发送单向通知
}

2. 传输层

传输层负责实际的数据传输,支持两种机制:

  • 标准输入输出传输 :用于本地进程通信,简单高效。

  • 带 SSE 的 HTTP 传输 :支持远程通信,客户端用 POST 发送请求,服务器用 SSE(服务器推送事件)返回数据。

所有传输基于 JSON-RPC 2.0 ,确保消息格式统一。

消息类型

MCP 定义了四种主要消息类型:

  • 请求(Request) :期望响应的消息,如 { method: "getWeather", params: { city: "Beijing" } }

  • 通知(Notification) :单向消息,无需回应,如 { method: "logEvent", params: { event: "start" } }

  • 结果(Result) :请求的成功响应,如 { temperature: 25 }

  • 错误(Error) :请求失败的反馈,如 { code: -32602, message: "Invalid params" }

连接生命周期

  1. 初始化

  • 客户端发送 initialize 请求,携带协议版本和功能。

  • 服务器响应支持的版本和功能。

  • 客户端发送 initialized 通知,连接就绪。

  • 消息交换 :支持请求-响应和单向通知。

  • 终止 :任一方可通过 close() 或断开传输终止连接。

  • 错误处理

    MCP 定义了标准错误代码,如:

    • ParseError (-32700) :解析错误。

    • InvalidRequest (-32600) :无效请求。支持自定义错误代码,确保错误处理一致。

    架构优势

    • 标准化通信 :统一 JSON 格式,客户端可自动发现服务器功能。

    • 即插即用 :无需为每个服务器定制代码,轻松替换或添加新服务器。

    • 资源管理 :服务器提供资源(如文件)、工具(如操作)和提示(如模板),LLM 通过标准调用访问。

    为什么 MCP 有用?

    • 统一接口 :LLM 只需理解 MCP,无需学习各种 API。

    • 可插拔架构 :新功能只需添加 MCP 服务器。

    • 工作流自动化 :多个服务器可串联成复杂流程。



    MCP 的实际应用


    MCP 将 AI 从“只会说”变成“能做事”,以下是几个典型场景:

    1. 文件管理 :让 Claude 整理下载文件夹,或从笔记生成行动计划。







    请到「今天看啥」查看全文