百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

必看!Cursor 新功能 MCP,解锁 AI 编程超强外挂(附DeepSeek资料)

zhezhongyun 2025-04-11 09:45 48 浏览

今天,我要为大家隆重介绍 Cursor 代码编辑器0.45.6 版本带来的 全新黑科技 —— MCP (Model Context Protocol) 功能集成

什么是MCP?

官方说明

MCP(模型上下文协议)是一种开放协议,它标准化了应用程序如何为大型语言模型(LLMs)提供上下文。可以将MCP视为AI应用程序的USB-C端口。正如USB-C提供了一种标准化的方式将您的设备连接到各种外设和配件一样,MCP为将AI模型连接到不同的数据源和工具提供了一种标准化的方式。

为什么选择MCP?

MCP帮助您在LLMs之上构建代理和复杂的工作流程。LLMs经常需要与数据和工具集成,而MCP提供了:

  1. 不断增长的预构建集成列表:您的LLM可以直接插入这些集成,从而快速实现与各种数据和工具的连接。
  2. 在LLM提供商和供应商之间切换的灵活性:由于MCP是开放标准,您可以根据需要轻松更换LLM提供商,而无需对整个系统进行大规模修改。
  3. 保护您的数据的最佳实践:MCP提供了一系列最佳实践,帮助您在基础设施内安全地保护数据,确保敏感信息得到妥善处理。

通过使用MCP,您可以更高效地开发和部署AI应用,同时确保系统的可扩展性、安全性和灵活性。

MCP架构图

  • MCP Hosts: 希望通过 MCP 访问数据的 Claude Desktop、cursor 或 AI 工具等程序
  • MCP Clients: 与服务器保持 1:1 连接的协议客户端
  • MCP Servers: 轻量级本地的server 程序,每个程序都通过标准化的 Model Context Protocol 公开特定功能, 支持多个
  • Local Data Sources: 通过MCP 服务器可以安全访问的计算机文件、数据库和服务
  • Remote Services: 通过MCP 服务器可以连接到的 Internet 上可用的外部系统(例如,通过 API)

我的理解

首先 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、抓取网页内容...)

安装步骤

  1. 打开Cursor设置
  2. 导航到Cursor设置 > 功能 > MCP

  1. 点击“+ 添加新的MCP服务器”按钮

  1. 配置服务器
  2. 第二种可以执行运行 已经发布成npm包的MCP server
  3. 对于SSE服务器:SSE端点的URL
  4. 对于stdio服务器: 可执行的shell命令, 支持两种方式运行
  5. 名称:给您的服务器起个昵称,这是可以随意取
  6. 类型:选择传输类型(stdio或sse)
  7. 命令/URL:输入以下内容:
    1. 用node 运行本地打包的MCP server

比如下面这个, cursor 会自动扫描 server提供哪些tools

写一个字符串翻转的MCP server

安装

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

 // 初始化服务器,设置名称和版本
    this.server = new Server(
      {
        name: "My App",
        version: "1.0.0",
      },
      {
        capabilities: {
          tools: {
            reverse_string: true,
          },
        },
      }
    );

工具定义

工具定义分为2步

  1. 定义了一个可用工具列表, 定义工具名称、工具描述、以及输入参数的格式。

下面我定义了一个字符串翻转的工具

工具名称: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

添加cursor

添加到MCP server, 然后再composer 和LLM聊天就可以愉快的使用自己编写的大模型工具了

局限性

  1. 只支持composer 模式
  2. 只有claude 模型才支持, 其他大模型暂不支持

学习资料

官网地址:https://modelcontextprotocol.io/introduction

Git 地址: https://github.com/modelcontextprotocol/typescript-sdk

MCP资源库: https://mcphub.io/registry


DeepSeek资料下载方式

关注私信发送DeepSeek,即可领取完整版资料

本文,完。觉得本篇文章不错的,记得随手点个赞、收藏和转发三连,大家感兴趣的可以关注下,后续我再研究点新东西分享给大家~

相关推荐

Python入门学习记录之一:变量_python怎么用变量

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

python变量命名规则——来自小白的总结

python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...

Python入门学习教程:第 2 章 变量与数据类型

2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...

绘制学术论文中的“三线表”具体指导

在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...

Python基础语法知识--变量和数据类型

学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...

一文搞懂 Python 中的所有标点符号

反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...

Python变量类型和运算符_python中变量的含义

别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...

从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序

在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...

Python中下划线 ‘_’ 的用法,你知道几种

Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...

解锁Shell编程:变量_shell $变量

引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...

一文学会Python的变量命名规则!_python的变量命名有哪些要求

目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...

更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for

src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...

C++第五课:变量的命名规则_c++中变量的命名规则

变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....

Rust编程-核心篇-不安全编程_rust安全性

Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...

探秘 Python 内存管理:背后的神奇机制

在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...