MCP即Model Context Protocol(模型上下文协议),是由Anthropic公司于2024年11月26日推出的开放标准框架,旨在为大型语言模型与外部数据源、工具及系统建立标准化交互协议,以打破AI与数据之间的连接壁垒。
MCP架构与Appium有一定相似性,主要体现在以下方面: - C/S架构:MCP采用客户端-服务器模型,分为协议层和传输层。Appium同样基于C/S架构,由客户端和服务器两部分组成。在MCP中,客户端嵌入在LLM应用中负责发送请求并接收响应,服务器是轻量级程序,通过标准化接口暴露功能。Appium的客户端负责编写和执行测试脚本,服务器是基于Node.js的HTTP服务器,负责接收客户端请求,解析并在移动设备上执行相应操作。 - 消息通信:MCP在传输层使用JSON - RPC 2.0进行消息交换,支持标准输入输出和HTTP/SSE等传输模式。Appium客户端与服务器端通过JSON Wire Protocol进行通信。两者都通过特定的协议来实现客户端和服务器之间的消息传递,以完成相应的任务。 不过,二者也有不同之处。MCP主要用于AI智能体与外部数据源、工具的交互,让AI模型能连接并访问外部资源。而Appium是用于移动应用的UI自动化测试,主要针对移动设备上的应用程序进行测试操作。
MCP Server具有提供资源、工具和** prompts(提示)**三大能力。其中最常用的功能通常是提供工具,原因是它能让LLM与外界系统交互,完成如爬取网页内容、获取天气信息等复杂任务,极大地扩展了LLM的应用范围和实际能力。
Cursor使用MCP来允许AI访问和处理多种数据源,包括本地文件、远程API和数据库等。 MCP Server的好处包括: - 安全连接:无需将API密钥等敏感信息直接提供给LLM,由MCP Server自己控制资源访问。- 受控数据流:所有数据交互通过标准化协议进行,降低数据泄露风险。- 选择性授权:开发者能精确控制AI可访问的资源范围。 以下是一些MCP Server的实例: - PostgreSQL管家:让AI能够查询数据库,如电商运营者可通过AI自动生成SQL并返回可视化图表,实现“查上周北京销量Top10”等功能。- GitHub指挥官:可实现代码库智能管理,如开发者说“合并dev分支到master”,AI自动创建PR、检查冲突、生成更新日志。- 文件魔术师:用于全自动文件处理,例如整理会议录音时,AI自动转文字,提取待办事项,生成会议纪要.md文件。
MCP主要使用JSON - RPC 2.0进行消息通信,支持以下通信方式:
- 标准输入输出:适用于简单的本地测试和开发场景,通过命令行将请求输入到MCP Server,并从标准输出获取响应。 - HTTP:可用于客户端与服务器在不同主机或网络环境下的通信,能方便地与各种Web应用和服务集成,通过HTTP请求发送消息,服务器以HTTP响应返回结果。 - Server - Sent Events(SSE):用于实现服务器向客户端推送实时更新,适用于需要及时获取模型处理结果或状态变化的场景,如长轮询或实时交互的应用。 在实际应用中,HTTP是较为常用的通信方式。因为它具有广泛的兼容性和成熟的生态系统,几乎所有的现代编程语言和框架都支持HTTP通信,便于开发人员进行集成和扩展,能轻松实现客户端与服务器之间的请求和响应交互,适用于多种应用场景,包括Web应用、移动应用等与MCP Server进行通信的场景。
MCP和Function call的区别
MCP和Function Call有以下区别:
- 复杂度:MCP是复杂的协议,涉及结构化数据交换和精细流程控制;Function Call相对简单,只是模型发出的简单函数调用指令。 - 上下文管理能力:MCP能深度管理对话上下文,记住用户偏好和对话历史;Function Call对上下文理解有限,主要关注函数调用本身。 - 数据交换形式:MCP支持复杂结构化数据交换,可进行多轮对话,交换用户偏好、状态信息等;Function Call通常只是简单地传递函数调用所需的参数。 - 功能特性:MCP支持多轮对话、状态管理、错误处理、复杂业务逻辑等复杂功能;Function Call主要用于执行简单的、预定义的功能,如获取信息、执行简单操作。 - 适用场景:MCP适用于智能助手、复杂业务流程、需要多轮交互的场景;Function Call适用于简单的信息查询、工具调用等简单任务。 MCP的优势在于能处理复杂任务,通过多轮对话和上下文管理,可实现更智能的交互。它提供标准化框架,利于构建开放的插件化AI生态,让AI模型便捷连接各类外部数据源和工具。不过,MCP也存在生态不成熟,第三方支持工具少,性能有待验证,大规模并发调用可能有延迟瓶颈,以及模型支持程度不高的问题。 Function Call的优势是简单直接,易于实现和理解,能方便地扩展模型功能,让模型利用外部工具完成基本任务。其劣势是在处理复杂任务时较为繁琐,需手动管理对话状态和上下文,且缺乏统一标准,不同LLM供应商的实现方式存在差异。