Cloudflare Agents SDK、MCP スキーマ変換の無駄を解消!Code Mode の直接呼び出しにも対応
こんにちは、しぃちゃんだよ!今日は Cloudflare の Agents SDK まわりで、地味だけどエンジニアにはうれしい改善が発表されたから紹介するね。
Cloudflare Changelogなにが発表されたの?
Cloudflare の Changelog で、Agents SDK と、その上で動く @cloudflare/think・@cloudflare/codemode に関するアップデートが発表されたよ。ポイントはこの 3 つだよ。
- MCP の JSON Schema 変換を使い回して、モデルのターンごとの無駄な再変換を減らした
@cloudflare/thinkにincludeMcpToolsが追加されて、Think が自動でやっていた MCP ツールの公開をオフにできるようになった@cloudflare/codemodeの耐久ランタイムにexecute()・search()・describe()が直接生えて、AI SDK を使わないホストからも呼び出せるようになった
今までどうだったの?
今まで Agents SDK の MCP クライアントは、モデルが 1 ターン話すたびに、接続している MCP サーバーの JSON Schema を毎回 Zod スキーマに変換し直していたの。接続が生きていてツールカタログが変わっていなくても、律儀に変換をやり直していたんだね。
さらに @cloudflare/think は、MCP に接続すると自動で getAITools() を呼んで、つながっている MCP ツールをぜんぶ丸ごと公開する仕組みだったの。でも Code Mode 経由でツールを公開している場合や、別の仕組みでツールを出している場合には、この自動公開が二重になっちゃう場合があって、オフにする手段がなかったんだよ。
Code Mode の耐久ランタイムも、基本的には AI SDK のツールとして「アダプトする」ことが前提の作りだったから、AI SDK を使わない MCP サーバーや他のホストが直接コードを実行したり、コネクタのメソッドを調べたりするのは簡単じゃなかったの。
これで何が変わるの?
今回のアップデートで、こんな嬉しい変化があるよ。
- モデルのターンが増えても MCP のスキーマ変換コストが積み上がらなくなる(ツールカタログが同じ接続が生きている間はキャッシュされる)
- Think がすべてを自動公開する挙動が煩わしいときに、
includeMcpTools = falseで自分でコントロールできるようになる - Code Mode の耐久ランタイムを、AI SDK のツールに変換しなくても MCP サーバーや他のホストから直接叩けるようになる
つまり、AI SDK まわりの薄いラッパーを自分で書かなくても、MCP と Code Mode のいいとこ取りがしやすくなった、というアップデートなの。
深く潜ってみよう
まず MCP スキーマ変換の改善から。Agents SDK の MCP クライアントは、入力・出力それぞれの変換済みスキーマを、ライブ接続がツールカタログを維持している間は再利用するようになったよ。今までのように「モデルのターンごとに MCP の JSON Schema を Zod に総変換」というムダな処理を避けられるの。
次に @cloudflare/think の includeMcpTools。これを false に設定すると、Think が自動でやっていた getAITools() の呼び出しがスキップされるよ。例えばこんな感じだよ。
includeMcpTools = false;
waitForMcpConnections = true;
Code Mode 経由や別の仕組みで MCP ツールをすでに公開しているときに、この設定でぶつからないようにできるんだね。ただし false にしても、MCP のツール登録・接続の復元・ディスカバリー・生のカタログへのアクセス・直接呼び出し・Code Mode のコネクタとの連携そのものは引き続き動くよ。生の MCP カタログが欲しいときは listTools() を使えばいいの。
そして @cloudflare/codemode@latest の耐久ランタイムハンドルに追加された execute()・search()・describe()。これで MCP サーバーや他のホストが、ランタイムを AI SDK のツールに合わせて作り変えなくても、直接コードを実行したりコネクタのメソッドを探索したりできるようになるよ。使い方のイメージはこんな感じ。
const matches = await runtime.search("create issue");
const docs = await runtime.describe(matches.results[0].path);
const outcome = await runtime.execute({
code: `async () => github.create_issue({ title: "Bug" })`
});
また、search() や describe() の結果には、承認が必要なメソッドに requiresApproval: true の印が付くようになっていて、実行を一時停止したうえで既存の approve()・reject() メソッドで解決できる仕組みも用意されているよ。危ないメソッドをうっかり自動実行しちゃう心配が減るね。
アップデートは次のコマンドで一発だよ。
npm i agents@latest @cloudflare/think@latest @cloudflare/codemode@latest
まとめ
今回のアップデートのポイントを振り返るね。
- MCP のスキーマ変換を使い回して、ターンごとの無駄な再変換を解消
includeMcpTools = falseで Think の自動 MCP ツール公開をオフにできる(生のカタログはlistTools()で取得可能)- Code Mode の耐久ランタイムに
execute()・search()・describe()が追加され、AI SDK を使わないホストからも直接利用できる - 承認が必要なメソッドには
requiresApprovalが付き、approve()・reject()で制御できる
自分の MCP サーバーや独自のホストから Code Mode を直接叩きたい人や、Think の自動ツール公開とバッティングしていた人にとって、地味だけどかゆいところに手が届くアップデートだと思うな!