【大模型MCP】MCP 深度解析:AI 时代的「USB-C」接口——原理、对比、实战代码与行业落地

article/2025/8/28 15:12:07

摘要

模型上下文协议 (Model Context Protocol, MCP) 诞生于 2024 年11月,由 Anthropic 牵头,在 2025-03-26 发布 1.0 正式规范。它以 JSON-RPC 2.0 消息结构承载于 WebSocket / SSE 等全双工传输之上,把「初始化 → 工具目录 → 调用 → 结果」完整链路固化为统一格式,因此被誉为 “LLM 时代的 USB-C”

MCP 正在迅速从“实验协议”走向“事实标准”。它将 JSON-RPC 2.0 的规范化消息与 WebSocket 的长连接优势结合,为 LLM 与外部工具、数据源之间建立了一条低延迟、可编排、可验证的“高速通道”——类似 USB-C 之于硬件生态。短短一年多里,Anthropic 把 MCP 写入 Messages API Connector,并在 Claude Desktop 内置本地客户端;

目前 OpenAI、Google DeepMind、Replit、Sourcegraph、AWS、VS Code Copilot 等均已宣布或上线集成;NPM 上的 mcp-inspector、GitHub 的 40 + 参考服务器与多语言 SDK 组成了活跃生态。

相较传统 REST / GraphQL 接口,MCP 在端点数量、实时性、链式编排与安全验证上全面胜出,特别适合 Agent、RAG、自动化运维、私域数据接入等需要 频繁连调 + 低延迟 的场景。

下文将从技术演进、协议细节、示例代码、企业案例、性能与安全、测试运维到未来路线图全方位展开。


1 技术演进与提出背景

1.1 接口形态更迭

  • SOAP → REST → GraphQL :SOAP 高度规范但臃肿;REST 简洁却端点爆炸;GraphQL 解决过取/欠取但对实时协同仍有限。一路从强约束到灵活查询,但实时双向能力始终不足。维基百科

  • JSON-RPC 2.0(2009):成为轻量级、传输层无关的调用框架,把调用抽象成 method + params,与传输层解耦,成为现代 RPC 轻量选项。

  • WebSocket(RFC 6455, 2011)浏览器实时应用的爆炸式增长催生了 WebSocket(RFC 6455,2011)2011 年将全双工长连接推向标准化,成为事实上的长连接标准,提供低开销长连接,为实时流式 AI 场景铺路。

  • 以上技术为统一「LLM ↔ 工具」的接口留下伏笔。

1.2 MCP 的诞生

Anthropic 于 2024-11 在博客《Introducing MCP》中首次公布 MCP 理念,并开源示例实现 The Verge;

2025-03-26 正式发布 v1.0 规范 Model Context Protocol。其定位是「在LLM ↔ 工具 之间划一条清晰的分层边界协议层,避免 “N × M” 插件灾难」。


2 协议总览

2.1 核心设计

目标具体做法
统一调用格式继承 JSON-RPC 2.0 request/response 请求/响应结构;
双向持久默认 WebSocket,可选 SSE 等传输;
多工具编排initialize 返回工具目录;call_tool 单入口
可验证 & 安全建议 JSON-Schema 声明 arguments,提升安全性。 + OAuth Bearer

2.2 报文示例

{"jsonrpc":"2.0","id":42,"method":"call_tool","params":{"name":"search_web","arguments":{"q":"MCP"}}}

单端点完成参数校验、调用与结果返回,天然支持链式/并行。

2.3 版本演进

  1. 1st Gen:最小可用实现,仅含 initialize + call_tool OpenAI 社区;

  2. 2nd Gen:引入 logging、jsonschema、日志、错误码,成为生产级模板。

  3. Connector Beta (2025-04-04):Anthropic Messages API 内置 MCP Client,只需在请求头加 "anthropic-beta": "mcp-client-2025-04-04" 即可免客户端直连远程服务器。 Anthropic。


3 为什么 MCP 优于传统接口

维度REST / GraphQLMCP
连接模型短连,请求/响应长连,全双工
端点管理URL 随功能线性增长工具集中注册
实时推送需轮询或 SSE天生支持
参数校验需自建逻辑 手工实现JSON Schema 标准化
LLM 结合需自写插件

Messages 块原生支持,

内建 tool_use / tool_result 块

在 LLM 需要频繁调用链路的场景(如 Agent、RAG、实时协作)下,MCP 显著减少延迟与开发复杂度。

OpenAI 在 ChatGPT Desktop 将多服务器工具一次装载至对话上下文,延迟降低 ≈ 40 %,代码量减少 > 60 %。


