摘要:MCP(Model Context Protocol,模型上下文协议)是由Anthropic开源发布的一项技术,旨在作为AI大模型与外部数据和工具之间沟通的“通用语言”。它通过标准化协议,让大模型能够自动调用外部工具完成任务,提升效率和灵活性。MCP整合了Function call标准,降低了开发成本,适用于复杂任务处理。其应用广泛,包括智能问答、编程辅助和办公自动化等场景,未来有望拓展至更多领域并推动AI生态系统的发展。
一、MCP 是什么
MCP,即 Model Context Protocol,模型上下文协议 ,是由 Claude 的母公司 Anthropic 于 2024 年 11 月开源发布的一项技术。简单来说,MCP 是 AI 大模型的标准化工具箱,也可以把它想象成 AI 大模型和外部数据、工具之间沟通的 “通用语言” 或者 “万能插座”。
在日常工作和学习中,我们经常需要与浏览器、文件、数据库和代码仓库等外部工具进行交互。在传统方式中,我们需要手动截图或复制文本,再将其粘贴到 AI 窗口中进行对话。而 MCP 通过标准化的协议,自动化了这一步骤,让大模型可以利用这些工具与外界互动,获取信息并且完成具体任务。
MCP 服务充当 AI 和外部工具之间的桥梁,能够自动替代人类访问和操作这些外部工具。每个 MCP 服务(也称为 MCP Server)都专注于特定的任务。比如有的负责读写浏览器、有的负责读写本地文件、有的操作 Git 仓库等等 。MCP Server 通常就是运行在本地的一段 Node.js 或者 Python 程序。大模型通过操作系统的标准输入输出(stdio),也就是我们常说的输入与输出通道,来调用某个 MCP Server,它的消息格式是 JSON,这是一种常用的数据交换格式。MCP Server 在接收到请求后,会通过自身的代码功能,或者使用 API 请求,访问外部工具,完成任务。
二、MCP 的技术原理
MCP 技术原理的核心,在于建立大模型与外部工具之间的有效沟通桥梁。当我们向搭载 MCP 技术的大模型提出任务请求时,这个请求就像一颗投入湖面的石子,引发一系列有序的连锁反应。
大模型首先会通过操作系统标准输入通道(stdio)调用 MCP Server。这个过程就好比你在电脑操作系统中,通过特定的指令调用某个应用程序。而大模型使用的 “指令”,是遵循特定 JSON 结构的消息格式 ,这就像是它们之间沟通的 “密码本”,确保信息传递的准确性。
MCP Server 收到请求后,就如同接到任务的 “执行者”,会根据自身的功能,利用代码功能或者向外部工具发送 API 请求,进而访问这些工具来完成任务。比如,若大模型需要获取某个网页的内容,它就会调用负责网页访问的 MCP Server,MCP Server 再通过网页抓取相关的代码或 API,从互联网上获取网页内容,并将结果返回给大模型。
MCP 在技术原理上的一大创新,是整合了 Function call 标准。在 MCP 出现之前,不同大模型的 Function call 标准就像不同国家的语言,各有各的规则,导致大模型与外部工具之间的交互十分不便。而 MCP 就像是一个强大的 “翻译官”,将这些不同的标准整合为一个统一的协议,让几乎所有的大模型都能按照这个标准与外部工具进行交互 。这不仅降低了开发成本,还极大地提高了大模型与外部工具协作的效率和灵活性,使得大模型在处理各种任务时更加得心应手。
三、MCP 的安装与配置
下面,我将以在 AI 编程工具 Cursor 上配置 MCP 为例,为大家进行详细的操作演示。
3.1 升级 Cursor 至最新版本
首先,打开 Cursor,点击界面中的设置按钮 ,进入设置页面。在设置页面中找到 “Beta features” 选项,在这里将 Cursor 升级为最新版本。这一步非常关键,因为新版本通常会修复一些旧版本的问题,并且可能会对 MCP 功能进行优化和完善,确保我们能够顺利地使用 MCP 的各项功能。
3.2 创建配置文件
完成版本升级后,点击 MCP 配置选项。当前 MCP 是通过文件方式进行配置的,所以我们需要在根目录下创建一个名为 “.cursor” 的文件夹,然后在该文件夹内再创建一个后缀名为.json 的文件,用于存放 MCP 的配置信息 。这个.json 文件就像是一个 “指令集”,告诉 Cursor 如何与 MCP Server 进行交互。
3.3 复制代码并完成配置
接下来,打开 GitHub 网站,注册账号后,在搜索栏中输入 “MCP(Model Context Protocol Servers)”,找到对应的页面。以配置 GitHub 为例,点击进入 GitHub 相关页面后,向下滑动页面找到 “NPX” 部分,这里会展示一段代码,这段代码就是我们配置 MCP Server 的关键信息。复制这段代码,并将其粘贴到刚才在 Cursor 中新建的.json 文件中 。粘贴完成后,根据实际需求,可能还需要对代码中的一些参数进行修改,比如一些需要填写个人密钥、token 的地方,要替换成自己的相关信息,以确保 MCP Server 能够正常运行并与 Cursor 进行安全通信。
完成上述步骤后,重启 Cursor。再次打开 Cursor 时,如果看到 MCP 配置相关位置显示绿色指示灯亮起,那就表示 Cursor 已成功识别 MCP Server,MCP 配置成功 。如果指示灯未亮,或者显示异常,那就需要仔细检查之前的操作步骤,比如配置文件中的代码是否复制正确、参数修改是否无误等,也可以查看相关的日志信息来定位问题所在。
四、MCP 的应用案例
4.1 智能问答系统
以某智能客服为例,当用户咨询 “我想了解最近一个月内北京地区销量最高的产品是哪款” 时,智能客服背后的大模型通过 MCP 调用数据库查询工具,直接从企业的销售数据库中获取相关数据,精准地回答用户问题 。而在以往,可能需要人工先从数据库中导出数据,再进行分析,最后才能回复用户,整个过程繁琐且耗时。通过 MCP,智能问答系统的响应速度大幅提升,准确率也得到了保障,为用户提供了更加高效、准确的服务体验 。
4.2 编程辅助
在软件开发过程中,开发人员使用搭载 MCP 技术的编程工具,如前面提到的 Cursor。当需要实现一个复杂的功能,比如在一个电商项目中创建用户订单管理模块时,开发人员只需在 Cursor 中输入自然语言描述,如 “创建一个用户订单管理模块,包含订单的创建、查询、修改和删除功能,数据库使用 MySQL” 。Cursor 利用 MCP 调用相关的代码生成工具、数据库连接工具等,自动生成基础代码框架,并帮助开发人员完成数据库表结构设计、SQL 语句编写等工作,极大地提高了开发效率,减少了开发过程中的错误,让开发人员能够更加专注于业务逻辑的实现 。
4.3 办公自动化
在办公场景中,MCP 同样发挥着重要作用。例如,在处理一份月度销售报告时,员工可以通过自然语言指令,让办公软件利用 MCP 自动从多个数据源,如 Excel 销售数据文件、CRM 系统中的客户数据等,提取相关信息,进行数据整合和分析,最后自动生成报告文档 。以前,员工可能需要花费大量时间手动复制粘贴数据,进行格式调整和数据分析,现在借助 MCP,这些繁琐的操作可以在短时间内自动完成,办公效率得到了显著提升 。
五、MCP 与 Function call 的区别
MCP 和 Function call 虽然都涉及大模型与外部工具的交互,但它们在多个方面存在明显区别 。
从功能角度来看,Function call 本质上是大模型调用外部函数或 API 的一种机制,是大模型自身能力的直接扩展 。比如 GPT-4 可以利用 Function call 直接生成结构化的函数调用请求,查询天气、计算数值等操作 。而 MCP 则更侧重于提供一个标准化的协议,它像是一个 “万能适配器”,解决的是大模型与各种外部工具、数据源之间的兼容性问题,让不同的模型和工具能够高效地互操作 。
在实现方式上,Function call 通常与特定的大模型紧密绑定,依赖于模型厂商的特定实现 。不同的大模型在 Function call 的实现方式和接口上可能各不相同,缺乏统一的标准,这就导致开发者在使用时需要针对不同模型进行大量的适配工作 。而 MCP 则遵循统一的标准协议,如 JSON-RPC 2.0,开发者按照这个标准开发一次接口,就可以被多个大模型调用,大大降低了开发成本和复杂性 。
从应用场景来看,Function call 适用于处理简单、低延迟的任务,比如实时翻译、情感分析、查询实时天气等,能够在模型推理过程中快速调用,高效地完成任务 。而 MCP 更适合复杂、异步的任务,例如企业内部系统的跨平台数据整合,将 CRM、ERP 等系统封装为 MCP Server,供多个 Agent 安全调用,实现复杂的数据交互和业务流程 。
简而言之,MCP 解决的是 “如何让 AI 连接万物” 的通用性问题,而 Function call 解决的是 “如何让 AI 快速执行特定操作” 的效率问题 。二者并不是相互替代的关系,而是互补协作,共同推动 AI 从单纯的对话交互向自动化任务执行迈进,在不同的场景下发挥各自的优势,为 AI 应用的发展提供强大的支持 。
六、MCP 的发展趋势与代码案例
6.1 发展趋势
随着人工智能技术的飞速发展,MCP 作为连接大模型与外部工具的关键技术,其未来发展趋势备受关注 。
在技术层面,MCP 有望实现更加智能化的任务处理。通过不断优化算法和模型,MCP 将能够更精准地理解用户需求,自动调用最合适的外部工具和数据源,实现任务的高效执行 。例如,在智能写作场景中,MCP 不仅能帮助作者查询资料、校对语法,还能根据文章的风格和主题,自动生成相关的案例和引用,提升文章的质量和专业性 。
在应用领域,MCP 将进一步拓展其边界。除了现有的办公、编程、问答等场景,MCP 还将深入到医疗、金融、教育等更多垂直领域 。在医疗领域,医生可以借助 MCP 调用患者的病历数据、医学影像资料以及最新的医学研究成果,为诊断和治疗提供更全面的支持 ;在金融领域,MCP 可以帮助投资者快速分析市场数据、评估投资风险,制定更合理的投资策略 。
从生态建设角度来看,MCP 将促进形成更加开放和繁荣的 AI 生态系统。越来越多的开发者和企业将基于 MCP 开发各种创新应用和服务,不同的大模型、工具和数据源之间将实现更紧密的协作和共享 。这将推动 AI 技术的普及和应用,为各行各业的数字化转型提供强大的动力 。
当然,MCP 的发展也面临一些挑战。例如,如何确保数据的安全和隐私,如何解决不同系统之间的兼容性问题,以及如何应对可能出现的技术垄断等 。但随着技术的不断进步和相关标准的完善,这些问题有望逐步得到解决 。可以预见,MCP 将在未来的 AI 发展中扮演越来越重要的角色,为我们的生活和工作带来更多的便利和创新 。
6.2 经典代码案例及解释
1. 客户端连接到MCP服务器(SSE方式)
async def connect_to_sse_server(self, server_url: str):
"""连接到使用SSE传输的MCP服务器"""
self._streams_context = sse_client(url=server_url)
streams = await self._streams_context.__aenter__()
self._session_context = ClientSession(*streams)
self.session = await self._session_context.__aenter__()
await self.session.initialize()
response = await self.session.list_tools()
tools = response.tools
print("\n已连接到服务器,可用工具:", [tool.name for tool in tools])
解释:这段代码展示了客户端如何通过SSE(Server-Sent Events)方式连接到MCP服务器。它首先创建一个SSE客户端上下文,然后进入上下文获取数据流,接着创建客户端会话并初始化。最后,它列出服务器支持的工具,验证连接是否成功。
2. 定义一个MCP工具(天气查询)
@mcp.tool()
async def get_weather(city: str, unit: Literal["celsius", "fahrenheit"] = "celsius") -> str:
"""获取城市实时天气信息"""
# 模拟天气查询逻辑
weather_info = f"{city}: 晴 25°C, 湿度45%, 东南风3级"
return weather_info
解释:这是一个简单的MCP工具定义,用于获取指定城市的天气信息。它使用@mcp.tool()
装饰器将函数注册为MCP工具,函数参数和返回值类型都明确指定,便于客户端调用时传递参数和处理返回结果。
3. 启动MCP服务器(SSE方式)
if __name__ == "__main__":
mcp_server = mcp._mcp_server
starlette_app = create_starlette_app(mcp_server, debug=True)
uvicorn.run(starlette_app, host="0.0.0.0", port=8020)
解释:这段代码展示了如何启动一个基于SSE的MCP服务器。它首先创建一个MCP服务器实例,然后通过create_starlette_app
函数将其包装为一个Starlette应用,最后使用uvicorn
运行该应用,监听指定的主机和端口。
七、总结与展望
7.1 文章总结
MCP 作为连接大模型与外部工具的创新技术,为人工智能的应用和发展开辟了新的道路。它以其独特的标准化协议,打破了大模型与外部世界之间的壁垒,实现了高效、灵活的数据交互和任务执行,在智能问答、编程辅助、办公自动化等多个领域展现出了巨大的应用价值和潜力 。
随着技术的不断演进,MCP 有望在未来进一步拓展其应用边界,为更多行业带来智能化的解决方案。同时,我们也期待更多的开发者能够关注和探索 MCP 技术,共同推动人工智能生态系统的繁荣发展 。如果你对人工智能技术充满热情,不妨深入了解 MCP,开启你的创新之旅,说不定下一个基于 MCP 的创新应用就将由你创造!
7.2 关键字解释
-
MCP (Model Context Protocol):模型上下文协议,用于标准化AI大模型与外部工具之间的交互。
-
Function call:大模型调用外部函数或API的机制,与MCP不同,它通常依赖于特定模型的实现。
-
SSE (Server-Sent Events):一种服务器推送技术,允许服务器向客户端发送实时消息,常用于MCP的网络传输。
-
stdio:标准输入输出,用于在同一台服务器上实现MCP客户端与服务器之间的通信。
-
JSON-RPC 2.0:一种基于JSON的RPC协议,MCP遵循该协议进行数据交换。
-
Agent:在AI领域,指能够自主执行任务的智能体,MCP常用于连接和管理Agent的工具。
-
API:应用程序接口,MCP Server通过API与外部工具交互。
-
Cursor:一个支持MCP的AI编程工具,可用于代码生成和项目管理。
-
OpenAI:一个知名的人工智能研究实验室,其模型常与MCP结合使用。
-
Anthropic:MCP的开发者,也是Claude大模型的母公司。
部分图片素材来源:
1、https://zhuanlan.zhihu.com/p/32350404993
2、100 行代码的 MCP 服务,打造一个简易的“智能化运维”平台-腾讯云开发者社区-腾讯云
相关文章素材:
-
MCP学习笔记:详细介绍了MCP的概念、发展过程、架构及实际应用案例。
-
100 行代码的 MCP 服务,打造一个简易的“智能化运维”平台:通过具体代码示例展示了如何快速搭建一个基于MCP的服务。