业务数据
CRM、ERP、订单、文档、分析和内部知识。
MCP 让另一个程序通过标准合约发布工具、信息和可重复使用的提示。 ADK-Rust 将这些功能转变为类型化代理工具,公开更广泛的协议,并可以在产品运行时管理不断变化的本地 MCP 服务器群。
ADK-Rust MCP 架构
您的代理使用 MCP 功能,就像任何其他 ADK-Rust 工具一样。 MCP 将其连接到每个服务器,而每个服务器仍然对自己的数据、规则和操作负责。
找工作的经历。
代理或工作流程
从允许其查看的工具中选择一种功能。
ADK政策
围绕通话应用批准、授权、护栏和审核。
运行时内的类型化适配器。
麦克普Toolset
发现工具并保留服务器的架构和结果内容。
协议 APIs
资源、提示、完成、订阅、启发和任务。
服务器管理器
更改并监督本地 stdio 连接的注册表。
选择与所有权相匹配的传输。
本地stdio
ADK-Rust 启动本机二进制或其他子进程并拥有其会话。
Streamable HTTP
连接到具有标头、身份验证和超时的独立托管服务。
每个服务器仅发布其拥有的内容。
工具
行动
资源
背景
提示
模板
任务
长时间工作
CRM、ERP、订单、文档、分析和内部知识。
源代码控制、构建工具、浏览器、沙箱和编码环境。
支付、通信、搜索、地图和合作伙伴 API。
媒体生成、电子表格、计算机使用和特定领域的服务。
从问题开始
当人工智能代理能够到达保存真实信息并执行真实工作的系统时,它就会变得有用。如果没有共享协议,每个数据库、SaaS 产品、浏览器工具、内部服务和专家运行时都需要一个自定义适配器。这些适配器重复发现、架构、传输、错误、身份验证和生命周期代码。
MCP 在该边界周围放置了一个稳定的合约。服务器描述它提供什么以及如何调用它。客户端在运行时发现该目录。然后,代理应用程序可以选择经过审查的功能,而无需导入服务器的实现或接收其私有凭证。
ADK-Rust 将该合约连接到本机 Rust 工具使用的相同工具和 Toolset 抽象。该模型可以通过其正常的代理循环使用 MCP 功能,而应用程序则围绕呼叫保留特定于提供商的模式转换、批准、会话、遥测和操作策略。
工具
工具具有名称、有用的描述、输入模式和可选的输出模式。示例包括读取订单、搜索存储库、更新票证或生成电子表格。
资源
资源为信息提供了稳定的 URI。它可以表示文档、策略、数据库记录、目录或生成的结果,而无需假装读取数据是一种操作。
提示
提示可以捕获服务器域所拥有的任务的正确指令和输入,例如调查订单或检查部署。
启发
在工具调用期间,服务器可以要求客户端提供表单或打开批准的 URL。应用程序仍然负责同意并验证答案。
Dynamic MCP management
An agent product may serve several tenants, workspaces, or operating modes. The useful MCP servers can change when a workspace opens, an administrator enables an integration, a credential rotates, or a specialist process is upgraded.
`McpServerManager` keeps that lifecycle in the application instead of forcing every server definition into startup code. It is designed for local stdio child processes; independently hosted HTTP services remain application-owned connections.
Read mcp.json-compatible definitions or construct them in Rust. Disabled servers stay registered without starting.
Spawn each enabled child and complete the MCP handshake before its capabilities become visible.
List tools from running servers, filter the published surface, and prefix only names that collide.
Add, update, enable, disable, or remove a server without rebuilding the agent application.
Detect a closed connection and apply the server's bounded exponential-backoff restart policy.
Persist the current registry atomically, cancel MCP sessions, wait for the grace period, and drop child transports.
Practical sequence
The model does not receive database credentials or private API clients. It receives a reviewed catalog of tools and resources. ADK-Rust keeps approval around the consequential replacement call.
当前协议表面
直接 ADK-Rust API 涵盖了代理产品最常需要的功能:发现和调用工具、读取资源、解决提示、请求参数建议、订阅更改资源、回答诱导请求以及遵循协商的长期运行工具任务。
对于高级服务器创作、自定义客户端处理程序、通知、传输、授权工作和协议扩展,adk_tool::mcp::rmcp 重新导出框架内使用的确切官方 SDK 版本。这可以避免在一个应用程序中混合不兼容的协议类型。
在普通 ADK-Rust 代理和工具流中使用 MCP 功能。
阅读目录的其余部分,而不是将 MCP 简化为工具调用。
支持超出立即响应范围的协议对话。
选择本地流程所有权或单独托管的服务。
工作示例
应用程序可能需要针对每个工作区、客户或任务的不同 MCP 功能。在启动时对每个服务器进行硬编码会使这些更改变得困难。 McpServerManager 为应用程序提供了一个位置来启动本地 MCP 服务器、组合其工具、更改其配置、监视其连接并彻底关闭它们。
此示例从一台名为 local-tools 的已配置服务器开始。代理可以发现并调用其回显工具。然后,应用程序添加第二个服务器,启用它,替换其运行配置,保存更新的注册表,然后再次将其删除。每次更改都使用可用于管理屏幕或配置服务的相同 API。
该示例完全在您的计算机上运行。 Rust 可执行文件启动自身的副本作为 MCP 子服务器,因此握手、工具发现、工具调用、重新启动、持久性和关闭都是真实的。无需型号、Node.js 封装、API 密钥或互联网连接。
从 mcp.json 兼容配置加载 local-tools,启动其子进程,完成 MCP 握手,并发现其 echo 工具。
将备用工具注册为禁用状态,然后在应用程序决定该功能应该可用时启用并启动它。
更新正在运行的服务器定义。管理器使用新配置重新启动它,并且如果替换启动失败,可以恢复以前的定义。
将实时注册表写回 JSON,禁用并删除额外的服务器,然后彻底关闭每个 MCP 会话和子进程。
let manager = McpServerManager::from_json(&config)?
.with_health_check_interval(Duration::from_secs(15));
manager.start_server("local-tools").await?;
manager.start_monitoring();
manager
.add_server("standby-tools".into(), standby)
.await?;
manager.enable_server("standby-tools").await?;
manager.start_server("standby-tools").await?;
manager
.update_server("standby-tools", replacement)
.await?;
manager.save_json_file("mcp.json").await?;
manager.shutdown().await?;$ cargo run --manifest-path examples/mcp_manager/Cargo.toml
1. Loaded local-tools from mcp.json-compatible configuration
status: Running
2. Discovered 1 tool: echo
3. Called the real child server
response: {"output":"MCP server replied: dynamic MCP is running"}
4. Added standby-tools at runtime: Disabled
enabled and started: Running
5. Reconfigured the running server and restarted it safely
6. Saved the live registry
7. Disabled, removed, and shut down every child server客户端、管理器或服务器
大多数代理应用程序都是 MCP 客户端。它们连接到现有服务器并向代理提供选定的工具。允许工作区或管理员集成的产品可以将本地 stdio 连接置于管理器后面。发布新功能的团队使用重新导出的 rmcp 服务器 API,然后从 ADK-Rust 客户端测试服务器。
生产设计
MCP 使发现和通信保持一致。它不会决定代理应该访问哪些系统、哪些操作需要批准、如何颁发凭据,或者依赖项失败时应该发生什么。这些仍然是产品和平台决策。
围绕一个团队或系统拥有的一致功能创建服务器。避免使用一台庞大的服务器,其工具涵盖不相关的凭据和风险级别。
在模型看到工具之前过滤它们。将读取操作与写入、支付、删除、部署和其他后续操作区分开来。
保留 mcp.json autoApprove 是为了兼容;它不会绕过框架的授权、确认处理程序或应用程序策略。
当您的应用程序拥有本地子进程时,请使用 stdio。当另一个部署拥有可用性、身份和扩展性时,请使用 Streamable HTTP。
工具描述、模式、资源内容和结果跨越系统边界。验证参数、绑定结果大小并保护模型上下文免受恶意指令的影响。
设置连接和任务超时,记录生命周期更改,单独探测业务依赖性,并决定当一台服务器不可用时产品的行为方式。