模型上下文协议(MCP)
LangChain4j 支持模型上下文协议(MCP),用于与可提供并执行工具的 MCP 兼容服务器通信。有关该协议的一般信息,请参见 MCP 官网。
备注
想在 Java 中构建 MCP stdio 服务器? 服务器实现位于 LangChain4j Community。参见 构建 Java MCP stdio 服务器。
协议规定了两种传输类型,这两种均受支持:
- Streamable HTTP: 客户端发送 HTTP 请求,服务器以普通响应回复,或在需要随时间发送多个响应时 打开 SSE 流。
- stdio:客户端 可将 MCP 服务器作为本地子进程运行,并通过标准输入/输出直接通信。
在规范之上,LangChain4j 还实现了 WebSocket 传输。该传输尚未标准化,
目前客户端的实现方式与
Quarkus MCP Server 扩展 实现的 WebSocket 传输兼容。
对于使用其他框架构建并暴露 WebSocket 的 MCP 服务器,兼容性不作保证。
此外,LangChain4J 支持 Docker stdio 传输,可用于以容器镜像分发的 stdio MCP 服务器。
LangChain4j 还支持旧版 HTTP/SSE 传输, 但该方式已弃用,将来会被移除。
要让聊天模型或 AI 服务运行 MCP 服务器提供的工具, 需要创建 MCP 工具提供者实例。
创建 MCP 工具提供者
MCP 传输
首先,需要一个 MCP 传输实例。
对于 stdio——以下示例展示如何从 NPM 包启动子进程服务器:
McpTransport transport = StdioMcpTransport.builder()
.command(List.of("/usr/bin/npm", "exec", "@modelcontextprotocol/server-everything@0.6.2"))
.logEvents(true) // only if you want to see the traffic in the log
.build();
对于 Streamable HTTP 传输,需要提供服务器 POST 端点的 URL:
McpTransport transport = StreamableHttpMcpTransport.builder()
.url("http://localhost:3001/mcp")
.logRequests(true) // if you want to see the traffic in the log
.logResponses(true)
.build();