专栏名称: 阿里云开发者
阿里巴巴官方技术号,关于阿里的技术创新均将呈现于此
目录
相关文章推荐
51好读  ›  专栏  ›  阿里云开发者

MCP客户端调用看这一篇就够了(Java版)

阿里云开发者  · 公众号  · 科技公司  · 2025-05-21 08:30

正文

请到「今天看啥」查看全文


API来的方便。

而调用MCP的过程,使用框架的提效会更明显 ,直接给chatClient注入工具即可,不用我们去手动写functionCall的组装,以及获取到结果后再去调用对应服务。

1.服务端为 SSE方式提供

a.设置配置文件

spring.ai.mcp.client.name=ai-demospring.ai.mcp.client.type=SYNCspring.ai.mcp.client.toolcallback.enabled=truespring.ai.mcp.client.request-timeout=30000spring.ai.mcp.client.enabled=true# 配置mcp的服务端sse地址,这里选用了一个开源的抓取网站内容的工具spring.ai.mcp.client.sse.connections.server1.url=https://mcp-09724909-442f-4b85.api-inference.modelscope.cn

b.给 chatModel注入工具

运行结果:

此时可以发现,我们的c hatModel不再是一个原生的LLM接口,已经可以根据用户意图来自主调用我们的MCP工具。

当然我们也可以看出,利用 Spring-AI做MCP调用是非常简单,只需配置好LLM的调用接口和MCP工具地址即可。

作为Demo此时没有任何问题,但如果作为工程实现,比如我们要去做一个助理平台,这时候其实每个助理所绑定的MCP工具是动态的,而非像上述这样在应用启动时初始化好的Bean,这种场景也是可以实现的, Spring-AI也支持在调用过程中动态封装工具,这些工具可以是MCP,也可以是程序中的Bean,或者是某些HTTP、RCP接口等。

2.服务端为stdio方式提供

a.配置Properties

Stdio和 SSE配置的区别是将调用方式由显示的服务地址换成npm、java、python等脚本命令直接执行的远程包或本地包。

这里采用本地配置文件的方式去配置Stdio,即spring.ai.mcp.client.stdio.servers-configuration=classpath:/mcp-servers-config.json。

spring.ai.mcp.client.name=ai-demo#spring.ai.mcp.client.type=SYNCspring.ai.mcp.client.toolcallback.enabled=truespring.ai.mcp.client.request-timeout=30000spring.ai.mcp.client.enabled=truespring.ai.mcp.client.stdio.servers-configuration=classpath:/mcp-servers-config.json

b.配置config.json

这里注入了两个比较经典的MCP服务,百度地图和新闻热点服务:

{  "mcpServers": {    "baidu-map": {      "command""npx",      "args": [        "-y",        "@baidumap/mcp-server-baidu-map"      ],      "env": {        "BAIDU_MAP_API_KEY""Qr0GV6v4krVPlIJkupyPpi63d1zXh0Ko"      }    },    "mcp-server-hotnews": {      "command""npx",      "args": [        "-y",        "@wopal/mcp-server-hotnews"      ]    }  } }

c.给chatModel注入工具

@ConfigurationpublicclassChatClientConfig {    @Autowired    private ToolCallbackProvider tools;    @Autowired    OpenAiChatModel chatModel;    @Bean    public CommandLineRunner predefinedQuestions(            ConfigurableApplicationContext context) {        return args -> {            // 构建ChatClient,注入mcp工具            var chatClient = ChatClient.builder(chatModel).defaultTools(tools.getToolCallbacks())                    .build();
            // 使用ChatClient与LLM交互            String userInput = "帮我查找今天的知乎热帖";            System.out.println("\n>>> QUESTION: " + userInput);            System.out.println("\n>>> ASSISTANT: " + chatClient.prompt().user(userInput).call






请到「今天看啥」查看全文