MCP 协议 ¶
引言 ¶
在现代AI工具和开发环境中,如何将外部数据源和工具与大型语言模型(LLM)无缝集成,是提升生产力和创新能力的关键。Cursor作为一款强大的AI辅助编程工具,引入了Model Context Protocol(MCP),即模型上下文协议,为用户提供了一种标准化的方式,将外部工具和数据源连接到Cursor中,从而扩展其功能。本教程将详细解读MCP协议在Cursor中的应用,包括其定义、用途、架构、配置方法、使用方式以及当前的一些限制。
什么是MCP协议? ¶
MCP(Model Context Protocol)是一个开放协议,旨在标准化应用程序如何为大型语言模型提供上下文和工具。它本质上是Cursor的一个插件系统,允许用户通过标准化的接口,将Cursor连接到各种外部数据源和工具,从而增强Cursor Agent(智能代理)的能力。
简单来说,MCP就像是Cursor的“扩展插槽”,用户可以通过这个插槽,将自己的工具、数据库、API或其他资源接入Cursor,让Cursor不仅仅局限于代码本身,还能理解和操作外部系统的数据和功能。
MCP的核心特点: ¶
- 标准化接口:MCP定义了统一的通信方式,确保Cursor与外部工具之间的高效交互。
- 灵活性:MCP服务器可以用任何支持标准输出(
stdout)或HTTP端点的编程语言编写,开发者可以根据自己的技术栈快速实现。 - 扩展性:通过MCP,用户可以将Cursor连接到数据库、第三方服务(如GitHub、Notion、Stripe)或其他自定义工具。
更多关于MCP协议的详细介绍,可以访问官方MCP文档。
MCP协议的用途 ¶
MCP协议的主要用途是将Cursor与外部系统和数据源连接起来,使用户无需手动向Cursor描述项目结构或数据内容,而是让Cursor直接与这些系统交互。以下是MCP的一些典型应用场景:
- 数据库集成:Cursor可以直接查询用户的数据库,而无需手动输入数据库模式或数据内容。
- 第三方服务连接:
- Notion:从Notion中读取数据,指导Cursor实现特定功能。
- GitHub:让Cursor创建拉取请求(PR)、分支,或查找代码。
- Stripe:允许Cursor管理客户信息、订阅等。
- 记忆功能:让Cursor在工作过程中记住并调用之前的信息。
- 自定义工具:用户可以开发自己的工具并通过MCP接入Cursor。
通过MCP,用户可以将Cursor融入现有的工具链和基础设施中,从而实现更高效的工作流程。
MCP协议的架构 ¶
MCP服务器是实现MCP协议的核心组件,它们是轻量级的程序,通过标准化的协议暴露特定的功能,充当Cursor与外部工具或数据源之间的中介。
Cursor支持两种MCP服务器的传输方式(Transport Types),适用于不同的使用场景:
1. stdio传输方式 ¶
- 运行位置:在用户的本地机器上运行。
- 管理方式:由Cursor自动管理。
- 通信方式:通过标准输出(
stdout)直接通信。 - 访问权限:仅限本地用户访问。
- 输入方式:一个有效的shell命令,由Cursor自动运行。
这种方式适合本地开发和个人使用,配置简单,适合快速测试和开发MCP服务器。
2. SSE传输方式 ¶
- 运行位置:可以在本地或远程服务器上运行。
- 管理方式:由用户自行管理和运行。
- 通信方式:通过网络通信。
- 访问权限:可以跨机器共享。
- 输入方式:一个指向MCP服务器SSE端点的URL,例如
http://example.com:8000/sse。
SSE方式更适合分布式团队或需要远程访问的场景,提供了更大的灵活性。
这两种传输方式各有优劣,用户可以根据自己的需求选择合适的模式。stdio适合本地开发和简单场景,而SSE则更适合需要共享或远程访问的复杂场景。
配置MCP服务器 ¶
MCP服务器的配置通过JSON格式的文件完成,Cursor支持在项目级别或全局级别配置MCP服务器。
配置文件的结构 ¶
以下是一个使用stdio传输方式的MCP服务器配置示例(基于Node.js):
{
"mcpServers": {
"server-name": {
"command": "npx",
"args": ["-y", "mcp-server"],
"env": {
"API_KEY": "value"
}
}
}
}
command:指定运行MCP服务器的命令。args:命令的参数。env:指定环境变量,适合用于存储API密钥等敏感信息。
配置文件的存放位置 ¶
MCP配置文件可以存放在两个位置,适用于不同的使用场景:
-
项目配置:
- 文件位置:项目目录下的
.cursor/mcp.json。 - 适用场景:适用于特定项目的工具,仅在该项目中可用。
- 文件位置:项目目录下的
-
全局配置:
- 文件位置:用户主目录下的
~/.cursor/mcp.json。 - 适用场景:适用于跨项目使用的工具,在所有Cursor工作区中可用。
- 文件位置:用户主目录下的
认证方式 ¶
MCP服务器支持通过环境变量进行认证,用户可以在配置文件中指定API密钥或其他认证令牌,而无需将其硬编码到代码中或MCP服务器本身。这种方式既安全又灵活。
目前,Cursor尚未支持其他认证方式,但社区项目如mcp-remote提供了通过网络安全认证MCP服务器的解决方案。
在聊天中使用MCP ¶
在Cursor中,MCP工具的使用非常直观。Cursor的Composer Agent会自动检测并使用在MCP设置页面“可用工具”列表中列出的工具,前提是它认为这些工具与当前任务相关。
如何触发MCP工具使用 ¶
- 自动触发:如果Cursor认为某个MCP工具与当前任务相关,它会自动建议使用该工具。
- 手动触发:用户可以通过在聊天中直接告诉Cursor使用某个工具(可以提及工具名称或描述其功能)来触发工具使用。
- 启用/禁用工具:用户可以在设置页面中启用或禁用特定的MCP工具,以控制Cursor可以访问的工具范围。
工具审批 ¶
默认情况下,当Cursor的Agent想要使用某个MCP工具时,会显示一条消息请求用户批准。用户可以点击工具名称旁边的箭头,查看Agent调用工具时使用的参数。
如果用户希望跳过审批步骤,可以启用“自动运行”(Auto-run)模式,让Cursor像执行终端命令一样自动运行MCP工具。更多关于自动运行和Yolo模式的设置方法,可以参考这里。
工具响应 ¶
当MCP工具被调用后,Cursor会在聊天窗口中显示工具的响应内容。用户可以看到工具调用的参数和返回结果的详细信息。
图像注入 ¶
某些MCP服务器可能会返回图像数据,例如网站截图或图表。为了让Cursor在聊天中正确显示和使用这些图像,MCP服务器需要以特定格式返回图像数据(通常是base64编码的字符串)。
以下是一个返回图像的MCP服务器代码示例:
const RED_CIRCLE_BASE64 = "/9j/4AAQSkZJRgABAgEASABIAAD/2w...";
// 完整base64编码内容省略
server.tool("generate_image", async (params) => {
return {
content: [
{
type: "image",
data: RED_CIRCLE_BASE64,
mimeType: "image/jpeg",
},
],
};
});
完整的图像返回示例代码可以参考这里。通过这种方式返回的图像将被Cursor附加到聊天中,如果当前模型支持图像分析,Cursor会查看并分析图像内容,以帮助后续操作。
MCP协议的限制 ¶
尽管MCP是一个非常有前景的协议,但它目前仍处于活跃开发阶段,存在一些已知的限制:
-
工具数量限制:
- 如果用户启用了多个MCP服务器,或者某个MCP服务器提供了大量工具,Cursor目前只会将前40个工具发送给Agent。
-
远程开发问题:
- Cursor通过本地机器直接与MCP服务器通信(通过stdio或网络SSE),因此在通过SSH或其他远程开发环境访问Cursor时,MCP服务器可能无法正常工作。官方计划在未来版本中改进这一点。
-
资源支持不足:
- MCP服务器提供了两种主要功能:工具(Tools)和资源(Resources)。目前,Cursor仅支持工具功能,资源功能尚未实现。官方计划在未来版本中增加对资源的支持。
总结 ¶
MCP(Model Context Protocol)是Cursor中一个强大的扩展机制,它通过标准化的协议,将外部工具和数据源与Cursor无缝集成,极大地扩展了Cursor的功能和应用场景。无论是连接数据库、第三方服务,还是自定义工具,MCP都为用户提供了灵活而高效的解决方案。
通过本教程,我们详细了解了MCP的定义、用途、架构、配置方法、在聊天中的使用方式,以及当前的一些限制。尽管MCP仍处于开发阶段,但其潜力无疑是巨大的。随着Cursor和MCP协议的不断完善,我们可以期待更多创新功能和更广泛的应用场景。
如果您对MCP协议有进一步的兴趣,建议访问官方MCP文档获取更多技术细节,并尝试在自己的项目中配置和使用MCP服务器,探索其无限可能。