新闻详情

新闻详情

首页 / 资讯中心 / 详情

MCP:AI时代的USB-C标准

发布时间:2026/7/19 16:02:44
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 才能从玩具走向生产。
网站建设 高端定制 企业官网