基于SpringAI搭建一个查询ip归属地的MCP Server(SSE模式)_spring mcp server sse
文章目录
- 1. 前言
- 2. 环境
- 3. 步骤
-
- 3.1 使用Spring Initalizer搭建项目
- 3.2 添加sse支持(依赖)
- 3.3 编写工具类
- 3.4 编写mcp 服务类
- 3.5 编写mcp 配置类
- 3.6 配置文件
- 3.7 启动应用
- 3.8 在 Cherry Studio中配置mcp server
- 3.9 在Cherry Studio对话中测试
- 4. 参考
1. 前言
- 本文将指导你如何使用SpringAI搭建一个查询ip归属地的MCP Serer(SSE模式),使用这个MCP server,用户可以直接在AI工具中直接使用自然语言查询ip归属地。
- SpringAI于2025年5月21日发布了 1.0.0 GA 正式版本,这标志着SpringAI基本功能已经成熟,使用SpringAI,只要少量代码就可以实现一个MCP Server。
2. 环境
- JDK 17
- SpringBoot 3.5.0
- SpringAI 1.0.0
- Cherry Studio 1.3.12,作为 MCP Client调用MCP Server,用于测试。
- IDEA 2022 社区版
3. 步骤
3.1 使用Spring Initalizer搭建项目
在浏览器中打开:https://start.spring.io/
。如下图所示,Java版本选17,SpringBoot版本选择3.5.0, 包管理器选择Maven,依赖项选择“Model Context Protocal Server”(1),然后点击“GENERATE”按钮(2),它会下载一个压缩包。
解压压缩包,使用IDEA加载项目。
3.2 添加sse支持(依赖)
通过上一步骤引入的依赖,仅支持 mcp server的 stdio模式,如果要支持 sse模式,需要再引入其它的包。
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId></dependency>
3.3 编写工具类
在此我们使用百度的api来获取ip归属地。它的api很简单,只要通过get请求以下地址就可以了,记得将ip替换为你要查询的ip。
https://opendata.baidu.com/api.php?query=ip&co=&resource_id=6006&oe=utf8
将这个功能封装为一个工具类,如下:
@Slf4jpublic class IpSearchUtils { public static String getLocation(String ip) { String url = \"https://opendata.baidu.com/api.php?query=\" + ip + \" &co=&resource_id=6006&oe=utf8\"; try { String jsonStr = HttpUtil.get(url); IpInfoDto ipInfoDto = JSONUtil.toBean(jsonStr, IpInfoDto.class); if (ipInfoDto != null && ipInfoDto.getData() != null && ipInfoDto.getData().length > 0) { return ipInfoDto.getData()[0].getLocation(); } else { return null; } } catch (Exception e) { log.warn(\"获取ip位置信息失败\", e); return null; } }}
关于 IpInfoDto.java类要如何生成,这里有一个小技巧。
在浏览器中输入:
https://opendata.baidu.com/api.php?query=112.111.7.192&co=&resource_id=6006&oe=utf8
可以得取一个json响应,类似于以下:
{\"status\":\"0\",\"t\":\"\",\"set_cache_time\":\"\",\"data\":[{\"ExtendedLocation\":\"\",\"OriginQuery\":\"112.111.7.192\",\"SchemaVer\":\"\",\"appinfo\":\"\",\"disp_type\":0,\"fetchkey\":\"112.111.7.192\",\"location\":\"福建省福州市 联通\",\"origip\":\"112.111.7.192\",\"origipquery\":\"112.111.7.192\",\"resourceid\":\"6006\",\"role_id\":0,\"schemaID\":\"\",\"shareImage\":1,\"showLikeShare\":1,\"showlamp\":\"1\",\"strategyData\":{},\"titlecont\":\"IP地址查询\",\"tplt\":\"ip\"}]}
使用DeepSeek或通义灵码之类的AI工具,输入以下提示词,让它根据json生成dto:
根据以下json提取java dto,字段要加上注释,json中的值为示例值:{\"status\":\"0\",\"t\":\"\",\"set_cache_time\":\"\",\"data\":[{\"ExtendedLocation\":\"\",\"OriginQuery\":\"112.111.7.192\",\"SchemaVer\":\"\",\"appinfo\":\"\",\"disp_type\":0,\"fetchkey\":\"112.111.7.192\",\"location\":\"福建省福州市 联通\",\"origip\":\"112.111.7.192\",\"origipquery\":\"112.111.7.192\",\"resourceid\":\"6006\",\"role_id\":0,\"schemaID\":\"\",\"shareImage\":1,\"showLikeShare\":1,\"showlamp\":\"1\",\"strategyData\":{},\"titlecont\":\"IP地址查询\",\"tplt\":\"ip\"}]}
3.4 编写mcp 服务类
@Servicepublic class IpSearchService { @Tool(name = \"获取ip归属地\", description = \"根据ip获取归属地\") public String getLocationByIp(@ToolParam(description = \"ip地址, 使用ipv4的格式\") String ip) { if (Objects.isNull(ip)) { return \"错误:ip地址不能为空\"; } String location = IpSearchUtils.getLocation(ip); if (Objects.isNull(location)) { return \"错误:未查找到ip的归属地\"; } else { return \"ip归属地:\" + location; } }}
代码解析:
- 跟常规的java服务类一样,它也使用@Service注解。
- 它使用 @Tool(name = “获取ip归属地”, description = “根据ip获取归属地”) 将方法声明为 mcp工具。 @ToolParam为参数说明。
3.5 编写mcp 配置类
@Configurationpublic class McpConfig { @Bean public ToolCallbackProvider toolCallbackProvider(IpSearchService service) { return MethodToolCallbackProvider.builder().toolObjects(service).build(); }}
说明:
- 以上代码将 IpSearchService中的工具暴露出去。
3.6 配置文件
server.port=7080spring.ai.mcp.server.sse-endpoint=/ssespring.ai.mcp.server.name=weather-mcp-serverspring.ai.mcp.server.version=1.0.0
说明:
- 以上这个配置了服务的名称、版本、暴露了一个端点/sse。后续使用
http://localhost:7080/sse
可以访问到这个服务。
3.7 启动应用
如常规的SpringBoot应用一样启动。
在浏览器中输入: http://localhost:7080/sse
, 可以得取以下结果:
3.8 在 Cherry Studio中配置mcp server
在此使用Cherry Studio作为 MCP Client调用MCP Server。关于cherry studio的基本用法,请参考官方技术文档,在此就不赘述了。
打开Cherry Studio,如下图所示进行配置: 点击左侧的“设置”图标(1),接着点击“MCP服务器”(2),然后点击“添加服务器”->“快速创建”(3)。
在弹出的对话框架中做如下配置,其中,名称随意填,只要能够区分就可以;类型选择sse, url填上一步得到的地址。
点击工具选择卡,如下图所示,可以看到我们代码中定义的工具。
3.9 在Cherry Studio对话中测试
进入Cherry Studio, 按下图所示,点击左侧“助手”图标(1), 然后在聊天框的工具栏中选择“MCP服务器”图标(3), 在菜单中选择之前配置的“ip归属地查询MCP Server”(3)。
在聊天窗口中输入以下问题:
122.224.33.10 属于哪里?
4. 参考
- Spring AI 1.0 正式 GA
- WebMVC Server Transport