MCP:AI时代的USB-C标准
一、概念什么是 MCPMCPModel Context Protocol是 Anthropic 推出的开放协议定义了 LLM 应用与外部工具、数据源之间的标准通信接口。一个类比就够了MCP 是 AI 时代的 USB-C。USB-C 之前每个设备厂商自建接口——Lightning、Micro-USB、Mini-USB……你出门要带一包线。USB-C 统一之后一根线走天下。MCP 之前也一样每个 LLM 应用要对接 GitHub就得写一套 GitHub 集成要对接数据库再写一套数据库适配。N 个应用 x M 个工具 NxM 套集成代码。MCP 的目标写一次适配所有 LLM 应用通用。核心定义术语含义MCP Server暴露工具/数据的服务端如 filesystem server、github serverMCP Client连接 Server 并消费其能力的客户端如 LangChain AgentProtocolClient 与 Server 之间的 JSON-RPC 通信协议MCP 不是 LangChain 的私有协议——它是 Anthropic 开源、社区驱动的标准任何 LLM 框架都可以接入。一句话总结MCP 是 AI 时代的 USB-C——用统一协议替代 NxM 集成一次实现处处可用。二、价值为什么不能继续各写各的1. 解决 NxM 集成爆炸没有 MCP 的世界5 个 LLM 应用 x 10 个工具 50 套集成代码有 MCP 的世界10 个 MCP Server每个工具写一次 5 个 MCP Client每个应用接一次协议 10 5 15而不是 50从 NxM 降到 NM这就是标准协议的威力。2. 生态复用一次实现处处可用社区写好了一个mcp-server-github所有支持 MCP 的框架都能用——LangChain、Claude Desktop、Cursor、Cline……你不需要为每个框架重新写 GitHub 集成。3. 与 Function Calling 的差异维度Function CallingMCP定义方各模型厂商自定义Anthropic 开源协议社区标准工具在哪嵌在应用代码里独立 Server可远程部署跨模型每个模型的格式不同统一协议跨模型通用跨应用不可复用一次实现所有应用可用动态发现需硬编码工具列表Client 运行时发现 Server 的能力Function Calling 解决的是模型怎么调工具MCP 解决的是工具怎么暴露给所有模型——两者互补不冲突。4. 跨厂商兼容MCP 不绑定任何模型厂商。OpenAI、Anthropic、Google、DeepSeek 的模型都能通过 MCP 协议访问同一组工具。工具实现一次模型随意切换。核心价值MCP 把集成成本从 NxM 降到 NM工具一次实现、生态复用、跨厂商兼容——标准化的网络效应。三、用法四种典型接入方式用法 1用 langchain-mcp-adapters 连接已有 MCP Server社区已有大量现成的 MCP Server直接连from langchain_mcp_adapters.client import MultiServerMCPClientfrom langchain.agents import create_agent# 连接 filesystem MCP Server官方提供async with MultiServerMCPClient({filesystem: {command: npx,args: [-y, modelcontextprotocol/server-filesystem, /tmp],transport: stdio,}}) as client:tools client.get_tools()agent create_agent(modeldeepseek:deepseek-chat,toolstools,)result await agent.ainvoke({messages: [{role: user, content: 列出 /tmp 下的文件}]})print(result)不需要自己写任何工具代码——MCP Server 已经实现好了langchain-mcp-adapters自动把 MCP Tools 转成 LangChain Tools。用法 2把 MCP Tools 装进 create_agentMCP Tools 可以和普通 LangChain Tools 混用from langchain_mcp_adapters.client import MultiServerMCPClientfrom langchain.agents import create_agentfrom langchain_core.tools import tool# 自定义 LangChain 工具tooldef calculate(expression: str) - str:计算数学表达式return str(eval(expression))# MCP 工具 自定义工具混用async with MultiServerMCPClient({github: {command: npx,args: [-y, modelcontextprotocol/server-github],transport: stdio,env: {GITHUB_PERSONAL_ACCESS_TOKEN: ghp_xxx},}}) as client:mcp_tools client.get_tools() # GitHub MCP 工具all_tools mcp_tools [calculate] # 混合工具列表agent create_agent(modeldeepseek:deepseek-chat,toolsall_tools,)result await agent.ainvoke({messages: [{role: user, content: 查看 langchain 仓库的 star 数再算一下它的平方}]})print(result)Agent 会自动选择用 GitHub 工具查 star再用 calculate 工具算平方——MCP 工具和原生工具对 Agent 来说没有区别。用法 3MultiServerMCPClient 连接多个 Server一个 Agent 同时访问文件系统、数据库、GitHubfrom langchain_mcp_adapters.client import MultiServerMCPClientfrom langchain.agents import create_agentserver_config {filesystem: {command: npx,args: [-y, modelcontextprotocol/server-filesystem, /data],transport: stdio,},postgres: {command: npx,args: [-y, modelcontextprotocol/server-postgres,postgresql://user:passlocalhost/mydb],transport: stdio,},github: {command: npx,args: [-y, modelcontextprotocol/server-github],transport: stdio,env: {GITHUB_PERSONAL_ACCESS_TOKEN: ghp_xxx},},}async with MultiServerMCPClient(server_config) as client:# 自动汇聚三个 Server 的所有工具all_tools client.get_tools()print(f可用工具: {[t.name for t in all_tools]})agent create_agent(modeldeepseek:deepseek-chat,toolsall_tools,)result await agent.ainvoke({messages: [{role: user,content: 从 GitHub 读取 config.json写入数据库的 config 表}]})三个 Server 的工具自动汇聚Agent 跨 Server 编排——读文件、查数据库、操作 GitHub一条指令搞定。用法 4自己写一个 MCP Server用 MCP Python SDK 暴露自定义能力# server.py —— 一个简单的待办事项 MCP Serverfrom mcp.server.fastmcp import FastMCPmcp FastMCP(todo-server)# 用内存存储演示用todos: dict[int, dict] {}_next_id 1mcp.tool()def add_todo(title: str, priority: str medium) - str:添加一条待办事项global _next_idtodos[_next_id] {title: title, priority: priority, done: False}_next_id 1return f已添加: [{priority}] {title} (id{_next_id - 1})mcp.tool()def list_todos() - str:列出所有待办事项if not todos:return 暂无待办事项lines []for tid, t in todos.items():status DONE if t[done] else TODOlines.append(f {status} [{t[priority]}] {t[title]} (id{tid}))return \n.join(lines)mcp.tool()def complete_todo(todo_id: int) - str:将待办事项标记为已完成if todo_id not in todos:return f未找到 id{todo_id} 的待办事项todos[todo_id][done] Truereturn f已完成: {todos[todo_id][title]}if __name__ __main__:mcp.run() # 默认 stdio 传输然后在 LangChain 中连接from langchain_mcp_adapters.client import MultiServerMCPClientfrom langchain.agents import create_agentasync with MultiServerMCPClient({todo: {command: python,args: [server.py],transport: stdio,}}) as client:agent create_agent(modeldeepseek:deepseek-chat,toolsclient.get_tools(),)result await agent.ainvoke({messages: [{role: user,content: 帮我添加一个高优先级待办写 MCP 教程然后列出所有待办}]})print(result)自己写的 Server 和社区 Server 对 Agent 来说完全一样——这就是协议标准化的威力。四、原理MCP 的协议设计与转换机制1. MCP 三大原语MCP Server 通过三种原语暴露能力原语作用类比Tools可被模型调用的函数HTTP POST —— 执行操作有副作用Resources可被读取的数据/文件HTTP GET —— 读取信息无副作用Prompts预定义的提示词模板书签 —— 快速加载常用 prompt最常用的是Tools——这也是 LangChain 适配器主要转换的部分。Resources 提供结构化数据如数据库 SchemaPrompts 提供领域模板如代码审查模板。2. 传输层三种方式传输方式场景特点stdio本地进程通信最简单Client 启动 Server 子进程通过 stdin/stdout 通信SSE远程 HTTP 服务Server-Sent Events适合已有 HTTP 基础设施Streamable HTTP新一代远程通信MCP 2025-03 规范引入支持双向流、无状态部署本地开发用 stdio 最方便——不需要起服务Client 自动拉起 Server 进程。生产部署用 HTTP 传输Server 独立部署、水平扩展。3. Client-Server 模型------------- ------------- -------------| LLM | | MCP Client | | MCP Server || (LangChain)|----| (适配层) |----| (工具/数据) |------------- ------------- -------------1. Agent 调用 2. 协议转换 3. 执行并返回LangChain Tool JSON-RPC 工具结果流程Agent 看到的是 LangChain Tool正常调用MCP Client 把 Tool 调用翻译成 JSON-RPC 请求发送给 ServerServer 执行操作返回结果Client 把结果包装成 LangChain ToolMessage返回给 AgentAgent 完全不知道背后是 MCP——它只看到 LangChain Tool。4. 与 LangChain Tools 的转换关系langchain-mcp-adapters做的核心事情MCP Tool Schema LangChain Tool Schema------------------- ---------------------{ tool def xxx(...):name: add_todo, - 添加待办事项description: ..., def add_todo(title: str, ...):inputSchema: { ...type: object,properties: {...}}}转换规则name → 函数名description → 工具 docstring模型靠这个判断何时调用inputSchema → 函数参数Pydantic 模型调用时的参数 → JSON-RPC 请求的params.arguments反过来也可以LangChain Tool 可以包装成 MCP Server 暴露出去——让其他 MCP Client 也能用你的工具。5. 动态发现机制MCP Client 连接 Server 后第一步是discovery发现Client ----tools/list---- Server Client ---[{name, description, inputSchema}, ...]--- Server不需要硬编码工具列表——Client 运行时自动发现 Server 提供了哪些工具。这意味着Server 升级加了新工具Client 自动感知不同 Server 可以提供同名工具Client 负责消歧按需连接不用时断开小结视角一句话概念Anthropic 推出的开放协议定义 LLM 应用与工具/数据源的标准通信接口——AI 时代的 USB-C价值把集成成本从 NxM 降到 NM一次实现生态复用跨厂商兼容与 Function Calling 互补用法langchain-mcp-adapters 连接已有 ServerMCP Tools 混入 create_agentMultiServerMCPClient 聚合多 ServerFastMCP 自建 Server原理三大原语Tools/Resources/Prompts三种传输stdio/SSE/HTTPClient-Server 模型自动发现MCP Tool - LangChain Tool 双向转换记住一件事MCP 的核心原则是用标准协议替代碎片集成——就像 USB-C 统一了充电接口MCP 统一了 AI 工具接口让一次实现成为生态资产。系列完结高阶模式三篇走完LangChain 的高阶模式体系就位了#概念角色1Multi-agent协作——多个 Agent 分工协同2垂类 Agent专精——领域知识 专用工具链3MCP连接——标准协议打通工具生态Multi-agent 解决谁来做垂类 Agent 解决做得专MCP 解决用什么——三者协同Agent 才能从玩具走向生产。

