mcp - 客户端构建和集成使用
McpClientToolProvider(Mcp 客户端工具提供者),是提供 McpClientTool 的实体。对应的配置属性实体为 McpClientProperties。
1、配置属性 McpClientProperties
属性 | 默认值 | 说明 |
---|---|---|
name | Solon-Ai-Mcp-Client | 客户端名称 |
version | 1.0.0 | 客户端版本号 |
apiUrl | 接口完整地址 | |
apiKey | 接口密钥 | |
headers | 请求头信息 | |
httpTimeout.connectTimeout | 10s | http 连接超时 |
httpTimeout.writeTimeout | 60s | http 写超时 |
httpTimeout.readTimeout | 60s | http 读超时(如果为0,表示不超时) |
requestTimeout | 20s | 请求超时 |
initializationTimeout | 20s | 初始化超时 |
2、配置或构建
- DI 环境构建方式
solon.ai:
mcp:
client:
demo:
apiUrl: "http://localhost:8080/mcp/sse"
gitee:
apiUrl: "http://ai.gitee.demo/mcp/sse"
@Configuration
public class McpClientConfig {
@Bean("mcp-demo")
public McpClientToolProvider clientWrapper(@Inject("${solon.ai.mcp.client.demo}") McpClientToolProvider client) {
return client;
}
@Bean("mcp-gitee")
public McpClientToolProvider clientWrapper(@Inject("${solon.ai.mcp.client.gitee}") McpClientToolProvider client) {
return client;
}
}
- Java 原生环境构建方式
//使用代码构建
McpClientToolProvider clientToolProvider = McpClientToolProvider.builder()
.apiUrl("http://localhost:8080/mcp/sse")
.build();
//使用配置构建
McpClientToolProvider clientToolProvider = Utils.loadProps("classpath:mcp/gitee.yml")
.getProps("solon.ai.mcp.client.demo") //对上配置前缀
.toBean(McpClientToolProvider.class);
3、客户端使用
- 直接调用
public void case1() {
McpClientToolProvider clientToolProvider = McpClientToolProvider.builder()
.apiUrl("http://localhost:8080/mcp/sse")
.build();
String rst = clientToolProvider.callToolAsText("getWeather", Map.of("location", "杭州"));
}
- 绑定给模型使用(结合配置与注入)
solon.ai:
chat:
demo:
apiUrl: "http://127.0.0.1:11434/api/chat"
provider: "ollama"
model: "qwen2.5:1.5b"
mcp:
client:
demo:
apiUrl: "http://localhost:8080/mcp/sse"
@Configuration
public class McpClientConfig {
@Bean
public McpClientToolProvider mcpClient(@Inject("${solon.ai.mcp.client.demo}") McpClientToolProvider client) {
return client;
}
@Bean
public ChatModel chatModel(@Inject("${solon.ai.chat.demo}") ChatConfig chatConfig, McpClientToolProvider toolProvider) {
return ChatModel.of(chatConfig)
.defaultToolsAdd(toolProvider.getTools()) //添加默认工具
.build();
}
@Bean
public void case2( McpClientToolProvider toolProvider, ChatModel chatModel) {
ChatResponse resp = chatModel.prompt("杭州今天的天气怎么样?")
.options(options -> {
//转为工具集合用于绑定 //如果有 defaultToolsAdd,这里就不需要了
//options.toolsAdd(toolProvider.getTools());
//获取特定工具用于绑定
//options.toolsAdd(toolProvider.getTool("getWeather"));
})
.call();
}
}