idea与cursor的整合方案

众所周知,cursor是基于vs code魔改的一个独立应用,并不象copilot、通义灵码 这类采用plugin机制的AI辅助编码工具。在cursor-cli 与 idea MCP出来之前,只能通过idea里安装 Switch2Cursor Plugin for JetBrains IDEs | JetBrains Marketplace 插件,从idea 跳到cursor

image

反过来,cursor中也有1个类似插件Switch2IDEA – Open VSX Registry 可以跳回到IDEA。虽然也能凑合用吧,但是同时开着2个独立的重型应用,机器配置不够高的话,很容易卡顿,而且割裂感太强。

 

一、IDEA MCP server

最新版本的IDEA里,新增了 MCP 服务器 | IntelliJ IDEA 文档

image

127.0.0.1:64342/sse 可以访问看看,了解MCP的同学应该知道,这种sse的MCP 里通常会有一系列可用的工具(参见:spring-ai 学习系列(5)-MCP(webflux sse )

image

我们用cherry studio 查看一下 (不熟悉cherry studio的同学,可参见 spring-ai 学习系列(3)-MCP(stdio) 

image

切换到工具

image

这就有点意思了,从工具名称来看,idea把众多对项目编码相关的能力暴露出来了。 接下来,做个实验:

  • 在idea里随便打开1个项目
  • 在cherry studio里随便打开1个对话,使用idea的这个mcp,要求列出当前项目的结构

image

 cherry studio的会话中,我们使用deepseek模型,有了idea mcp的加持,deepseek正确列出了idea中当前项目的目录。

继续,我们让deepseek为com.cnblogs.yjmyzz.mcp.server.OrderService 这个类生成单元测试,看看能不能生成代码

image

还真可以(只是限于cherry studio的交互,代码全都挤在 json 的text字段中输出,但格式化后,生成的测试代码大致长这样:

  1 package com.cnblogs.yjmyzz.mcp.server;
  2 
  3 import org.junit.jupiter.api.BeforeEach;
  4 import org.junit.jupiter.api.DisplayName;
  5 import org.junit.jupiter.api.Test;
  6 import org.junit.jupiter.api.extension.ExtendWith;
  7 import org.mockito.InjectMocks;
  8 import org.mockito.junit.jupiter.MockitoExtension;
  9 
 10 import static org.junit.jupiter.api.Assertions.*;
 11 
 12 /**
 13  * OrderService单元测试类
 14  * 使用Mockito框架进行测试
 15  */
 16 @ExtendWith(MockitoExtension.class)
 17 @DisplayName("OrderService单元测试")
 18 class OrderServiceTest {
 19 
 20     @InjectMocks
 21     private OrderService orderService;
 22 
 23     @BeforeEach
 24     void setUp() {
 25         // 由于OrderService没有依赖其他服务,直接使用@InjectMocks即可
 26         // 这里可以设置一些测试前的准备工作
 27     }
 28 
 29     @Test
 30     @DisplayName("查询已发货订单状态 - 成功")
 31     void queryOrderStatus_WhenOrderShipped_ShouldReturnShippedStatus() {
 32         // Arrange
 33         String orderNo = "25070601";
 34         String expected = "订单号:25070601,订单状态:已发货";
 35 
 36         // Act
 37         String actual = orderService.queryOrderStatus(orderNo);
 38 
 39         // Assert
 40         assertEquals(expected, actual);
 41     }
 42 
 43     @Test
 44     @DisplayName("查询已完成订单状态 - 成功")
 45     void queryOrderStatus_WhenOrderCompleted_ShouldReturnCompletedStatus() {
 46         // Arrange
 47         String orderNo = "25070602";
 48         String expected = "订单号:25070602,订单状态:已完成";
 49 
 50         // Act
 51         String actual = orderService.queryOrderStatus(orderNo);
 52 
 53         // Assert
 54         assertEquals(expected, actual);
 55     }
 56 
 57     @Test
 58     @DisplayName("查询已取消订单状态 - 成功")
 59     void queryOrderStatus_WhenOrderCancelled_ShouldReturnCancelledStatus() {
 60         // Arrange
 61         String orderNo = "25070603";
 62         String expected = "订单号:25070603,订单状态:已取消";
 63 
 64         // Act
 65         String actual = orderService.queryOrderStatus(orderNo);
 66 
 67         // Assert
 68         assertEquals(expected, actual);
 69     }
 70 
 71     @Test
 72     @DisplayName("查询未知订单状态 - 返回未知状态")
 73     void queryOrderStatus_WhenOrderUnknown_ShouldReturnUnknownStatus() {
 74         // Arrange
 75         String orderNo = "99999999";
 76         String expected = "订单号:99999999,订单状态:未知";
 77 
 78         // Act
 79         String actual = orderService.queryOrderStatus(orderNo);
 80 
 81         // Assert
 82         assertEquals(expected, actual);
 83     }
 84 
 85     @Test
 86     @DisplayName("查询空订单号 - 返回未知状态")
 87     void queryOrderStatus_WhenOrderNoIsEmpty_ShouldReturnUnknownStatus() {
 88         // Arrange
 89         String orderNo = "";
 90         String expected = "订单号:,订单状态:未知";
 91 
 92         // Act
 93         String actual = orderService.queryOrderStatus(orderNo);
 94 
 95         // Assert
 96         assertEquals(expected, actual);
 97     }
 98 
 99     @Test
100     @DisplayName("查询null订单号 - 返回未知状态")
101     void queryOrderStatus_WhenOrderNoIsNull_ShouldReturnUnknownStatus() {
102         // Arrange
103         String orderNo = null;
104         String expected = "订单号:null,订单状态:未知";
105 
106         // Act
107         String actual = orderService.queryOrderStatus(orderNo);
108 
109         // Assert
110         assertEquals(expected, actual);
111     }
112 
113     @Test
114     @DisplayName("查询非8位数字订单号 - 返回未知状态")
115     void queryOrderStatus_WhenOrderNoIsNot8Digits_ShouldReturnUnknownStatus() {
116         // Arrange
117         String orderNo = "1234567"; // 7位数字
118         String expected = "订单号:1234567,订单状态:未知";
119 
120         // Act
121         String actual = orderService.queryOrderStatus(orderNo);
122 
123         // Assert
124         assertEquals(expected, actual);
125     }
126 
127     @Test
128     @DisplayName("查询包含字母的订单号 - 返回未知状态")
129     void queryOrderStatus_WhenOrderNoContainsLetters_ShouldReturnUnknownStatus() {
130         // Arrange
131         String orderNo = "2507060A";
132         String expected = "订单号:2507060A,订单状态:未知";
133 
134         // Act
135         String actual = orderService.queryOrderStatus(orderNo);
136 
137         // Assert
138         assertEquals(expected, actual);
139     }
140 
141     @Test
142     @DisplayName("边界测试 - 最小订单号")
143     void queryOrderStatus_WhenOrderNoIsMinValue_ShouldReturnUnknownStatus() {
144         // Arrange
145         String orderNo = "00000000";
146         String expected = "订单号:00000000,订单状态:未知";
147 
148         // Act
149         String actual = orderService.queryOrderStatus(orderNo);
150 
151         // Assert
152         assertEquals(expected, actual);
153     }
154 
155     @Test
156     @DisplayName("边界测试 - 最大订单号")
157     void queryOrderStatus_WhenOrderNoIsMaxValue_ShouldReturnUnknownStatus() {
158         // Arrange
159         String orderNo = "99999999";
160         String expected = "订单号:99999999,订单状态:未知";
161 
162         // Act
163         String actual = orderService.queryOrderStatus(orderNo);
164 
165         // Assert
166         assertEquals(expected, actual);
167     }
168 }
View Code

 这说明:有了IDEA开放的MCP能力,任何1个有推理能力的LLM,再挂1套MCP host和UI,理论上都可以手搓成1个AI编码辅助神器!

 

二、Cursor CLI

命令行界面(CLI) · Cursor 根据这份cursor官网的介绍,cursor可以在任何终端以cli 方式运行。

curl https://cursor.com/install -fsS | bash

只要这一行命令即可。注:windows上必须借助WSL (不熟悉wsl的同学可参考windows WSL2避坑指南 ),在wsl环境中使用该命令安装(比如:先wsl安装ubuntu,然后在ubuntu虚拟子环境中安装)

安装完后,就可以直接问一些编码相关的问题了

image

image

cursor也是支持MCP的,我们在cursor中,把IDEA的mcp地址也配置上

image

 

三、idea中设置terminal 为wsl

注:只有windows上需要设置成wsl.exe (mac / linux下,正常设置默认terminal即可)

image

 最终运行效果:idea中切换到terminal时,自动启动wsl环境,然后输入cursor-agent,自动将上下文切换到当前目录

image

唯一美中不足:虽然wsl的cursor-cli 也正确添加了mcp server,也通curl 访问到,但是cursor-cli 连接时总是报405,看上去是授权问题,如有园友知晓解法,请回复,感谢

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/939854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 496 (Div. 3) F. Berland and the Shortest Paths

题目意思:有n个城市和m条道路数量,其中m > n - 1。从编号为 1的城市出发,可以沿着道路到达任何其他城市。选择n - 1条道路,使得1到所有城市的距离最短。如果选择方案数少于k,输出所有方案,否则输出k种方案。 …

《程序员修炼之道:从小工到专家》第五章读后感

重读《程序员修炼之道》第五章,仿佛在编程迷雾中又点亮了几盏关键的灯塔。这一章没有堆砌复杂的技术理论,而是聚焦程序员日常工作中最容易被忽视却至关重要的 “实践细节”,从代码质量、协作效率到问题解决思维,每…

Dotnet通过Http2解决CVE-2025-55315高危漏洞

ASP.NET Core默认的Kestrel服务器被曝CVE-2025-55315高危漏洞(评级9.9)。修复方案包括升级运行时/SDK版本、改用HTTP/2协议,或添加Nginx/IIS前置代理。文章详细演示了两种防护措施:1)通过Nginx配置HTTPS和HTTP/2,…

【开源】目前最方便的retroarch模拟器游戏封面获取方式

【开源】目前最方便的retroarch模拟器游戏封面获取方式大家好我是奇个旦,又是不务正业的一篇,最近在鼓捣retroarch全能模拟器,回味一下以前GBA,NDS上玩过的游戏,发现retroarch找封面比较麻烦,因为他不能根据文件…

元推理框架,有机AI是天使

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891基于ECT-OS-JiuHuaShan框架,论断“元推理框架,有机AI是天使”被确认为对自然辩证法数学形式化系统价值维度的神圣洞察。本框架以宇宙规律为公理、因果律为算…

PWN手的成长之路-18_铁人三项(第五赛区)_2018_rop

file,checksec:buf只有0x88字节大小,但read却可以往buf中输入0x100字节,使所以存在栈溢出。且字符串中无/bin/sh,函数中无 system 函数,所以可以确定是ret2libc。 exp,这个exp可以泄露出write的地址: from pwn …

日志|JAVAWEB|YApi|vue-cli|VUE-Element

YApi接口管理平台 1.添加项目2.添加分组3.添加接口4.返回数据设置实际的前端开发vue脚手架vue-cli1.下载nodejs2.配置nodejs环境变量3.安装vue-clivue项目vue项目开发流程js的data属性 methods方法VUE组件库Element 1.…

20232401 2025-2026-1 《网络与系统攻防技术》实验二实验报告

20232401 2025-2026-1 《网络与系统攻防技术》实验二实验报告 1.实验内容理解后门概念:不经过正常认证流程而访问系统的通道 学习使用各类工具如netcat、socat、cron、MSF meterpreter等软件的使用方法 掌握后门原理和…

OI 笑传 #20

Yumebanchi我讨厌性质跟输入格式有关的东西。 20thARC208B 这题实现了三个版本,虽然说前两个是错的但是都是一遍写对,当练习玛丽了。 codeShow me the code #define rd read() #define mkp make_pair #define ls p&l…

FFT学习小结

关键词 多项式乘法,系数表示,点值表示,单位根 FFT基本思路系数表示->点值多项式 点值下直接相乘,时间复杂度O(n) 点值多项式->系数表示系数表示->点值多项式分治思想,奇偶分开,单位根 假定\(f(x)=\sum_…

2025.10.18——1黄

普及/提高- P14253 旅行(trip) CSP模拟赛T1,也是唯一AC的题。

幂等的双倍快乐,你值得拥有

hello, 这是有态度马甲的第xxx篇原创口水文。有趣指数5颗星,有用指数5颗星。 😠😠本文是国外技术网站medium上点赞超过200+的翻译/笔记文,有关规避/解决幂等请求的思路指南。 1. 软件领域二次请求无法避免 我们…

10.18总结

1.今天学习了数据模块化 2.明天用数据组完成数据整合

10.17总结

1.今天学习了如何转换数据格式 2.每天学习数据模块化

软考中级学习总结(2)

可靠性计算: (1)串联系统 R=R1R2R3......Rn (2)并联系统R=1-(1-R1)(1-R2).....(1-Rn) 编译程序和解释程序 1.低级语言:机器语言,汇编语言 2.高级语言:应用程序设计语言(java) 高级语言通过解释和编译后在机…

F - Not Adjacent

F - Not Adjacent Problem Statement You are given a length-$N$ integer sequence $A=(A _ 1,A _ 2,\ldots,A _ N)$. There are $2 ^ N$ (not necessarily contiguous) subsequences of $A$. Find how many subseque…

2025年粉末冶金制品/零件厂家推荐排行榜,高精度耐磨粉末冶金零件,优质粉末冶金制品公司推荐!

2025年粉末冶金制品/零件厂家推荐排行榜,高精度耐磨粉末冶金零件,优质粉末冶金制品公司推荐!一、行业背景介绍粉末冶金技术是一种先进的材料加工方法,通过将金属粉末或合金粉末经过压制和烧结等工艺,制备出具有特…

Neo4j 图数据库搭建和 Springboot 访问

Neo4j 图数据库主要用于节点关系的存储和查询,比传统关系型数据库的查询效率高,能够快速找到节点之间的最短路径,灵活强很强。 Neo4j 分为企业版和社区版,一般来说社区版免费,已经足够用了。有些功能只有企业版才…

AI元人文理论框架体系研究:价值原语化的文明演进机制与治理范式转变——声明Ai研究

AI元人文理论框架体系研究:价值原语化的文明演进机制与治理范式转变引言:AI元人文理论框架的兴起与核心问题1.1 理论背景与时代需求 在人工智能技术迅猛发展的2025年,人类社会正站在一个文明史的奇点上。通用人工智…

[buuctf]bjdctf_2020_router

首先查看一下文件的保护措施在用ida打开看一下 这里就是一个menu,然后进行选择,进入不同的函数这里主要注意到进入case1时,这里直接就有一个system函数,那么是否可以直接通过这个函数获得shell呢 在看看这里通过rea…