OpenAICloudflare Developer Platform2026/03/02 0:00

Agents, Workers - Agents SDK v0.7.0: Observability rewrite, keepAlive, and waitForMcpConnections

要点だけを先に読めるように短く再構成したセクションです。

元記事

Quick Digest

要約

要点だけを先に読めるように短く再構成したセクションです。

openaijamodel: gpt-5-mini-2025-08-07

Agents SDK v0.7.0:観測性を全面書き換え、keepAlive と waitForMcpConnections を追加

Key Points

  • 診断チャネルへ移行
  • keepAliveでDO追放を防止
  • MCP接続を待機してツール確保

Summary

Agents SDK v0.7.0 は観測性を diagnostics_channel ベースの構造化イベントに置き換え、長時間処理中の Durable Object 追放を防ぐ keepAlive() / keepAliveWhile() を追加し、AIChatAgent が MCP 接続を待つ waitForMcpConnections を導入します。イベントは複数チャネルにルーティングされ、プロダクションでは Tail Workers に自動転送されます。カスタム Observability の上書きも引き続き可能です。

Key Points

  • 観測性

    • console.log ベースから diagnostics_channel の構造化イベントへ移行(type / payload / timestamp)。
    • チャネル例: agents:rpc, agents:workflow, agents:mcp など。型安全な購読は subscribe() ヘルパーを利用。
    • デフォルトはサイレント(誰も購読していなければオーバーヘッド無し)。
  • keepAlive / keepAliveWhile

    • keepAlive() は 30 秒ハートビートを作成し、戻り値はハートビートを停止する disposer。複数呼び出しは独立。
    • keepAliveWhile(async () => { ... }) で関数実行中だけハートビートを維持。
    • AIChatAgent はストリーミング応答時に自動で keepAlive() を使用。API は @experimental。
  • waitForMcpConnections

    • AIChatAgentwaitForMcpConnections 設定で onChatMessage 実行前に MCP 接続完了を待機(デフォルト 10_000 ms、true = 無制限、false = 待たない)。
    • 低レベルに制御したい場合は this.mcp.waitForConnections() を直接呼ぶ。
  • その他の改善点

    • MCP サーバの addMcpServer は名前と URL の両方で重複排除(URL 正規化あり)。
    • OAuth なしの MCP で callbackHost が任意に。URL 検証で SSRF を防止。
    • addToolOutputstate: "output-error"errorText を追加、onChatMessage オプションに requestId が付与。

Practical notes

  • 監視導入: 必要なチャネルのみ subscribe() して Tail Worker 側で集約するとコストを抑えられます。
  • 長時間処理: LLM のストリーミングや外部 API 待ちには keepAlive() / keepAliveWhile() を利用して Durable Object のハイバネーションを防止してください。
  • MCP ツール可用性: Durable Object 復帰直後にツールが欠ける場合は waitForMcpConnections を有効化するか、this.mcp.waitForConnections() を適所で呼んでください。

Upgrade

npm で更新: npm i agents@latest @cloudflare/ai-chat@latest

Full Translation

翻訳

原文の流れを保ったまま読める翻訳セクションです。

openaijamodel: gpt-5-mini-2025-08-07

Agents、Workers - Agents SDK v0.7.0: 観測性の書き直し、keepAlive、および waitForMcpConnections

Agents SDK v0.7.0: 観測性の書き直し、keepAlive、および waitForMcpConnections

公開日: 2026-03-02

最新リリース (v0.7.0) では、diagnostics_channel による観測性の全面的な書き直し、Durable Object の長時間処理を保つための keepAlive()、そして MCP ツールが常に利用可能となるよう waitForMcpConnections が導入されました。

観測性の書き直し

以前は console.log() とカスタムの Observability.emit() インターフェースを使った仕組みでした。v0.7.0 ではこれを廃止し、構造化イベントを diagnostics_channel に公開する方式に変更しました。デフォルトではサイレントで、購読者がいない場合はオーバーヘッドはゼロです。各イベントは typepayloadtimestamp を持ちます。

イベントは以下の7つの名前付きチャネルにルーティングされます。

  • agents:statestate:update
  • agents:rpcrpc, rpc:error
  • agents:messagemessage:request, message:response, message:clear, message:cancel, message:error, tool:result, tool:approval
  • agents:scheduleschedule:create, schedule:execute, schedule:cancel, schedule:retry, schedule:error, queue:retry, queue:error
  • agents:lifecycleconnect, destroy
  • agents:workflowworkflow:start, workflow:event, workflow:approved, workflow:rejected, workflow:terminated, workflow:paused, workflow:resumed, workflow:restarted
  • agents:mcpmcp:client:preconnect, mcp:client:connect, mcp:client:authorize, mcp:client:discover

型安全に購読するには agents/observabilitysubscribe() ヘルパーを使います(例: JavaScript / TypeScript)。

