《MCP 入门实战》第 1 课:MCP 是什么与架构解剖

发布时间:2026/11/3 19:05:13
《MCP 入门实战》第 1 课:MCP 是什么与架构解剖 本文收录于专栏AI Agent智能体系列—— 20 课从协议原理到生产部署的 MCP 中文实战课程点击订阅可跟踪后续更新。【摘要】你给公司写 AI 助手时同一个查快递工具在 LangChain、Dify、自研框架里要写 N 遍这课用 USB-C 类比讲透 MCP 三角色Host/Client/Server与 JSON-RPC 2.0 协议分层带你逐字段解析 2026-07-28 无状态新规范无握手、无会话 ID、请求自包含给你 6 个报文断言全过的结构拆解你能直接判断自己的项目该不该上 MCP。阶段 1 认识 MCP概念与协议 | 来源【原·00-Introduction 01-CoreConcepts】 | 知识更新至 2026-10当日检索关键字MCP协议、Model Context Protocol、MCP架构、JSON-RPC、MCP Host、MCP Server、AI Agent工具调用、MCP无状态规范概念讲解1.1 MCP 要解决什么问题工具接口的碎片化设想你给公司写一个查快递的 AI 助手。这个助手至少要做一件事调用快递公司的查询接口把单号传进去把物流状态拿回来。在没有 MCP 的世界里这件事的写法取决于你用什么 Agent 框架LangChain 里要写一个tool装饰器函数Dify 里要走它的自定义工具配置页某个自研框架里又得按它自己的 JSON 约定注册。同一个查快递能力在 5 个框架里要写 5 遍。更麻烦的是反过来快递公司那边升级了接口5 个框架里的 5 份代码都得跟着改。这就是 MCPModel Context Protocol模型上下文协议要解决的问题把工具怎么暴露能力和模型怎么调用能力统一成一个开放标准让工具写一遍、处处可用。官方对自己的定位有一个诚实的备注值得记住2026-10 检索自原课 00-IntroductionMCP 自称是开放标准但并没有计划通过 IEEE、IETF、W3C、ISO 这些传统标准组织来标准化。它的标准地位来自生态采用度而非官方机构背书。1.2 USB-C 比喻统一接口的价值理解 MCP 最常用的比喻是 USB-C模型LLM是电脑它提供智能但本身不认识你的快递系统、订单库、文档库。工具和数据源是外设快递接口、数据库、文件系统各有各的插头。MCP 是 USB-C 接口一个统一的插口标准。外设按标准做一个 USB-C 插头MCP Server电脑按标准提供 USB-C 插槽MCP Host/Client插上就能用。USB-C 之前手机充电线有 Micro-USB、Lightning、各种圆口MCP 之前工具接入有 LangChain Tool、OpenAI Function Schema、各家自定义格式。统一之后做一个 MCP Server所有支持 MCP 的宿主Claude Desktop、VS Code、Hermes Desktop、Cherry Studio……都能直接用。1.3 与 function calling / Agent Skills / RAG 的关系初学者最容易混淆的就是 MCP 和这几个概念的关系概念层次与 MCP 的关系Function calling工具调用模型 API 层模型决定要调用什么的机制MCP 是工具从哪里来、怎么执行的协议。两者配合模型出 tool_call宿主把它翻译成 MCP 的tools/callRAG检索增强生成应用模式RAG 检索可以包装成一个 MCP Server提供search_docs工具或docs://资源。MCP 是 RAG 的一种实现通道不是替代品Agent Skills技能包提示工程层Skills 是教模型怎么做某类事的文档与脚本集合MCP 是给模型提供做事的工具。一个教方法一个给武器一句话区分function calling 是模型嘴里的我要调工具MCP 是工具和宿主之间的通用插座Skills 是模型脑子里的操作手册。1.4 架构三角色Host / Client / ServerMCP 采用客户端-服务器模型但比普通 C/S 多一个角色。三个角色的分工依据原课 01-CoreConceptsHost宿主用户直接面对的 AI 应用。它协调模型、管理多个 Client、控制权限和用户确认。比如 Hermes Desktop、VS Code、Claude Desktop。Client客户端宿主为每个 Server 创建一个专属 Client维持与该 Server 的逻辑连接。注意 2026-07-28 规范后这个连接是逻辑关系不再要求持久的网络连接或会话——每个请求自包含详见第 3 课。Server服务端轻量程序暴露具体能力工具、资源、提示模板。可以跑在本地同一台机器的子进程也可以是远程服务。一个完整的调用链路是用户在宿主里提问我的订单 E20261001001 到哪了宿主把问题给模型模型判断需要调search_orders工具宿主通过对应 Client 向订单 Server 发tools/callServer 执行查询返回结构化结果宿主把结果喂回模型模型生成最终回答1.5 协议分层与版本MCP 协议分两层数据层JSON-RPC 2.0 消息 协议原语Tools/Resources/Prompts 等下节展开传输层stdio本地子进程和 Streamable HTTP远程服务。旧的 HTTPSSE 传输已废弃MCP 用日期做版本号YYYY-MM-DD。当前协议版本是2026-07-282026-07-28 发布。这是 MCP 发布以来最大的一次修订核心变化是协议层无状态化——移除了initialize握手和协议级会话 ID。这点在第 3 课详细展开。案例实战目标不写任何 Server 代码先用 Python 标准库手工构造 MCP 报文亲眼看看协议长什么样。理解报文结构后后面用 SDK 写代码时你就知道框架替你做了什么。步骤构造一个tools/call请求2026-07-28 规范无握手请求自包含客户端信息放在_meta里构造server/discover请求/响应取代旧initialize握手的能力发现构造tools/list响应含新增的缓存元数据ttlMs/cacheScope构造tools/call成功响应和错误响应用断言验证所有报文符合 JSON-RPC 2.0 结构完整代码【已实测 2026-10Python 3.10纯标准库】importjson# A. tools/call 请求2026-07-28 起无握手每个请求自包含tools_call_req{jsonrpc:2.0,id:1,method:tools/call,params:{name:search_orders,arguments:{keyword:蓝牙耳机,max_results:10},_meta:{io.modelcontextprotocol/protocolVersion:2026-07-28,io.modelcontextprotocol/clientInfo:{name:my-shop-assistant,version:1.0},io.modelcontextprotocol/clientCapabilities:{},},},}# B. server/discover 请求取代旧 initialize 的能力发现discover_req{jsonrpc:2.0,id:2,method:server/discover,params:{_meta:tools_call_req[params][_meta]},}# C. server/discover 响应discover_resp{jsonrpc:2.0,id:2,result:{protocolVersion:2026-07-28,serverInfo:{name:order-mcp-server,version:0.3.1},capabilities:{tools:{listChanged:False},resources:{},prompts:{}},extensions:{},},}# D. tools/list 响应2026-07-28 新增 ttlMs / cacheScope 缓存元数据tools_list_resp{jsonrpc:2.0,id:3,result:{tools:[{name:search_orders,description:按关键词搜索订单,inputSchema:{type:object,properties:{keyword:{type:string,description:搜索关键词},max_results:{type:number,default:10},},required:[keyword],},annotations:{readOnlyHint:True,destructiveHint:False},}],ttlMs:60000,cacheScope:shared,},}# E. tools/call 成功响应content structuredContent 双格式call_resp{jsonrpc:2.0,id:1,result:{content:[{type:text,text:找到 2 个订单}],structuredContent:{orders:[{id:E20261001001,item:蓝牙耳机,status:已发货},{id:E20260928007,item:蓝牙耳放,status:已签收},]},isError:False,},}# F. 错误响应2026-07-28 起参数/资源未找到错误码用标准 -32602err_resp{jsonrpc:2.0,id:4,error:{code:-32602,message:Invalid params: unknown tool search_order},}forlabel,objin[(A,tools_call_req),(B,discover_req),(C,discover_resp),(D,tools_list_resp),(E,call_resp),(F,err_resp)]:print(f{label})print(json.dumps(obj,ensure_asciiFalse,indent2))# 验证所有报文都是合法 JSON-RPC 2.0forobjin[tools_call_req,discover_req,discover_resp,tools_list_resp,call_resp,err_resp]:assertobj[jsonrpc]2.0andidinobjprint([OK] 6 个报文全部通过 JSON-RPC 2.0 结构断言)预期输出实测节选 A { jsonrpc: 2.0, id: 1, method: tools/call, params: { name: search_orders, arguments: { keyword: 蓝牙耳机, max_results: 10 }, _meta: { io.modelcontextprotocol/protocolVersion: 2026-07-28, ... } } } ... [OK] 6 个报文全部通过 JSON-RPC 2.0 结构断言从报文里能看到的三件事_meta取代了握手。2025-11-25 旧规范里客户端要先发initialize握手、拿到Mcp-Session-Id再干活2026-07-28 起协议版本、客户端信息、能力声明都装进每个请求的_meta任何服务器实例都能独立处理任何请求——这是为水平扩展负载均衡后面挂多个 Server 实例设计的。tools/list响应可以带缓存元数据ttlMs: 60000表示工具列表 60 秒内新鲜cacheScope: shared表示可以跨用户共享。Client 不用再靠长连接等工具变更通知按 HTTP 缓存的思路处理即可。错误码收敛到 JSON-RPC 标准。旧规范用自定义的-32002表示资源未找到2026-07-28 起改用标准-32602Invalid Params。如果你的代码里硬编码了-32002升级时要改。小结MCP 是模型与工具/数据源之间的开放协议标准解决同一能力在 N 个框架写 N 遍的碎片化问题三角色Host宿主面向用户/ Client宿主为每个 Server 创建的逻辑连接/ Server能力提供方协议 JSON-RPC 2.0 数据层 stdio / Streamable HTTP 传输层版本按日期编号当前为 2026-07-282026-07-28 的最大变化是协议层无状态化无握手、无会话 ID、请求自包含——这为大规模部署铺路MCP 与 function calling 是配合关系模型决策 vs 协议执行与 RAG/Skills 是不同层次的概念下一课展开 Server 能提供的三种核心原语Tools / Resources / Prompts以及已被弃用的 Sampling 和 Roots——参见第 2 课《核心原语Tools / Resources / Prompts / Sampling》。扩展阅读MCP for Beginners 原课 00-Introductionhttps://github.com/microsoft/mcp-for-beginners/tree/main/00-IntroductionMCP for Beginners 原课 01-CoreConceptshttps://github.com/microsoft/mcp-for-beginners/tree/main/01-CoreConceptsMCP 官方规范 2026-07-28https://modelcontextprotocol.io/specification/2026-07-28/2026-07-28 规范变化详解原课文档https://github.com/microsoft/mcp-for-beginners/blob/main/01-CoreConcepts/mcp-2026-07-28.mdMCP 官方 Python SDKhttps://github.com/modelcontextprotocol/python-sdk系列导航本课程全集见专栏AI Agent智能体系列上一课无本课是第 1 课下一课·第 2 课 核心原语我的专栏蛋白 / 抗体 / 多肽 / 核酸分子模拟 / 动力学 / 对接药物 / 设计 / 案例AI / Agent / 大模型开源蛋白结构预测分子模拟基础小分子药物设计案例AI Agent系列开源蛋白生成方法实践分子动力学模拟-Amber蛋白药物设计案例化学大模型开源多肽设计模型分子动力学模拟-Gromacs多肽药物设计案例《AI Agent原理与实战》开源多肽性质预测分子动力学模拟-OpenMM开源小分子生成设计CADD中的机器学习模型DNA/RNA药物设计結合自由能开源药代动力学软件高效计算配置siRNA药物设计模型UCSF DOCK系列我胡师兄说药ASO药物设计模型rDock系列 LeDock系列 gnina系列

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询