MCP (Model Context Protocol):AI应用连接外部世界的标准协议
MCP (Model Context Protocol)AI应用连接外部世界的标准协议随着大语言模型能力的不断增强AI应用已不再局限于纯粹的文本对话而是需要与外部世界进行深度交互——读写文件、查询数据库、调用第三方API、搜索网页等。然而让AI应用对接外部系统一直是一个工程难题每个服务接口不同、工具定义重复、集成成本高昂。MCPModel Context Protocol的出现正是为了系统性地解决这一问题。1. 什么是MCPMCP是由Anthropic于2024年底推出的开放标准协议旨在为AI应用与外部系统之间提供统一的交互规范。在MCP出现之前开发者必须为每个外部服务手动定义Tool——编写函数签名、参数描述、调用逻辑等。这种方式存在两个核心痛点复用性差不同Agent可能需要同样的工具如文件操作、天气查询但每次都需重复定义。集成成本高全球有数以万计的服务接口各异逐一适配工作量巨大。MCP的角色可以类比为AI世界的USB接口协议服务提供方遵循MCP协议封装并发布自己的工具服务。AI应用方基于MCP协议直接对接任何兼容的外部服务无需手动定义Tool。这一设计从根本上解决了工具复用和服务集成的问题。2. 核心概念MCP的架构由三个核心角色组成概念说明MCP Server提供工具服务的应用可以是远程服务也可以是本地服务MCP Client连接到MCP Server读取工具信息供Host使用MCP Host协调和管理多个MCP Client的AI应用如LangChain Agent以一个典型的AI应用为例该应用需要文件操作、数据库操作和Sentry远程监控三个能力。此时可以配置三个MCP Client分别对接三个独立的MCP Server各司其职互不干扰。┌─────────────────────────────────┐ │ MCP Host (AI应用) │ │ ┌──────────┬──────────┬──────┐ │ │ │MCP Client│MCP Client│MCP │ │ │ │(文件操作) │(数据库) │Client│ │ │ └────┬─────┴────┬─────┴──┬───┘ │ └───────┼──────────┼────────┼─────┘ │ │ │ ┌────▼───┐ ┌───▼────┐ ┌▼────────┐ │MCP │ │MCP │ │MCP │ │Server │ │Server │ │Server │ │(本地) │ │(本地) │ │(远程) │ └────────┘ └────────┘ └─────────┘通信方式MCP Client与MCP Server之间支持两种通信方式stdio标准输入输出Client将MCP Server脚本作为子进程运行通过标准输入输出进行进程间通信。没有网络延迟适合本地服务。脚本的启动方式通常有两种npx基于Node.js的包管理工具uvx基于Python的uv工具SSE / HTTPServer-Sent EventsClient通过HTTP请求与远程MCP Server交互存在网络延迟适合云端服务。3. 在LangChain中使用MCPLangChain通过langchain-mcp-adapters库实现了对MCP的支持。uvaddlangchain-mcp-adapters3.1 对接stdio类型服务——以Time MCP为例Time MCP提供时间查询和时区转换功能基于stdio通信。fromlangchain_mcp_adapters.clientimportMultiServerMCPClient clientMultiServerMCPClient({time:{transport:stdio,command:uvx,args:[mcp-server-time,--local-timezoneAsia/Shanghai]}})# MultiServerMCPClient是异步的需要awaittoolsawaitclient.get_tools()fortoolintools:print(tool.name)# get_current_time, convert_timeprint(tool.description)获取工具后即可正常创建Agentfromlangchain.agentsimportcreate_agentfromlangchain_core.messagesimportHumanMessage agentcreate_agent(deepseek-chat,tools)responseawaitagent.ainvoke({messages:[HumanMessage(现在几点了)]})Agent会自动调用get_current_time工具获取并返回当前时间。3.2 对接HTTP类型服务——以Kiwi MCP为例Kiwi Travel MCP提供航班搜索功能基于HTTP通信是少有的免费航班搜索MCP服务。clientMultiServerMCPClient({kiwi-com-flight-search:{transport:http,url:https://mcp.kiwi.com}})toolsawaitclient.get_tools()agentcreate_agent(modeldeepseek-chat,toolstools,system_promptYou are a travel agent. Help user find best flights. If the user uses Chinese, use zh-cn as the locale value.)responseawaitagent.ainvoke({messages:[HumanMessage(查一下2026年5月15日晚上从北京飞杭州的航班。)]})注意Kiwi的地域参数locale中中文需指定为zh-cn而非zh否则会导致报错。这一点Tool描述中未明确说明需在系统提示词中额外声明。对于国内航班查询也可以考虑飞常准提供的MCP服务https://mcp.variflight.com/不过该服务是收费的。3.3 同时对接多个MCP服务MultiServerMCPClient本身就支持多服务配置可以在一个Client中同时连接多个MCP ServerclientMultiServerMCPClient({time:{transport:stdio,command:uvx,args:[mcp-server-time,--local-timezoneAsia/Shanghai]},kiwi-com-flight-search:{transport:http,url:https://mcp.kiwi.com}})toolsawaitclient.get_tools()# tools中包含来自两个MCP Server的所有工具4. 自定义MCP Server在企业内部不同团队也可以将自身服务封装为MCP Server供其他团队复用。4.1 使用FastMCP创建服务FastMCP是目前创建自定义MCP Server最简洁的方式uvaddfastmcp以一个数学运算MCP Server为例math_mcp_server.pyfromfastmcpimportFastMCP mcpFastMCP(Math)mcp.tool()defadd(a:float,b:float)-float:Add two numbersreturnabmcp.tool()defmultiply(a:float,b:float)-float:Multiply two numbersreturna*bmcp.tool()defsquare_root(x:float)-float:Calculate the square root of a numberreturnx**0.5if__name____main__:mcp.run(transportstdio)FastMCP提供了三类装饰器装饰器作用常用程度mcp.tool()定义MCP工具核心功能必备mcp.resource()返回资源数据类似扩展知识库可选mcp.prompt()返回预设提示词可选通常只需定义tool即可满足绝大多数场景。4.2 连接自定义MCP服务由于是本地Python文件启动命令使用python而非npx或uvxclientMultiServerMCPClient({math:{transport:stdio,command:python,args:[math_mcp_server.py]}})toolsawaitclient.get_tools()agentcreate_agent(modeldeepseek-chat,toolstools,system_promptYou are a helpful agent. You must use tools to answer math questions.)responseawaitagent.ainvoke({messages:[HumanMessage(467和529的平方根之和是多少?)]})Agent会依次调用square_root计算两个数的平方根再调用add求和最终返回结果约44.6102。关键点采用stdio方式时MCP Server文件无需手动启动MCP Client会自动将其作为子进程加载运行。5. 总结维度说明MCP是什么开放协议标准化AI应用获取外部工具的方式类比AI世界的USB接口架构Client-Server架构Host管理多个ClientClient对接Server通信方式stdio本地无网络延迟/ HTTP远程适合云服务使用流程配置MultiServerMCPClient → get_tools()获取工具 → 创建Agent调用自定义Server使用FastMCP通过mcp.tool装饰器定义工具mcp.run()启动服务MCP的意义在于它将工具集成从手工定制推向了即插即用。随着越来越多服务提供方接入MCP生态AI应用开发者将能够以极低的成本对接丰富的外部能力而不再为重复的工具定义和接口适配所困扰。