摘要:MCP(模型上下文协议)是一种开放协议,它标准化了应用程序如何为大型语言模型(LLMs)提供上下文。可以将MCP视为AI应用程序的USB-C端口。正如USB-C提供了一种标准化的方式将您的设备连接到各种外设和配件一样,MCP为将AI模型连接到不同的数据源和工具
今天,我要为大家隆重介绍 Cursor 代码编辑器 的 0.45.6 版本带来的 全新黑科技 —— MCP (Model Context Protocol) 功能集成!
官方说明
MCP(模型上下文协议)是一种开放协议,它标准化了应用程序如何为大型语言模型(LLMs)提供上下文。可以将MCP视为AI应用程序的USB-C端口。正如USB-C提供了一种标准化的方式将您的设备连接到各种外设和配件一样,MCP为将AI模型连接到不同的数据源和工具提供了一种标准化的方式。
为什么选择MCP?
MCP帮助您在LLMs之上构建代理和复杂的工作流程。LLMs经常需要与数据和工具集成,而MCP提供了:
不断增长的预构建集成列表:您的LLM可以直接插入这些集成,从而快速实现与各种数据和工具的连接。在LLM提供商和供应商之间切换的灵活性:由于MCP是开放标准,您可以根据需要轻松更换LLM提供商,而无需对整个系统进行大规模修改。保护您的数据的最佳实践:MCP提供了一系列最佳实践,帮助您在基础设施内安全地保护数据,确保敏感信息得到妥善处理。通过使用MCP,您可以更高效地开发和部署AI应用,同时确保系统的可扩展性、安全性和灵活性。
MCP架构图
我的理解
首先 MCP 是一个协议,定义了一种规范/规则,目的是让 LLM 和 外部 Data 源连接起来 。(连起来的目的是干啥呢,是为了扩展 LLM 等能力,就现阶段共识就是构建 AI Agent 或者自动化工作流。)
简单来说,MCP (模型上下文协议) 就像一座桥梁,它巧妙地连接了 Cursor 代码编辑器与强大的 AI 模型。 通过 MCP,Cursor 不再只是一个代码编辑工具,它变身成为一个 智能的 AI 助手,并 调用各种 AI 服务来辅助开发,例如:
智能搜索信息 (Brave Search)抓取网页内容 (Fetch)调用图像生成模型 (Replicate, Flux)甚至进行更深度的思考和推理 (sequentialthinking)这里以cursor 为例子,以我本地搭建的3个MCPserver 去做解释。如图
Markdown2pdf: 将我和cursor的讨论整理成markdown,然后再转成本地的pdf格式保存。
Sequentiaithinking: 让大模型的回答像deepseek一样,接入思维链模式。
Mcp-package-version: 让LLM可以帮我们准确的分析出当前项目依赖包的最新版本
用户向LLM进行提问,LLM处理发现有本地可执行的mcp server 工具可以执行, 然后询问你是否执行本地的 mcp tool。 你点击接受, 执行完之后,在将MCP tool 输入的数据返回给LLM。
一句话总结: MCP 就是你在使用cursor的过程中,允许大模型调用你自己开发的工具包(markdown转pdf、抓取网页内容...)
打开Cursor设置导航到Cursor设置 > 功能 > MCP比如下面这个, cursor 会自动扫描 server提供哪些tools
安装
npm install @modelcontextprotocol/sdk定义Mcp服务器
McpServer是您与MCP协议的核心接口。它处理连接管理、协议合规性和消息路由。
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";const server = new McpServer({name: "My App",version: "1.0.0"});定义MCP服务器提供的能力
MCP 支持 Resources、tools、Promots功能 但是cusor中目前支持tools, 所以本篇文章也只演示tools的写法
详细能力可以参考https://modelcontextprotocol.io/clients
工具定义
工具定义分为2步
定义了一个可用工具列表, 定义工具名称、工具描述、以及输入参数的格式。下面我定义了一个字符串翻转的工具
工具名称:reverse_string
工具描述:将输入的字符串反转
输入参数格式:需要一个包含text字段的对象
this.server.setRequestHandler(ListToolsRequestSchema, async => ({ tools: [ { name: "reverse_string", description: "将输入的字符串反转", inputSchema: { type: "object", properties: { text: { type: "string", description: "需要反转的文本", }, }, required: ["text"], }, }, ], }));工具的实际功能编写拦截大模型的输入, 然后走自己实际的输入。
// 处理工具调用请求 this.server.setRequestHandler(CallToolRequestSchema, async (request) => { if (request.params.name !== "reverse_string") { thrownew McpError( ErrorCode.MethodNotFound, `未知工具: ${request.params.name}` ); } const { text } = request.params.arguments as { text: string }; const reversedText = text.split("").reverse.join(""); return { content: [ { type: "text", text: `反转后的文本: ${reversedText}`, }, ], }; });连接客户端(cursor)
MCP服务器需要连接到传输层以与客户端进行通信。启动服务器的方式取决于选择的传输方式:
Cursor 目前支持 sse 和 command 两种方式
const transport = new StdioServerTransport; server.connect(transport);打包部署
打包工具推荐: tsup 或者 tsc 进行打包
因为我们最终构建的是 Node.js CLI ,为了确保编译后的程序可以作为命令行工具使用。
在文件开头需要加上
#!/usr/bin/env node同时在构建的时候为了使编译后的 JavaScript 文件变成可执行文件 可以安装一下shx npm 包, 然后执行下面这个命令
shx chmod +x build/*.js添加到MCP server, 然后再composer 和LLM聊天就可以愉快的使用自己编写的大模型工具了
局限性学习资料官网地址:https://modelcontextprotocol.io/introduction
Git 地址: https://github.com/modelcontextprotocol/typescript-sdk
MCP资源库: https://mcphub.io/registry
本文,完。觉得本篇文章不错的,记得随手点个赞、收藏和转发三连,大家感兴趣的可以关注下,后续我再研究点新东西分享给大家⭐~
来源:AIGC研究社