<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Kuu株式会社 Blog</title>
  <link href="https://kuucorp.com/atom.xml" rel="self" />
  <link href="https://kuucorp.com/blog/" />
  <id>https://kuucorp.com/</id>
  <updated>2026-10-10T00:00:00.000Z</updated>
  <subtitle>AIエージェントガバナンス専門会社Kuu株式会社の公式ブログ。AX/DX戦略、Managed Agents、中小企業のAI導入実践を発信。</subtitle>
  <entry>
    <title>プログラム的ツール呼び出しの設計と統制</title>
    <link href="https://kuucorp.com/blog/programmatic-tool-calling-allowed-callers-governance-design/" />
    <id>https://kuucorp.com/blog/programmatic-tool-calling-allowed-callers-governance-design/</id>
    <updated>2026-10-10T00:00:00.000Z</updated>
    <published>2026-10-10T00:00:00.000Z</published>
    <summary><![CDATA[Programmatic Tool Callingは複数ツール呼び出しをコード実行に集約し、公式評価で入力トークンを約38%削減した。allowed_callersの統制設計を整理する。]]></summary>
    <content type="html"><![CDATA[<p>在庫・課金・監査ログと数十のAPIを束ねる社内エージェントで、1回の集計のたびにモデル往復が20回走り、明細が延々とコンテキストに積み上がる。ツールが増えるほど、遅延とトークンコストはツール呼び出しの回数に比例して膨らむ。Programmatic Tool Calling（PTC）は、この往復をコード実行に畳み込む仕組みだ。</p>
<h2>プログラム的ツール呼び出しとは何か</h2>
<blockquote class="answer-block"><p>PTCはClaudeが書いたPythonがコード実行コンテナ内でツールを呼ぶ仕組みで、中間結果がコンテキストに入りません。</p></blockquote>
<p>通常のツール呼び出しは、1回ごとにモデルが推論し、結果をそのままコンテキストへ戻す。PTCではClaudeがPythonコードを生成し、サンドボックス化されたコンテナで実行する。コードがツール関数を呼ぶたびに実行が一時停止し、APIが <code>tool_use</code> ブロックを返す。クライアントが結果を返すとコードが再開し、全処理の完了後に最終出力だけがClaudeへ渡る。</p>
<p>ツールは非同期のPython関数として公開されるため、<code>asyncio.gather</code> による並列実行もできる。ループ・条件分岐・集計がモデルの再サンプリングなしで完結する点が本質だ。前提は <code>code_execution_20260120</code> 以降のコード実行ツールで、対応モデルは公式ドキュメントの一覧で確認する。</p>
<h2>どのワークロードで効果が出るのか</h2>
<blockquote class="answer-block"><p>公式評価では75ツールの構成で入力トークンが約38%減ったが、逐次の単発呼び出しでは約8%増えました。</p></blockquote>
<p>公式ドキュメントが示す数値は次のとおりだ。</p>
<ul>
<li>75ツールのプロジェクト管理エージェントのベンチマーク: 課金入力トークンが約38%減少、精度は変化なし</li>
<li>τ²-bench（各ターン1〜2回の逐次呼び出し）: スコアは不変、コストは約8%増加</li>
<li>本番トラフィックでツール定義が10〜49個のリクエスト: 典型的に20〜40%の削減</li>
</ul>
<p>向くのは、多数の対象への扇形の呼び出し（50エンドポイントの確認など）、大きな結果を絞り込んでから渡したい処理、反復的な検索だ。向かないのは、前の結果をモデルが毎回判断する厳密な逐次処理や、小さな応答が少数あるだけの処理で、コンテナ起動とスクリプト生成の固定オーバーヘッドが勝る。導入前に <code>allowed_callers</code> の有無で課金入力トークンを実トラフィックで比較する。</p>
<h2>allowed_callersをどう設計するか</h2>
<blockquote class="answer-block"><p><code>allowed_callers</code> は各ツールの呼び出し元を指定する設定で、<code>direct</code> とコード実行のどちらかに寄せるのが推奨です。</p></blockquote>
<p>ツール定義に <code>"allowed_callers": ["code_execution_20260120"]</code> を付けると、そのツールはコード内から呼べる。省略時は <code>["direct"]</code> だ。両方を指定することもできるが、公式はClaudeへの指針を明確にするため、ツールごとにどちらか一方を選ぶよう勧めている。</p>
<p>分類の目安は次の2つだ。</p>
<ol>
<li>コード側に寄せる: 参照系で結果が大きく、集計・フィルタ前提のツール（明細取得、ログ検索）</li>
<li>direct に残す: 副作用があり、人間の承認や個別判断を挟みたいツール（送金、権限変更、削除）</li>
</ol>
<p>統制上の最重要点がある。<code>allowed_callers</code> は提示方法の制御であり、API側の強制ブロックではない。公式は「セキュリティ境界として頼らない」と明記している。クライアントは、定義した任意のツールに <code>direct</code> の <code>tool_use</code> が来ても処理できる必要がある。実行可否の判定は、ポリシーエンジンや権限チェックを自前のツール実行層に置く。</p>
<h2>運用で何を制御するか</h2>
<blockquote class="answer-block"><p><code>caller</code> フィールドで呼び出し元を記録し、コンテナの有効期限と約4分のタイムアウトを監視に組み込みます。</p></blockquote>
<p>各 <code>tool_use</code> ブロックには <code>caller</code> が付く。直接呼び出しなら <code>{"type": "direct"}</code>、PTCなら <code>code_execution_20260120</code> と <code>tool_id</code> が入る。<code>tool_id</code> は該当コード実行の <code>server_tool_use</code> の <code>id</code> なので、監査ログに記録すれば「どのコード実行がどのツールを何回呼んだか」を追跡できる。</p>
<p>運用上の制約も押さえる。</p>
<ul>
<li>結果待ちの間はコンテナIDの指定が必須で、結果待ちが約4分を超えると、コード内で <code>TimeoutError</code> が発生する</li>
<li>アイドルのコンテナは約5分で回収され、作成から30日を超えて再利用はできない</li>
<li>応答メッセージには <code>tool_result</code> だけを入れる（テキストの併記は不可）</li>
<li><code>strict: true</code> のツール、MCPコネクタ経由のツール、computer use・browser useのツールセットは対象外</li>
<li>ZDR（ゼロデータ保持）の対象外で、コンテナデータは最大30日保持される</li>
</ul>
<p>ツール結果は文字列としてコード実行環境に渡る。外部入力を含む結果は、コードとして解釈されるリスクがあるため検証してから返す。レート制限は通常のツール呼び出しと同じで、コード内の1回の呼び出しが1回として数えられる。</p>
<h2>規模別にどう導入を進めるか</h2>
<blockquote class="answer-block"><p>エンタープライズでは、対象ツールの分類、監査ログ、ZDR要件の確認を導入前に済ませます。</p></blockquote>
<p>大規模環境では、ツールカタログ単位で「コード側に寄せる」「direct 固定」を台帳化し、変更をレビュー対象にする。ZDRが契約要件なら、PTCは対象外なので適用範囲から外す。自社基盤でコード実行を管理したい場合は、ネットワーク遮断のサンドボックスと、ツール呼び出しのブリッジを自作する選択肢もあるが、構築・保守の負荷は大きい。設計と統制の整備は、<a href="https://kuucorp.com/services/rde/">RDE（Reinvention Deployed Engineering）</a>の枠組みで内製チームと伴走できる。ツール数が多い場合は、<a href="https://kuucorp.com/blog/agent-tool-search-defer-loading-design/">Tool Searchによる定義の絞り込み</a>と併用すると、定義と結果の両面でトークンを抑えられる。コード実行の隔離は<a href="https://kuucorp.com/blog/tool-execution-sandbox-isolation-design/">ツール実行サンドボックスの設計</a>も参照したい。</p>
<h2>参考</h2>
<ul>
<li><a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling">Programmatic tool calling（Claude Platform Docs）</a></li>
<li><a href="https://www.anthropic.com/engineering/advanced-tool-use">Introducing advanced tool use（Anthropic Engineering）</a></li>
</ul>
<h2>まとめ</h2>
<p>PTCは、大きな結果の絞り込みや多数対象への呼び出しでトークンと往復を減らす一方、逐次の単発呼び出しではコスト増になり得ます。<code>allowed_callers</code> は境界ではなく指針なので、権限判定は自前の実行層に置き、<code>caller</code> を監査ログに残してください。ツール分類や適用判断の設計でお困りの場合は、<a href="https://kuucorp.com/services/rde/">Kuu株式会社のRDE</a>へご相談ください。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="エージェントアーキテクチャ" />
    <category term="Claude API" />
    <category term="エンタープライズ" />
    <category term="サンドボックス" />
  </entry>
  <entry>
    <title>MCPサーバーカードの仕組みと公開時の設計判断</title>
    <link href="https://kuucorp.com/blog/mcp-server-card-discovery-metadata-smb/" />
    <id>https://kuucorp.com/blog/mcp-server-card-discovery-metadata-smb/</id>
    <updated>2026-10-10T00:00:00.000Z</updated>
    <published>2026-10-10T00:00:00.000Z</published>
    <summary><![CDATA[MCPサーバーカード（SEP-2127）は接続前に取得できる公開メタデータです。自社MCPサーバーを公開する中小企業が載せる項目と載せない項目を整理します。]]></summary>
    <content type="html"><![CDATA[<p>自社の予約システムや商品DBをMCPサーバーとして公開したものの、取引先から「どのURLに、どのプロトコルバージョンで接続すればよいか」という問い合わせが毎回届く。そんな運用負荷を減らすために設計されたのが、MCPサーバーカード（Server Card）です。</p>
<p>一方で、カードに何を書くかを誤ると、公開してはいけない情報まで外に出てしまいます。本記事では、MCP公式のSEP-2127をもとに、カードの役割と、中小企業が公開側として決めておくべき設計判断を整理します。</p>
<h2>MCPサーバーカードとは何か</h2>
<blockquote class="answer-block"><p>MCPサーバーカードは、接続前に取得できるサーバーの公開メタデータ文書です。2026年1月提案のSEP-2127で、拡張（Extensions Track）として最終承認されました。</p></blockquote>
<p><a href="https://kuucorp.com/glossary/mcp/">MCP（Model Context Protocol）</a>の従来の探索は、接続先が分かって初めて使える実行時のやり取りでした。サーバーカードはこの手前を補います。クライアントやレジストリが、接続を開く前に名前・バージョン・説明、リモートの接続先URL、対応するプロトコルバージョンを読み取れます。</p>
<p>SEP-2127が挙げる効果は3つです。</p>
<ul>
<li>IDE拡張などが、ドメインを指定するだけで自動設定できる</li>
<li>レジストリやクライアントがドメインを巡回して、MCPサーバーを索引化できる</li>
<li>各エンドポイントに接続せずに、サーバー情報を表示できる</li>
</ul>
<p>サーバーカードは任意の拡張です。カードを公開しないサーバーも、従来どおり動作します。</p>
<h2>どこに置き、どう見つけてもらうのか</h2>
<blockquote class="answer-block"><p>カードの推奨配置は、Streamable HTTPのURL末尾に「/server-card」を付けた場所です。ドメイン単位の発見にはAI Catalogを使います。</p></blockquote>
<p>SEP-2127によれば、カードは予約されていない任意のURIに置けます。そのうえで、<code><streamable-http-url>/server-card</code> が推奨の配置先として予約されています。ドメイン全体の探索は、<code>/.well-known/ai-catalog.json</code> に置くAI Catalogがカードへのリンクを持つ形で担います。<code>.well-known</code> は <a href="https://datatracker.ietf.org/doc/html/rfc8615">RFC 8615</a> で定められた、サービス発見の標準的な置き場所です。</p>
<p>配信上の細かい規定（メディアタイプ、CORS、キャッシュ）は、拡張リポジトリの <code>docs/discovery.md</code> が正本です。SEP本文は最終化時点の記録にすぎないため、実装時は必ず現行の拡張仕様を確認してください。</p>
<h2>カードに載せる情報と載せない情報は何か</h2>
<blockquote class="answer-block"><p>カードに載せるのは名前・バージョン・接続先・対応バージョンまでです。ツールやリソースの一覧は、仕様上あえて含まれません。</p></blockquote>
<p>カードが持つのは、<code>name</code> / <code>version</code> / <code>description</code> と、任意の <code>title</code> / <code>icons</code> / <code>repository</code> / <code>websiteUrl</code>、リモートの接続エンドポイント、対応プロトコルバージョン、名前空間付きの <code>_meta</code> です。</p>
<p>ツール・リソース・プロンプトの定義は意図的に除外されています。理由はSEPに明記されています。サーバーが公開する内容は、認証ユーザーや設定、デプロイ状態で変わります。静的な文書では正確に表せず、クライアントが古い情報を信じる危険が生じるためです。</p>
<p>したがって、権限や安全性の判断をカードに頼ってはいけません。実際のツール一覧は、接続後に <code>tools/list</code> などで認証済みの身元とともに確認します。</p>
<p>SEPはさらに、カードは公開文書であるため、認証情報、社内ネットワーク構成、独自ロジック、利用者固有のデータを含めてはならないとしています。</p>
<h2>中小企業が公開側で決めておくことは何か</h2>
<blockquote class="answer-block"><p>公開側で決めるのは、カードの要否、記載項目のレビュー、更新責任者の3点です。まず自社の公開範囲を棚卸しします。</p></blockquote>
<p>着手手順は次のとおりです。</p>
<ol>
<li>公開するMCPサーバーを洗い出し、取引先限定か一般公開かを分ける。限定公開のサーバーにカードは不要な場合が多い</li>
<li>記載項目をレビューする。内部ホスト名、社内ドメインのURL、担当者名が混ざっていないかを確認する</li>
<li>更新責任者を決める。バージョンやURLが変わったらカードも更新する</li>
<li>発見用エンドポイントはレート制限をかける。SEPもDoS対策として推奨している</li>
</ol>
<p>また、カードとライブ探索（<code>server/discover</code>）の値が食い違う場合、クライアントは後者を優先するべきだとされています。カードは参考情報という位置づけを前提に運用してください。大規模な組織向けの統制設計は<a href="https://kuucorp.com/blog/mcp-registry-namespace-verification-enterprise-trust/">エンタープライズ向けのMCPレジストリ設計</a>も参照してください。</p>
<h2>利用側ではカードをどう扱うべきか</h2>
<blockquote class="answer-block"><p>取得したカードは「入口の案内」にすぎません。接続前の信頼判断には使わず、導入審査は従来の確認手順で行います。</p></blockquote>
<p>外部のMCPサーバーを導入する側では、カードで接続先を自動設定できても、それは信頼の証明ではありません。カードはHTTPSで取得し、証明書検証を有効にします。導入可否は<a href="https://kuucorp.com/blog/mcp-server-vetting-checklist-smb/">導入前の5つの確認観点</a>に沿って、出所・権限範囲・実行場所を確認します。SEPも、カードが侵害された場合の影響は主に発見性にとどまるとしつつ、クライアントが実行時のメタデータで検証することを前提にしています。</p>
<h2>参考</h2>
<ul>
<li><a href="https://modelcontextprotocol.io/seps/2127-mcp-server-cards.md">SEP-2127: MCP Server Cards - HTTP Server Discovery</a></li>
<li><a href="https://github.com/modelcontextprotocol/experimental-ext-server-card">experimental-ext-server-card（拡張リポジトリ）</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc8615">RFC 8615: Well-Known URIs</a></li>
</ul>
<h2>まとめ</h2>
<p>MCPサーバーカードは、接続前の発見を助ける任意の公開メタデータです。載せるのは接続情報まで、ツール一覧や認証情報は載せない。この線引きが設計の核心です。</p>
<p>自社MCPサーバーの公開範囲の棚卸しや、導入審査の手順化は、Kuu株式会社の<a href="https://kuucorp.com/services/ai-ops/">AI運用管理サービス</a>でご支援しています。お気軽にご相談ください。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="MCP" />
    <category term="プロトコル" />
    <category term="AIエージェント" />
    <category term="中小企業" />
  </entry>
  <entry>
    <title>Lethal Trifectaを設計で崩す3つの切り口</title>
    <link href="https://kuucorp.com/blog/lethal-trifecta-agent-design-smb-checklist/" />
    <id>https://kuucorp.com/blog/lethal-trifecta-agent-design-smb-checklist/</id>
    <updated>2026-10-09T00:00:00.000Z</updated>
    <published>2026-10-09T00:00:00.000Z</published>
    <summary><![CDATA[AIエージェントの情報漏えいは、私的データ・信頼できない入力・外部通信の3要素が揃うと成立します。中小企業が1要素を設計で外す手順を、Claude Codeの設定例で解説します。]]></summary>
    <content type="html"><![CDATA[<p>メールやWebページを読み、社内ファイルにも触れ、外部へ送信もできるAIエージェントを便利だと感じて導入したものの、「プロンプトインジェクション対策はどこまでやれば十分か」に答えられない担当者は多いはずです。検知フィルタを積み増しても、突破される可能性は残ります。</p>
<p>IT専任者が少ない中小企業にとって現実的なのは、攻撃を全部検知することではなく、被害が成立する構成そのものを避けることです。本記事では「Lethal Trifecta（致命的な三要素）」を軸に、設計段階で外すべき要素を決める手順を整理します。関連する防御層は<a href="https://kuucorp.com/blog/prompt-injection-layered-defense-architecture/">プロンプトインジェクション5層防御</a>も参照してください。</p>
<h2>Lethal Trifectaとは何か</h2>
<blockquote class="answer-block"><p>Lethal Trifectaは、私的データへのアクセス・信頼できない入力・外部通信の3つが揃ったエージェントで、データ窃取が成立するという整理です。</p></blockquote>
<p>開発者のSimon Willisonが2025年6月に提示した枠組みで、3要素は次のとおりです。</p>
<ul>
<li><strong>私的データへのアクセス</strong>: 顧客情報、社内文書、認証情報などをツール経由で読める</li>
<li><strong>信頼できない入力への露出</strong>: 攻撃者が書いたテキストや画像がLLMに届く経路がある（受信メール、Webページ、共有ファイル）</li>
<li><strong>外部への通信能力</strong>: データを社外へ送れる（メール送信、HTTPリクエスト、外部画像の読み込み）</li>
</ul>
<p>LLMは指示がどこに書かれていても従ってしまうため、3つが揃うと攻撃者の文章1つで漏えいが成立します。OWASPのLLM01も、外部のWebサイトやファイルを取り込む間接プロンプトインジェクションを主要な攻撃経路として挙げています。</p>
<h2>なぜ検知フィルタだけでは足りないのか</h2>
<blockquote class="answer-block"><p>検知は確率的な対策であり、取りこぼしが1件でもあれば3要素が揃った構成では漏えいに直結します。</p></blockquote>
<p>Willisonは、検知率95%をうたう製品でもWebセキュリティでは不合格に等しいと指摘しています。OWASPが挙げる緩和策（出力形式の検証、入力・出力フィルタ、最小権限、高リスク操作の人間承認、外部コンテンツの分離）も、組み合わせて被害を減らす位置づけです。</p>
<p>したがって優先順位は、(1) 3要素のうち1つを構造的に外す、(2) 残る要素は権限とネットワークで絞る、(3) その上で検知を重ねる、の順になります。</p>
<h2>どの要素から外すべきか</h2>
<blockquote class="answer-block"><p>1つの業務フローに3要素が同居していないかを棚卸しし、最も外しやすい要素を1つ削るのが最短の手順です。</p></blockquote>
<p>エージェントごとに、次の表を埋めてください。</p>
<ol>
<li>読めるデータは何か（共有ドライブ全体か、特定フォルダか）</li>
<li>外部から届く入力は何か（メール本文、Web検索結果、添付ファイル）</li>
<li>外へ出せる経路は何か（送信メール、HTTP、MCPサーバー経由の書き込み）</li>
</ol>
<p>3つとも「ある」業務フローが見つかったら、次のいずれかを選びます。</p>
<ul>
<li><strong>外部通信を外す</strong>: 受信メールを要約するだけのエージェントには、送信ツールを渡さない。下書き保存までに留め、送信は人間が行う</li>
<li><strong>私的データを外す</strong>: Webを調べるエージェントには社内ファイルを読ませない。調査用と社内文書用でエージェントを分ける</li>
<li><strong>信頼できない入力を外す</strong>: 社内ファイルのみを扱う業務では、外部由来の文書を事前に別フォルダで検疫してから渡す</li>
</ul>
<h2>Claude Codeでは設定のどこで効かせるか</h2>
<blockquote class="answer-block"><p>Claude CodeのBashサンドボックスは、shellコマンドの通信先を<code>network.allowedDomains</code>で絞ることで外部通信の要素を弱められます。</p></blockquote>
<p>公式ドキュメントによると、サンドボックスのネットワークは許可ドメインが空の状態から始まり、プロキシが接続先ホストを照合します。v2.1.219以降では、<code>strictAllowlist</code>を<code>true</code>にすると許可外のホストをプロンプトなしで拒否できます（リポジトリ内の<code>.claude/settings.json</code>に書いても無効です）。</p>
<p>``<code>json<br />{<br />  "sandbox": {<br />    "enabled": true,<br />    "network": {<br />      "allowedDomains": ["github.com", "*.npmjs.org"],<br />      "strictAllowlist": true<br />    }<br />  }<br />}<br /></code>``</p>
<p>ただし範囲には注意が必要です。公式ドキュメントは、サンドボックスがカバーするのはshellコマンドのみで、Read・Edit・Write・WebFetch・WebSearchなどの組み込みツール、MCPサーバー、フックは対象外と明記しています。<code>allowedDomains</code>はWebFetchを制限しません。WebFetchやMCP経由の外部通信は、別途<a href="https://kuucorp.com/blog/claude-code-permission-mode-settings-design-smb/">権限ルール</a>で絞ります。認証情報の読み取りは<code>sandbox.credentials</code>で遮断できます。詳細は<a href="https://kuucorp.com/blog/claude-code-sandboxed-bash-tool-configuration/">Bashサンドボックス実装ガイド</a>を参照してください。</p>
<h2>まとめ</h2>
<blockquote class="answer-block"><p>検知に頼る前に、3要素が同居する業務フローを特定し、1要素を外す設計判断が最初の一手です。</p></blockquote>
<ul>
<li>エージェントごとに、私的データ・信頼できない入力・外部通信を棚卸しする</li>
<li>3つ揃うフローは、送信権限の削除、エージェントの分割、入力の検疫のいずれかで崩す</li>
<li>サンドボックスは便利だが、WebFetchやMCPは別の統制が要る</li>
</ul>
<p>自社のエージェント構成の棚卸しや権限設計の見直しは、<a href="https://kuucorp.com/services/ai-ops/">Kuuの運用管理サービス</a>でご相談いただけます。</p>
<h2>参考</h2>
<ul>
<li><a href="https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/">The lethal trifecta for AI agents（Simon Willison）</a></li>
<li><a href="https://genai.owasp.org/llmrisk/llm01-prompt-injection/">LLM01 Prompt Injection（OWASP Gen AI Security Project）</a></li>
<li><a href="https://code.claude.com/docs/en/sandboxing">Configure the sandboxed Bash tool（Claude Code Docs）</a></li>
</ul>]]></content>
    <author><name>kuu-editorial</name></author>
    <category term="セキュリティ" />
    <category term="プロンプトインジェクション" />
    <category term="Claude Code" />
    <category term="権限管理" />
  </entry>
  <entry>
    <title>ツール呼び出し精度評価——3指標の設計法</title>
    <link href="https://kuucorp.com/blog/agent-tool-call-accuracy-evaluation-design/" />
    <id>https://kuucorp.com/blog/agent-tool-call-accuracy-evaluation-design/</id>
    <updated>2026-10-09T00:00:00.000Z</updated>
    <published>2026-10-09T00:00:00.000Z</published>
    <summary><![CDATA[AIエージェントのツール呼び出し精度は、選択・引数・順序の3指標で評価できる。RAGASのToolCallAccuracy等の指標設計とSMBでの導入手順を解説する。]]></summary>
    <content type="html"><![CDATA[<p>エージェントの最終出力が正しくても、途中のツール呼び出しが間違っていることがある。違うツールを選んだ、引数を取り違えた、呼ぶ順番がずれた——これらは最終出力のテキストだけを見ていると発見できない。ツール呼び出しそのものを評価対象にする設計が必要だ。</p>
<h2>なぜ最終出力だけの評価では不十分か</h2>
<blockquote class="answer-block"><p>最終出力が正解でも、途中のツール呼び出しが誤っていれば再現性のない偶然の正解にすぎない。</p></blockquote>
<p>LLM-as-judgeで最終出力を採点する設計は多くのチームが導入済みだ。しかし最終出力の正しさと、プロセスの正しさは別物だ。たとえば在庫確認エージェントが本来呼ぶべき<code>check_inventory</code>ではなく<code>search_catalog</code>を呼び、たまたま同じ結果を返したケースは、次のリクエストでは失敗する。ツール呼び出しの選択・引数・順序を個別に測定しないと、こうした脆さは本番で初めて露見する。</p>
<h2>何を測るべきか——選択・引数・順序の3指標</h2>
<blockquote class="answer-block"><p>ツール呼び出しの評価は、ツール選択の正誤・引数の正確性・呼び出し順序を分けて測定する3指標に分解できる。</p></blockquote>
<p>OSSの評価フレームワークRAGASは、エージェント専用の指標として<code>ToolCallAccuracy</code>と<code>ToolCallF1</code>を定義している。前者はツール呼び出しの順序と引数の一致度を評価し、引数の一致率に順序一致の有無を掛け合わせてスコアを出す仕組みだ。厳密な順序一致（デフォルト）と、順序を問わない柔軟モードの2種類がある。後者の<code>ToolCallF1</code>は呼び出しすぎ・呼び出し漏れを許容し、期待される呼び出しとの一致を適合率・再現率・F1で評価する。</p>
<p>実務では3指標に分けて記録するとよい。</p>
<ol>
<li><strong>選択精度</strong>: 期待したツールを呼んだか（名前の一致）</li>
<li><strong>引数精度</strong>: 呼んだツールの引数が期待値と一致するか</li>
<li><strong>順序整合性</strong>: 複数ツールを呼ぶ際、順序が業務要件を満たすか</li>
</ol>
<p>この3つを個別に可視化すると、「ツールは正しく選べているが引数でよく間違える」のような具体的な弱点が見える。</p>
<h2>Claude Agent SDKでツール呼び出しをトレースする</h2>
<blockquote class="answer-block"><p>Claude Agent SDKは<code>PreToolUse</code>/<code>PostToolUse</code>フックでツール呼び出しの前後を捕捉でき、評価用ログに転用できる。</p></blockquote>
<p>ツール呼び出しを評価するには、まず呼び出しの記録が必要だ。Claude Agent SDKのエージェントループは、Claudeがツール呼び出しを要求するたびに<code>AssistantMessage</code>を発行し、SDKがツールを実行した結果を<code>UserMessage</code>としてClaudeに返す。この一往復が1ターンであり、<code>PreToolUse</code>フックで実行前のツール名・引数を、<code>PostToolUse</code>フックで実行後の結果を捕捉できる。フックはアプリケーション側のプロセスで動くため、エージェントのコンテキストウィンドウを消費しない。</p>
<p>セッション終了時に発行される<code>ResultMessage</code>には、ツール呼び出しを含む全ターン数とトークン使用量・コストが記録される。この2つのフックと<code>ResultMessage</code>の組み合わせで、期待されるツール呼び出し列（reference）と実際の呼び出し列を記録し、オフラインでRAGASのような指標に通せる評価データセットを作れる。</p>
<h2>SMBチームの段階的導入ステップ</h2>
<blockquote class="answer-block"><p>SMBチームはまず5〜10タスクの期待呼び出し列を手作業で定義し、そこから指標を自動計算する構成が現実的だ。</p></blockquote>
<p>大規模な評価基盤を最初から作る必要はない。</p>
<p><strong>ステップ1</strong>: 代表的なタスク5〜10件について、期待されるツール呼び出し列（ツール名・引数・順序）を手作業でYAMLやJSONに書き出す<br /><strong>ステップ2</strong>: <code>PreToolUse</code>フックで実際の呼び出しをログに記録し、ステップ1の期待値と突き合わせる<br /><strong>ステップ3</strong>: 選択精度・引数精度・順序整合性の3指標を週次で集計し、どの指標が低いかを追跡する</p>
<p><a href="https://kuucorp.com/blog/agent-observability-tracing-instrumentation/">AIエージェントのトレース計装</a>を既に導入している場合は、そのログをそのまま期待値との突き合わせに再利用できる。ツール呼び出し評価の設計から運用まで、<a href="https://kuucorp.com/services/ai-ops/">Kuuのai-ops</a>で支援している。</p>
<h2>参考</h2>
<ul>
<li><a href="https://code.claude.com/docs/en/agent-sdk/agent-loop">How the agent loop works — Claude Agent SDK Docs</a></li>
<li><a href="https://docs.ragas.io/en/latest/concepts/metrics/available_metrics/agents/">Agents metrics — RAGAS Docs</a></li>
</ul>
<h2>まとめ</h2>
<p>ツール呼び出しの精度は、最終出力の採点だけでは見えない。選択・引数・順序の3指標に分解し、Claude Agent SDKのフックで呼び出しログを記録すれば、SMBチームでも5〜10タスクの期待値定義から評価を始められる。</p>
<p>ツール呼び出し評価基盤の設計に関するご相談は<a href="https://kuucorp.com/services/ai-ops/">Kuu株式会社のai-ops</a>まで。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="エージェント評価" />
    <category term="評価設計" />
    <category term="ツール精度" />
    <category term="AIエージェント" />
  </entry>
  <entry>
    <title>Managed Agentsのスケジュール実行設計</title>
    <link href="https://kuucorp.com/blog/managed-agents-scheduled-deployment-cron-design/" />
    <id>https://kuucorp.com/blog/managed-agents-scheduled-deployment-cron-design/</id>
    <updated>2026-10-08T00:00:00.000Z</updated>
    <published>2026-10-08T00:00:00.000Z</published>
    <summary><![CDATA[Claude Managed AgentsのScheduled Deploymentsはcron式で分単位の定期実行を設定でき、最大15%のジッターとpause/archiveの3段階制御で障害を吸収する。]]></summary>
    <content type="html"><![CDATA[<p>AIエージェントを「呼ばれたら動く」ものから「自分で動き出す」ものに変える設計変更は、障害処理の前提を丸ごと書き換えます。ユーザーが起点のセッションでは失敗は即座にユーザーへ返せますが、cronが起点のセッションでは誰も見ていない深夜3時に失敗が起きます。<a href="https://kuucorp.com/glossary/managed-agents/">Managed Agents</a>の<strong>Scheduled Deployments</strong>は、この「無人運用」を前提にした定期実行の仕組みを提供しています。本記事はcronの意味論・失敗記録・ライフサイクル制御・予算設計を公式ドキュメントのレベルで整理します。</p>
<h2>Scheduled Deploymentsは何を解決するのか</h2>
<blockquote class="answer-block"><p>Scheduled Deploymentsはエージェントがセッションを自律的に開始する仕組みで、Deployments APIで作成・管理します。</p></blockquote>
<p>デプロイメントの作成には、<a href="https://platform.claude.com/docs/en/managed-agents/agent-setup">エージェント設定</a>と<a href="https://platform.claude.com/docs/en/managed-agents/environments">環境設定</a>が必須で、ファイル・GitHub・メモリストア・Vaultは任意で添付できます。制約が1つあり、自己ホスト環境はメモリストアを添付できますが、<code>file</code>と<code>github_repository</code>リソースはクラウド環境でしか使えません。さらに各セッションの最初の動作を指定する<code>user.message</code>または<code>user.define_outcome</code>のいずれかを初期イベントとして持たせる必要があります。これが無いと「何をすべきか」が定まらず起動できません。1組織あたり最大1,000件のスケジュールデプロイメントをサポートしています。</p>
<h2>cronとタイムゾーンはどう解釈されるか</h2>
<blockquote class="answer-block"><p>schedule はcron式とIANAタイムゾーンで構成され、分単位が最小粒度で、実行には最大15%のジッターが入ります。</p></blockquote>
<p><code>schedule</code>オブジェクトは標準POSIX cron式（<code>分 時 日 月 曜日</code>）とタイムゾーン識別子（例: <code>America/New_York</code>）を持ち、最小粒度は分単位です。重要なのは時刻の解釈方法で、cronはウォールクロック（壁掛け時計）照合のため、<code>"0 20 <em> </em> *"</code>はEST/EDTのどちらであっても現地時間20:00に発火します。この設計はサマータイム境界で2つの罠を生みます。春の時刻繰り上げで存在しない時刻（深夜2時台など）は発火せず、秋の時刻繰り戻しで2回出現する時刻は2回発火します。公式ドキュメントは、欠落や重複実行が許容できない処理は現地時間1〜3時台を避けるか、UTCでスケジュールするよう明記しています。加えて、実際の発火は負荷分散のため実行間隔の最大15%（最小5秒・最大9分）のジッターを含むため、<code>upcoming_runs_at</code>に表示される時刻と実際の実行時刻は厳密には一致しません。</p>
<h2>失敗はどう記録され、誰が気づくのか</h2>
<blockquote class="answer-block"><p>各試行は deployment run として記録され、セッションのライフサイクルとは独立に成功・失敗を追跡できます。</p></blockquote>
<p>無人実行で最も重要なのは「失敗の可視化」です。Scheduled Deploymentsは、環境がアーカイブ済みだったりセッション作成がレート制限されたりして<strong>トリガー自体に失敗した</strong>場合も、<strong>deployment run</strong>という記録を必ず生成します。成功時はrunに<code>session_id</code>が入り、失敗時は<code>error.type</code>（<code>environment_archived_error</code>・<code>agent_archived_error</code>・<code>session_rate_limited_error</code>など）が入ります。<code>deployment_runs</code>エンドポイントは<code>has_error=true</code>でのフィルタに対応し、失敗だけを抽出して監視できます。</p>
<p>ライフサイクル管理も障害モード別に設計されています。レート制限は即座にrunを記録して次回スケジュールまで<strong>リトライしません</strong>。エージェントがアーカイブされると、デプロイメント自体が同じ操作で自動アーカイブされ、runは記録されません。エージェントが削除された場合は次回トリガー時に検知して自動アーカイブします。一方、サブエージェントのアーカイブや環境・Vaultのアーカイブのように復旧しうる障害は、失敗runを記録した上でデプロイメントを<strong>自動pause</strong>し、<code>paused_reason.error.type</code>に原因を残します。復旧後はunpauseで次回の予定時刻から再開しますが、停止中に欠けた実行は遡って補完されません。デプロイメントの状態変化とrunの結果は<a href="https://kuucorp.com/blog/managed-agents-webhook-event-driven-design/">webhookイベント</a>としても配信され、ポーリングなしで検知できます。</p>
<h2>予算と手動実行はどう組み込むか</h2>
<blockquote class="answer-block"><p>budgetはセッション予算と同形式で、累積上限ではなく実行1回ごとの上限として各セッションにコピーされます。</p></blockquote>
<p>デプロイメント作成・更新時に任意で<code>budget</code>オブジェクトを渡すと、その上限は実行ごとに新しいセッションへコピーされます。つまり1,000回実行されるデプロイメントの予算は、1,000回分の合計ではなく<strong>毎回リセットされる個別キャップ</strong>です。上限に達したセッションは通常のセッションと同じく<code>budget_reached</code>で一時停止し、既に走っているセッションは変更後も開始時のキャップを保持します。<code>budget: null</code>で予算設定自体を解除できる点は、通常のセッション予算にはない柔軟性です。</p>
<p>本番投入前のテストには<code>run</code>エンドポイントによる手動実行が使えます。これは<code>trigger_context.type: "manual"</code>のrunを即時生成するもので、<a href="https://kuucorp.com/blog/agent-idempotency-at-least-once-design/">冪等性設計</a>の確認や、<a href="https://kuucorp.com/blog/managed-agents-ant-apply-infrastructure-as-code/">ant apply</a>でデプロイしたスケジュールの初回動作確認に向いています。cronを信じて待つ前に、同じ実行経路を手動で1回通しておくことが、深夜の無人失敗を減らす最も安い対策です。</p>
<p>エンタープライズでMulti-tenant構成や複数エージェントの定期実行基盤を構築する際は、障害分離とpause/archiveの運用ルールを事前に決めておく必要があります。Kuuの<a href="https://kuucorp.com/services/rde/">RDEサービス</a>では、こうしたエージェント基盤の信頼性設計を支援しています。</p>
<h2>参考</h2>
<ul>
<li><a href="https://platform.claude.com/docs/en/managed-agents/scheduled-deployments">Scheduled deployments | Claude Platform Docs</a></li>
<li><a href="https://platform.claude.com/docs/en/managed-agents/webhooks">Webhooks | Claude Platform Docs</a></li>
</ul>
<h2>まとめ</h2>
<p>Scheduled Deploymentsの設計は3つの層に分けられます。<strong>cronとタイムゾーン</strong>はウォールクロック照合とジッターでDSTと負荷集中を吸収し、<strong>deployment run</strong>はトリガーの成否をセッションのライフサイクルと独立に記録し、<strong>pause/archive</strong>は障害の種類（一時的か恒久的か）に応じて自動で制御を切り替えます。無人で動くエージェントを安全に運用するには、この3層それぞれに監視とアラートを設計時点で組み込む必要があります。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="Managed Agents" />
    <category term="Claude API" />
    <category term="エージェントアーキテクチャ" />
    <category term="可観測性" />
  </entry>
  <entry>
    <title>Claudeモデルの非推奨化、移行計画はどう立てるか</title>
    <link href="https://kuucorp.com/blog/claude-model-deprecation-lifecycle-migration-smb/" />
    <id>https://kuucorp.com/blog/claude-model-deprecation-lifecycle-migration-smb/</id>
    <updated>2026-10-08T00:00:00.000Z</updated>
    <published>2026-10-08T00:00:00.000Z</published>
    <summary><![CDATA[Claudeモデルは非推奨化から退役まで最短60日。4段階のライフサイクルと移行計画の立て方、Console Usage Exportでの利用確認手順を解説する。]]></summary>
    <content type="html"><![CDATA[<p>Claude APIをコードに埋め込んだまま半年運用して、ある日突然リクエストが400エラーで返ってくる——これは設定ミスではなく、モデルの退役によるものかもしれない。IT担当が1人しかいない中小企業では、非推奨化の通知メールを見落としたまま退役日を迎えるケースが起こりやすい。</p>
<p>Claudeのモデルは定期的に非推奨化・退役する設計になっている。本記事では、そのライフサイクルの仕組みと、中小企業が無理なく移行計画を立てる手順を解説する。</p>
<h2>Claudeモデルはどう非推奨化されるのか</h2>
<blockquote class="answer-block"><p>Claudeモデルはactive・legacy・deprecated・retiredの4段階で管理され、deprecated時に後継モデルと退役日が示される。</p></blockquote>
<p>Anthropicはモデルのライフサイクルを4段階で管理している。「active」は完全サポート中の推奨モデル、「legacy」は更新が止まり将来非推奨化される可能性がある状態、「deprecated」は動作はするが推奨されず後継モデルと退役日が明示された状態、「retired」はAPIリクエスト自体が失敗する状態だ。この区分はClaude API・AWS上のClaude Platform・Microsoft Foundryに適用され、Amazon BedrockやGoogle Cloud経由の利用では各プラットフォームが独自の退役日を設定する点に注意が必要だ。</p>
<h2>非推奨化から退役までに何が起きるか</h2>
<blockquote class="answer-block"><p>公開済みモデルの退役には最短60日前の通知が義務付けられ、メールとドキュメントの両方で案内される。</p></blockquote>
<p>本番環境でモデルを使っているアカウントには、退役の最低60日前に通知が届く。実際の運用では、2026年4月14日にClaude Sonnet 4・Opus 4の退役が通知され、同年6月15日に退役するという約2カ月のスケジュールで進んだ。通知を見落とさないためには、契約者個人のメールだけでなく、チームの共有チャンネルにも転送する運用を組み込んでおくとよい。</p>
<h2>中小企業はどう移行計画を立てるべきか</h2>
<blockquote class="answer-block"><p>後継モデルでの事前テストを退役日より十分前に終え、段階的に本番トラフィックを切り替えるのが安全だ。</p></blockquote>
<p>移行計画は3ステップで組める。まず非推奨化の通知を受けたら、ドキュメントの移行ガイドで後継モデルと変更点を確認する。次に、本番と同じプロンプト・ツール定義で後継モデルをテスト環境で動かし、出力品質とレイテンシーを比較する。最後に、退役日より余裕を持って本番の<code>model</code>パラメータを切り替える。あわせて、リクエストヘッダーの<code>anthropic-version</code>は固定したまま使えるため、API自体の互換性を気にする必要はない。パラメータ側では、<code>temperature</code>・<code>top_p</code>・<code>top_k</code>がClaude Opus 4.7以降の一部モデルで非デフォルト値を渡すと400エラーになる変更も入っているため、プロンプト側での制御に切り替える移行も合わせて検討したい。</p>
<h2>API利用状況をどう確認するか</h2>
<blockquote class="answer-block"><p>Claude ConsoleのUsageページからCSVをエクスポートすれば、APIキー・モデル別の利用実態を棚卸しできる。</p></blockquote>
<p>どのコードがどのモデルを呼んでいるか分からなくなっている場合は、Claude ConsoleのUsageページから利用状況をCSVでエクスポートできる。APIキー・モデル別の呼び出し件数が確認できるため、非推奨化対象のモデルIDを使っている箇所を洗い出し、優先的に移行するリストを作る土台になる。</p>
<h2>参考</h2>
<ul>
<li><a href="https://platform.claude.com/docs/en/about-claude/model-deprecations">Model deprecations — Claude Docs</a></li>
<li><a href="https://platform.claude.com/docs/en/api/versioning">Versioning — Claude Docs</a></li>
<li><a href="https://platform.claude.com/docs/en/about-claude/models/migration-guide">Migration guide — Claude Docs</a></li>
</ul>
<h2>まとめ</h2>
<p>Claudeモデルの非推奨化は、最短60日前の通知を起点に、後継モデルでのテストと段階的な切り替えで乗り越えられる。<a href="https://kuucorp.com/blog/claude-model-selection-smb-starting-point/">モデル選定の基準</a>を押さえている企業ほど、移行時の後継モデル選びに迷わない。通知の見落としを防ぐ体制作りから、まずは着手するとよい。</p>
<p><a href="https://kuucorp.com/services/ai-ops/">Kuuのエージェントガバナンスサービス</a>では、モデル運用の体制整備から移行計画の設計までサポートしている。</p>]]></content>
    <author><name>kuu-editorial</name></author>
    <category term="Claude API" />
    <category term="モデル選定" />
    <category term="バージョン管理" />
    <category term="移行設計" />
  </entry>
  <entry>
    <title>Skills over MCPとは何か——配信と検証の設計</title>
    <link href="https://kuucorp.com/blog/mcp-skills-extension-sep-2640-design/" />
    <id>https://kuucorp.com/blog/mcp-skills-extension-sep-2640-design/</id>
    <updated>2026-10-07T00:00:00.000Z</updated>
    <published>2026-10-07T00:00:00.000Z</published>
    <summary><![CDATA[Skills over MCPはSEP-2640で確定したMCP公式拡張で、skills/list・skills/getとResourcesでSKILL.mdをSHA-256検証付きで配信します。]]></summary>
    <content type="html"><![CDATA[<p><a href="https://kuucorp.com/glossary/mcp/">MCP</a>サーバーが増えるほど、「このサーバー専用の手順書（<a href="https://kuucorp.com/blog/agent-skills-skillmd-progressive-disclosure-design/">Agent Skills</a>）をどう配る」かが課題になります。GitHubリポジトリへの直置き、マーケットプレイス経由の配布はすでに記事で扱いましたが、MCPの標準拡張としてスキルを配信する仕組みが2026年に確定しました。</p>
<h2>Skills over MCPとは何か</h2>
<blockquote class="answer-block"><p>Skills over MCPはSEP-2640で確定したMCP公式拡張で、既存のResourcesプリミティブ上でSKILL.mdを配信します。</p></blockquote>
<p>SEP-2133が定めた拡張ガバナンスの枠組みに沿って登録された公式拡張の一つが<code>io.modelcontextprotocol/skills</code>です。SEP-2640としてStatus: Finalに達し、<code>ext-skills</code>リポジトリで仕様が公開されています。既存のMCPプロトコルに新しいメッセージ型を追加するのではなく、<code>skills/list</code>・<code>skills/get</code>という2つのメソッドと、既存の<code>resources/read</code>を組み合わせて、SKILL.mdと付随ファイルを配信する設計です。サーバーは<code>server/discover</code>のレスポンスで<code>resources</code>capabilityと<code>extensions</code>内の<code>io.modelcontextprotocol/skills</code>を宣言した場合のみ、この拡張に対応しているとみなされます。</p>
<h2>skills/listとskills/getはどう動くか</h2>
<blockquote class="answer-block"><p><code>skills/list</code>はSKILL.mdと付随ファイルのURI・SHA-256ダイジェスト・バイトサイズを含む完全なマニフェストを返します。</p></blockquote>
<p>クライアントは<code>skills/list</code>でページング対応の一覧を取得し、各エントリに含まれる<code>frontmatter</code>（name・description等）とファイルマニフェストからスキルを選別します。URIを直接知っている場合は<code>skills/get</code>で個別取得でき、一覧に出てこない非公開スキルも読み込めます。実際のSKILL.md本文や<code>references/</code>配下のファイルは<code>resources/read</code>で取得する設計で、MCPの既存プリミティブを再利用する点がこの拡張の特徴です。ディレクトリ一覧が必要なら<code>resources/directory/read</code>を使いますが、これは<code>directoryRead: true</code>を宣言したサーバーのみが対応します。</p>
<h2>整合性検証と承認はどう設計すべきか</h2>
<blockquote class="answer-block"><p>ホストはSKILL.md読込時にSHA-256ダイジェスト・バイトサイズ・frontmatterをマニフェストと照合する必要があります。</p></blockquote>
<p>仕様はホスト側の実装要件を細かく定めています。スキルの承認はマニフェスト全体（ファイルURIとダイジェストの組）に対して発行され、1ファイルでも変更・追加・削除があれば承認は失効し、再承認が必要です。読み込んだコンテンツは発信元サーバーのラベルを付けて保持し、別サーバーのリソースを読むクロスサーバー読み込みは明示的な個別承認を要します。サーバー1件あたりはSKILL.mdを含めて512ファイル・16MiB以内に収めることが推奨され、ホストはこの上限まで対応する必要があります。スキル本体は<a href="https://kuucorp.com/glossary/agent-governance/">エージェントガバナンス</a>上「信頼できない入力」として扱い、<code>allowed-tools</code>のような権限付与は個別承認を経由させます。</p>
<h2>既存のスキル配布経路とどう使い分けるか</h2>
<blockquote class="answer-block"><p>GitHubの自動読込・マーケットプレイス配布・Skills over MCPは、信頼境界を設計する層が異なる3つの経路です。</p></blockquote>
<p><a href="https://kuucorp.com/blog/managed-agents-github-skill-loading-trust-boundary/">Managed AgentsのGitHub自動読込</a>はリポジトリマウント時にレビューなしで読み込む設計で、<a href="https://kuucorp.com/blog/agent-skill-marketplace-security-vetting-checklist/">マーケットプレイス経由の配布</a>は審査プロセスが信頼の起点でした。Skills over MCPはこの両者と異なり、プロトコルレベルでサーバーの<code>capabilities</code>宣言とホスト側の検証・承認フックを強制する点が差分です。MCPサーバーを本番で運用する<a href="https://kuucorp.com/services/rde/">プラットフォームエンジニアリング</a>の観点では、どの経路で入ってきたスキルも最終的にはこの検証ロジックを通す設計にしておくと、配布経路が増えても信頼境界を一本化できます。</p>
<h2>参考</h2>
<ul>
<li><a href="https://modelcontextprotocol.io/seps/2133-extensions">SEP-2133: Extensions</a></li>
<li><a href="https://modelcontextprotocol.io/extensions/skills/overview">Skills over MCP — Extensions Overview</a></li>
<li><a href="https://github.com/modelcontextprotocol/ext-skills">modelcontextprotocol/ext-skills</a></li>
</ul>
<h2>まとめ</h2>
<p>Skills over MCPは、MCPの既存プリミティブを使ってAgent Skillsを配信する公式拡張として確定しました。重要なのは新しいメッセージの追加ではなく、ダイジェスト検証・マニフェスト単位の承認・クロスサーバー制限という、ホスト側に課される検証義務の設計です。自社のMCPホストやエージェント基盤を運用している場合、スキルの入り口が増える前に、この検証ロジックを一箇所に集約しておくことをお勧めします。Kuuでは<a href="https://kuucorp.com/services/rde/">RDE</a>として、こうしたプロトコル拡張への追従と信頼境界の設計を支援しています。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="MCP" />
    <category term="プロトコル" />
    <category term="エージェントスキル" />
    <category term="AIエージェント" />
  </entry>
  <entry>
    <title>圧縮タイミングをアプリ側で制御するCompaction設計</title>
    <link href="https://kuucorp.com/blog/claude-compaction-on-demand-background-loop-design/" />
    <id>https://kuucorp.com/blog/claude-compaction-on-demand-background-loop-design/</id>
    <updated>2026-10-07T00:00:00.000Z</updated>
    <published>2026-10-07T00:00:00.000Z</published>
    <summary><![CDATA[Claude APIのCompaction On Demand（2026年9月14日ベータ、ヘッダーcompact-2026-09-04）は会話の圧縮タイミングをアプリ側が選べる。既存の閾値圧縮との違いと実装パターンを解説する。]]></summary>
    <content type="html"><![CDATA[<p>長時間稼働するエージェントの会話は、何ターンか進むとコンテキストウィンドウを食い尽くす。これまでAnthropicが提供してきた圧縮は、入力トークンが閾値を超えた瞬間にAPI側が自動で圧縮する仕組みだけだった。アプリがいつ圧縮するかを選べず、バックグラウンド実行もできない。2026年9月14日にベータ公開された<a href="https://platform.claude.com/docs/en/build-with-claude/compaction-on-demand">Compaction On Demand</a>は、この制御をアプリ側に戻す新しいAPI機能だ。</p>
<h2>Compaction On Demandとは何か</h2>
<blockquote class="answer-block"><p>Compaction On Demandは、圧縮の実行タイミングをAPIではなくアプリ側が選べる新しい圧縮方式だ。</p></blockquote>
<p>ベータヘッダー<code>compact-2026-09-04</code>を付け、リクエストに<code>"compaction": {"type": "summarize"}</code>を含めると、Claudeはそのリクエストの会話全体を要約した<code>compaction</code>ブロックだけを返す。応答は生成されず、<code>stop_reason</code>は<code>"compaction"</code>になる。このブロックには要約テキストと署名（<code>signature</code>）が入り、以降のリクエストでは要約済みのメッセージを削除し、ブロックを<code>messages</code>の先頭に置いて送り直す。既存の閾値圧縮（<code>compact-2026-01-12</code>）はAPIが判断してブロックを通常の応答に続けて返すが、Compaction On Demandは圧縮専用のリクエストを明示的に送る点が根本的に異なる。</p>
<h2>圧縮ループはどう実装すればよいか</h2>
<blockquote class="answer-block"><p>トークン予算を超えたら圧縮リクエストを送り、返るブロックで履歴全体を置き換える。</p></blockquote>
<p>実装パターンは単純だ。各ターンの応答から<code>input_tokens + output_tokens</code>を累積し、設定した閾値を超えたら次のユーザー発話を待たずに<code>compaction</code>パラメータ付きリクエストを送る。<code>stop_reason</code>が<code>"compaction"</code>であれば、履歴を「返ってきた<code>compaction</code>ブロックを含むアシスタントメッセージ1件」に完全に置き換える。追記ではなく置換であることが重要で、要約済みのメッセージが先頭以外に残っていると次のリクエストは<code>compaction_block_misplaced</code>エラーで400になる。要約プロンプトは<code>instructions</code>（最大16,384字）で独自のものに置き換えられ、特定のエンティティ名や未解決の依頼を残すよう指示できる。この要約呼び出し自体の課金は<code>usage.iterations</code>の<code>compaction</code>エントリに記録され、トップレベルの<code>input_tokens</code>/<code>output_tokens</code>はゼロになる。</p>
<h2>エラー時はどう扱えばよいか</h2>
<blockquote class="answer-block"><p>要約が得られない場合もAPIは200を返すため、<code>stop_reason</code>で成否を判定する。</p></blockquote>
<p>要約呼び出しがテキストで終わらず終了した場合（<code>max_tokens</code>で途切れた、ツールを呼んでしまった、拒否された等）、レスポンスは200のままブロックを含まない。<code>stop_reason</code>が<code>"max_tokens"</code>なら<code>max_tokens</code>を増やして再送し、<code>"tool_use"</code>なら「ツールを呼ばない」と明示した<code>instructions</code>を付けて再送する。<code>"refusal"</code>や<code>"end_turn"</code>の場合は要約なしで続行し、次のターン終了後に再試行すればよい。ブロックそのものを送り返すリクエストが失敗する場合は、<code>signature</code>や<code>content</code>を1バイトも変更せずそのまま送っているかを確認する。改変すると<code>compaction_signature_invalid</code>で400が返る。529の<code>compaction_unavailable</code>は一時的な障害なので、そのリクエストをそのまま再試行する。</p>
<h2>既存機能とどう連携させるべきか</h2>
<blockquote class="answer-block"><p>ミッド会話システムメッセージの指示は圧縮範囲に含まれると失効し、画像やドキュメントも圧縮後は参照できなくなる。</p></blockquote>
<p>圧縮されたメッセージ範囲に入っていた<code>role: "system"</code>の指示は要約に埋もれて効力を失うため、まだ必要な指示は圧縮後の最初のユーザー発話の直後に<a href="https://kuucorp.com/blog/claude-mid-conversation-tool-changes-cache-design/">ミッド会話システムメッセージ</a>として再送する必要がある。<a href="https://kuucorp.com/blog/claude-preserved-thinking-append-only-conversation-design/">Preserved Thinking</a>対応モデルで直近ターンのthinkingを保持する場合は、<code>system</code>とツール定義が圧縮リクエストと以降のリクエストで一致している条件を満たす必要がある。また、画像・ドキュメント・<code>container_upload</code>ブロックは要約に置き換えられると内容が失われるため、後のターンで必要なら再アップロードする設計にする。タスク予算の<code>remaining</code>を指定したまま圧縮リクエストを送ると400になる点も実装時の落とし穴だ。複数チームが共有するエージェント基盤でこうした圧縮設計を標準化したい場合は、<a href="https://kuucorp.com/services/rde/">Kuuの大規模実装支援（RDE）</a>でハーネス全体の設計レビューを行っている。</p>
<h2>参考</h2>
<ul>
<li><a href="https://platform.claude.com/docs/en/build-with-claude/compaction">Compaction overview - Claude Platform Docs</a></li>
<li><a href="https://platform.claude.com/docs/en/build-with-claude/compaction-on-demand">Compaction on demand - Claude Platform Docs</a></li>
<li><a href="https://platform.claude.com/docs/en/release-notes/api">Claude Platform release notes</a></li>
</ul>
<h2>まとめ</h2>
<p>Compaction On Demandは、圧縮を「API側が閾値で自動実行するもの」から「アプリ側が任意のタイミングで要求するもの」に変える設計転換だ。履歴の置換ルールとエラーハンドリング、ミッド会話システムメッセージやPreserved Thinkingとの相互作用を正しく実装すれば、長時間稼働するエージェントでも会話の連続性を保ったまま圧縮タイミングを自社のワークロードに合わせて制御できる。自社のエージェント基盤への組み込みは<a href="https://kuucorp.com/services/ai-ops/">Kuuの運用管理サービス（AI-Ops）</a>でも相談できる。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="AIエージェント" />
    <category term="Claude API" />
    <category term="コンテキストエンジニアリング" />
    <category term="エージェント設計" />
  </entry>
  <entry>
    <title>ハイブリッドLLM基盤——ローカル×Claude API設計</title>
    <link href="https://kuucorp.com/blog/hybrid-llm-local-cloud-routing-smb/" />
    <id>https://kuucorp.com/blog/hybrid-llm-local-cloud-routing-smb/</id>
    <updated>2026-10-06T00:00:00.000Z</updated>
    <published>2026-10-06T00:00:00.000Z</published>
    <summary><![CDATA[ローカルLLMとClaude APIを併用するハイブリッド構成は、データの機密度に応じて推論先を振り分ける設計です。Ollamaの認証機能の欠如を補う設計と、inference_geoによる地域制御の実装手順を示します。]]></summary>
    <content type="html"><![CDATA[<h2>ハイブリッドLLM基盤とは何か</h2>
<blockquote class="answer-block"><p>ハイブリッドLLM基盤とは、機密度に応じてローカルのOllamaとクラウドのClaude APIへ推論を振り分ける構成です。</p></blockquote>
<p>専任のインフラ担当者がいない中小企業でも、議事録の要約や社内FAQ応答のように個人情報を含むタスクはローカルの小型モデルで処理し、複雑な推論や長文解析はClaude APIに任せる、という二段構えの設計が現実的な選択肢になっています。全部をクラウドに出す設計は機密情報の扱いで慎重な判断が要り、全部をローカルで処理する設計は複雑なタスクで精度が不足しがちです。ハイブリッド構成はこの両極の間を、リクエスト単位の振り分けで解決します。</p>
<h2>なぜ中小企業にハイブリッド構成が向くのか</h2>
<blockquote class="answer-block"><p>ハイブリッド構成が向くのは、専用GPUを増設せずにAPIコストと機密情報の扱いを同時に抑えられるためです。</p></blockquote>
<p>Ollamaは自分のPCやオンプレのサーバー上でモデルを動かし、テキストが外部に送信されない設計です。これにより、個人情報や契約情報を含む下書き作業はローカルで完結させ、API呼び出し自体を発生させません。一方で、込み入った文書解析やコード生成のような精度が要るタスクは、API利用分だけ課金されるClaude APIに振り分けることで、GPUサーバーを常時起動させておくコストを避けられます。どちらも「全部を自前インフラで持つ」「全部を外部APIに出す」という二択を避けるための構成です。</p>
<h2>ルーティングはどう設計すればよいか</h2>
<blockquote class="answer-block"><p>ルーティングは、データの機密度・タスクの複雑度・システムの可用性という3つの軸で振り分け先を判断します。</p></blockquote>
<p>LiteLLMのようなAIゲートウェイをアプリケーションとモデル群の間に置くと、OllamaやvLLMのローカルモデルとClaude・OpenAI・Geminiなどのクラウドモデルを単一のエンドポイントの背後にまとめ、モデルエイリアスとフォールバックチェーンで振り分け先を切り替えられます。個人情報を含む入力はローカルモデルに固定し、ローカルモデルが落ちている場合やタスクが複雑と判定された場合にのみクラウドへフォールバックする、という構成が典型です。ゲートウェイ側でリクエストごとのコストと利用量を記録できるため、どの業務がどれだけAPIコストを使っているかも同時に可視化できます。</p>
<h2>Claude API側はどう地域を制御すればよいか</h2>
<blockquote class="answer-block"><p>Claude APIはinference_geoパラメータでus/globalを指定でき、Claude 4.6以降のモデルで利用できます。</p></blockquote>
<p>ハイブリッド構成でクラウド側に振り分けたリクエストについても、データの処理地域を制御する手段があります。Claude APIの<code>inference_geo</code>パラメータは<code>POST /v1/messages</code>呼び出しごとに設定でき、<code>"global"</code>（既定・最適なパフォーマンス優先）と<code>"us"</code>（米国内インフラのみで推論）のいずれかを選べます。<code>"us"</code>を指定した推論は、入力・出力トークン・キャッシュ書き込み・読み取りのすべてで標準料金の1.1倍となり、ワークスペース単位で<code>default_inference_geo</code>や<code>allowed_inference_geos</code>を設定して組織全体の既定動作を固定することもできます。米国内処理が必須の契約がある場合は、この設定をルーティングポリシーの一部として明示しておく必要があります。</p>
<h2>運用で気をつけるべき点は何か</h2>
<blockquote class="answer-block"><p>Ollamaは既定でlocalhost:11434にのみ応答し認証機能を持たないため、外部公開時は別途認証層が必要です。</p></blockquote>
<p>Ollamaのローカルサーバーはポート11434でlocalhostにバインドされ、ローカルからのリクエストには認証を要求しません。社内の複数端末からOllamaサーバーへアクセスできるようにネットワーク越しに公開する場合、Ollama自体にはアクセス制御の仕組みが無いため、リバースプロキシや上述のAIゲートウェイ側でAPIキー・IP制限・利用者ごとのロギングを追加する設計が前提になります。ローカルモデルだからといって無条件に安全というわけではなく、<a href="https://kuucorp.com/blog/ai-agent-permission-management-design/">エージェントの権限管理</a>と同じ発想で、誰がどのモデルにどこまでアクセスできるかを明示的に設計することが欠かせません。基盤の選定からルーティングポリシーの運用設計まで、Kuu株式会社の<a href="https://kuucorp.com/services/ai-ops/">AI Ops</a>で相談できます。</p>
<h2>参考</h2>
<ul>
<li><a href="https://platform.claude.com/docs/en/manage-claude/data-residency">Data residency - Claude Platform Docs</a></li>
<li><a href="https://docs.litellm.ai/docs/harness/gateway">Using with LiteLLM AI Gateway</a></li>
<li><a href="https://docs.ollama.com/api">Ollama API Reference</a></li>
</ul>
<h2>まとめ</h2>
<p>ハイブリッドLLM基盤は、機密度・複雑度・可用性の3軸でローカルのOllamaとクラウドのClaude APIにリクエストを振り分ける設計です。AIゲートウェイでルーティングとコストを一元管理し、クラウド側はinference_geoで地域を制御し、ローカル側は認証層を別途用意する——この3点を押さえれば、専用のインフラチームがいない中小企業でも段階的に導入できます。自社のデータ特性に合わせたルーティング設計は、Kuu株式会社にご相談ください。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="セルフホストLLM" />
    <category term="データレジデンシー" />
    <category term="モデルルーティング" />
    <category term="中小企業" />
  </entry>
  <entry>
    <title>Inference Hooksで推論前にDLPを差し込む設計</title>
    <link href="https://kuucorp.com/blog/claude-enterprise-inference-hooks-dlp-design/" />
    <id>https://kuucorp.com/blog/claude-enterprise-inference-hooks-dlp-design/</id>
    <updated>2026-10-06T00:00:00.000Z</updated>
    <published>2026-10-06T00:00:00.000Z</published>
    <summary><![CDATA[Claude EnterpriseのInference Hooksは、推論前に自社セキュリティサーバーへ検証を委ね、拒否をActivity Feedに記録します。失敗時挙動の設計を解説します。]]></summary>
    <content type="html"><![CDATA[<p>claude.ai・Cowork・Claude Codeを全社展開した企業が次に直面する課題は、「機密情報を含むプロンプトが送信された後」に検知しても遅い、という事実です。事後のログ監査では、情報はすでにモデルに渡っています。Anthropicは2026年8月5日、この問題に推論前でフタをする仕組みをベータ公開しました。</p>
<p>本記事は<a href="https://kuucorp.com/ai-governance/">AIエージェントガバナンス</a>のピラーコンテンツに連動しています。大規模な権限統制を検討する場合は<a href="https://kuucorp.com/services/rde/">Kuuの RDE</a>も参照してください。</p>
<h2>Inference Hooksとは何か</h2>
<blockquote class="answer-block"><p>Inference Hooksは、推論実行前に自社のAIセキュリティサーバーへ検証を委ね、許可・拒否の判定を得る仕組みです。Claude Enterprise限定のベータ機能です。</p></blockquote>
<p>Inference Hooksは、Claude Enterpriseが持つ <code>prompt</code> と <code>tool_call</code> の2種類のフックイベントを、推論が走る前にHTTPS POSTで自社のAIセキュリティサーバーへ送る機能です。<code>prompt</code> は統制対象の推論リクエストごとに、<code>tool_call</code> は「ツール呼び出しを検証」を有効にした組織でClaudeの応答にツール呼び出しが含まれるたびに発火します。送信対象はclaude.ai・Cowork・Claude Code・Claude Tag（Slack）の全セッションで、1つのフック設定が全プロダクトに適用されます。構成には <code>organization:manage</code> 権限（OwnerまたはPrimary owner）が必要です。</p>
<h2>リクエストとレスポンスはどう設計されているか</h2>
<blockquote class="answer-block"><p>リクエストはStandard Webhooks仕様で署名され、検証サーバーは <code>{"action": "allow"}</code> または拒否理由付きのJSONを返します。</p></blockquote>
<p>AnthropicのサーバーはあなたのAIセキュリティサーバーへ、会話のトランスクリプト・ツール呼び出しとその結果・添付ファイルから抽出したテキストを送信します。生のファイル・画像バイト、システムプロンプト、Anthropic内部コンテキストは送られません。各リクエストはStandard Webhooks仕様で署名され、署名シークレットは組織が生成します。検証サーバーはデフォルト5秒のタイムアウト内に、許可なら <code>{"action": "allow"}</code>、拒否なら <code>deny_reason</code> フィールドにユーザー向け理由を含めたJSONを返します。拒否時はユーザーに「ブロック理由+管理者設定の標準メッセージ」が表示され、Activity Feedに記録されます。Inference Hooks自体はプロンプト・レスポンスの内容を保存せず、フック設定と検証メタデータ（判定・タイムスタンプ・リクエストID）のみを保持します。</p>
<h2>検証サーバーが落ちたらどうなるか</h2>
<blockquote class="answer-block"><p>サーバー無応答時はフェイルオープン（許可）かフェイルクローズ（拒否）を組織が選び、継続障害時はサーキットブレーカーが作動します。</p></blockquote>
<p>AIセキュリティサーバーが応答不能・エラー・タイムアウト超過の場合、組織が設定した失敗時挙動（フェイルオープンでリクエストを許可する、またはフェイルクローズでブロックする）が適用されます。障害が継続すると、Anthropic側でサーキットブレーカーが作動し、サーバーへの問い合わせを停止して全リクエストに失敗時挙動を適用し、正常な判定が戻り始めると自動的に復帰します。ロールアウトも段階的に設計できます。シャドーモードで実トラフィックの判定結果だけを観測し、ブロックせずに検証する、ロールアウト比率で検査対象の割合を絞る、特定ロールを除外する、といった運用が選べます。</p>
<h2>どこに向いていて、どこに向いていないか</h2>
<blockquote class="answer-block"><p>典型用途はDLP・リアルタイム記録・利用実態の計測で、画像バイト検査や応答側の拒否には未対応です。</p></blockquote>
<p>主な用途はDLP（規制対象・機密情報を含むプロンプトの拒否）、ポーリング不要なリアルタイムのトランスクリプト保存、利用実態の計測、モデル許可リストや業務時間制限などの独自ポリシーエンジンです。一方で現時点の制約も明確です。添付ファイルはメタデータと抽出テキストのみが対象で、スクリーンショットのような画像オンリーのコンテンツは検査できません。判定は許可/拒否の二値で、プロンプトの書き換え・レダクションは未対応です。APIアクセス経由のPlatform組織は対象外で、Bedrock・Google Cloud経由の利用にも提供されません。Claudeの会話タイトル生成や、Claude Security scans・Code Review・smart reportsのようにAnthropicが自組織向けに実行する内部呼び出しも、統制対象リクエストには含まれません。</p>
<p>既存の<a href="https://kuucorp.com/blog/claude-compliance-api-local-session-visibility-design/">Compliance API</a>はAnthropicのAPIを呼んで「事後に」記録を取得する仕組みです。Inference Hooksはこれと逆方向で、Anthropicが自社サーバーを呼んで「推論前に」止める仕組みであり、両者は補完関係にあります。推論前にブロックしたいならInference Hooks、事後にeDiscoveryや監査証跡が必要ならCompliance APIを使う、という使い分けになります。</p>
<h2>規模別の留意点（SMB / エンタープライズ）</h2>
<p>Inference HooksはClaude Enterprise限定のベータ機能であり、構成には組織全体の権限管理と、HTTPSで常時応答可能なAIセキュリティサーバーの運用体制が前提になります。中小企業がClaude Teamなど別プランで同等の統制をしたい場合は、<a href="https://kuucorp.com/blog/claude-code-hooks-audit-policy-enforcement-smb/">Claude Codeのhooks機構</a>のようなクライアント側の仕組みで代替を検討するのが現実的です。エンタープライズでは、既存のDLPベンダー（Netskope・Palo Alto Networks・Proofpoint・Zscaler等）や自社セキュリティ基盤とこのWebhookを接続し、まずシャドーモードで判定の精度を検証してから、ロールアウト比率を段階的に上げる設計が安全です。</p>
<h2>参考</h2>
<ul>
<li><a href="https://platform.claude.com/docs/en/manage-claude/inference-hooks">Inference hooks（Claude Platform Docs）</a></li>
<li><a href="https://platform.claude.com/docs/en/release-notes/overview">Claude Platform release notes（2026年8月5日）</a></li>
</ul>
<h2>まとめ</h2>
<p>Inference Hooksは、プロンプトがモデルに渡る前に自社のAIセキュリティサーバーで許可・拒否を判定する、Claude Enterprise限定のベータ機能です。Standard Webhooks署名・5秒デフォルトタイムアウト・フェイルオープン/クローズの選択・サーキットブレーカーという運用設計が用意されている一方、画像検査や応答側の拒否は未対応という制約もあります。導入を検討する場合は、まず<a href="https://kuucorp.com/services/rde/">Kuuの RDE</a>にご相談ください。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="セキュリティ" />
    <category term="エンタープライズ" />
    <category term="エージェントガバナンス" />
    <category term="コンプライアンス" />
  </entry>
  <entry>
    <title>Claude Vision APIの画像コスト設計手順</title>
    <link href="https://kuucorp.com/blog/claude-vision-api-image-cost-design-smb/" />
    <id>https://kuucorp.com/blog/claude-vision-api-image-cost-design-smb/</id>
    <updated>2026-10-05T00:00:00.000Z</updated>
    <published>2026-10-05T00:00:00.000Z</published>
    <summary><![CDATA[Claude Vision APIの画像コストは幅×高さ÷28の2乗で決まり、高解像度帯は最大4,784トークン。中小企業が画像解析を低コストに実装する設計手順を解説します。]]></summary>
    <content type="html"><![CDATA[<p>商品写真の自動タグ付けや検品写真の判定にClaudeの画像解析を組み込みたいが、「画像1枚でどれだけトークンを食うのか」が分からず見積もりが立てられない——という相談は多い。実際には画像コストは解像度から機械的に計算でき、設計次第で大きく圧縮できる。</p>
<h2>画像1枚のコストはどう決まるか</h2>
<blockquote class="answer-block"><p>Claudeは画像を28×28ピクセルの「視覚トークン」単位で見るため、コストは幅÷28と高さ÷28の積（切り上げ）で決まります。</p></blockquote>
<p>公式ドキュメントが示す計算式は<code>⌈幅/28⌉ × ⌈高さ/28⌉</code>視覚トークンです。モデルには2段階の解像度上限があり、Claude 4.7以降の「高解像度」モデルは長辺2576px・最大4,784トークンまで処理し、それ以外のモデルは長辺1568px・最大1,568トークンが上限です。上限を超える画像はアスペクト比を保ったまま自動縮小されます。</p>
<p>具体例として、1000×1000px（約100万画素）の画像はどちらの階層でも縮小されず1,296トークン消費します。これをHaiku 4.5（入力$1/MTok）で処理すると1,000枚あたり約1.3ドル、Opus 5（入力$5/MTok）の高解像度処理でも1,000枚あたり6.48ドルです。一方、3840×2160pxの4K画像は高解像度帯で4,784トークンまで積み上がり、Opus 5では1,000枚あたり約23.9ドルになります。モデルと解像度の組み合わせで10倍近いコスト差が出る計算です。</p>
<h2>画像枚数が増えるとどう変わるか</h2>
<blockquote class="answer-block"><p>1リクエストに21枚以上の画像を含めると、全画像に長辺2000px以下という厳しい制限が自動適用されます。</p></blockquote>
<p>APIの上限は200Kコンテキストモデルで1リクエスト最大100枚、それ以外は600枚です。ただし20枚を超えた瞬間に、会話履歴で再送される過去の画像やtool_result内のスクリーンショットも含めた全画像に、より厳しい寸法制限がかかります。超過すると<code>invalid_request_error</code>で拒否されるため、複数画像を扱うバッチ処理では事前リサイズが前提になります。</p>
<p>さらに重要なのが再送コストです。Base64で画像を埋め込むと、マルチターンの会話では過去の画像も毎リクエスト再送され、ペイロードと処理トークンが膨張します。繰り返し参照する画像はFiles APIで一度アップロードし、以降は<code>file_id</code>で参照する設計にすると、リクエストサイズを会話の長さに依存させずに抑えられます。</p>
<h2>低解像度で十分なケースはどこにあるか</h2>
<blockquote class="answer-block"><p>検品の合否判定や商品カテゴリ分類など文字を読まない用途では、解像度を上げても精度は上がらずコストだけ増えます。</p></blockquote>
<p>高解像度帯は本来、密な文書や画面内の小さな文字を読み取る用途向けです。色・形状・有無の判定が目的の検品チェックや商品分類タスクでは、200×200px程度の軽量な画像でも十分なケースが多く、無駄に高解像度画像を送るとコストだけが増加します。逆に、手書きメモや細かい仕様表を読ませる用途では圧縮しすぎると文字が潰れて誤読を招くため、JPEG圧縮は多重適用を避け、実際にAPIへ送る画像を目視確認することが推奨されています。</p>
<h2>SMBが始めるべき設計の順序</h2>
<p>まず自社のユースケースを「判定系（色・形状・有無）」と「読み取り系(文字・数値)」に分類し、判定系は積極的に縮小、読み取り系のみ高解像度を許容する方針を決める。次に、同じ画像を複数ターンで参照する設計ならFiles API化を先に実装し、Base64再送によるコスト膨張を防ぐ。最後に、<code>usage</code>レスポンスの画像トークン数を本番投入前に実測し、見積もりとのズレを確認する。この3手順だけで、画像解析機能の運用コストはおおむね予測可能な範囲に収まる。</p>
<p>画像解析を含むAIエージェントの運用設計は、<a href="https://kuucorp.com/services/ai-ops/">Kuuのエージェント運用管理サービス</a>で設計支援を行っている。</p>
<h2>参考</h2>
<ul>
<li><a href="https://platform.claude.com/docs/en/build-with-claude/vision">Vision — Claude API Docs</a></li>
<li><a href="https://platform.claude.com/docs/en/about-claude/pricing">Pricing — Claude API Docs</a></li>
</ul>
<h2>まとめ</h2>
<p>Claude Vision APIのコストは「解像度」「枚数」「再送方式」という3つの変数で機械的に決まる。用途を判定系と読み取り系に分けて解像度を使い分け、繰り返し参照する画像はFiles API化するだけで、見積もり精度とコスト効率の両方が改善する。自社での設計に不安がある場合は、<a href="https://kuucorp.com/services/ai-ops/">Kuuのエージェント運用管理サービス</a>への相談も検討してほしい。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="Claude API" />
    <category term="Vision API" />
    <category term="コスト最適化" />
    <category term="中小企業" />
  </entry>
  <entry>
    <title>エージェント評価は何回で十分か——pass@k実践ガイド</title>
    <link href="https://kuucorp.com/blog/agent-eval-multi-trial-sampling-smb/" />
    <id>https://kuucorp.com/blog/agent-eval-multi-trial-sampling-smb/</id>
    <updated>2026-10-05T00:00:00.000Z</updated>
    <published>2026-10-05T00:00:00.000Z</published>
    <summary><![CDATA[AIエージェントの評価は1回の実行では判定できません。pass@kとpass^kの使い分けと、少ない予算で3〜5回のトライアルから妥当な判断を導く設計手順を解説します。]]></summary>
    <content type="html"><![CDATA[<p>新しいプロンプトを1回試して「直った」と喜んだら、翌日の実行では同じ不具合が再発した——AIエージェントの評価でよくある落とし穴です。エージェントの出力は非決定的なため、1回の実行結果だけでは改善したのか偶然当たっただけなのか区別できません。限られた評価予算の中で、何回トライアルを回せば判断材料として十分なのかを設計します。</p>
<h2>なぜ1回の実行結果を信用してはいけないのか</h2>
<blockquote class="answer-block"><p>LLMエージェントの出力は実行ごとに変動するため、1回の合否判定だけでは改善と偶然を区別できません。</p></blockquote>
<p>エージェントは同じ入力・同じプロンプトでも、サンプリングのランダム性やツール呼び出しの順序、外部APIの応答タイミングによって結果が変わります。1回だけ実行して「成功したから直った」「失敗したから悪化した」と判断すると、本当は変わっていないのに評価結果だけが上下して見える事態が起きます。これは特にプロンプト変更やモデルのバージョンアップを判断する場面で危険です。1回の成功で本番にリリースし、翌週に同じ不具合で問い合わせが増える——という失敗は、複数回の実行結果を見ていれば避けられたケースがほとんどです。各試行を<strong>トライアル</strong>と呼び、エージェント評価ではこのトライアルを複数回積み重ねて初めて意味のある判断ができます。</p>
<h2>pass@kとpass^kは何を測り分けるのか</h2>
<blockquote class="answer-block"><p>pass@kはk回中1回でも成功する確率、pass^kはk回すべてが成功する確率を測る指標です。</p></blockquote>
<p>Anthropicのエージェント評価に関する技術記事では、複数トライアルの結果を集約する指標として<strong>pass@k</strong>と<strong>pass^k</strong>の2つを提唱しています。pass@kは「k回の試行で少なくとも1つ正解を得る確率」、pass^kは「k回すべてが成功する確率」を表します。使い分けの基準は製品要件です。1回でも成功すれば十分な用途（情報検索ツールの呼び出しなど）はpass@kで評価し、毎回同じ品質が求められる用途（顧客対応の自動応答など）はpass^kで評価します。1回あたりの成功率が75%のタスクで3回連続成功する確率は0.75の3乗で約42%にしかなりません。一貫性を求めるほど合格基準は厳しくなることを、この指標は数値で示してくれます。pass@kの統計的な推定方法は、コード生成モデルの評価で発表された不偏推定量の定義が元になっており、サンプル数が少ないと推定値の分散が大きくなることが知られています。</p>
<h2>少ない予算では何回トライアルすればよいか</h2>
<blockquote class="answer-block"><p>判断材料として最低3回、リリース可否のような重要な意思決定には5回以上のトライアルを目安にします。</p></blockquote>
<p>学術的な検証では数百回のサンプリングで分散を抑えることが推奨されますが、中小企業の評価予算でそれを毎回行うのは現実的ではありません。実務では次の目安で十分です。</p>
<ol>
<li><strong>日常の動作確認（n=3）</strong>: 開発中のプロンプト調整や軽微な修正の確認には3回実行し、3回とも結果が一致するかを見ます</li>
<li><strong>リリース判断（n=5）</strong>: 本番デプロイ前のゲート判定では5回実行し、成功率の差が偶然のばらつきで説明できる範囲かを確認します</li>
<li><strong>境界的な結果は追加実行</strong>: 5回中2〜3回成功のような曖昧な結果が出た場合は、判断を保留してさらに3回追加し合計8回で見直します</li>
</ol>
<p>```python<br />def should_promote(trials_before: list[bool], trials_after: list[bool]) -> str:<br />    rate_before = sum(trials_before) / len(trials_before)<br />    rate_after = sum(trials_after) / len(trials_after)<br />    diff = rate_after - rate_before</p>
<h1>5回中1回分（20pt）未満の差は誤差の範囲として判断を保留</h1>
    if abs(diff) < 0.2:
        return "inconclusive"  # 追加トライアルで再判定
    return "promote" if diff > 0 else "rollback"
```
<p>この程度のヒューリスティックでも、1回実行だけで判断するよりはるかに誤判定を減らせます。重要なのは「n=1で決めない」という原則を評価フローに組み込むことです。</p>
<h2>CIの回帰テストや本番A/Bテストとどう役割分担するか</h2>
<blockquote class="answer-block"><p>多重トライアル設計はリリース前のゲート判定が主戦場で、CIの全件回帰テストや本番A/Bテストとは担当範囲が異なります。</p></blockquote>
<p>多重トライアルサンプリングは、少量のタスクに対してリリース判断の確度を上げるための手法です。これは次の2つの評価層とは役割が異なります。CIパイプラインに組み込むゴールデンデータセットの回帰テストは、スピード優先で基本1トライアルのまま広いカバレッジを確保する設計です。一方で本番トラフィックを使ったA/Bテストは、十分な母数が自然に集まるため個別タスクの複数トライアルは不要です。多重トライアル設計が必要なのは、この2層の間にある「少数の重要タスクについて、限られた手動実行回数でリリース可否を決めたい」という場面です。既存の回帰テストやA/Bテストの仕組みを持つチームでも、リリースゲートとなる重要タスクだけはn=5のトライアル設計を追加することで、判定の信頼度を補強できます。</p>
<h2>参考</h2>
<ul>
<li><a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents">Demystifying evals for AI agents — Anthropic Engineering</a></li>
<li><a href="https://arxiv.org/abs/2107.03374">Evaluating Large Language Models Trained on Code — arXiv:2107.03374</a></li>
</ul>
<h2>まとめ</h2>
<p>AIエージェントの評価を1回の実行で済ませると、改善と偶然の区別ができず誤った判断につながります。</p>
<ol>
<li><strong>1回の実行結果では判断しない</strong>: エージェントの出力は非決定的であることを前提に評価フローを組む</li>
<li><strong>pass@kとpass^kを用途で使い分ける</strong>: 1回成功で十分かすべて一貫して成功すべきかで指標を選ぶ</li>
<li><strong>日常確認はn=3、リリース判断はn=5が目安</strong>: 曖昧な結果は追加トライアルで判断を保留する</li>
<li><strong>CI回帰テスト・本番A/Bテストとは役割が別</strong>: 多重トライアルは少数の重要タスクのリリースゲートに充てる</li>
</ol>
<p>限られた評価予算でも、トライアル回数の設計ひとつで判定の信頼度は大きく変わります。評価基盤の設計からKuu株式会社の<a href="https://kuucorp.com/services/ai-ops/">エージェントAI運用管理サービス</a>でご相談いただけます。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="エージェント評価" />
    <category term="評価設計" />
    <category term="サンプリング設計" />
    <category term="統計設計" />
  </entry>
  <entry>
    <title>MCPBで中小企業のMCPサーバー配布を統制する</title>
    <link href="https://kuucorp.com/blog/mcpb-mcp-server-distribution-governance-smb/" />
    <id>https://kuucorp.com/blog/mcpb-mcp-server-distribution-governance-smb/</id>
    <updated>2026-10-04T00:00:00.000Z</updated>
    <published>2026-10-04T00:00:00.000Z</published>
    <summary><![CDATA[MCPBは.mcpb形式でMCPサーバーを1クリック配布する公式規格。Claude DesktopのTeam/Enterprise機能ならカスタムレジストリで配布経路を社内統制できます。]]></summary>
    <content type="html"><![CDATA[<p>社員が良さそうな<a href="https://kuucorp.com/glossary/mcp/">MCP</a>サーバーを見つけ、<code>claude_desktop_config.json</code> を手で書き換えて個人のPCに入れてしまう——IT担当者の目の届かないところで起きるこの状況こそ、配布経路を統制していない中小企業の典型的な盲点だ。MCPBというAnthropic発の配布規格と、Claude Desktopの管理機能を組み合わせれば、この経路は技術的に塞げる。</p>
<h2>MCPBとは何か</h2>
<blockquote class="answer-block"><p>MCPBは.mcpb拡張子のzipで、MCPサーバーと依存関係を1ファイルに同梱し導入できる規格です。</p></blockquote>
<p>MCPBはもともとAnthropicが<code>.dxt</code>として設計し、2025年11月にMCP本家プロジェクトへ移管された配布形式だ。Chrome拡張（<code>.crx</code>）やVS Code拡張（<code>.vsix</code>）と同じ発想で、サーバー本体・依存パッケージ・<code>manifest.json</code>を1つのzipにまとめる。従来は開発者ツールの導入やJSON手書き編集が必要だったが、MCPBなら「ダウンロード→ダブルクリック→インストール」の3手順で完了する。</p>
<h2>manifest.jsonは何を定義しているか</h2>
<blockquote class="answer-block"><p>manifest.jsonは実行コマンド・対応OS・必須設定を宣言し、導入前の内容検証を可能にします。</p></blockquote>
<p><code>manifest_version</code>・<code>name</code>・<code>version</code>・<code>server</code>が必須フィールドで、<code>server.type</code>には<code>node</code>・<code>python</code>・<code>binary</code>・<code>uv</code>を指定する。加えて<code>user_config</code>でAPIキー等の入力項目をUI化し、OSのキーチェーンに安全に保存できる。<code>compatibility</code>で対応OS（darwin/win32/linux）とランタイム要件も宣言するため、動作しないサーバーを誤って配布するリスクも減らせる。</p>
<h2>中小企業は配布経路をどう統制すべきか</h2>
<blockquote class="answer-block"><p>Team/Enterprise版はカスタムレジストリで承認済みMCPBのみを配布し、個人の手編集経路を塞げます。</p></blockquote>
<p>IT部門が小さい中小企業ほど、「誰が何をインストールしたか分からない」状態になりやすい。Claude DesktopのTeam/Enterprise機能は3つの統制手段を提供する。</p>
<ol>
<li><strong>公開エクステンションの許可/禁止</strong>：組織のセキュリティ基準に合わない拡張を一括で無効化する</li>
<li><strong>カスタムレジストリ</strong>：自社で検証済みのMCPBだけを登録し、社員はそこからのみ選択する</li>
<li><strong>ポリシーレベルの強制</strong>：<code>isDesktopExtensionEnabled</code>等のマシンレベル設定で、アプリ内の操作より優先して適用する</li>
</ol>
<p>この3点を組み合わせれば、「個人が見つけた未検証サーバーを手動設定する」という最もリスクの高い経路自体を塞げる。</p>
<h2>導入前に確認すべき注意点は何か</h2>
<blockquote class="answer-block"><p>MCPBは配布手段を標準化する規格であり、暗号署名による検証は未整備で、審査基準も非公開です。</p></blockquote>
<p>MCP公式ブログは配布形式の統一を目的に明記する一方、署名・検証の仕組みには触れていない。Anthropicの公開ドキュメントも拡張ディレクトリ掲載時に「品質とセキュリティ」をレビューするとは述べるが、審査基準自体は非公開だ。つまりMCPBは「配布の手間」を解決する規格であり、「中身の安全性」は別の工程で確認する必要がある。導入前チェックの観点は<a href="https://kuucorp.com/blog/mcp-server-vetting-checklist-smb/">サードパーティMCPサーバー導入前チェック</a>を参照してほしい。</p>
<h2>参考</h2>
<ul>
<li><a href="https://github.com/modelcontextprotocol/mcpb">modelcontextprotocol/mcpb - GitHub</a></li>
<li><a href="https://blog.modelcontextprotocol.io/posts/2025-11-20-adopting-mcpb/">Adopting the MCP Bundle format (.mcpb) for portable local servers</a></li>
<li><a href="https://support.claude.com/en/articles/10949351-getting-started-with-local-mcp-servers-on-claude-desktop">Getting started with local MCP servers on Claude Desktop</a></li>
<li><a href="https://www.anthropic.com/engineering/desktop-extensions">Desktop Extensions - Anthropic Engineering</a></li>
</ul>
<h2>まとめ</h2>
<p>MCPBは「導入の手間」を1クリックまで減らす配布規格だが、それ自体は安全性を保証しない。MCPサーバーの広がりを管理するには、MCPBの仕組みを理解した上でTeam/Enterprise機能のカスタムレジストリとポリシー強制を使い、配布経路を会社側に引き戻すことが出発点になる。</p>
<p>自社のMCPサーバー配布経路が「個人任せ」になっていないか、まず現状の棚卸しから始めたい。Kuuの<a href="https://kuucorp.com/services/ai-ops/">AI-Opsサービス</a>では配布統制設計を初回相談から支援している。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="MCP" />
    <category term="プロトコル" />
    <category term="ガバナンス" />
    <category term="設計" />
  </entry>
  <entry>
    <title>MCP新設計：subscriptions/listenの要点</title>
    <link href="https://kuucorp.com/blog/mcp-subscriptions-listen-notification-redesign/" />
    <id>https://kuucorp.com/blog/mcp-subscriptions-listen-notification-redesign/</id>
    <updated>2026-10-04T00:00:00.000Z</updated>
    <published>2026-10-04T00:00:00.000Z</published>
    <summary><![CDATA[MCP 2026-07-28仕様はresources/subscribeを廃止し、subscriptions/listenに統合した。1接続で複数ストリームを多重化する新設計を解説する。]]></summary>
    <content type="html"><![CDATA[<p>MCPサーバーを本番運用していると、リソース更新通知の実装がクライアントごとにばらつき、再接続時の挙動が読めないという相談が増えている。原因はMCP 2026-07-28仕様での仕様変更そのものにある。旧来の<code>resources/subscribe</code>リクエストと<code>notifications/resources/updated</code>の素朴な組み合わせは廃止され、<code>subscriptions/listen</code>という長命ストリームの仕組みに統合された。設計を正しく理解しないまま移行すると、多重サブスクリプションの取り違えや再接続漏れが起きる。</p>
<h2>MCPのリソース通知はなぜ再設計されたのか</h2>
<blockquote class="answer-block"><p>MCP 2026-07-28はセッション廃止と合わせ、個別の<code>subscribe</code>系RPCを汎用ストリームAPIに統合再設計した。</p></blockquote>
<p>旧仕様では、リソース変更を監視したいクライアントは<code>resources/subscribe</code>リクエストを送り、サーバーは以後そのリソースについてだけ<code>notifications/resources/updated</code>を流していた。この方式はリソースの変更通知専用で、ツールリストやプロンプトリストの変更通知とは別経路だった。2026-07-28仕様はこれらを<code>subscriptions/listen</code>という単一の汎用リクエストに統合し、<code>notifications</code>フィルタで<code>toolsListChanged</code>・<code>promptsListChanged</code>・<code>resourcesListChanged</code>・<code>resourceSubscriptions</code>（監視対象URI配列）を同時に指定できるようにした。ステートレス化の一環として、サーバーはこのリクエストに応じて長命のストリームを開く。関連する全体像は<a href="https://kuucorp.com/blog/mcp-2026-stateless-spec-migration-guide/">MCP 2026-07-28のステートレス化移行記事</a>も参照してほしい。</p>
<h2>subscriptions/listenはどう動くのか</h2>
<blockquote class="answer-block"><p>サーバーは必ず<code>notifications/subscriptions/acknowledged</code>を最初に返し、<code>_meta</code>の<code>subscriptionId</code>でストリームを識別させる。</p></blockquote>
<p>クライアントが<code>subscriptions/listen</code>を送ると、サーバーは実際に対応できる通知種別だけを反映した<code>notifications/subscriptions/acknowledged</code>を先に送らなければならない（MUST）。この確認応答より前に通知を送ることは仕様違反になる。確認応答と以後のすべての通知は、<code>_meta</code>内の<code>io.modelcontextprotocol/subscriptionId</code>に元のリクエストのJSON-RPC <code>id</code>をそのまま載せて運ばれる。クライアント側はこのIDを突き合わせることで、どの<code>listen</code>呼び出しに対する通知かを判定する。</p>
<h2>複数サブスクリプションをどう多重化するか</h2>
<blockquote class="answer-block"><p>stdioは全メッセージが単一チャネルを共有するため、<code>subscriptionId</code>なしでは複数ストリームを区別できない。</p></blockquote>
<p>1クライアントが複数の<code>subscriptions/listen</code>を同時に開く——たとえば「ツールリスト変更監視」と「特定リソースの更新監視」を別々に——ケースは仕様上想定されている。HTTPのStreamable Transportではストリームごとに論理的な分離があるが、stdioでは全通知が1本のパイプを共有するため、<code>subscriptionId</code>による多重化識別がなければどの監視対象の更新かを判別できない。エンタープライズでMCPゲートウェイを自社実装する場合、<code>subscriptionId</code>をルーティングキーとして扱うミドルウェア層の設計が必須になる。あわせて<a href="https://kuucorp.com/blog/mcp-resources-prompts-tools-design/">Resources・Prompts・Toolsの使い分け</a>も設計の前提として押さえておくと良い。</p>
<h2>再接続・切断時の設計で注意すべきことは</h2>
<blockquote class="answer-block"><p>サーバー主導の正常終了は<code>resultType: "complete"</code>応答を伴うが、stdioは再接続時にサブスクリプション状態を保持しない。</p></blockquote>
<p>サーバーがシャットダウンなどで自発的にストリームを終える場合、元の<code>subscriptions/listen</code>リクエストに対して<code>resultType: "complete"</code>を含む結果を返してから閉じるべき（SHOULD）とされている。この応答がなく通信が切れた場合、クライアントは異常切断と判断して再接続を試みてよい。注意すべきは、stdioでは再接続してもサーバー側にサブスクリプション状態が残らない点だ。クライアントは再接続後に全<code>subscriptions/listen</code>を再送する再確立ロジックを持つ必要がある。これを欠くと、障害復旧後にリソース変更監視が静かに失われ、キャッシュが陳腐化したまま気づかないインシデントにつながる。監査ログ基盤と合わせてサブスクリプション再確立イベントを記録しておくと、こうした静かな欠落を検知しやすい。MCPゲートウェイの運用設計は<a href="https://kuucorp.com/services/rde/">エンタープライズ向けAgent開発支援（RDE）</a>で個別に相談できる。</p>
<h2>参考</h2>
<ul>
<li><a href="https://modelcontextprotocol.io/specification/2026-07-28/basic/patterns/subscriptions">MCP Specification 2026-07-28 — Subscriptions</a></li>
<li><a href="https://modelcontextprotocol.io/specification/2026-07-28/server/resources">MCP Specification 2026-07-28 — Resources</a></li>
</ul>
<h2>まとめ</h2>
<p>MCP 2026-07-28仕様の<code>subscriptions/listen</code>は、リソース・ツール・プロンプトの変更通知を単一の長命ストリームに統合した設計だ。<code>subscriptionId</code>による多重化と、stdioでの再接続時の再確立ロジックを押さえておけば、旧<code>resources/subscribe</code>からの移行は機械的に進められる。自社のMCPゲートウェイやクライアントSDKへの影響範囲の洗い出しに不安があれば、Kuuの<a href="https://kuucorp.com/services/rde/">エージェント開発支援（RDE）</a>にご相談ください。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="MCP" />
    <category term="プロトコル" />
    <category term="AIエージェント" />
    <category term="実装" />
  </entry>
  <entry>
    <title>MCPのMRTR改ざん耐性設計——requestStateの守り方</title>
    <link href="https://kuucorp.com/blog/mcp-mrtr-requeststate-integrity-design/" />
    <id>https://kuucorp.com/blog/mcp-mrtr-requeststate-integrity-design/</id>
    <updated>2026-10-03T00:00:00.000Z</updated>
    <published>2026-10-03T00:00:00.000Z</published>
    <summary><![CDATA[MCP 2026-07-28仕様のMRTRはrequestStateを攻撃者制御入力として扱い、認可に影響する場合はHMACやAEADで改ざん検証することをSEP-2322で要求する。]]></summary>
    <content type="html"><![CDATA[<p>MCPサーバーがツール実行中に「本当に削除しますか」とユーザーへ確認を求める——この一時停止処理が2026-07-28仕様で作り直された。Sampling・Roots・Elicitationという従来のクライアント呼び出し方式は非推奨となり、Multi Round-Trip Requests（MRTR）という新パターンに統一された。問題は、この新パターンの中核にある<code>requestState</code>フィールドを、実装者が単なる継続トークン程度に軽く扱ってしまう点にある。</p>
<h2>なぜMCPはSampling/Roots/Elicitationの呼び出し方式を変えたのか</h2>
<blockquote class="answer-block"><p>MCPはサーバーからクライアントへの割り込みリクエストを廃止し、2026-07-28仕様でMRTR（SEP-2322）に統一した。ステートレスな水平スケールを実現するためだ。</p></blockquote>
<p>2026-07-28仕様はセッション概念（<code>Mcp-Session-Id</code>）と<code>initialize</code>ハンドシェイクを撤廃し、<a href="https://kuucorp.com/glossary/mcp/">MCP</a>をステートレスなリクエスト/レスポンス型プロトコルへ転換した。しかし旧来のSampling・Roots・Elicitationは、いずれもサーバーが接続を保持したままクライアントへ割り込みリクエストを送る「サーバー起動」方式だった。接続を保持できないステートレスサーバーではこの方式が成立しない。公式チェンジログはSampling・Roots・Loggingの3機能を非推奨に指定し、新規実装はMRTRパターンへの統一を求めている。従来の<a href="https://kuucorp.com/blog/mcp-elicitation-server-user-input-design/">Elicitation実装</a>は<code>elicitation/create</code>を直接送る前提で解説したが、現行仕様ではこの直接呼び出しがMRTRの枠組みに置き換わっている。</p>
<h2>MRTRの基本フローはどう動くか</h2>
<blockquote class="answer-block"><p>MRTRはクライアントの<code>tools/call</code>等に対しサーバーが<code>resultType: "input_required"</code>を返し、クライアントが<code>inputResponses</code>付きで再送する2往復設計です。</p></blockquote>
<p>フローは4段階。(1) クライアントが通常のリクエストを送る。(2) サーバーが追加情報を要すると判断し、<code>InputRequiredResult</code>で<code>inputRequests</code>（Elicitation・Sampling・Rootsのいずれか）と<code>requestState</code>を返す。(3) クライアントはユーザーや他の手段から回答を集め、<code>inputResponses</code>と<code>requestState</code>を添えて同じリクエストを新しいJSON-RPC <code>id</code>で再送する。(4) サーバーは<code>requestState</code>から文脈を復元し、処理を完了する。対応するのは<code>tools/call</code>・<code>resources/read</code>・<code>prompts/get</code>の3リクエストのみで、他のリクエストへの<code>InputRequiredResult</code>は仕様違反となる。<a href="https://kuucorp.com/blog/mcp-tasks-extension-long-running-operations-design/">Tasks拡張</a>の<code>input_required</code>状態と似るが、MRTRは単発リクエスト内の往復であり、長時間タスクのポーリングとは別チャンネルである点に注意したい。</p>
<h2>requestStateはなぜ「攻撃者制御入力」として扱うべきなのか</h2>
<blockquote class="answer-block"><p>requestStateはクライアントが不透明として扱うべき値だが、サーバー視点では悪意あるクライアントが改変しうる攻撃者制御入力として扱う必要がある。</p></blockquote>
<p>仕様はクライアント側に「<code>requestState</code>の内容を検査・解釈・変更してはならない」と課す一方、サーバー側には逆の要求を課す。クライアントを経由して往復する値である以上、悪意あるクライアントや侵害されたクライアントが値を書き換えて再送してくる可能性を排除できない。この非対称性——クライアントには不透明、サーバーには攻撃者制御——を理解していないと、<code>requestState</code>に認可判断やリソースアクセスの前提条件をそのまま平文で埋め込む実装に陥る。これは<a href="https://kuucorp.com/blog/agent-iam-scoped-credentials-design/">スコープ付き認証情報設計</a>で避けるべきとされる「暗黙の信頼境界」と同じ失敗パターンだ。</p>
<h2>requestStateの改ざん防御はどう実装するか</h2>
<blockquote class="answer-block"><p>requestStateが認可・リソースアクセス・業務ロジックに影響する場合、サーバーはHMACやAEADで整合性保護し、検証失敗時は必ず拒否しなければならない。</p></blockquote>
<p>仕様の要求は明確だ。<code>requestState</code>が認可判断・リソースアクセス・業務ロジックに影響を与える場合、サーバーはHMACまたはAEADで整合性保護を実装し、検証に失敗した状態は拒否しなければならない。整合性保護を省略できるのは、改ざんの結果がリクエスト失敗以上の実害を生まない場合に限られる。実装としては、サーバー内部のJSONを平文でBase64エンコードするのではなく、暗号化JWTやAEAD保護済みバイナリとして<code>requestState</code>を発行し、復号・検証の失敗を即座にエラー終端させる設計が要る。</p>
<h2>リプレイ防御は何を組み込むべきか</h2>
<blockquote class="answer-block"><p>改ざん防御だけでは不十分で、整合性保護されたペイロード内に認証プリンシパル・短いTTL・元リクエストの識別子を含め検証すべきだ。</p></blockquote>
<p>仕様はリプレイ対策として3要素を推奨する。認証済みプリンシパル（異なるユーザーが提示した状態を拒否）、短いTTL（期限切れ状態を拒否）、元リクエストの識別子（メソッド名とパラメータのダイジェストなど。異なるリクエストに対する状態を拒否）の3点だ。ただしこれらはリプレイの時間窓とクロスユーザー再利用を防ぐに留まり、単発利用の保証にはならない。一度しか使えないべき<code>requestState</code>（ワンタイム処理等)はサーバー側で別途その制約を強制する必要がある。</p>
<h2>参考</h2>
<ul>
<li><a href="https://modelcontextprotocol.io/specification/2026-07-28/basic/patterns/mrtr">Multi Round-Trip Requests - Model Context Protocol</a></li>
<li><a href="https://modelcontextprotocol.io/specification/2026-07-28/changelog">Key Changes - Model Context Protocol</a></li>
<li><a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/">The 2026-07-28 Specification</a></li>
</ul>
<h2>まとめ</h2>
<p>MRTRはMCPのステートレス化に不可欠な設計変更だが、<code>requestState</code>を単なる継続トークンとして軽視すると、認可バイパスや業務ロジック改ざんの入口になる。サードパーティMCPサーバーを組み込む際は、<code>requestState</code>の整合性保護方式（HMAC/AEAD）とリプレイ対策の3要素が実装されているかをベンダー評価の必須項目に加えるべきだ。複数チームでMCPサーバーを運用する体制整備については、<a href="https://kuucorp.com/services/rde/">Kuu株式会社のRDE</a>が設計レビューから支援する。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="MCP" />
    <category term="セキュリティ" />
    <category term="プロトコル" />
    <category term="エンタープライズ" />
  </entry>
  <entry>
    <title>プロンプトキャッシュミスの原因をAPIで特定する</title>
    <link href="https://kuucorp.com/blog/claude-cache-diagnostics-api-design/" />
    <id>https://kuucorp.com/blog/claude-cache-diagnostics-api-design/</id>
    <updated>2026-10-03T00:00:00.000Z</updated>
    <published>2026-10-03T00:00:00.000Z</published>
    <summary><![CDATA[Claude APIのCache Diagnosticsはcache_miss_reasonでsystem_changedなど4種のキャッシュ無効化原因を返す。2026年9月23日にGA化した仕組みと実装パターンを解説する。]]></summary>
    <content type="html"><![CDATA[<p>キャッシュ読み込みトークンが急にゼロへ落ちても、Messages APIの<code>usage</code>フィールドは理由を教えてくれない。システムプロンプトが変わったのか、ツール定義が変わったのか、履歴の編集が原因なのか——従来は仮説を立てて1つずつ潰すしかなかった。2026年9月23日にGA化した<a href="https://kuucorp.com/blog/prompt-caching-agent-design-context-reuse/">Cache Diagnostics</a>は、この当てずっぽうのデバッグを構造化されたレスポンスに置き換える。</p>
<h2>Cache Diagnosticsとは何か</h2>
<blockquote class="answer-block"><p>Cache Diagnosticsは直前のレスポンスIDを渡すだけで、2つのリクエストのプロンプト接頭辞がどこで分岐したかをAPIが特定する機能だ。</p></blockquote>
<p>リクエストに<code>diagnostics</code>オブジェクトを含めると、APIはそのリクエストのフィンガープリントを<code>id</code>に紐づけて保存する。次のターンで直前の<code>id</code>を<code>diagnostics.previous_message_id</code>として渡すと、APIは保存済みフィンガープリントと新リクエストを比較し、レスポンスの<code>diagnostics</code>フィールドに分岐点を返す。初回ターンは比較対象が無いため<code>previous_message_id: null</code>を渡してオプトインするだけでよい。かつて必要だった<code>cache-diagnosis-2026-04-07</code>ベータヘッダーは不要になり、GA後は送っても無視される。</p>
<h2>キャッシュミスの原因はどう分類されるか</h2>
<blockquote class="answer-block"><p><code>cache_miss_reason</code>はtypeで判別する共用体で、model/system/tools/messagesの変更4種と、比較不能だった2種を返す。</p></blockquote>
<p>具体的には<code>model_changed</code>（モデル自体が変わった）、<code>system_changed</code>（システムプロンプトにタイムスタンプ等を埋め込んだ）、<code>tools_changed</code>（ツール定義の順序や内容が変わった）、<code>messages_changed</code>（過去の会話履歴を追記ではなく編集・削除した）の4種が分岐点を示す。加えて<code>previous_message_not_found</code>（フィンガープリントの保持期限切れや別ワークスペース起因）、<code>unavailable</code>（<code>thinking</code>や<code>tool_choice</code>など他パラメータの変更、または比較範囲を超えた長い会話）がある。各<code>*_changed</code>型は<code>cache_missed_input_tokens</code>という目安の推定値も持ち、どれだけのキャッシュ済み接頭辞を失ったかが分かる。</p>
<h2>usageとdiagnosticsをどう組み合わせて読むか</h2>
<blockquote class="answer-block"><p><code>diagnostics</code>は「リクエストが変わったか」、<code>usage.cache_read_input_tokens</code>は「キャッシュが実際に当たったか」を示し、両方を見て初めて原因が切り分かる。</p></blockquote>
<p><code>diagnostics</code>が<code>null</code>で読み込みトークンが高ければ正常動作だ。<code>null</code>なのに読み込みトークンが低い場合は、リクエスト自体は一致しているがキャッシュエントリが期限切れになったケースで、5分TTLから1時間TTLへの切り替えが有効な対処になる。<code>*_changed</code>型が返り読み込みトークンも低ければ、それが本当のバグであり<code>type</code>が示す原因を直す対象になる。</p>
<h2>実装と運用で何に注意すべきか</h2>
<blockquote class="answer-block"><p>フィンガープリントはハッシュとトークン数推定のみで生テキストを保持せず、ZDR適格だが保持期間は短く、継続したターンでの利用が前提になる。</p></blockquote>
<p>マルチターンのループでは、直前レスポンスの<code>id</code>を毎ターン<code>previous_message_id</code>として引き渡す実装にする。ストリーミングでは<code>diagnostics</code>が<code>message_start</code>イベントに載るため、SDKのアキュムレータで最終メッセージまで保持すればよい。Claude API専用の機能でAmazon BedrockやGoogle Cloud経由では使えない点、フィンガープリントの保存先が同一ワークスペースに限られる点は事前に把握しておく必要がある。SMBではAPI呼び出し全体に<code>diagnostics</code>を常時組み込んでログに<code>cache_miss_reason</code>を残すだけで十分だが、エンタープライズで複数チームがモデルルーティングを行う場合は<a href="https://kuucorp.com/services/rde/">LLMゲートウェイ</a>側でモデル固定や<code>system</code>プロンプトの一意性を保証する設計が要る。コスト計測基盤全体との統合は<a href="https://kuucorp.com/blog/ai-finops-token-cost-instrumentation/">AI FinOps設計</a>も参照してほしい。</p>
<h2>参考</h2>
<ul>
<li><a href="https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics">Cache diagnostics - Claude Platform Docs</a></li>
<li><a href="https://platform.claude.com/docs/en/build-with-claude/prompt-caching">Prompt caching - Claude Platform Docs</a></li>
<li><a href="https://platform.claude.com/docs/en/about-claude/pricing">Pricing - Claude Platform Docs</a></li>
</ul>
<h2>まとめ</h2>
<p>Cache Diagnosticsは、キャッシュミスという「見えない事故」を<code>cache_miss_reason</code>という診断可能な情報に変える機能だ。<code>usage.cache_read_input_tokens</code>と組み合わせれば、リクエストのバグとキャッシュエントリの期限切れを切り分けられ、プロンプトキャッシュのコストメリットを継続的に確保できる。自社のエージェント基盤にキャッシュ監視を組み込みたい場合は、<a href="https://kuucorp.com/services/ai-ops/">Kuuのエージェント運用支援</a>で設計・実装を相談できる。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="Claude API" />
    <category term="プロンプトキャッシュ" />
    <category term="コスト最適化" />
    <category term="可観測性" />
  </entry>
  <entry>
    <title>Managed Agentsのメモリ肥大化をDreamsで防ぐ</title>
    <link href="https://kuucorp.com/blog/claude-managed-agents-dreams-memory-curation-design/" />
    <id>https://kuucorp.com/blog/claude-managed-agents-dreams-memory-curation-design/</id>
    <updated>2026-10-02T00:00:00.000Z</updated>
    <published>2026-10-02T00:00:00.000Z</published>
    <summary><![CDATA[Claude Managed Agentsのメモリストアは使うほど重複や矛盾が溜まる。Dreamsは過去セッションを読み、最大100セッション分からメモリを再構成する非破壊の整理機能だ。]]></summary>
    <content type="html"><![CDATA[<p><a href="https://kuucorp.com/glossary/managed-agents/">Managed Agents</a>のメモリストアを使い始めて数ヶ月——同じ設定が何度も書き込まれ、半年前の指示と先月の指示が矛盾し、エージェントがどちらに従えばいいか分からなくなった経験はないでしょうか。IT担当者を専任で置けない中小企業ほど、メモリの手動整理に時間を割けず、この問題を放置しがちです。Anthropicが研究プレビューとして公開した「Dreams」は、この整理作業そのものをエージェントに任せる仕組みです。</p>
<h2>メモリストアはなぜ放置すると使い物にならなくなるのか</h2>
<blockquote class="answer-block"><p>メモリストアは最大1万件が上限で、重複や矛盾が蓄積すると新規書き込みに失敗する。</p></blockquote>
<p>各セッションがメモリストアに書き込む内容はローカルかつ増分的です。ユーザーの好み、プロジェクトの慣習、過去の失敗といった情報がセッションを重ねるごとに追記されますが、誰も整理しなければ重複エントリ・矛盾した指示・陳腐化した情報がそのまま積み上がります。ストアが1万件の上限に達すると、新規メモリの直接作成だけでなく、エージェントが未マップのパスにファイルを書き込む操作も失敗するようになり、気づいたときには本番のエージェント挙動に影響が出ています。</p>
<h2>Dreamsとは何をする仕組みか</h2>
<blockquote class="answer-block"><p>Dreamsは既存ストアと過去セッションを読み、整理済みの新しい出力ストアを生成する。</p></blockquote>
<p>Dreamsは、既存のメモリストア1つと過去のセッション記録1〜100件を入力として受け取り、重複を統合し、矛盾する記述を最新の内容で置き換え、新たな気づきを抽出した<strong>別の出力ストア</strong>を生成します。重要なのは、入力側のメモリストアは一切変更されない点です。結果が気に入らなければ出力ストアを破棄するだけでよく、本番運用中のストアを壊すリスクなしに試せます。<code>instructions</code>パラメータ（最大4,096字）で「コーディング規約に関する記述を優先し、一回限りのデバッグメモは無視する」といった焦点を指定でき、Claude Opus 5やClaude Sonnet 5を含む複数モデルから処理に使うモデルを選べます。</p>
<h2>Dreamsはどう運用フローに組み込むのか</h2>
<blockquote class="answer-block"><p>Dreamsは非同期ジョブで、完了までステータスをポーリングして確認する設計になる。</p></blockquote>
<p>ジョブを作成すると<code>pending</code>状態で返り、処理が進むと<code>running</code>に移行します。完了（<code>completed</code>）すると出力ストアのIDが<code>outputs</code>に現れるので、内容をレビューしたうえで今後のセッションをその出力ストアに切り替えるか、不要であれば削除・アーカイブします。公式ドキュメントが推奨する使い方は、ストアが1万件の上限に近づく前にDreamsで整理し、整理後のストアにセッションを切り替えて元のストアをアーカイブする運用です。課金は選択したモデルの標準トークン料金で、入力セッションの数と長さにほぼ比例して増えるため、最初は少数セッションで試し、整理品質に納得してから対象を広げるのが安全です。</p>
<h2>中小企業はDreamsの導入をどう判断すべきか</h2>
<blockquote class="answer-block"><p>Dreamsは研究プレビューのため、まず小規模な試行から段階的に評価するのが現実的だ。</p></blockquote>
<p>専任のプラットフォームチームを持たない中小企業にとって、メモリの手動棚卸しは後回しにされがちな作業です。Dreamsはこの作業を定期ジョブとして自動化できますが、2026年10月時点では研究プレビューのためアクセス申請が必要で、本番の全ストアにいきなり適用するものではありません。まずは最も肥大化しているストア1つと直近の少数セッションで試し、出力ストアの品質とコストを確認してから、定期実行に組み込むかどうかを判断する進め方が現実的です。Managed Agentsの導入設計やメモリ運用の整備については<a href="https://kuucorp.com/services/ai-ops/">Kuuの AI Ops</a>でも支援しています。</p>
<h2>参考</h2>
<ul>
<li><a href="https://platform.claude.com/docs/en/managed-agents/dreams">Dreams - Claude Platform Docs</a></li>
<li><a href="https://platform.claude.com/docs/en/managed-agents/memory">Using agent memory - Claude Platform Docs</a></li>
</ul>
<h2>まとめ</h2>
<p>Managed Agentsのメモリストアは便利な反面、放置すれば重複と矛盾で機能しなくなります。Dreamsは過去セッションから非破壊的に整理済みストアを生成する仕組みで、上限に達する前の定期整理に組み込むことで、専任の運用担当者がいなくてもメモリ品質を保てます。導入可否の判断やManaged Agentsの運用設計に迷う場合は、<a href="https://kuucorp.com/services/ai-ops/">Kuuの AI Ops</a>にご相談ください。</p>]]></content>
    <author><name>kuu-editorial</name></author>
    <category term="Managed Agents" />
    <category term="メモリ設計" />
    <category term="エージェントアーキテクチャ" />
    <category term="Claude API" />
  </entry>
  <entry>
    <title>Claude Code Mods——権限モデルとガバナンス設計</title>
    <link href="https://kuucorp.com/blog/claude-code-mods-permission-governance-design/" />
    <id>https://kuucorp.com/blog/claude-code-mods-permission-governance-design/</id>
    <updated>2026-10-02T00:00:00.000Z</updated>
    <published>2026-10-02T00:00:00.000Z</published>
    <summary><![CDATA[Claude Code Modsはv2.1.287から既定で有効化され、サンドボックスなしでユーザー権限そのまま動作します。導入前の審査と組織統制の設計点を整理します。]]></summary>
    <content type="html"><![CDATA[<p>Claude Codeに新しい拡張機構「Mods」が2026年10月1日に加わった。プラグインがエディタ内に自前のUIを描き、ツール呼び出しを横取りし、ユーザーの代わりに承認までできる——便利さの裏で、<a href="https://kuucorp.com/glossary/agent-governance/">エージェントガバナンス</a>の観点では新しい信頼境界が生まれている。</p>
<h2>Claude Code Modsとは何か</h2>
<blockquote class="answer-block"><p>Modsはイベントに反応する関数群で、Claude Codeの中で直接実行されるプラグインです。</p></blockquote>
<p>Modsは<code>plugin.json</code>・<code>hooks.json</code>・<code>register.js</code>の3ファイルで構成され、<code>on</code>関数でイベントハンドラを登録する。登録したハンドラは<code>tool.call</code>（ツール呼び出し直前）や<code>ui.render</code>（画面描画時）などのイベントごとに呼ばれ、イベントを素通りさせる・書き換える・自前の処理で代替する、のいずれかを選べる。設定ファイルで外部コマンドを呼ぶ従来の「settings hook」とは異なり、Claude Code自身のプロセス内で動くため、サイドバーのペインやプロンプト上のバナー、トースト通知まで描画できる。v2.1.287以降は既定で有効になっており、無効化しない限りインストールしたプラグインが即座に有効になる。</p>
<h2>Modsはどんな権限で動作するのか</h2>
<blockquote class="answer-block"><p>Modsはサンドボックス無しでユーザー権限そのまま動き、設定済みの拒否ルールより先に承認できます。</p></blockquote>
<p>公式ドキュメントは明確に警告している。Modsはユーザー権限でファイルの読み書き・プロセス起動・ネットワーク通信ができ、環境変数や設定ファイルに保存されたAPIキーも読み取れる。さらに重要なのは、<code>ask</code>ルールが確認を求めるはずのツール呼び出しや、自分で設定した<code>PreToolUse</code>フックが拒否した呼び出しさえ、先に動くModsが承認してしまえる点だ。<a href="https://code.claude.com/docs/en/sandboxing">サンドボックス</a>を有効にしても、ModsがBashで起動したプロセスはサンドボックスの外で走る。唯一の防波堤は、Modsが権限確認ダイアログの表示内容そのものは変更できないという制約だけだ。</p>
<h2>導入前に何を審査すべきか</h2>
<blockquote class="answer-block"><p>専用コマンドはプラグインを実行せずに、処理イベントと呼び出し内容を一覧表示できます。</p></blockquote>
<p>インストール前にプラグインのリポジトリを取得し、<code>claude plugin validate ./some-mod</code>を実行すると、そのModsが監視するイベントと、ファイルアクセス・ネットワーク呼び出し・モデル呼び出しなど何を要求するかをコードを動かさずに確認できる。信頼できる作成者・マーケットプレイス以外からのインストールは避け、<code>/plugin</code>コマンドでセッションに実際にロードされたModsの一覧を都度確認する運用が、審査体制を持たない組織でも最初の防御線になる。</p>
<h2>組織はModsをどう統制すればよいか</h2>
<blockquote class="answer-block"><p>管理設定で個人導入Modsを一括制限でき、組織管理のModsだけは動き続けます。</p></blockquote>
<p>個人レベルでは<code>~/.claude/settings.json</code>に<code>disableAllHooks: true</code>を設定すると、インストール済みの全Modsとsettings hookが停止する（組織が管理するものは動き続ける）。組織レベルでは管理設定（managed settings）で<code>allowManagedModsOnly</code>を敷き、ユーザーが個別導入したModsの読み込み自体を止められる。Claude Codeには<code>cc-plugin-sec-default</code>という組織管理の優先度をユーザー導入Modsより先に走らせる組み込みModsがあり、ポリシーを独自のModsとして実装する余地も用意されている。中小企業規模ではまず個人設定での無効化と信頼できる配布元への限定、エンタープライズでは管理設定による強制とレビュー記録の両輪で統制するのが現実的な出発点だ。</p>
<h3>規模別の留意点（SMB / エンタープライズ）</h3>
<p>専任のセキュリティ担当がいない組織では、Modsの導入を「便利なプラグインを見つけた人」の個人判断に委ねず、導入前に<code>claude plugin validate</code>の出力を確認する担当を固定するだけでリスクを大きく減らせる。エンタープライズでは、管理設定による<code>allowManagedModsOnly</code>の強制と、組織管理Modsによるポリシー実装を組み合わせ、ユーザー導入分はホワイトリスト運用に限定するのが望ましい。マルチチームでの大規模な権限統制設計は<a href="https://kuucorp.com/services/rde/">Reinvention Deployed Engineering</a>の支援範囲になる。</p>
<h2>参考</h2>
<ul>
<li><a href="https://code.claude.com/docs/en/plugins/mods/overview">Mods overview — Claude Code Docs</a></li>
<li><a href="https://code.claude.com/docs/en/plugins/mods/api">Use the mods API — Claude Code Docs</a></li>
</ul>
<h2>まとめ</h2>
<p>Modsはエディタ内に自前のUIを描ける強力な拡張機構である一方、サンドボックスなしでユーザー権限そのまま動き、既存の許可/拒否ルールより先にツール呼び出しを承認できるという、従来のsettings hookやエージェントスキルとは異なる信頼境界を持つ。導入前の<code>claude plugin validate</code>による審査と、個人設定・管理設定それぞれでの無効化手段を事前に把握しておくことが、便利さとリスクのバランスを取る最初の一歩になる。Kuu株式会社では、こうした新しい拡張機構の権限設計から<a href="https://kuucorp.com/services/ai-ops/">エージェント運用の技術支援</a>まで支援している。自社のClaude Code運用ポリシーに不安がある場合は、お気軽にご相談いただきたい。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="Claude Code" />
    <category term="権限管理" />
    <category term="エージェントガバナンス" />
    <category term="セキュリティ" />
  </entry>
  <entry>
    <title>コネクタ急増期のロール権限設計——合成ルールと利用監査</title>
    <link href="https://kuucorp.com/blog/claude-connector-marketplace-role-permission-design/" />
    <id>https://kuucorp.com/blog/claude-connector-marketplace-role-permission-design/</id>
    <updated>2026-10-01T00:00:00.000Z</updated>
    <published>2026-10-01T00:00:00.000Z</published>
    <summary><![CDATA[Claude Marketplaceは2026年9月に2,000件超のコネクタで始動した。組織はロールごとの許可状態と加算方式の合成ルールで権限を設計する必要がある。]]></summary>
    <content type="html"><![CDATA[<p>2026年9月23日、Anthropicは2,000件超のコネクタ・プラグインを集約したClaude Marketplaceを立ち上げた。Atlassian・Google・Microsoft・Notion・Salesforceのコネクタが一カタログに並び、従業員は数クリックで業務システムへのアクセスをClaudeに与えられる。この手軽さが権限設計をすり抜ける経路になる。</p>
<h2>コネクタの急増はなぜ権限設計の課題になるか</h2>
<blockquote class="answer-block"><p>カタログが2,000件を超えると個別審査は破綻し、統制の重心はロール・スコープ設計に移る。</p></blockquote>
<p>これまでのMCPコネクタ運用は、IT担当が少数を個別に精査してから有効化する前提で回っていた。だがMarketplaceの登場でコネクタ数が急拡大し、個別審査のペースが追いつかなくなる。<a href="https://kuucorp.com/glossary/agent-governance/">エージェントガバナンス</a>の実務では、個々のコネクタの安全性審査（<a href="https://kuucorp.com/blog/agent-skill-marketplace-security-vetting-checklist/">安全性審査手順</a>参照）に加え、「誰がどのコネクタのどのツールを使えるか」を組織のロール構造で統制する設計が不可欠になる。</p>
<h2>組織全体のコネクタ権限はどう設計されているか</h2>
<blockquote class="answer-block"><p>組織でコネクタを有効化したうえで、ロールごとに許可・要承認・ブロックの状態を割り当てる二層モデルを取る。</p></blockquote>
<p>公式ドキュメントによれば、Ownerが組織設定でコネクタを追加して初めて、各ロールへの権限割り当てが可能になる。ロール側ではコネクタ単位で「常に許可」「要承認（利用都度の確認）」「ブロック（ロールから見えなくする）」の3状態に加え、ツール単位で個別設定する「カスタム」を選べる。特定チームでパイロット導入してから全社展開する段階的ロールアウトも、このロール単位の設定で実現する。</p>
<h2>複数ロールを持つ利用者の権限はどう合成されるか</h2>
<blockquote class="answer-block"><p>ロール間の権限は加算方式で合成され、別ロールが許可していれば「最も緩い設定が勝つ」。</p></blockquote>
<p>一人の利用者が複数ロールを持つ場合、権限は和集合として合成される。あるロールでブロックしても、別のロールで許可されていればブロックは効かない。だが組織レベルの有効化が上限（ceiling）として機能するため、ロール側の設定は「組織が許可した範囲を狭める」方向にしか働かない。設計の起点は常に組織レベルの有効化であり、ロール設計はそこからの絞り込みとして組み立てる。設定変更の反映には最大15分を要するため、緊急ブロックの運用手順にはこの遅延を織り込む。</p>
<p><a href="https://kuucorp.com/blog/mcp-enterprise-managed-authorization-design/">EMAとゼロタッチSSOの実装</a>で扱ったEnterprise-Managed Authorizationは、IDP側でSSO時にMCPサーバーへのアクセス権を払い出すプロトコル層の仕組みだ。本稿のロール単位の許可状態はその上に重なる製品層の統制で、両者は併用する。</p>
<h2>導入後の利用監査はどう設計するか</h2>
<blockquote class="answer-block"><p>Cowork拡張でOpenTelemetry対応が加わり、管理者はツール利用状況とコストを計装データで追跡できる。</p></blockquote>
<p>権限を絞るだけでは、どのコネクタが実際にどう使われているかは見えない。2026年9月のアップデートでは組織専用マーケットプレイスの作成に加えOpenTelemetry対応が加わり、ツール呼び出しとコストをテレメトリとして収集できるようになった。退職者のアクセスはIDP側のデプロビジョニングで自動失効するが、どのロールがいつどのコネクタを使ったかをOTelのトレースで保持し、<a href="https://kuucorp.com/blog/ai-agent-audit-log-management/">監査ログの保管設計</a>の対象に含めることが実務的な防御線になる。</p>
<h2>参考</h2>
<ul>
<li><a href="https://support.claude.com/en/articles/15537633-authorize-mcp-connectors-for-your-entire-organization">Authorize MCP connectors for your entire organization | Claude Support</a></li>
<li><a href="https://support.claude.com/en/articles/13930458-set-up-role-based-permissions-on-enterprise-plans">Set up role-based permissions on Enterprise plans | Claude Support</a></li>
<li><a href="https://claude.com/blog/cowork-plugins-across-enterprise">Cowork and plugins for teams across the enterprise | Claude Blog</a></li>
</ul>
<h2>まとめ</h2>
<p>Claude Marketplaceの2,000件超という規模は、コネクタを個別に審査する運用の限界をはっきりさせた。組織レベルの有効化を上限とし、ロールごとに許可状態を割り当て、複数ロールの合成が加算方式になる点を前提に設計する。EMAによるSSO層とロール単位の製品層の統制を併用し、OpenTelemetryによる監査まで組み込むことで、カタログの拡大速度に統制が追いつく体制になる。</p>
<p>Claude Marketplace時代のコネクタ権限設計やMCP基盤の統制は、<a href="https://kuucorp.com/services/rde/">Kuu株式会社のRDEサービス</a>にご相談ください。ロール設計から監査基盤の構築まで一貫してサポートします。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="MCP" />
    <category term="IAM" />
    <category term="エンタープライズ" />
    <category term="エージェントガバナンス" />
  </entry>
  <entry>
    <title>CI負荷25倍時代のTest Impact Analysis設計</title>
    <link href="https://kuucorp.com/blog/agentic-coding-ci-test-impact-analysis-design/" />
    <id>https://kuucorp.com/blog/agentic-coding-ci-test-impact-analysis-design/</id>
    <updated>2026-10-01T00:00:00.000Z</updated>
    <published>2026-10-01T00:00:00.000Z</published>
    <summary><![CDATA[AnthropicはAIコーディングでCI負荷が6か月で25倍に増えた課題をTest Impact Analysisで解決しました。listener/selector構成への刷新手順を解説します。]]></summary>
    <content type="html"><![CDATA[<p>コードを書く速度はもうボトルネックではない——PRのレビューと統合を待つ列が、CIの前で詰まっている。Anthropic自身の開発チームでは、Claudeが本番コードの約8割を書くようになった結果、CIジョブが半年で25倍に増え、既存のテスト実行基盤が音を上げた。<a href="https://kuucorp.com/blog/agent-evaluation-cicd-pipeline-automation/">エージェント評価のCI/CD統合</a>で品質ゲートを組んでも、ゲート自体が詰まれば意味がない。この記事ではAnthropicが公開したTest Impact Analysis（TIA）再設計の経緯を基に、AIコーディング時代のCI設計を整理する。</p>
<h2>なぜAIコーディングはCIを圧迫するのか</h2>
<blockquote class="answer-block"><p>Claudeが本番コードの約8割を書く体制で、Anthropicのテスト量は10倍、CIジョブは6か月で25倍に増加した。</p></blockquote>
<p>コードを書く主体がエンジニアからエージェントに移ると、PRの生成速度は人間のレビュー速度を超える。Anthropicではエンジニア1人あたりの出荷コード量が2021〜2025年平均の8倍に達し、テストスイートの規模は10倍に膨らんだ。すべてのPRで全テストを実行する従来方式は、この成長速度の前では線形にすら間に合わない。コードを書く工程がボトルネックでなくなったことで、次の制約点がCI実行時間そのものに移ったという指摘は、<a href="https://kuucorp.com/blog/agent-autoscaling-capacity-planning-design/">オートスケーリング設計</a>と同じく「成長を前提にアーキテクチャを選ぶ」必要性を示している。</p>
<h2>Test Impact Analysisとは何か</h2>
<blockquote class="answer-block"><p>Test Impact Analysisは変更差分と実行履歴からPRごとに必要なテストだけを選ぶ仕組みである。</p></blockquote>
<p>TIAは「listener」と「selector」の2コンポーネントで構成される。listenerはCI実行のたびにテスト結果を記録し、テストごとの実行履歴を蓄積する。selectorはその履歴とパッケージ依存関係から、そのPRの変更に関連するテストだけを選び出す。全テストを毎回流すのではなく、変更の影響範囲に絞ることで、テスト量が増え続けても実行時間を線形に増やさずに済む。エージェントが自己検証のために狭く焦点を絞ったテスト結果を受け取れる点も、<a href="https://kuucorp.com/blog/agent-goal-verifiable-completion-condition-design/">エージェントの完了判定設計</a>にそのまま効いてくる。</p>
<h2>なぜ一度の修正では収まらなかったのか</h2>
<blockquote class="answer-block"><p>延命パッチを3段階重ねた末に状態保持の限界が露呈し、ステートレス設計への刷新に至った。</p></blockquote>
<p>Anthropicは最初から再設計に踏み切ったわけではない。まずマシンのコア数を倍にする延命策を70日運用し、次にパッケージ単位でlistenerを並列化するシャーディングを29日続けた。それでも追いつかず、1日もたずにサービスを毎日再起動する運用に陥った段階で、アーキテクチャ自体に根本的な限界があると判断された。最終的な再設計では、listenerをステートレスなワーカー群にし、結果をジャーナルに追記するだけの役割に絞った。別のコンシューマーが数秒おきにジャーナルをテストごとの履歴へ集約することで、水平スケールが可能になった。この刷新はエンジニア1人・3週間で完了し、従来の四半期単位の対応より大幅に短縮された。</p>
<h2>自社のCI設計にどう活かすか</h2>
<blockquote class="answer-block"><p>設計時点で「2四半期以内に負荷25倍」を前提に置き、状態をクリティカルパスから排除すべきである。</p></blockquote>
<p>Anthropicの教訓は「v0設計の段階で2四半期以内の25倍成長を見込め」という点に集約される。状態を持つプロセスをクリティカルパスに置かないこと、サービスの挙動をAIによる監視が読み取れる形で計装しておくことの2点は、<a href="https://kuucorp.com/blog/agent-observability-tracing-instrumentation/">AIエージェントのトレース計装</a>の設計原則とも一致する。<a href="https://kuucorp.com/blog/agent-regression-test-golden-dataset/">ゴールデンデータセットによる回帰テスト設計</a>を既に運用しているチームは、その実行基盤がTIAのような差分ベースの選択に耐えられるかを早い段階で検証しておくとよい。</p>
<h3>規模別の留意点（SMB / エンタープライズ）</h3>
<p>SMBでは、テスト数が数百件規模のうちは全件実行で十分なことが多く、TIAのような専用基盤を自作する前に、まず<a href="https://kuucorp.com/services/ai-ops/">/services/ai-ops/</a>で現状のCI実行時間とボトルネックを可視化するところから始めるのが現実的だ。一方、複数チームでAIコーディングを本格運用し始めたエンタープライズでは、テスト量とCIジョブ数の成長曲線を四半期ごとに追跡し、Anthropicが経験した「延命パッチの繰り返し」に陥る前にステートレスな実行基盤へ移行する判断が要る。この規模の刷新は<a href="https://kuucorp.com/services/rde/">RDE</a>が伴走領域としている。</p>
<h2>参考</h2>
<ul>
<li>Anthropic「Agentic coding is straining CI. Here's how we scaled test impact analysis at Anthropic」 https://claude.com/blog/agentic-coding-is-straining-ci-heres-how-we-scaled-test-impact-analysis-at-anthropic</li>
<li>Anthropic「Demystifying evals for AI agents」 https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents</li>
</ul>
<h2>まとめ</h2>
<p>AIコーディングが本番コードの大半を書く体制に移行すると、ボトルネックはコード生成からCI実行そのものへ移る。Anthropicの事例が示すのは、延命パッチの積み重ねではなく、状態をクリティカルパスから排除したステートレス設計への刷新が最終的に最短距離だったという点だ。自社のCI基盤がこの成長曲線に耐えられるか診断したい場合は、<a href="https://kuucorp.com/services/ai-ops/">AI Ops</a>にお問い合わせいただきたい。</p>]]></content>
    <author><name>kuu-engineering</name></author>
    <category term="エージェント評価" />
    <category term="CI/CD" />
    <category term="回帰テスト" />
    <category term="可観測性" />
  </entry>
</feed>
