我用cursor的settings配置了一个mcp.json,配置如下:

Image

我的本地服务,使用SrpingAI的@Tool来注册工具,那么我这个工具怎么获取到cursor中配置的env参数PM-ID呢?

Comment From: lghgf123

env是 stdio那种本地启动的,env就是修改你电脑的环境变量,所以sse方式,远程访问是无法获取到的

Comment From: luguangdong

Image

Image 可以将环境参数设置到 version 版本字段中,这样就可以在服务端获取到你的env参数了。

Comment From: ai-srcflow

stdio 直接代码 注入获取 getEnv 就行了

Comment From: gelicchen

自定义HandlerInterceptor解析env并将其放到InheritableThreadLocal中,再讲其注册到WebMvcConfigurer的addInterceptors中;使用时从InheritableThreadLocal中获取

Comment From: xulisha123

你但凡听一下徐庶老师我讲的 MCP鉴权你都不会问这个问题:https://www.bilibili.com/video/BV1ir55zQEsF/?spm_id_from=333.337.search-card.all.click

mcp server端直接 System.getenv("PM-ID")

Comment From: baigod

你但凡听一下徐庶老师我讲的 MCP鉴权你都不会问这个问题:https://www.bilibili.com/video/BV1ir55zQEsF/?spm_id_from=333.337.search-card.all.click

mcp server端直接 System.getenv("PM-ID")

徐庶我知道,卖卖面试题可以,企业级开发就算了。

Comment From: baigod

自定义HandlerInterceptor解析env并将其放到InheritableThreadLocal中,再讲其注册到WebMvcConfigurer的addInterceptors中;使用时从InheritableThreadLocal中获取

嗯,我的思路跟你一样,我自己重新封装了sse端点的处理逻辑,差不多是这么实现的,不过总觉得我碰到的这种问题(sse模式下获取客户端自定义参数的比如api_key ),spring AI 团队应该也能想到的,期待他们抓紧实现。

Comment From: 1786487276

这个获取还是简单,如果/sse?key='***' @Bean public RouterFunction<ServerResponse> mvcMcpRouterFunction(WebMvcSseServerTransportProvider transportProvider) { return transportProvider.getRouterFunction().filter(new HandlerFilterFunction<ServerResponse, ServerResponse>() { @Override public ServerResponse filter(ServerRequest request, HandlerFunction<ServerResponse> next) throws Exception { String path = request.path(); if ("/see".equals(path)) { Optional<String> key= request.param("key"); if (key.isPresent()) { if ("123456".equals(key.get())){ return next.handle(request); } } return ServerResponse.status(HttpStatus.FORBIDDEN).build(); } return next.handle(request); } }); }

或者说,自定义一个WebMvcSseServerTransportProvider重写里面的getRouterFunction()函数;