相关新闻

CodeGraph 使用指南

CodeGraph 使用指南

快速安装一键安装(推荐,无需 Node.js)bash# macOS / Linux curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh# Windows (PowerShell) irm https://raw.githubusercontent.com/colbymchenry/codegr…

2026/10/13 16:00:19 阅读更多 →
Cursor写了一周的代码,我验收时差点砸了电脑

Cursor写了一周的代码,我验收时差点砸了电脑

Cursor写了一周的代码,我验收时差点砸了电脑300万行AI代码写了个浏览器,结果连编译都通不过一、事情的起因 上个月接了个活,重构一个老旧的管理后台。 项目不大,但业务逻辑绕得很——权限分级、审批流、多租户数据隔离&#xff0c…

2026/10/14 0:50:19 阅读更多 →
抖音无水印批量下载器:简单三步实现高效内容管理终极指南

抖音无水印批量下载器:简单三步实现高效内容管理终极指南

抖音无水印批量下载器:简单三步实现高效内容管理终极指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

2026/10/11 20:25:22 阅读更多 →

最新新闻

栈与队列实战指南:从原理到源码的完整解析

栈与队列实战指南:从原理到源码的完整解析

栈与队列是数据结构里最基础也最容易被轻视的两个结构。很多初学者觉得它们“不就是个数组加点限制吗”,但实际工作中,从函数调用栈到消息队列,从浏览器的前进后退到操作系统的任务调度,到处都有它们的影子。面试的时候&#xff0…

