在 Rust 中构建 LLM 驱动的 MCP 客户端:mcp-for-beginners 示例的配置、运行与源码解析
发布时间:2026/10/4 10:21:53 锦皓数字建站

教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载本指南围绕 mcp-for-beginners 开源课程中03-llm-client创建带 LLM 的客户端一课的 Rust 解决方案展开完整讲解如何为 MCP 客户端接入 LLM从配置认证令牌、构建并运行cargo示例到剖析客户端如何启动计算器 MCP 服务器、获取工具清单并把 MCP 工具转换为 LLM 可理解的 function 调用。读完本文你将掌握一套可直接复制的MCP 客户端 LLM 工具调用闭环实现并理解async-openai与rmcp两条核心依赖链路的协作方式。示例概览Rust 版 LLM 客户端本示例是 03-llm-client/solution/rust 下的 Rust 解决方案。与前几课客户端显式调用服务器不同这一课的目标是让用户直接用自然语言与 MCP 能力交互客户端把 MCP 服务器暴露的 tools 清单转换为 LLM 的函数调用格式由 LLM 自主决定何时调用哪个工具最终把工具执行结果再交还给模型生成回答。相关文档位于 translations/ar/03-GettingStarted/03-llm-client/solution/rust/README.md英文原版见 translations/en/03-GettingStarted/03-llm-client/solution/rust/README.md课程主文档在 03-GettingStarted/03-llm-client/README.md全部运行时方案索引见 03-GettingStarted/03-llm-client/solution/README.md。环境准备安装 Rust 工具链运行本示例前需要先安装 Rust 工具链包括cargo。文档要求读者自行参考 Rust 官方安装指南完成安装常见的安装方式是通过官方安装脚本获得rustup随后用rustup update保持工具链为最新版本。安装完成后在终端中执行cargo --version与rustc --version确认工具链可用即可继续后续步骤。配置认证用OPENAI_API_KEY传递 GitHub PAT客户端通过 GitHub Models 推理端点https://models.github.ai/inference/chat调用模型并从OPENAI_API_KEY环境变量读取你的 GitHub 个人访问令牌PAT。[!NOTE] 仓库中的其他解决方案如 TypeScript、Python、.NET 等使用GITHUB_TOKEN在 Rust 方案中请将OPENAI_API_KEY设置为同一个值以便与 OpenAI 客户端配置相匹配。设置令牌的步骤如下步骤 0# zsh/bash export OPENAI_API_KEY{{YOUR_GITHUB_PAT}}# PowerShell $env:OPENAI_API_KEY {{YOUR_GITHUB_PAT}}把{{YOUR_GITHUB_PAT}}替换为你真实的 GitHub PAT。之所以是OPENAI_API_KEY而非GITHUB_TOKEN是因为本示例通过 async-openai crate 以 OpenAI 兼容协议访问推理端点该 crate 按 OpenAI 生态约定从OPENAI_API_KEY读取密钥。版本迁移提醒GitHub Models 已退役当前源码使用 Foundry 配置需要特别说明的是仓库内的实现已经演进课程主文档 03-GettingStarted/03-llm-client/README.md 明确注明GitHub Models 已于 2026-07-30 退役并建议改用 Microsoft Foundry 资源、部署gpt-5.1等活动模型英文原版 README03-GettingStarted/03-llm-client/solution/rust/README.md与当前src/main.rs源码也已同步迁移到AZURE_OPENAI_*环境变量体系export AZURE_OPENAI_ENDPOINThttps://resource-name.openai.azure.com export AZURE_OPENAI_API_KEYapi-key export AZURE_OPENAI_DEPLOYMENTgpt-5.1本翻译版 README 描述的OPENAI_API_KEY GitHub Models 配置方式属于该文档记录的历史形态阅读源码时若直接运行需按上述 Foundry 变量配置若还原文档所述的 GitHub Models 场景则将OPENAI_API_KEY设为 PAT 并将模型名改为openai/gpt-5-mini即可。构建示例cargo build配置好认证环境变量后进入 Rust 解决方案目录并构建步骤 1cargo buildcargo build会根据 Cargo.toml 拉取并编译全部依赖生成可执行文件。本示例的依赖清单如下[dependencies] async-openai { version 0.29.0, features [byot] } rmcp { version 1.4.0, features [client, transport-child-process] } serde_json 1.0.141 tokio { version 1.46.1, features [rt-multi-thread] }async-openai社区维护的 OpenAI API Rust 客户端本示例启用byotBring Your Own Token特性以适配自定义端点rmcpRust 实现的 MCP 协议库启用client与transport-child-process特性以支持子进程 transportserde_json处理 MCP 工具 schema 与 LLM 消息的 JSON 序列化tokio异步运行时驱动整个客户端事件循环。运行示例cargo run 与预期输出构建完成后直接运行步骤 2cargo run运行流程客户端启动计算器 MCP 服务器拉取它的工具列表并让模型文档场景中为openai/gpt-5-mini调用add工具。你应当看到指示工具调用的输出例如Calling tool: add以及该次调用的结果。由于用户问题与服务器能力被编排为自然语言 → LLM → 工具调用 → 结果回填 → LLM 总结的闭环最终输出通常包括模型对What is the sum of 3 and 2?这类问题的最终回答以及⚡ Calling tool: add之类的工具调用日志源码中以println!(⚡ Calling tool: {}, name)打印。源码原理剖析main.rs 中的完整工具调用链路要理解运行背后的机制需要结合 src/main.rs 逐段阅读。整个客户端围绕初始化 → 连服务器 → 转 schema → 循环调用四条主线展开与课程主文档 03-GettingStarted/03-llm-client/README.md 中连接服务器 → 列出能力并保存 schema → 把能力交给 LLM → 处理用户提示词的总体方法一一对应。1. 初始化消息与 OpenAI 客户端main.rs 首先构造首条用户消息然后从环境变量读取端点和密钥用OpenAIConfig拼接出{endpoint}/openai/v1的 API 基础地址let mut messages vec![json!({role: user, content: What is the sum of 3 and 2?})]; let endpoint std::env::var(AZURE_OPENAI_ENDPOINT)?; let api_key std::env::var(AZURE_OPENAI_API_KEY)?; let openai_client Client::with_config( OpenAIConfig::new() .with_api_base(format!({}/openai/v1, endpoint.trim_end_matches(/))) .with_api_key(api_key), );2. 以子进程方式拉起计算器 MCP 服务器客户端通过rmcp的TokioChildProcesstransport 启动上一课 01-first-server 的 Rust 计算器服务器。路径解析逻辑从当前 crate 目录向上回溯到03-GettingStarted后拼接01-first-server/solution/rust再以cargo run在该目录中启动服务器进程见 main.rslet mcp_client () .serve( TokioChildProcess::new(Command::new(cargo).configure(|cmd| { cmd.arg(run).current_dir(server_dir); })) .map_err(RmcpError::transport_creation::TokioChildProcess)?, ) .await?;服务器端定义于 01-first-server/solution/rust/src/main.rs通过#[tool_router]、#[tool(description Adds a and b)]等宏暴露add(a: f64, b: f64)工具并使用#[tool_handler]声明ServerCapabilities::enable_tools()表示该服务器只提供工具能力。3. 获取 MCP 工具列表连接建立后直接调用list_tools获取服务器能力清单main.rslet tools mcp_client.list_tools(Default::default()).await?;4. 将 MCP 工具转换为 LLM 可理解的 function 格式format_tools是关键的翻译层main.rs它把 MCP 工具清单序列化后逐个提取name、description与inputSchema重组为 OpenAI function calling 规范的结构type: functionparameters中的properties/requiredSome(json!({ type: function, function: { name: name, description: description, parameters: { type: object, properties: schema.get(properties).unwrap_or(json!({})), required: schema.get(required).unwrap_or(json!([])) } } }))这正是课程主文档中把服务器能力转换为 LLM 工具步骤的 Rust 落地实现——与 TypeScript 版的openAiToolAdapter、Python 版的convert_to_llm_tool思路一致只是 Rust 侧使用serde_json直接在 JSON 层完成映射。5. 调用 LLM 并解析工具调用call_llmmain.rs通过async-openai的completions().create_byot发送消息、模型名与格式化后的工具列表模型名默认取环境变量AZURE_OPENAI_DEPLOYMENT缺省回退到gpt-5.1。process_llm_response与extract_tool_call_info则实现了工具调用循环main.rs从响应的choices[0].message中读取文本内容若存在tool_calls则把助手消息追加进messages历史对每个工具调用提取tool_id、函数名与参数 JSON通过mcp_client.call_tool(...)真正执行 MCP 服务器上的add工具将工具结果以role: tool、携带tool_call_id的消息追加回对话用更新后的完整上下文再次调用 LLM递归处理后续轮次直到模型给出最终文本回答。extract_tool_call_info中arguments缺失时回退到{}function缺失时直接报Missing function体现了对非规范响应的防御性处理。排查与验证建议看不到工具调用日志优先检查环境变量是否已正确设置OPENAI_API_KEY或 Foundry 三件套以及 PAT 是否具有调用推理端点的权限cargo build失败确认 Rust 工具链版本满足edition 2024见 Cargo.toml并确保网络可拉取async-openai、rmcp等依赖服务器启动异常01-first-server/solution/rust目录必须存在且可编译因为客户端会在运行时以cargo run拉起该服务器main.rs。进一步学习课程完整方法读 03-GettingStarted/03-llm-client/README.md 了解连接服务器 → 列出能力 → 转换 schema → 处理用户提示词四步方法论对比其他语言实现见 03-GettingStarted/03-llm-client/solution/README.md 中的 TypeScript、Python、.NET、Java 方案体会同一思路在不同生态的落地差异计算器服务器源码见 03-GettingStarted/01-first-server/solution/rust/src/main.rs理解本客户端所依赖的add工具从声明到注册的完整过程。赞分享教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载相关推荐N_m3u8DL-RE 完整指南HLS/DASH/MSS 流媒体一键下载、加密解密与直播录制N_m3u8DL RE 完整指南HLS/DASH/MSS 流媒体一键下载、加密解密与直播录制 N_m3u8DL RE 是一款跨平台命令行流媒体下载工具用于下教程文档人工智能mcp-for-beginners 实战使用 .NET 构建接入 LLM 的 MCP 客户端mcp for beginners 实战使用 .NET 构建接入 LLM 的 MCP 客户端 在本篇指南中你将基于 mcp for beginners 开源教程文档人工智能mcp-for-beginners 实战用 Rust 实现并运行 Streamable HTTP 的 MCP 计算器客户端与服务端mcp for beginners 实战用 Rust 实现并运行 Streamable HTTP 的 MCP 计算器客户端与服务端 导读 本文围绕 mcp f教程文档人工智能上一篇一条命令管好整个网盘BaiduPCS-Go 终极使用指南下一篇Minueza-32M-Base-openmind核心优势揭秘为何它能在无GPU设备上高效运行创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。