◉CLAUDE LABEN
●2.1.283 — 週末の Claude Code リリースはなく、最新は 9月25日の 2.1.283 のまま。権限モード未設定時の既定が auto に変わった点は、許可ルールとの照合が要ります●PLANS — Pro と Team Standard の既定モデルが Sonnet から Opus へ。Claude Code 2.1.280 の変更で、プラン選びの前提が変わっています●10/07 — Claude Desktop / Cowork の管理構成キー旧綴りの受付終了まで残り9日。締切後は読み込みが fail-closed になります●AUTO — 「許可ルールに書いたコマンドが auto モードで拒否される」という問いが出ています。呼ぶ形を許可ルールに揃える話題です●NEW — 既定の Opus が 5.5 に変わった週、別名のまま残していた3箇所の確認●CURSOR — Cursor 経由で Claude を使うとクレジットがモデル原価に比例して減る構造。1日50件を超えるなら定額の Claude Code Pro が安定という整理が出ています●2.1.283 — 週末の Claude Code リリースはなく、最新は 9月25日の 2.1.283 のまま。権限モード未設定時の既定が auto に変わった点は、許可ルールとの照合が要ります●PLANS — Pro と Team Standard の既定モデルが Sonnet から Opus へ。Claude Code 2.1.280 の変更で、プラン選びの前提が変わっています●10/07 — Claude Desktop / Cowork の管理構成キー旧綴りの受付終了まで残り9日。締切後は読み込みが fail-closed になります●AUTO — 「許可ルールに書いたコマンドが auto モードで拒否される」という問いが出ています。呼ぶ形を許可ルールに揃える話題です●NEW — 既定の Opus が 5.5 に変わった週、別名のまま残していた3箇所の確認●CURSOR — Cursor 経由で Claude を使うとクレジットがモデル原価に比例して減る構造。1日50件を超えるなら定額の Claude Code Pro が安定という整理が出ています
記事一覧/API & SDK
⬡ API & SDK/2026-06-30上級

ツール出力が大きすぎてコンテキストを溶かす問題 — カーソルで小分けに返すページング設計

一覧系のツールが数百件をそのまま返すと、エージェントのコンテキストは一回の呼び出しで溶けます。カーソルベースのページングでツール出力を小分けに返し、トークン予算を守る設計を実装コード付きで解説します。

Claude API123Agent SDK5MCP54コンテキスト管理3トークン最適化3

✦ プレミアム記事

個人開発で4つの技術ブログを自動運用していると、エージェントに「公開済みの記事一覧を見せて」と頼む場面が一日に何度も訪れます。あるとき、その一覧を返すMCPツールが400件あまりのタイトルとスラッグをまるごと返し、たった一回の呼び出しでコンテキストウィンドウの体感2割ほどを食い潰しました。

会話のまだ序盤です。これから記事を生成し、品質ゲートをかけ、pushまで走らせなければなりません。にもかかわらず、最初のツール呼び出しだけで予算の入り口がふさがれてしまった。手が止まりました。

原因ははっきりしています。ツールが「全部」を返していたからです。エージェントが本当に必要としていたのは、最新の数十件と「まだ続きがある」という事実だけでした。以下では、その落とし穴を埋めるカーソルベースのページングを、署名付き不透明カーソルの実装まで含めて組み立てます。

なぜ「全件返す」ツールがエージェントを壊すのか

通常のWeb APIなら、レスポンスが多少大きくてもクライアントが受け取って捨てるだけです。ところがエージェントの場合、ツールの戻り値はそのまま次のターンの入力トークンになります。一覧が大きいほど、以降の全ターンでその重みを背負い続けることになります。

実測してみました。私の記事一覧ツールは、1件あたりタイトル・スラッグ・カテゴリ・公開日・タグを返します。日本語タイトルを含むので、1件あたりおよそ45トークン。400件で約18,000トークンです。これが会話の冒頭に居座ると、後続のシステムプロンプト・生成指示・コード片と合わさって、まだ何も作っていないのに予算の足元が崩れます。

さらに厄介なのは、この出力がプロンプトキャッシュと相性が悪い点です。一覧は記事を追加するたびに変わるため、巨大かつ揮発性の高いブロックになります。キャッシュの安定ブロックと揮発ブロックを分離する設計をしていても、この一覧だけは毎回キャッシュミスを生み続けます。

オフセット方式では足りない理由

「ではページングすればよい」と考えて、まずオフセット方式(offset と limit)を試しました。実装は最も単純です。

def list_articles_offset(offset: int = 0, limit: int = 20):
    rows = db.query(
        "SELECT slug, title, category, published_at "
        "FROM articles WHERE status = 'published' "
        "ORDER BY published_at DESC LIMIT ? OFFSET ?",
        (limit, offset),
    )
    return {"items": rows, "next_offset": offset + limit}

これで1ページ20件、約900トークンに収まりました。18,000トークンからおよそ95%の削減で、トークン量だけ見れば成功です。

ところが運用に乗せてすぐ、エージェントが同じ記事を二度処理する事故が起きました。エージェントが1ページ目を見て検討している最中に、別のスケジュールタスクが新しい記事を1本publishしたのです。published_at DESC の並びでは、新記事が先頭に割り込みます。その結果、もともと20番目だった記事が21番目へ押し出され、offset=20 の2ページ目で再び現れました。逆に、削除が起きれば取りこぼしが発生します。

オフセット方式は「並びが固定されている」という前提に立っています。エージェントの世界では、その前提がしばしば成り立ちません。複数のタスクが同じデータを並行して触るからです。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦一覧系ツールが400件を一括返却して約18,000トークンを消費していた箇所を、1ページ20件・カーソル方式で約900トークンまで削減した実装手順
✦オフセット方式が陥る重複・取りこぼしを避ける、不透明カーソル(opaque cursor)の署名付きエンコード実装(Python / TypeScript)
✦エージェントが『次のページを取りに行くべきか』を自分で判断できるよう、has_more と要約メタ情報をツール結果に同梱する設計指針
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ API & SDK2026-07-24
共通エージェント定義をセッション単位で使い分ける運用設計
Managed Agents で土台のエージェント定義を1つに畳み、バージョン固定とセッションローカルな上書きを使い分ける設計を、検証付きのコードと運用の落とし穴とともにまとめました。
⬡ API & SDK2026-07-08
MCP コネクタを申請・無人運用に回す前に、各ツールを契約テストで確かめる
手元で動いた MCP コネクタをそのまま無人ジョブに繋ぐと、応答形状の誤読や書き込みの二重発火で静かに壊れます。ツール記述・応答契約・冪等性・レイテンシを機械検証する小さなハーネスの作り方を、実測値とともにまとめました。
⬡ API & SDK2026-06-29
ツールが返す画像を Claude に「見せる」 — tool_result を画像ブロックにしてトークンを約10分の1にする
ツールが返した画像を tool_result に文字列で詰めると、同じ画像が約10〜20倍のトークンを消費します。image コンテンツブロックとして返す正しい組み立て方と、SDK 実装・コスト見積もり・落とし穴を実コードでまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます