模型上下文协议·rmcp 2.2

将您的代理连接到系统 工作发生的地方。

MCP 让另一个程序通过标准合约发布工具、信息和可重复使用的提示。 ADK-Rust 将这些功能转变为类型化代理工具,公开更广泛的协议,并可以在产品运行时管理不断变化的本地 MCP 服务器群。

工具资源提示完成订阅启发任务StdioStreamable HTTP

ADK-Rust MCP 架构

在代理中添加或删除 MCP 功能。

您的代理使用 MCP 功能,就像任何其他 ADK-Rust 工具一样。 MCP 将其连接到每个服务器,而每个服务器仍然对自己的数据、规则和操作负责。

01

代理产品

找工作的经历。

代理或工作流程

从允许其查看的工具中选择一种功能。

ADK政策

围绕通话应用批准、授权、护栏和审核。

Toolset
02

ADK-Rust MCP 客户端

运行时内的类型化适配器。

麦克普Toolset

发现工具并保留服务器的架构和结果内容。

协议 APIs

资源、提示、完成、订阅、启发和任务。

服务器管理器

更改并监督本地 stdio 连接的注册表。

MCP
03

连接边界

选择与所有权相匹配的传输。

本地stdio

ADK-Rust 启动本机二进制或其他子进程并拥有其会话。

Streamable HTTP

连接到具有标头、身份验证和超时的独立托管服务。

合同
04

MCP 服务器

每个服务器仅发布其拥有的内容。

工具

行动

资源

背景

提示

模板

任务

长时间工作

每个服务器仍然对其自己的凭据、数据访问、副作用和服务运行状况负责

业务数据

CRM、ERP、订单、文档、分析和内部知识。

开发者系统

源代码控制、构建工具、浏览器、沙箱和编码环境。

外部服务

支付、通信、搜索、地图和合作伙伴 API。

专业运行时间

媒体生成、电子表格、计算机使用和特定领域的服务。

`McpToolset` 管理一个连接。 `McpServerManager` 管理不断变化的本地连接群。官方“rmcp”SDK 仍然可用于自定义服务器、传输、处理程序和协议扩展。

从问题开始

为什么我们需要MCP?

当人工智能代理能够到达保存真实信息并执行真实工作的系统时,它就会变得有用。如果没有共享协议,每个数据库、SaaS 产品、浏览器工具、内部服务和专家运行时都需要一个自定义适配器。这些适配器重复发现、架构、传输、错误、身份验证和生命周期代码。

MCP 在该边界周围放置了一个稳定的合约。服务器描述它提供什么以及如何调用它。客户端在运行时发现该目录。然后,代理应用程序可以选择经过审查的功能,而无需导入服务器的实现或接收其私有凭证。

ADK-Rust 将该合约连接到本机 Rust 工具使用的相同工具和 Toolset 抽象。该模型可以通过其正常的代理循环使用 MCP 功能,而应用程序则围绕呼叫保留特定于提供商的模式转换、批准、会话、遥测和操作策略。

工具

代理可以要求服务器执行的操作

工具具有名称、有用的描述、输入模式和可选的输出模式。示例包括读取订单、搜索存储库、更新票证或生成电子表格。

资源

代理或产品可以读取的上下文

资源为信息提供了稳定的 URI。它可以表示文档、策略、数据库记录、目录或生成的结果,而无需假装读取数据是一种操作。

提示

服务器发布的可重复使用的消息模板

提示可以捕获服务器域所拥有的任务的正确指令和输入,例如调查订单或检查部署。

启发

缺少人工输入的请求

在工具调用期间,服务器可以要求客户端提供表单或打开批准的 URL。应用程序仍然负责同意并验证答案。

Dynamic MCP management

Capabilities can change while the product keeps running.

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.

01

Load the registry

Read mcp.json-compatible definitions or construct them in Rust. Disabled servers stay registered without starting.

02

Start and negotiate

Spawn each enabled child and complete the MCP handshake before its capabilities become visible.

03

Discover safely

List tools from running servers, filter the published surface, and prefix only names that collide.

04

Change it live

Add, update, enable, disable, or remove a server without rebuilding the agent application.

05

Supervise the session

Detect a closed connection and apply the server's bounded exponential-backoff restart policy.

06

Save and close

Persist the current registry atomically, cancel MCP sessions, wait for the grace period, and drop child transports.

Practical sequence

Resolve a damaged order with three independently owned capabilities.

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.

Support agent01Discover approved CRM, order, and policy toolsMCP client
MCP client02tools/list over the negotiated connectionsThree MCP servers
Support agent03read_order { order_id: ORD-1042 }Orders server
Orders server04Structured order and delivery evidenceSupport agent
Support agent05Read the current damaged-goods policy resourcePolicy server
Support agent06request_replacement after ADK approvalCRM server
CRM server07Replacement ID, status, and audit evidenceSupport agent

当前协议表面

ADK-Rust 使用更广泛的 MCP 协议,而不仅仅是工具调用。

直接 ADK-Rust API 涵盖了代理产品最常需要的功能:发现和调用工具、读取资源、解决提示、请求参数建议、订阅更改资源、回答诱导请求以及遵循协商的长期运行工具任务。

对于高级服务器创作、自定义客户端处理程序、通知、传输、授权工作和协议扩展,adk_tool::mcp::rmcp 重新导出框架内使用的确切官方 SDK 版本。这可以避免在一个应用程序中混合不兼容的协议类型。