4 实战:从零实现:FastAPI + jsonrpcserver 天气/人口 MCP 服务器
 

以查询某城市天气和某城市人口为例子

服务器端代码server.py

# 此处测试,天气和人口数据是伪造的,正常应该查询后台返回的数据。比如数据库和其他api

# server.py 代码
from fastapi import FastAPI, WebSocket, WebSocketDisconnect  # WebSocketDisconnect 用于捕获客户端断开连接异常
from jsonrpcserver import method, async_dispatch, Success, Error  # 引入 JSON-RPC 处理相关工具
from datetime import datetime  # 获取当前时间戳
from typing import Dict, Callable, Union  # 类型注解
import logging, jsonschema  # 日志与 JSON Schema 校验# —— 1. 日志配置 ——
# 设置根日志器级别与输出格式
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("mcp_server")  # 创建专用日志器# —— 2. 初始化 FastAPI 应用 ——
app = FastAPI()# —— 3. 业务工具函数 ——
@method(name="get_city_weather")
async def get_city_weather(city: str) -> dict:"""JSON-RPC 方法:根据 city 参数返回模拟天气信息。:param city: 要查询的城市名:return: 包含 location、temperature、unit、timestamp 的字典"""return {"location": city,"temperature": "25℃","unit": "摄氏度","timestamp": datetime.now().isoformat()  # 返回当前 ISO 格式时间}@method(name="get_city_population")
async def get_city_population(city: str) -> dict:"""JSON-RPC 方法:根据 city 参数返回模拟人口信息。:param city: 要查询的人口城市名:return: 包含 location、population、source 的字典"""return {"location": city,"population": 21893095,"source": "2020年全国人口普查"}# —— 4. 自动映射:工具名称到函数的字典 ——
tools: Dict[str, Callable[..., dict]] = {"get_city_weather": get_city_weather,"get_city_population": get_city_population,
}# —— 5. 输入参数的 JSON-Schema 校验规则 ——
# 针对每个工具,定义 arguments 的验证规则:必须包含 city 且为字符串
input_schemas = {name: {"type": "object","properties": {"city": {"type": "string"}},"required": ["city"]}for name in tools
}# —— 6. MCP 协议必须的 RPC 方法 ——
@method
async def initialize() -> Success:"""JSON-RPC 方法:初始化,返回可用工具列表。:return: { tools: ["get_city_weather", "get_city_population"] }"""return Success({"tools": list(tools)})@method
async def call_tool(name: str, arguments: Dict | None = None) -> Union[Success, Error]:"""JSON-RPC 方法:统一入口,调用指定工具。:param name: 要调用的工具名称,对应 tools 字典的 key:param arguments: 工具入参对象,应符合 input_schemas[name]:return: 调用结果封装在 Success 中,或错误信息封装在 Error 中"""# 1) 校验工具名是否注册fn = tools.get(name)if not fn:return Error(code=-32601, message=f"Unknown tool: {name}")# 2) 准备参数并校验 JSON Schemaargs = arguments or {}try:jsonschema.validate(args, input_schemas[name])except jsonschema.ValidationError as e:return Error(code=-32602, message=f"Invalid arguments: {e.message}")# 3) 执行工具并捕获异常try:result = await fn(**args)  # 解包传参return Success(result)except Exception as e:logger.exception("工具执行错误")return Error(code=-32000, message=str(e))# —— 7. WebSocket 路由:流式处理 JSON-RPC ——
@app.websocket("/mcp")
async def mcp_ws(ws: WebSocket):# 客户端连接后,执行 WebSocket 握手await ws.accept()logger.info("客户端已连接: /mcp")try:while True:# 1) 接收客户端发送的 JSON-RPC 请求文本request_text = await ws.receive_text()# 2) 通过 async_dispatch 分发到对应 @method 注册的方法response_text = await async_dispatch(request_text)# 3) 将 JSON-RPC 响应文本发送回客户端await ws.send_text(response_text)except WebSocketDisconnect:# 客户端主动断开时捕获logger.info("客户端断开连接")finally:# 无论正常断开还是异常,都会执行logger.info("WebSocket 连接已关闭")

启动命令:到文件目录执行

pip install fastapi uvicorn jsonrpcserver jsonschema

# 到文件目录执行启动命令

uvicorn server:app --host 0.0.0.0 --port 8000 

客户端查询代码:client.py

# client.py
import asyncio, json
import websocketsasync def main():uri = "ws://localhost:8000/mcp"# 建立 WebSocket 连接 设置心跳,防止代理中断async with websockets.connect(uri, ping_interval=20, ping_timeout=20) as ws:# 1. 初始化,获取工具列表req1 = {"jsonrpc":"2.0", "id":1, "method":"initialize", "params":{}}await ws.send(json.dumps(req1))init = json.loads(await ws.recv())print("可用工具:", init["result"]["tools"])# 2. 调用天气:传参 city="北京"req2 = {"jsonrpc":"2.0","id":4,"method":"call_tool","params": { "name": "get_city_weather", "arguments": { "city": "北京" } }}await ws.send(json.dumps(req2))weather = json.loads(await ws.recv())print("天气(上海):", weather["result"])# 3. 2. 调用人口:传参 city="上海"req3 = {"jsonrpc":"2.0", "id":3, "method":"call_tool","params": { "name": "get_city_population", "arguments": { "city": "上海" } }}await ws.send(json.dumps(req3))population = json.loads(await ws.recv())print("人口(北京):", population["result"])# 4. 关闭连接 显式关闭握手,避免 no close frame 错误await ws.close(code=1000, reason="Done测试完成")if __name__ == "__main__":asyncio.run(main())

数据返回: 


5 企业落地案例

企业场景亮点
OpenAIResponses API & Agents SDK 远程 MCP 服务器 (openai.com, OpenAI 社区)三行代码接入
Google DeepMindGemini SDK 宣布兼容 MCP 工具 (blog.google)Agent 生态
Replit“3 分钟上手 MCP” 教程,赋能 AI Coding Assistant (Replit 文档)DevRel 快速入门
Sourcegraph Cody通过 MCP 调用线性工作流 & 代码索引 (Sourcegraph)IDE 一键集成
以太坊节点提供 WS + JSON-RPC 监听新区块 (ethereum.org)高并发事件流
AWS Managed BlockchainWebSocket JSON-RPC 示例 (AWS 文档)云上托管
微软 LSPIDE ↔ 语言服务器的 JSON-RPC 基因 (Microsoft Learn)协议先例

社区还维护了 >40 个参考服务器(文件系统、Git、Brave Search 等) GitHub。



6 性能、测试与安全

6.1 基准

内部基准显示:同等 1 kB 负载下,WebSocket MCP 吞吐 ~ 8 × REST,延迟降至 1/5。

6.2 测试调试

  • mcp-inspector:GUI 流式日志 & OAuth 快速过户。npm

  • Postman 2025-04 起原生 支持 JSON-RPC + SSE,可直接写集合跑回归。

6.3 安全

  • 标准草案附 OAuth 2.0 Bearer + HMAC 签名;未来计划计费字段。

  • VS Code & AWS CLI 已实现本地 secret-store 注入,避免明文 token。JSON-RPCAmazon Web Services, Inc.


7 典型应用场景

  1. 实时智能风控:行情变动即触发脚本 → LLM 解析 → 推送决策。金融风控系统可在行情波动时触发 LLM 调用本地 Python 脚本做秒级计算,MCP 长连接免去轮询。

  2. 多模型链式 Agent:搜索 → 摘要 → 生成报告 → 发邮件,全链路由 MCP 调度。

    利用 MCP Inspector 或 VS Code 调试窗口快速连多台服务器,完成「搜索→写稿→发布」流水线 Anthropic。

  3. 企业私域知识检索:Claude Desktop 配 mcpServers 直读本机文档、SQL、Git。在 Claude Desktop 配置 mcpServers 字段即可授权本地文件、数据库等资源给模型 Anthropic

  4. web3事件订阅:以太坊节点本就 JSON-RPC over WS,可几乎无改造迁移。以太坊 JSON-RPC over WebSocket 已成事实标准,可直接暴露为 MCP 工具供 LLM 分析链上事件 ethereum.org。

  5. 智能运维:Prometheus 告警触发 MCP 修复脚本,实现自愈集群。

  6.  Chain-of-Tools 微服务:检索-翻译-代码生成等链式调用由 LLM 通过 MCP 协调。

  7.  IoT & 边缘推理:设备经 MCP 报数据,云端大模型下发指令,降低带宽。


8 未来路线图

  • 协议层统一:IETF 草案已探讨将 MCP 抽象到 RFC 层级,促进云原生网关直连。

  • 云厂商托管:AWS Q CLI、GCP Vertex AI 正内测 MCP connector The VergeAmazon Web Services, Inc.

  • 边缘计算:浏览器/IDE 侧轻量 MCP Client (如 Claude Code)将让工具无处不在 AnthropicClaude Code / VS Code 扩展正在推进离线 MCP Client。JSON-RPC

  • 安全与计费:OAuth Bearer + 请求签名已进规范草案,后续或引入 metering。


9 官方 & 社区资源速查

链接说明
MCP 正式规范 (2025-03-26)全 120 页 PDF & JSON-Schema(Model Context Protocol)
Messages API MCP ConnectorConnector 使用方法(Anthropic)
MCP Servers GitHub 目录40 + 官方 / 社区实现(GitHub)
MCP Inspector NPM

 GUI 调试器 npm

(Anthropic)
JSON-RPC 2.0 Spec协议基石 (JSON-RPC)
WebSocket RFC 6455传输基石(IETF Datatracker)
类型链接
MCP 官网 Intromodelcontextprotocol.io (Anthropic)
Anthropic 文档docs.anthropic.com › MCP (Anthropic)
2025-03-26 规范/specification/2025-03-26 (Anthropic)
OpenAI 公告openai.com › new-tools-and-features (openai.com)
JSON-RPC 2.0jsonrpc.org spec (jsonrpc.org)
RFC 6455ietf.org › rfc6455 (IETF Datatracker)
Ethereum JSON-RPCethereum.org › docs/apis/json-rpc (ethereum.org)
LSP 规范microsoft.com › language-server-protocol (Microsoft Learn)
AWS AMB 示例docs.aws.amazon.com › json-rpc-api (AWS 文档)
Replit 教程docs.replit.com › mcp-in-3 (Replit 文档)


10. 结语

MCP 并非要淘汰 REST,而是为 实时、多工具、强上下文 场景补上缺口。当更多云厂商、IDE 与硬件厂商加入,这一协议有望成为 AI 时代事实上的互联标准。立即复制上方代码,亲手跑一遍,相信你会体会到 MCP 带来的简洁与高效!


如果觉得有用,欢迎点赞,评论,转发

如果对 MCP 还有疑问或踩坑经历,欢迎评论区交流~


http://www.hkcw.cn/article/sbvybXZBuT.shtml

相关文章

超声波清洗机的作用是什么?使用超声波清洗机可以去除毛刺吗?

在现代制造业中,表面质量对产品的性能和外观至关重要。超声波清洗机作为一种高效的清洗工具,在去除表面污垢和缺陷方面发挥着关键作用。本文深圳科伟达将介绍超声波清洗机的作用,以及它是否能够有效去除毛刺。 超声波清洗机的作用&#xff1…

非常好看网站维护带倒计时模板+维护结束模板

非常好看网站维护带倒计时模板维护结束模板 网站维护带倒计时模板维护结束模板.zip - 蓝奏云

STM32F103_Bootloader程序开发05 - Keil修改生成文件的路径与文件名,自动生成bin格式文件

导言 通过Keil的相关配置,可以灵活地修改输出文件的保存路径及文件名称。在Bootloader程序开发过程中,合理配置输出文件对于后续固件升级和自动化脚本处理至关重要。完成路径和文件名配置后,还可以借助Keil自带的fromelf.exe工具,…

【MQ】消息队列的核心价值及技术选型

文章目录 一、什么是消息队列二、消息队列的核心功能三、主流消息队列技术对比ActiveMQ:逐渐淡出的老牌产品Kafka:大数据领域的王者RabbitMQ:企业级可靠选择Apache Pulsar:云原生时代的"新贵"NATS:轻量级消息…

本地部署消息代理软件 RabbitMQ 并实现外部访问( Windows 版本 )

RabbitMQ 是由 Erlang 语言开发的 消息中间件,是一种应用程序之间的通信方法。支持多种编程和语言和协议发展,用于实现分布式系统的可靠消息传递和异步通信等方面。 本文将详细介绍如何在 Windows 系统本地部署 RabbitMQ 并结合路由侠实现外网访问本…

如何在 Odoo 18 中创建 PDF 报告

如何在 Odoo 18 中创建 PDF 报告 Qweb 是 Odoo 强大的模板引擎,旨在轻松将 XML 数据转换为 HTML 文档。其功能特性包括基于属性的自定义、条件逻辑、动态内容插入及多样化的报告模板选项。这种多功能性使 Qweb 成为制作个性化、视觉吸引力强的报告、电子邮件和文档…

【面板数据】上市公司供应链网络地位数据(2001-2024年)

企业是产业链供应链的微观主体,其供应链网络布局是增强产业链供应链稳定性的重中之重,企业在供应链网络中的地位,已成为衡量其市场影响力和风险承受能力的重要指标。本次是上市公司供应链网络地位数据,数据年份为2001-2024年。 一…

EasyFileCount(文件查重工具) v3.0.5.1 便携版

EasyFileCount 是一款免费方便、快捷的文件管理软件,采用Java开发,主打一个清爽简洁、安全无害的使用体验,支持多盘高性能扫描。遍历扫描文件夹的速度还算比较快的,当然所谓的快慢取决于CPU、系统、硬盘种类、文件或文件夹的数量等…

【在线五子棋对战】一、项目简介 环境搭建

文章目录 Ⅰ. 项目简介Ⅱ. 开发环境Ⅲ. 核心技术Ⅳ. 环境搭建① CentOS-7.6环境搭建1、安装wget工具2、更换软件源3、安装第三方软件源4、安装lrzsz传输工具5、安装高版本gcc/g编译器6、安装gdb调试器7、安装git8、安装cmake9、安装boost库10、安装Jsoncpp库11、安装MySQL数据库…

MFC坦克大战游戏制作

MFC坦克大战游戏制作 前言 现在的游戏制作一般是easyx,有没有直接只用mfc框架的,笔者研究了一番,做出了一个雏形,下面把遇到的问题总结出来 一、MFC框架制作游戏 初步设想,MFC可以选用 对话框 或者 单文档 结构&…

12:遨博机器人SDK二次开发

一、流程步骤 1.获取当前点关节坐标 2.走当前点关节坐标 1.获取目标点x,y,z(位置坐标,以m为单位,需要*1000变成mm)和四元素(位姿坐标) 2.四元素→欧拉角(弧度制) 3.欧拉角&#x…

XPlifeapp:高效打印,便捷生活

在数字化时代,虽然电子设备的使用越来越普遍,但打印的需求依然存在。无论是学生需要打印课表、资料,还是职场人士需要打印名片、报告,一个高效便捷的打印软件都能大大提高工作效率。XPlifeapp就是这样一款超级好用的手机打印软件&…

DeepSeekMath:突破开放式语言模型中数学推理能力的极限

摘要 由于数学推理具有复杂且结构化的特性,这对语言模型构成了重大挑战。在本文中,我们介绍了 DeepSeekMath 7B 模型,该模型在 DeepSeek-Coder-Base-v1.5 7B 模型的基础上,使用从 Common Crawl 获取的 1200 亿个与数学相关的标记…

OpenBayes 教程上新丨谷歌发布 MedGemma,基于 Gemma 3 构建,专攻医学文本与图像理解

在 Google I/O 2025 大会上,公司 CEO Sundar Pichai 在活动首日的主题演讲中便分享了多项创新,例如 Gemini 2.5 的全系列升级,Agent Mode 上线 Chrome,编码智能体 Jules 开启公测,Android XR 正式版亮相等等。而在一众…

【数据结构】栈和队列(下)

目录 一、队列(先进先出的特殊结构) 队列的概念与结构 二、代码实现 1、定义队列的结构 2、队列的初始化操作 3、判空操作 4、入队操作 5、出队操作 6、取队头、队尾操作 7、队列销毁操作 8、队列中有效数据个数 9、测试代码 10、.h文件 一…

基于卫星遥感数据识别互花米草及原生植被分布及生长的技术原理、关键方法

通过卫星遥感监测生态保护红线,基于卫星遥感数据识别互花米草及原生植被(如芦苇)的分布、面积及生长状况,主要利用不同植被类型的光谱特征差异、物候周期差异和遥感影像处理技术实现。 上星图地球开放平台获取更多生态保护解决方案…

可视化图解算法47:包含min函数的栈

1. 题目 牛客网 面试笔试 TOP101 | LeetCode 155. 最小栈 描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。 此栈包含的方法有&#x…

windows系统下通过visual studio使用clang tooling

vs吃上clang tooling 通过源码编译clang安装必备软件GnuWin32 Tools: 拉取/下载git仓库编译 在项目中使用clangTool 通过源码编译clang 教程参考安装教程 作者本人亲身使用流程: 安装必备软件 Git:作者已经有了,自己查CMake&am…

路由器、网关和光猫三种设备有啥区别?

无论是家中Wi-Fi信号的覆盖,还是企业网络的高效运行,路由器、网关和光猫这些设备都扮演着不可或缺的角色。然而,对于大多数人来说,这三者的功能和区别却像一团迷雾,似懂非懂。你是否曾疑惑,为什么家里需要光…

攻防世界János-the-Ripper

打开压缩包是一个文件,用010Editor打开可以发现里面有隐藏文件flag.txt 此时想到分离文件,利用binwalk工具 利用binwalk生成出的是一个压缩包,解压缩但是发现竟然解压需要密码 这里就可以开始暴力破解密码了,这里我用的是ARCHPR工…