import { subscribe } from "agents/observability";
const unsub = subscribe("rpc", (event) => {
    if (event.type === "rpc") {
        console.log(`RPC call: ${event.payload.method}`);
    }
    if (event.type === "rpc:error") {
        console.error(`RPC failed: ${event.payload.method}${event.payload.error}`);
    }
});
// 終了時にクリーンアップ
unsub();

運用時には、すべての diagnostics channel メッセージが自動的に Tail Workers に転送されるため、エージェント側で購読コードを書く必要はありません(例: Tail Worker)。

export default {
    async tail(events) {
        for (const event of events) {
            for (const msg of event.diagnosticsChannelEvents) {
                // msg.channel は "agents:rpc"、"agents:workflow" など
                console.log(msg.timestamp, msg.channel, msg.message);
            }
        }
    },
};

カスタムの Observability オーバーライドインターフェースも引き続きサポートしており、外部サービスへフィルタリングや転送を行いたい場合に利用できます。フルのイベントリファレンスは Observability ドキュメントを参照してください。

keepAlive() と keepAliveWhile()

Durable Objects は一定期間のアイドル後に(通常は着信リクエスト、WebSocket メッセージ、アラームなしで 70–140 秒程度)エビクトされます。ストリーミング LLM レスポンス、外部 API の待機、マルチステップ計算などの長時間処理中にエージェントが途中でエビクトされることがあります。

keepAlive() は 30 秒間隔のハートビートスケジュールを作成してこれを防ぎます。アラームが発火することでアイドルタイマーがリセットされます。戻り値はハートビートをキャンセルするための破棄関数(disposer)です。

const dispose = await this.keepAlive();
try {
    const result = await longRunningComputation();
    await sendResults(result);
} finally {
    dispose();
}

keepAliveWhile() は非同期関数をラップして自動クリーンアップを行います。ハートビートは関数実行前に開始し、終了時に停止します。

const result = await this.keepAliveWhile(async () => {
    const data = await longRunningComputation();
    return data;
});

主要なポイント:

  • 同時呼び出しの扱い — 各 keepAlive() 呼び出しは独立した破棄関数を返します。1つを破棄しても他には影響しません。
  • AIChatAgent 組み込み — AIChatAgent はストリーミング応答時に自動的に keepAlive() を呼び出します。ユーザー側で明示的に追加する必要は通常ありません。
  • スケジューリングシステムを使用 — ハートビートは既存のスケジュールと競合しません。getSchedules() で確認できます。

注意: keepAlive()@experimental としてマークされており、リリース間で変更される可能性があります。フル API リファレンスと利用タイミングのガイダンスは「Schedule tasks — Keeping the agent alive」を参照してください。

waitForMcpConnections

AIChatAgent は onChatMessage を呼ぶ前に MCP サーバー接続の整合が取れるまで待機するようになりました。これにより、特に Durable Object のハイバネーションから復帰して接続がバックグラウンドで回復している場合でも、this.mcp.getAITools() が完全なツールセットを返すことが保証されます。

例:

export class ChatAgent extends AIChatAgent {
    // デフォルト — 最大 10 秒待機
    // waitForMcpConnections = { timeout: 10_000 };
    // 無期限に待機
    // waitForMcpConnections = true;
    // 待機を無効化
    // waitForMcpConnections = false;
}

値と挙動:

  • { timeout: 10_000 } — 最大 10 秒待機(デフォルト)
  • { timeout: N } — 最大 N ミリ秒待機
  • true — 全接続が整うまで無期限に待機
  • false — 待機しない(0.2.0 より前の旧挙動)

より低レベルな制御が必要な場合は、onChatMessage 内で this.mcp.waitForConnections() を直接呼び出できます。

その他の改善点

  • MCP の名前と URL による重複排除 — HTTP トランスポートの addMcpServer がサーバー名と URL の双方で重複排除を行うようになりました。同じ名前で異なる URL を渡すと新しい接続が作成されます。URL は比較前に正規化されます(末尾スラッシュ、デフォルトポート、ホスト名の大文字小文字など)。
  • 非 OAuth サーバー向けの callbackHost がオプションに — OAuth を使わない MCP サーバーへの接続時に addMcpServercallbackHost を必須としなくなりました。
  • MCP URL のセキュリティ — 接続前にサーバー URL を検証し、SSRF を防止します。プライベート IP 範囲、ループバック、リンクローカル、クラウドメタデータエンドポイントはブロックされます。
  • カスタム拒否メッセージ — addToolOutputstate: "output-error"errorText をサポートし、ヒューマンインザループのツール承認フローでカスタム拒否メッセージを表示できます。
  • チャットオプションの requestIdonChatMessage オプションに requestId が追加され、ログやイベント相関に利用できます。

アップグレード

最新バージョンに更新するには:

npm i agents@latest @cloudflare/ai-chat@latest

詳しい API リファレンスや関連ドキュメントは公式ドキュメントを参照してください。