01

面向代理的适配器

在普通 ADK-Rust 代理和工具流中使用 MCP 功能。

工具/列表 + 工具/调用
原始输入/输出模式
文本、图像、音频、资源
工具过滤器
提供者标准化
02

背景和指导

阅读目录的其余部分,而不是将 MCP 简化为工具调用。

资源+模板
提示/列表+获取
提示完成
资源完成
资源订阅
03

互动且长时间的工作

支持超出立即响应范围的协议对话。

形式启发
网址获取
协商工具任务
任务/获取+结果
有界取消
04

连接

选择本地流程所有权或单独托管的服务。

本地stdio
Streamable HTTP
自定义标头
持有者+API密钥
过期会话恢复
故意的兼容性边界: 通过 SEP-2577,上游已弃用 MCP 采样、根和日志记录。 ADK-Rust 在选择加入兼容性功能后保持采样;它没有作为新产品的推荐架构提出。

工作示例

管理 MCP 服务器从启动到关闭的整个过程。

应用程序可能需要针对每个工作区、客户或任务的不同 MCP 功能。在启动时对每个服务器进行硬编码会使这些更改变得困难。 McpServerManager 为应用程序提供了一个位置来启动本地 MCP 服务器、组合其工具、更改其配置、监视其连接并彻底关闭它们。

此示例从一台名为 local-tools 的已配置服务器开始。代理可以发现并调用其回显工具。然后,应用程序添加第二个服务器,启用它,替换其运行配置,保存更新的注册表,然后再次将其删除。每次更改都使用可用于管理屏幕或配置服务的相同 API。

该示例完全在您的计算机上运行。 Rust 可执行文件启动自身的副本作为 MCP 子服务器,因此握手、工具发现、工具调用、重新启动、持久性和关闭都是真实的。无需型号、Node.js 封装、API 密钥或互联网连接。

01

启动一台服务器

从 mcp.json 兼容配置加载 local-tools,启动其子进程,完成 MCP 握手,并发现其 echo 工具。

02

添加另一台服务器

将备用工具注册为禁用状态,然后在应用程序决定该功能应该可用时启用并启动它。

03

安全更换

更新正在运行的服务器定义。管理器使用新配置重新启动它,并且如果替换启动失败,可以恢复以前的定义。

04

保存并关闭

将实时注册表写回 JSON,禁用并删除额外的服务器,然后彻底关闭每个 MCP 会话和子进程。

manager.rs铁锈
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?;
terminal实际输出
$ 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

客户端、管理器或服务器

选择您需要的 ADK-Rust MCP 功能。

大多数代理应用程序都是 MCP 客户端。它们连接到现有服务器并向代理提供选定的工具。允许工作区或管理员集成的产品可以将本地 stdio 连接置于管理器后面。发布新功能的团队使用重新导出的 rmcp 服务器 API,然后从 ADK-Rust 客户端测试服务器。

Your situation
Use
Why
One known MCP service
McpToolset
One initialized connection, filters, tools, resources, prompts, completion, subscriptions, elicitation, and tasks.
A changing set of local integrations
McpServerManager
Runtime add, update, enable, disable, remove, save, monitor, restart, aggregation, and collision-safe names.
A separately hosted MCP service
McpHttpClientBuilder
Streamable HTTP with request timeout, headers, bearer or API-key injection, and expired-session recovery.
You own the capability being published
adk_tool::mcp::rmcp
Build the MCP server with the official SDK version already aligned with ADK-Rust.

生产设计

安全部署 MCP。

MCP 使发现和通信保持一致。它不会决定代理应该访问哪些系统、哪些操作需要批准、如何颁发凭据,或者依赖项失败时应该发生什么。这些仍然是产品和平台决策。

选择服务器边界

围绕一个团队或系统拥有的一致功能创建服务器。避免使用一台庞大的服务器,其工具涵盖不相关的凭据和风险级别。

发布一个小表面

在模型看到工具之前过滤它们。将读取操作与写入、支付、删除、部署和其他后续操作区分开来。

保留ADK-Rust的批准

保留 mcp.json autoApprove 是为了兼容;它不会绕过框架的授权、确认处理程序或应用程序策略。

将运输与所有权相匹配

当您的应用程序拥有本地子进程时,请使用 stdio。当另一个部署拥有可用性、身份和扩展性时,请使用 Streamable HTTP。

将内容视为不可信

工具描述、模式、资源内容和结果跨越系统边界。验证参数、绑定结果大小并保护模型上下文免受恶意指令的影响。

操作依赖项

设置连接和任务超时,记录生命周期更改,单独探测业务依赖性,并决定当一台服务器不可用时产品的行为方式。

认证详情: HTTP 构建器支持不记名令牌、自定义 API 密钥标头和固定的 OAuth 2.0 客户端凭证令牌端点。完整的 MCP 授权发现、浏览器授权、PKCE 和资源指示符协商应使用官方 rmcp 授权 APIs 或您的身份层。

连接有用的系统

为一名代理提供一项精心选择的能力,然后扩大网络。

从您了解的服务器开始,过滤其目录,调用一个只读工具,然后检查完整的结果。当产品对每一项都有明确的理由时,添加写入操作、动态管理、远程服务、启发和长时间运行的任务。