08-mcp-tool-calling MCP 工具调用:让大模型连接外部工具服务
LangChain4j 进阶实战:第 8 篇,MCP 工具调用,让模型连接外部工具服务
1. MCP 解决什么问题
本地@Tool适合把当前 Java 应用里的方法暴露给模型。但真实系统里,工具可能分散在多个服务:
- 天气服务。
- 订单服务。
- 库存服务。
- 日历服务。
- 地图服务。
- 企业内部系统。
- 第三方 SaaS。
如果每个工具都要打包进当前应用,系统会越来越重。MCP,也就是 Model Context Protocol,可以把工具做成独立服务,让模型通过标准协议发现和调用工具。
2. 本地工具和 MCP 的区别
| 方式 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
本地@Tool | 简单、低延迟、易调试 | 工具和应用强耦合 | 小工具、内部方法 |
| MCP | 服务化、可复用、跨应用 | 部署和协议更复杂 | 多系统工具、企业工具平台 |
我的理解是:@Tool是单体应用里的工具机制,MCP 是工具服务化之后的协议层。
3. LangChain4j 作为 MCP Client
McpController中创建 MCP 连接:
StreamableHttpMcpTransporttransport=StreamableHttpMcpTransport.builder().url(MCP_SSE_URL).logRequests(true).logResponses(true).build();McpClientmcpClient=newDefaultMcpClient.Builder().transport(transport).build();然后把 MCP 工具转换为 ToolProvider:
ToolProvidertoolProvider=McpToolProvider.builder().mcpClients(