MCP基本概念
基本概念
现在大模型交互的热门形式:
-
第一、Agent与Tools(工具)的交互Agent需要调用外部工具和APl、访问数据库、执行代码等。=> MCP
-
第二、Agent与Agent(其他智能体或用户)的交互Agent需要理解其他Agent的意图、协同完成任务、与用户进行自然的对话。 => A2A
MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准。旨在为大语言模型(LLM)提供统一的、 标准化方式与外部数据源和工具之间进行通信。
官方文档:https://modelcontextprotocol.io/introduction
MCP 查询:
github查看:
- MCP官方资源:https://github.com/modelcontextprotocol/servers
- MCP热门资源:https://github.com/punkpeye/awesome-mcp-servers
其它平台:
- Glama:https://glama.ai/mcp/servers
- Smithery:https://smithery.ai
- cursor:https://cursor.directory
- MCP.so:https://mcp.so/zh
- 阿里云百炼:https://bailian.console.aliyun.com/?tab=mcp#/mcp-market
MCP两种通信机制(传输方式):
- stdio(标准输入输出):主要用在本地服务上,操作你本地的软件或者本地的文 件。比如 Blender 这种就只能用 Stdio 因为他没有在线服务。=> MCP默认通信方式
- SSE(Server-Sent Events):主要用在远程通信服务上,这个服务本身就有在线 的 API,比如访问你的谷歌邮件,天气情况等。
stdio方式:
- 优点
- 这种方式适用于客户端和服务器在同一台机器上运行的场景,简单。
- stdio模式无需外部网络依赖,通信速度快,适合快速响应的本地应用。
- 可靠性高,且易于调试
- 缺点
- Stdio 的配置比较复杂,我们需要做些准备工作,你需要提前安装需要的命令行工具。
- stdio模式为单进程通信,无法并行处理多个客户端请求,同时由于进程资源开销较大,不适合 在本地运行大量服务。(限制了其在更复杂分布式场景中的使用)
SSE方式:
-
场景
- SSE方式适用于客户端和服务器位于不同物理位置的场景。
- 适用于实时数据更新、消息推送、轻量级监控和实时日志流等场景
- 对于分布式或远程部署的场景,基于 HTTP 和 SSE 的传输方式则更为合适。
-
优点 :配置方式非常简单,基本上就一个链接就行,直接复制他的链接填上就行
快速使用-以cursor为例
stdio的本地环境安装 stdio的本地环境有两种: 一种是Python 编写的服务, 一种用TypeScript 编写的服务。 分别对应着uvx 和 npx 两种指令。
在 Cursor 中添加 MCP Server 有两种配置方式:
- 全局设置:通过 Cursor Settings -> MCP -> Add new global MCP server 添加全局可用的 MCP 服务。
- 项目级别:在项目目录的 .cursor 目录中新建 mcp.json 文 件进行配置,仅对特定项目生效。
首先需要选择MCP SERVER 平台,比如我们可以在 https://smithery.ai/ 下搜索 mysql 来使用 数据库服务。选择一个使用量大的一般没问题,然后可以使用自动导入 mcp 和手动导入 json 来链接 mcp 。
自动导入直接 auto 里面选择 cursor ,填好对应的信息就自动导入了。
手动导入需要填好 json 信息,然后生成 json 文件内容,复制到项目跟目录下的 .cursor/mcp.json 文件中。
然后查看 cursor 中的 mcp 服务是否开启,开启后前方会出现绿色小点。(红色是错误,黄色是进行中,绿色是连接成功)
如果这样一直报错,可能的原因是 mcp 服务本身有问题,还有就是可能引入方法不对,可以进入对应的 github 查看下其他的的引入方法。
然后其他同样的道理,还可以引入比如高德地图服务、文件系统(filesystem )服务(操作文件)等等。
然后可以通过 agent 来测试下 mcp 是否生效:
现在交给你一个任务,编写一个北京一日游的出行攻略
1、从高德地图的MCP服务中获取北京站到天安门、天安门到颐和园、颐和园到南锣鼓巷
的地铁线路,并保存在数据库beijing_trip的表subway_trips中
2、从高德地图的MCP中获取颐和园、南锣鼓巷附件的美食信息,每处获取三家美食店铺
信息,并将相应的信息存入表location_foods中
3、在工作目录D:\MCPWorkSpace下创建一个新的文件夹,命名为“北京旅行”在其中创
建两个txt,分别从数据库中将两个表的内容提取出存放进去。
4、最后根据txt中的内容,生成一个精美的html前端展示页面,并存放在该目录下
其他平台使用
其他比较热门的平台比如 vscode 插件 cline 使用方法都是大同小异。
插件右上角设置中配置:
设置中有两种模式:一种是 plan mode (需求规划,任务执行的顺序),一种是 act mode (直接执行任务)。
之后正常调用 mcp 即可。
MCP 工作原理
MCP 遵循客户端-服务器架构(client-server),其中包含以下几个核心概念:
- MCP 主机(MCP Hosts)
- MCP 客户端( MCP Clients )
- MCP 服务器( MCP Servers )
- 本地资源( Local Resources )
- 远程资源( Remote Resources )
-
mcp host 作为运行 MCP 的主应用程序,例如 Claude Desktop、Cursor、Cline 或 AI 工具。 为用户提供与LLM交互的接口,同时集成 MCP Client 以连接 MCP Server。
-
MCP client 充当 LLM 和 MCP server 之间的桥梁,嵌入在主机程序中,主要负责: • 接收来自LLM的请求; • 将请求转发到相应的 MCP server • 将 MCP server 的结果返回给 LLM
MCP 官网(https://modelcontextprotocol.io/clients) 列出来一些支持 MCP 的 Clients。 分为两类: • AI编程IDE:Cursor、Cline、Continue、Sourcegraph、Windsurf 等 • 聊天客户端:Cherry Studio、Claude、Librechat、Chatwise等。更多的Client参考这里: MCP Clients:https://www.pulsemcp.com/clients Awesome MCP Clients:https://github.com/punkpeye/awesome-mcp-clients/
- MCP Server 每个 MCP 服务器都提供了一组特定的工具,负责从本地数据或远程服务中检索信息。 是 MCP 架构中的关键组件。与传统的远程 API 服务器不同,MCP 服务器既可以作为本地应用程序(stdio)在用户设备上运 行,也可部署至远程服务器(sse)。本质是运行在电脑上的一个nodejs或python程序。可以理解为客户端用命令行调用了 电脑上的nodejs或python程序。
API 主要有两个: 1、 tools/list:列出 Server 支持的所有工具 2、 tools/call:Client 请求 Server 去执行某个工具, 并将结果返回
在MCP的概念中,Cursor属于一个MCP的宿主应用(Host-app),而Cursor之所以 能使用MCP服务,是因为它内置安装了MCP Client。
我们目前在配置Cursor中的MCP时,本质是在配置MCP Server,这些Server是由 不同的开发者提供的,他们基于标准化的MCP协议,做了个小的服务,这些服 务可能在本地也可能在云端,而我们实际上也完全可以按自己的需要去制作 MCP Server。