LangChain4j + MCP:让你的 AI 轻松调用外部工具(内附GitHub-MCP实战)

0 前言

LangChain4j 支持模型上下文协议(MCP),用于与符合 MCP 标准的服务器通信,从而调用并执行工具。

该协议支持两种通信方式,LangChain4j 均已支持:

  • HTTP 模式:客户端通过 SSE 通道接收服务端事件,并通过 HTTP POST 请求发指令
  • stdio 模式:客户端可将 MCP 服务器作为本地子进程运行,并通过标准输入/输出与其通信

想让聊天模型或 AI 服务使用 MCP 服务器提供的工具,先得创建一个 MCP 工具提供者实例。

1 创建 MCP 工具提供者(MCP tool provider)

1.1 MCP通信方式

先要构建一个 MCP 通信方式的实例。

① stdio

以本地启动 NPM 包为例:

McpTransport transport = new StdioMcpTransport.Builder()
    .command(List.of("/usr/bin/npm", "exec", "@modelcontextprotocol/server-everything@0.6.2"))
    .logEvents(true) // 开启日志记录(可选)
    .build();
② HTTP

需要两个 URL:

  • 一个用于启动 SSE channel
  • 另一个用于通过 POST 提交命令:
McpTransport transport = new HttpMcpTransport.Builder()
    .sseUrl("http://localhost:3001/sse") // SSE 事件channel地址
    .logRequests(true) // 开启请求日志
    .logResponses(true) // 开启响应日志
    .build();

1.2 创建 MCP 客户端

代表可以通过给定的传输协议,使用服务器检索和执行工具的客户端,该客户端可以与MCP服务器通信。

使用 transport 实例创建 MCP 客户端:

McpClient mcpClient = new DefaultMcpClient.Builder()
    .transport(transport)
    .build();

1.3 创建 MCP 工具提供者

工具提供者。每次调用AI服务并为该特定调用提供工具时,都会调用它。 toolproviderresult中返回的工具将包含在对LLM的请求中。

使用 MCP 客户端创建工具提供者:

ToolProvider toolProvider = McpToolProvider.builder()
    .mcpClients(List.of(mcpClient))
    .build();

一个 MCP

<think>根据用户需求,用户想要了解如何使用langchain4j编写MCP客户端并通过指定的URL(http://localhost:9090)调用MCP服务器。结合引用内容,特别是引用[1]中提到的McpToolProvider,以及引用[2][3]中关于连接MCP服务器的示例,我们可以构建一个解决方案。 关键点: 1. langchain4j通过McpToolProvider来实现ToolProvider接口,用于对接MCP协议。 2. 我们需要创建一个MCP客户端,连接到指定的URL(http://localhost:9090)。 3. 然后,我们可以使用这个客户端来调用MCP服务器提供的工具。 步骤: 1. 添加依赖:在项目中添加langchain4j-mcp的依赖。 2. 创建McpToolProvider实例,指定MCP服务器的URL。 3. 使用McpToolProvider获取工具列表或特定工具。 4. 调用工具。 注意:引用[2][3]中提到了使用Docker启动MCP服务器,但用户已经指定了URL(http://localhost:9090),所以假设服务器已经运行。 代码示例: 我们将创建一个简单的示例,展示如何连接到MCP服务器并获取工具列表(或调用一个工具)。 假设MCP服务器在http://localhost:9090上运行,并且提供了一个工具(例如,获取GitHub仓库提交历史的工具)。 由于引用中提到的McpGithubToolsExample类使用了Docker启动服务器,但用户只需要客户端连接,因此我们只关注客户端部分。 参考引用[1]和[4],我们可以使用McpToolProvider来连接服务器。 编写示例代码:</think>### 如何使用 LangChain4j 编写 MCP 客户端并调用服务器 以下是使用 LangChain4j 实现 MCP 客户端并通过 `http://localhost:9090` 调用 MCP 服务器的完整步骤: #### 1. 添加依赖 在项目的 `pom.xml` 中添加 LangChain4j MCP 依赖: ```xml <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-mcp</artifactId> <version>0.27.0</version> <!-- 使用最新版本 --> </dependency> ``` #### 2. 创建 MCP 客户端 通过指定 URL 创建 MCP 客户端连接: ```java import dev.langchain4j.mcp.tool.McpToolProvider; import dev.langchain4j.model.openai.OpenAiChatModel; public class McpClientExample { public static void main(String[] args) { // 1. 创建 MCP 工具提供者(指定服务器URL) McpToolProvider toolProvider = McpToolProvider.builder() .baseUrl("http://localhost:9090") // MCP服务器地址 .build(); // 2. 获取所有可用工具 List<ToolSpecification> tools = toolProvider.getTools(); System.out.println("可用工具: " + tools.stream() .map(ToolSpecification::name) .collect(Collectors.toList())); // 3. 创建语言模型(集成MCP工具) OpenAiChatModel model = OpenAiChatModel.builder() .apiKey("sk-...") // 你的OpenAI密钥 .temperature(0.3) .tools(toolProvider.getTools()) // 注入MCP工具 .build(); // 4. 调用工具示例 String response = model.generate("获取LangChain4j仓库最近3次提交"); System.out.println("MCP响应: " + response); } } ``` #### 3. 关键配置说明 1. **服务器连接** `baseUrl("http://localhost:9090")` 直接指向 MCP 服务器端点,支持 HTTP/HTTPS 协议 2. **工具发现机制** MCP 客户端会自动从服务器获取工具清单,无需手动声明工具接口 3. **执行流程** ```mermaid graph LR A[用户请求] --> B(语言模型) B --> C{识别工具调用} C -->|是| D[MCP客户端] D --> E[HTTP请求到 localhost:9090] E --> F[MCP服务器] F --> G[执行实际工具] G --> H[返回结果] H --> B C -->|否| I[直接返回响应] ``` #### 4. 高级配置选项 ```java McpToolProvider.builder() .baseUrl("http://localhost:9090") .connectTimeout(Duration.ofSeconds(10)) // 连接超时 .readTimeout(Duration.ofSeconds(30)) // 读取超时 .withUserAgent("MyClient/1.0") // 自定义UA .addHeader("Authorization", "Bearer ...") // 认证头 .build(); ``` #### 5. 错误处理建议 - 检查服务器状态:确保 MCP 服务器在指定端口运行 - 验证网络连通性:使用 `curl http://localhost:9090/.well-known/mcp` 测试连接 - 处理异常: ```java try { toolProvider.getTools(); } catch (McpConnectionException e) { System.err.println("连接MCP服务器失败: " + e.getMessage()); } ``` ### 运行说明 1. 启动 MCP 服务器(确保在 9090 端口监听) 2. 执行客户端程序 3. 观察控制台输出: ``` 可用工具: [github_get_commits, weather_lookup, ...] MCP响应: 最近3次提交:1. 修复XX问题 2. 新增YY功能... ``` > **注意**:实际工具名称和参数由 MCP 服务器动态提供,可通过 `ToolSpecification` 对象获取完整元数据[^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值