
教程文档人工智能【免费下载链接】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 仓库中的 Rust 版 MCP 服务器示例为对象完整讲解如何基于rmcp框架在 Rust 中编写、构建并运行一个基于标准输入输出stdio传输的 Model Context ProtocolMCP服务器。读者将掌握cargo build/cargo run的完整运行流程理解ServerHandler、#[tool_router]、#[tool_handler]等核心抽象的作用并能借助 MCP Inspector 对该服务器做端到端验证。文中涉及的文件以 03-GettingStarted/01-first-server/solution/rust 为基准并以 03-GettingStarted/samples/rust 中的扩展版示例作为对照。示例概览solution 与 samples 两个 Rust 实现仓库在构建你的第一个 MCP 服务器课程03-GettingStarted/01-first-server/README.md下提供了两个 Rust 实现目录项目名工具数量用途solution/rustcalculator-server1 个add课程标准答案最小可运行的入门示例samples/rustcalculator4 个加、减、乘、除面向实战的扩展示例含除零保护两者采用完全相同的技术栈与代码骨架差别仅在注册的工具数量上。本文以 solution 版为主线展开并在文末对照 samples 版给出多工具扩展的写法。构建示例cargo build 与依赖清单解析前置条件已安装 Rust 工具链cargo/rustc由于两个项目的Cargo.toml均声明edition 2024需要较新版本的 Rust 工具链支持可正常访问 crates.io 以拉取依赖首次构建会下载全部依赖并生成 Cargo.lock 锁文件。执行构建进入 solution/rust 目录后执行cargo build该命令完成两件事解析并下载依赖、编译项目。成功后在target/debug/下生成可执行文件。它也是关联文档中安装依赖并构建项目的官方推荐命令——Rust 的依赖安装与构建一体化无需像其他语言那样先单独执行安装步骤。依赖清单背后的技术选型打开 solution/rust/Cargo.toml可以看到这个入门服务器只依赖三个运行时 crate[package] name calculator-server version 0.1.0 edition 2024 [dependencies] rmcp { version 2.1.0, features [server, transport-io] } serde 1.0.219 tokio { version 1.46.1, features [rt-multi-thread] } [dev-dependencies] slab 0.4.11依赖版本在本示例中的作用rmcp2.1.0Rust MCP 协议实现serverfeature 提供服务器端能力transport-io提供 stdio 传输支持是服务器的核心serde1.0.219为工具请求参数结构提供反序列化Deserialize能力tokio1.46.1异步运行时rt-multi-threadfeature 启用多线程运行时main函数基于它执行slab0.4.11仅用于开发测试的辅助 crate对照 samples/rust/Cargo.toml 可见扩展版示例依赖完全一致仅tokio版本号与项目名、版本号不同说明从入门最小示例演进到多工具示例不需要引入任何新依赖。运行示例cargo run 与 stdio 传输构建通过后在 solution/rust 目录执行cargo run这是关联文档中运行示例的标准命令。运行后程序会进入等待状态从标准输入stdin读取 JSON-RPC 请求处理后把响应写到标准输出stdout——这正是 stdio 传输的工作方式。需要特别注意的是stdio 型 MCP 服务器不能被浏览器或 curl 直接访问它必须由一个 MCP 客户端如 Claude Desktop、VS Code 插件或 MCP Inspector以子进程方式拉起并通过标准输入输出进行协议通信。因此运行起来却没有任何输出是正常现象验证手段应使用下文介绍的 MCP Inspector或参考课程后续 02-client 中的客户端示例。源码解析main.rs 中的 MCP 服务器骨架main.rs 全文约 50 行由四个层次构成。完整代码如下use rmcp::{ ServerHandler, ServiceExt, handler::server::{router::tool::ToolRouter, tool::Parameters}, model::{ServerCapabilities, ServerInfo}, schemars, tool, tool_handler, tool_router, transport::stdio, }; use std::error::Error; #[derive(Debug, Clone)] pub struct Calculator { tool_router: ToolRouterSelf, } #[derive(Debug, serde::Deserialize, schemars::JsonSchema)] pub struct CalculatorRequest { pub a: f64, pub b: f64, } #[tool_router] impl Calculator { pub fn new() - Self { Self { tool_router: Self::tool_router(), } } #[tool(description Adds a and b)] async fn add( self, Parameters(CalculatorRequest { a, b }): ParametersCalculatorRequest, ) - String { (a b).to_string() } } #[tool_handler] impl ServerHandler for Calculator { fn get_info(self) - ServerInfo { ServerInfo { instructions: Some(A simple calculator tool.into()), capabilities: ServerCapabilities::builder().enable_tools().build(), ..Default::default() } } } #[tokio::main] async fn main() - Result(), Boxdyn Error { let service Calculator::new().serve(stdio()).await?; service.waiting().await?; Ok(()) }逐层拆解如下。工具请求参数CalculatorRequest#[derive(Debug, serde::Deserialize, schemars::JsonSchema)] pub struct CalculatorRequest { pub a: f64, pub b: f64, }该结构声明了add工具的两个入参a和b均为f64。两个派生宏各有分工serde::Deserialize负责把客户端传来的 JSON 请求反序列化为此结构schemars::JsonSchema则自动生成参数的 JSON Schema 元数据供客户端了解工具签名并据此校验输入。服务器主体与工具路由Calculator#[derive(Debug, Clone)] pub struct Calculator { tool_router: ToolRouterSelf, } #[tool_router] impl Calculator { pub fn new() - Self { Self { tool_router: Self::tool_router(), } } ... }Calculator结构持有ToolRouterSelf字段。从代码结构可以推断#[tool_router]属性宏会在编译期扫描impl块内所有标注了#[tool]的方法自动生成Self::tool_router()关联函数把各工具按名称与签名注册进路由器并完成与Parameters反序列化的接线——这正是零样板注册工具的实现基础。工具定义add#[tool(description Adds a and b)] async fn add( self, Parameters(CalculatorRequest { a, b }): ParametersCalculatorRequest, ) - String { (a b).to_string() }#[tool]属性中的description会作为该工具在 MCP 协议中的描述文本暴露给 LLM帮助模型判断何时调用此工具。函数签名中的Parameters(CalculatorRequest { a, b })模式匹配直接解构出两个操作数返回String作为工具执行结果。整个方法为async与tokio运行时配合。服务器信息与能力声明ServerHandler#[tool_handler] impl ServerHandler for Calculator { fn get_info(self) - ServerInfo { ServerInfo { instructions: Some(A simple calculator tool.into()), capabilities: ServerCapabilities::builder().enable_tools().build(), ..Default::default() } } }ServerHandler是 rmcp 定义服务器行为的核心 trait。#[tool_handler]宏负责把工具路由与 MCP 生命周期接线。get_info()返回的ServerInfo声明了两类元数据instructions向客户端提供的服务器说明文本capabilities通过ServerCapabilities::builder().enable_tools()显式宣告本服务器支持 tools 能力。这种显式声明使客户端在握手阶段即可获知服务器能力是 MCP 协议 discoverability可发现性的体现。入口与传输main#[tokio::main] async fn main() - Result(), Boxdyn Error { let service Calculator::new().serve(stdio()).await?; service.waiting().await?; Ok(()) }#[tokio::main]将main变为 tokio 异步入口。serve(stdio())基于标准输入输出创建服务并完成初始化waiting()使服务器挂起等待请求直到进程被终止。transport::stdio模块正是 Cargo.toml 中transport-iofeature 所提供的实现。扩展对照samples/rust 的多工具版本若想快速体验在同一个 impl 块里堆叠多个工具的写法可直接查看 samples/rust/src/main.rs。它在#[tool_router] impl Calculator块中并列注册了四个工具其中除法实现了除零保护#[tool(description Divides a by b)] async fn divide( self, Parameters(CalculatorRequest { a, b }): ParametersCalculatorRequest, ) - String { if b 0.0 { Error: Division by zero.to_string() } else { (a / b).to_string() } }从中可以总结出两点实战经验其一新增工具 在 impl 块中新增一个标注#[tool(description ...)]的方法其余接线全部由宏完成其二对非法输入如除零应在工具内部显式处理并返回可读的错误文本而不是让 panic 中断服务器。验证通过 MCP Inspector 调用 add 工具主课程 01-first-server/README.md 的 Rust 章节给出了无需打开浏览器即可验证工具的 CLI 方式在服务器目录执行npx modelcontextprotocol/inspector cargo run --cli --method tools/call --tool-name add --tool-arg a1 b2该命令会以cargo run启动服务器进程调用名为add的工具并传入a1, b2随后在终端直接返回计算结果。这是对 stdio 服务器最快捷的冒烟测试完整的交互式界面列出工具、填写参数、查看实时响应则可参考课程中 Inspector 的图形化用法。常见问题与排查现象可能原因与处理cargo build长时间无进展或报网络错误首次构建需下载依赖检查 crates.io 网络连通性构建完成后 Cargo.lock 会锁定依赖版本cargo run后无任何输出正常现象。stdio 服务器通过标准输入输出通信需由 MCP 客户端/Inspector 拉起不能直接看到文本输出编译报 edition 相关错误项目使用edition 2024请确认 Rust 工具链版本足够新Inspector 提示找不到服务器确认当前工作目录在包含Cargo.toml的项目根目录且已先完成cargo build客户端收到错误但程序未崩溃检查工具内部是否对非法输入做了显式校验参照 samples 版除零保护写法小结通过 solution 与 samples 两个 Rust 示例可以清晰看到用 rmcp 构建 MCP 服务器的完整闭环Cargo.toml声明三个依赖 →main.rs用结构体 三个属性宏搭建服务器骨架 →cargo build一键构建 →cargo run以 stdio 传输对外服务 → MCP Inspector 完成调用验证。掌握这一流程后即可继续学习本课程的后续章节例如 构建 MCP 客户端 与 stdio 服务器深入实践将单个工具扩展为完整的 AI 工作流。赞分享教程文档人工智能【免费下载链接】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点击查看免费下载相关推荐用 Rust 构建你的第一个 MCP 服务器calculator-server 示例的构建、运行与源码解析mcp-for-beginners用 Rust 构建你的第一个 MCP 服务器calculator server 示例的构建、运行与源码解析mcp for beginners 本篇指南基于教程文档人工智能mcp-for-beginners Rust 实战使用 rmcp 构建基于 stdio 的 MCP 计算器服务器mcp for beginners Rust 实战使用 rmcp 构建基于 stdio 的 MCP 计算器服务器 本篇技术指南以 mcp for beginn教程文档人工智能用 Spring Boot 构建你的第一个 Java MCP 服务Calculator 示例全解析用 Spring Boot 构建你的第一个 Java MCP 服务Calculator 示例全解析 导读 本文基于 mcp for beginners 开源课教程文档人工智能上一篇为什么你的Raspberry Pi需要PCIe Database5个实际应用场景详解下一篇【亲测免费】 auto-video-generateor自动生成解说视频的利器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考