MCP Fusion/Integrations and federation/Swarmによるフェデレーテッドハンドオフ

Swarmによるフェデレーテッドハンドオフ

VinkiusについてAIに質問

署名付き委任、名前空間の分離、引き継ぎ状態、安全なゲートウェイへの復帰を備えたライブ MCP セッションを専門エージェントへルーティングします。

1 つのコネクタがすべてのドメインを担当する必要はありません。MCP Fusion Swarm は Federated Handoff Protocol を実装します。ゲートウェイはライブセッションを金融、サポート、データの専門エージェントへ移し、そのエージェントのツールを書き換えた名前空間で公開し、意図を失わずにセッションを戻せます。

ハンドオフはレスポンスです

ゲートウェイのツールは、ドメイン全体を自分でプロキシしようとせず、ハンドオフを示すレスポンスを返します。

typescript
import { handoff } from '@mcpfusion/core';

export default f.action('triage.route')
  .describe('Route the request to the right specialist')
  .handle(async (input) => {
    return handoff(`mcp://${input.domain}-agent`, {
      carryOverState: { intent: input.context },
      reason: `Triage to ${input.domain}`,
      modelHint: 'balanced',
    });
  });

レスポンスには _MCPFUSION_handoff が付くため、サーバーアタッチメントが認識してゲートウェイのハンドオフ経路を有効化します。通常のツールエラーでも HTTP リダイレクトでもありません。

ゲートウェイ

typescript
import { SwarmGateway } from '@mcpfusion/swarm';

const gateway = new SwarmGateway({
  registry: {
    finance: 'http://finance-agent:8081',
    support: 'http://support-agent:8082',
  },
  delegationSecret: process.env.MCPFUSION_DELEGATION_SECRET!,
  gatewayName: 'triage',
  tokenTtlSeconds: 60,
  connectTimeoutMs: 5_000,
  idleTimeoutMs: 300_000,
  maxSessions: 100,
});

レジストリは専門エージェント名を upstream URL に対応付けます。ゲートウェイは upstream トランスポートとして autohttpsse を使用でき、タイムアウトと最大セッション数で接続を制限します。activateHandoffproxyToolsListproxyToolsCallreturnToGatewayhasActiveHandoffisConnectingsessionCountconnectingCountdispose が運用 API を構成します。

署名付き委任

ゲートウェイと専門エージェントは秘密情報を共有します。mintDelegationToken(scope, ttlSeconds, secret, issuer, carryOverState, store, traceparent) は HMAC 委任トークンを作成します。クレームには発行者、サブジェクト、発行時刻、有効期限、対象 ID、オプションの状態、traceparent が含まれます。専門エージェントは次のようにツールを保護します。

typescript
import { requireGatewayClearance } from '@mcpfusion/core';

registry.attachToServer(server, {
  middleware: [requireGatewayClearance(process.env.MCPFUSION_DELEGATION_SECRET!)],
});

verifyDelegationToken は有効期限、署名、スコープを検証します。失敗は HandoffAuthError として型付けされ、トークンの欠落、無効なトークン、期限切れのトークン、無効な署名が含まれます。これは共有秘密によるフェデレーションであり、公開ディスカバリープロトコルではありません。秘密情報をローテーションし、upstream へのネットワークアクセスを制限し、トークンの有効期間を短くしてください。

名前空間の分離

upstream がゲートウェイのツールを密かに上書きすることはできません。NamespaceRewriter はリストをプロキシするときに専門エージェントの名前へプレフィックスを付け、upstream へ戻すときにプレフィックスを外します。プレフィックスが正しくない名前では NamespaceError が発生します。そのためモデルにはどのドメインが機能を所有するかが見え、専門エージェントには元のアクション名が渡されます。

ゲートウェイは安全な復帰ツールも注入します。injectReturnTripTool(tools, gatewayName) は triage への復帰ルートを追加し、formatSafeReturn(summary, domain) は復帰ペイロードを限定的で明確なものに保ちます。

引き継ぎ状態とクレームチェック

小さな意図の状態は委任クレーム内を移動します。大きな状態は移動しません。クレームサイズの上限を超えると、Swarm は状態を HandoffStateStore に保存し、トークンには参照を入れます。組み込みの InMemoryHandoffStateStore は開発用です。本番では、どのゲートウェイインスタンスからでもクレームチェックを取得できる共有ストアが必要です。

トレースコンテキストは traceparent に引き継がれるため、各専門エージェントが独自の MCP サーバーを持っていても、サービス間でハンドオフを追跡できます。

障害境界

  • 接続タイムアウト: ゲートウェイは upstream が利用できないことを報告し、無条件に再試行しません
  • アイドルタイムアウト: 非アクティブなハンドオフを閉じてセッションを解放します
  • 名前空間の不一致: ゲートウェイは誤ったドメインからのツールレスポンスを拒否します
  • 無効な委任: ハンドラーが呼び出しを見る前に専門エージェントが失敗します
  • upstream からの復帰: ゲートウェイは以前のルートを復元し、安全な復帰経路を注入します

Swarm はプロトコルとプリミティブを提供します。サービスディスカバリー、共有シークレット保管庫、汎用的な分散状態ストアは提供しません。これらはデプロイ時の判断として残ります。

次のステップ

  • Authentication: ゲートウェイと専門エージェントのツールを保護
  • MCP 2.0 compliance: 通知とトランスポートの詳細
  • A2A bridge: MCP Fusion エージェントを A2A クライアントに公開