ビジネスデータ
CRM、ERP、注文、文書、分析、および内部知識。
MCP を使用すると、別のプログラムが標準コントラクトを通じてツール、情報、再利用可能なプロンプトを公開できるようになります。 ADK-Rust は、これらの機能を型指定されたエージェント ツールに変換し、より広範なプロトコルを公開し、製品の実行中に変化するローカル MCP サーバーのフリートを管理できます。
ADK-Rust MCP アーキテクチャ
エージェントは、他の ADK-Rust ツールと同様に、MCP 機能を使用します。 MCP は各サーバーに接続しますが、各サーバーは引き続き独自のデータ、ルール、アクションを担当します。
仕事を依頼した経験。
エージェントまたはワークフロー
表示が許可されているツールから機能を選択します。
ADKポリシー
通話に関する承認、許可、ガードレール、および監査を適用します。
ランタイム内の型指定されたアダプター。
McpToolset
ツールを検出し、サーバーのスキーマと結果のコンテンツを保存します。
プロトコル API
リソース、プロンプト、完了、サブスクリプション、引き出し、およびタスク。
サーバーマネージャー
ローカル stdio 接続のレジストリを変更および監視します。
所有権と一致するトランスポートを選択してください。
ローカル stdio
ADK-Rust は、ネイティブ バイナリまたは他の子プロセスを開始し、そのセッションを所有します。
Streamable HTTP
ヘッダー、認証、タイムアウトを使用して、独立してホストされているサービスに接続します。
各サーバーは、そのサーバーが所有するもののみを公開します。
ツール
アクション
リソース
コンテキスト
プロンプト
テンプレート
タスク
長時間労働
CRM、ERP、注文、文書、分析、および内部知識。
ソース管理、ビルドツール、ブラウザ、サンドボックス、コーディング環境。
支払い、通信、検索、地図、パートナー API。
メディアの生成、スプレッドシート、コンピュータの使用、およびドメイン固有のサービス。
問題から始めましょう
AI エージェントは、実際の情報を保持し、実際の作業を実行するシステムに到達できる場合に役立ちます。共有プロトコルがなければ、すべてのデータベース、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 バージョンを再エクスポートします。これにより、1 つのアプリケーション内で互換性のないプロトコル タイプが混在することが回避されます。
通常の ADK-Rust エージェントおよびツール フロー内で MCP 機能を使用します。
MCP をツール呼び出しに置き換えるのではなく、カタログの残りの部分を読んでください。
1 つの即時応答を超えて継続するプロトコル会話をサポートします。
ローカル プロセスの所有権または個別にホストされるサービスを選択します。
実例
アプリケーションでは、ワークスペース、顧客、タスクごとに異なる MCP 機能が必要になる場合があります。起動時にすべてのサーバーをハードコーディングすると、これらの変更が困難になります。 McpServerManager は、ローカル MCP サーバーを起動し、ツールを組み合わせ、構成を変更し、接続を監視し、サーバーを正常に閉じるための 1 つの場所をアプリケーションに提供します。
この例は、local-tools という名前の 1 つの構成済みサーバーから始まります。エージェントはエコー ツールを検出して呼び出すことができます。次に、アプリケーションは 2 番目のサーバーを追加して有効にし、その実行構成を置き換え、更新されたレジストリを保存して、再度削除します。すべての変更では、管理画面または構成サービスで使用できる同じ API が使用されます。
この例は完全にマシン上で実行されます。 Rust 実行可能ファイルは、自身のコピーを MCP 子サーバーとして開始するため、ハンドシェイク、ツール検出、ツール呼び出し、再起動、永続性、およびシャットダウンが実際に行われます。モデル、Node.js パッケージ、API キー、またはインターネット接続は必要ありません。
mcp.json 互換構成から local-tools をロードし、その子プロセスを開始し、MCP ハンドシェイクを完了して、そのエコー ツールを検出します。
スタンバイ ツールを無効として登録し、アプリケーションが機能を使用できるようにする必要があると判断したときに、スタンバイ ツールを有効にして起動します。
実行中のサーバー定義を更新します。マネージャーは新しい構成で再起動し、置換起動が失敗した場合は以前の定義を復元できます。
ライブ レジストリを 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 は、検出と通信を一貫させます。エージェントがどのシステムに到達する必要があるか、どのアクションに承認が必要か、資格情報の発行方法、依存関係が失敗した場合に何が起こるかなどは決定されません。これらは依然として製品とプラットフォームの決定事項です。
1 つのチームまたはシステムが所有する一貫した機能を中心にサーバーを作成します。無関係な資格情報やリスク レベルにまたがるツールを使用する 1 つの巨大なサーバーは避けてください。
モデルがツールを認識する前にツールをフィルタリングします。読み取り操作を、書き込み、支払い、削除、展開、その他の結果的なアクションとは区別してください。
mcp.json autoApprove は互換性のために保存されています。フレームワークの認可、確認ハンドラー、またはアプリケーション ポリシーをバイパスすることはありません。
アプリケーションがローカルの子プロセスを所有している場合は、stdio を使用します。別のデプロイメントが可用性、ID、およびスケーリングを所有している場合は、Streamable HTTP を使用します。
ツールの説明、スキーマ、リソースの内容、および結果はシステムの境界を越えます。引数、バインドされた結果サイズを検証し、敵対的な命令からモデル コンテキストを保護します。
接続とタスクのタイムアウトを設定し、ライフサイクルの変更を記録し、ビジネスの依存関係を個別に調査し、1 つのサーバーが使用できない場合に製品がどのように動作するかを決定します。
便利なシステムを接続する
理解しているサーバーから始めて、そのカタログをフィルターし、読み取り専用ツールを 1 つ呼び出して、完全な結果を検査します。製品にそれぞれの明確な理由がある場合は、書き込みアクション、動的管理、リモート サービス、引き出し、長時間実行タスクを追加します。