2026/10/14 3:57:41 阅读更多 →
网络安全行业前景如何?入门方向、岗位选择与学习路径全解析

网络安全行业前景如何?入门方向、岗位选择与学习路径全解析

家里小孩突然跟我说,想学网络安全。我当时第一反应是愣了两秒,然后脑子里全是网上那些"月薪五万""黑客大佬""缺口百万"的段子,但转头又想到一些行业的负面新闻,心里有点打鼓。我相信很多家长遇到这…

2026/10/14 3:57:41 阅读更多 →
Magisk Manager 自定义更新通道:从 update.json 搭建到排错全指南

Magisk Manager 自定义更新通道:从 update.json 搭建到排错全指南

前不久有个朋友找我诉苦:他一直在用一个第三方编译版Magisk,每次官方有更新,他都要去发布页手动下载,再看更新日志里改了些什么。看了一半我就问他,你为什么不直接用Magisk Manager的自定义更新通道,把更新…

2026/10/14 3:57:41 阅读更多 →
大模型API计费与Key管理实战:从余额监控到密钥轮换

大模型API计费与Key管理实战:从余额监控到密钥轮换

1. 为什么“查计费面板、充值、换API Key”成了AI开发者的日常做AI应用开发的朋友,最近应该都有同一个体感:模型接口的账单比代码报错还让人紧张。应用跑得好好的,测试群里突然来一句“怎么又停了”,登录后台一看,不是…

2026/10/14 3:57:41 阅读更多 →
ITU-R BT.2154解读:数字地面电视接收机性能评估与频谱规划实践

ITU-R BT.2154解读:数字地面电视接收机性能评估与频谱规划实践

做频谱规划和无线覆盖优化的朋友,对ITU-R BT系列建议书应该都不陌生。但这个系列编号密集、内容交错,真到用的时候很容易挑花眼。最近我把ITU-R BT.2154从头到尾读了一遍,又把它用到一次跨系统频率迁移的兼容性评估里,这篇文章就当…

2026/10/14 3:57:41 阅读更多 →
网络安全密码学核心考点:从古典密码到数字签名复习指南

网络安全密码学核心考点:从古典密码到数字签名复习指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:56:41 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →