吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 527|回复: 10
上一主题 下一主题
收起左侧

[Java 原创] 无聊学习了一下MCP Server,附简单实现

[复制链接]
跳转到指定楼层
楼主
如果我是DJ? 发表于 2026-11-3 16:21 回帖奖励

最近AI很火,今天学习了一下MCP,以下基于Java语言简单实现一个MCP服务

一、使用springai集成mcp依赖包

        <!-- 这里选择webmvc版本,因为使用springboot,内置了Tomcat;
                就不选择webfux版本了,webfux基于Netty  -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
            <version>1.1.2</version>
        </dependency>

        <!--  这里二选一即可不要都选,会冲突      -->

        <dependency>
        <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
            <version>1.1.2</version>
        </dependency>

引入maven依赖后,配置我们的yml文件

server:
  port: 8080

spring:
  application:
    name: mcp-test
  ai:
    mcp:
      server:
        name: mcp-server
        version: 1.0.0
        type: async
        enabled: true

注意type需要选择async的异步方式,配置好了以后,添加一个tools工具

@Service
public class WeatherService {

    @Tool(description = "根据城市名称查询该城市今天的天气情况")
    public String getWeatherByCity(String city) {
        // 这里我就简单写了,实际开发写具体业务逻辑就行
        if (city == null || city.isBlank()) {
            return "请提供有效的城市名称";
        }
        return city + " 今天晴,气温 -100-0 摄氏度,龙卷风。";
    }

}

简单实现一个tool,然后添加mcp服务,注册到spring容器里

@Configuration
public class McpServerConfig {

    @Bean
    public ToolCallbackProvider weatherTools(WeatherService weatherService) {
        return MethodToolCallbackProvider.builder()
                .toolObjects(weatherService) // 这里填写我们实现的tool工具类,就注册进去了
                .build();
    }

}

OK,到这里我们就实现了一个简单的mcp服务啦,启动服务,尝试是否可以正常使用

2026-11-03T16:05:32.542+08:00  INFO 3056 --- [mcp-test] [           main] o.s.a.m.s.c.a.McpServerAutoConfiguration : Registered tools: 1

取关键日志:Registered tools: 1,证明我们的工具被注册到mcp里面了

官方提供了一个调试工具,如果你安装了 Node.js,可以在终端运行命令行:

npx @modelcontextprotocol/inspector

跑完会自动打开浏览器看到控制台

连接到你的服务

在 Inspector 界面中,按以下信息配置连接:

这里不多赘述这个方式,我贴合生产实战的方式,在需要调用mcp的服务或者模块中测试

第一步,引入mcp client依赖

       <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-mcp-client-webflux</artifactId>
        </dependency>

配置文件添加配置,AI大模型这块自己解决

spring:
  ai:
    openai:
      base-url: xxxxxx
      api-key: xxxxx
      chat:
        model: qwen3.8-max
        temperature: 0.7
    chat:
      memory:
        repository:
          jdbc:
            initialize-schema: always
    #添加以下配置
    mcp:
      client:
        sse:
          connections:
            mcp-server:
              # 刚刚mcp服务的地址端口
              url: http://localhost:8080
              sse-endpoint: /sse

写一个测试类调用测试:

@RestController
public class TestController {

    private final ChatClient chatClient;

    // 这里主要是将chatclient与mcp client连接,让大模型连接mcp
    public TestController(ChatClient.Builder builder,
                               ToolCallbackProvider mcpTools) {
        this.chatClient = builder
                .defaultTools(mcpTools.getToolCallbacks())
                .build();
    }

    // 测试方法
    @GetMapping("/ask")
    public String ask(@RequestParam String question) {
        return chatClient.prompt(question)
                .call()
                .content();
    }

}

启动服务,调用测试,这是我测试得到的结果

请求:localhost:8106/ask?question=深圳天气怎么样

深圳今天的天气查询结果如下:

**查询返回内容:** 晴,气温 -100 ~ 0 摄氏度,龙卷风

⚠️ **需要提醒您的是,这条数据明显异常,建议不要采信:**

1. **气温不合理**:深圳地处亚热带,即便在冬季也极少低于 5℃,-100℃ 完全不符合实际(这个温度接近南极内陆极值)。
2. **天气现象自相矛盾**:"晴" 与 "龙卷风" 同时出现是矛盾的,龙卷风通常伴随强对流天气(雷暴、强降雨)。
3. **疑似数据源故障**:很可能是天气接口的模拟数据、解析错误或字段错位导致的。

**建议:** 请通过官方渠道核实实时天气,例如中国天气网(weather.com.cn)、深圳气象局官方微博/公众号,或手机自带天气 App。

如果您需要,我也可以帮您查询其他城市的天气作为对照,看看是否是接口整体出了问题。

明显看到结果就是我们定义的气温等信息,证明mcp调用成功。

结尾:

只是简单实现一个mcp服务,然后结合AI使用MCP,生产还有许多问题要解决,比如对答案进行限制约束,大模型输入后语义解析等等我都没做,好了本文到此结束,拥抱AI的一天!!!

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
nimo + 1 + 1 谢谢@Thanks!
只有一点点 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
楼主你好萌 发表于 2026-11-3 16:49
mcp看起来还是个api,只是把原来的精确问答搜索 ,改成了模糊搜索的意思吧
3#
Luisweiyi 发表于 2026-11-3 16:52
4#
 楼主| 如果我是DJ? 发表于 2026-11-3 16:54 |楼主
楼主你好萌 发表于 2026-11-3 16:49
mcp看起来还是个api,只是把原来的精确问答搜索 ,改成了模糊搜索的意思吧

我其实也不是很理解,我的理解就像接口协议,想type-c接口一样,充电器进来是充电,耳机进来是接入声音一样。学就完事了
5#
yuchunji 发表于 2026-11-3 17:19
非常好,优秀
6#
tinfengyee 发表于 2026-11-3 17:23
学习学习
7#
只有一点点 发表于 2026-11-3 20:33
感谢大佬提供思路
8#
liangzai8 发表于 2026-11-3 21:14
学习了。。。
9#
nimo 发表于 2026-11-3 21:22
谢谢楼主,学习中。
10#
ajue777 发表于 2026-11-3 21:23
谢谢分享,我也学学
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-11-4 02:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表