Skip to content

原文(日本語に翻訳)

instructions を持つMCPサーバーが最初のターンの後に接続したときにプロンプトキャッシュが無効化される問題を修正しました。

原文(英語)

Fixed prompt-cache bust when an MCP server with instructions connects after the first turn

概要

MCP(Model Context Protocol)サーバーが instructions フィールドを持っている場合、会話の最初のターン後に接続すると、それまで蓄積されていたプロンプトキャッシュが無効化されていました。今回の修正により、MCPサーバーの接続タイミングに関わらずプロンプトキャッシュが適切に保持されるようになり、API呼び出しコストとレスポンス速度が改善されます。

基本的な使い方

bash
# MCPサーバーを設定している場合
# .claude/mcp.json や設定ファイルでMCPサーバーを定義

# 修正前: セッション開始後にMCPサーバーが接続されるとキャッシュが無効化
# 修正後: MCPサーバー接続後もキャッシュが適切に保持される

claude
> (会話を続けているとMCPサーバーが接続される場合も、キャッシュが維持される)

実践例

instructionsを持つMCPサーバーの設定例

json
// .claude/mcp.json
{
  "mcpServers": {
    "my-database-server": {
      "command": "node",
      "args": ["./mcp-server.js"],
      "instructions": "このサーバーはPostgreSQLデータベースへのアクセスを提供します。クエリを実行する前にスキーマを確認してください。"
    }
  }
}
bash
claude
# 修正後の動作:
# 1. セッション開始(キャッシュが構築される)
# 2. 最初のターン後にMCPサーバーが接続
# 3. instructionsを持つサーバーでもキャッシュが保持される
# 4. APIコストの削減とレスポンス速度の向上

遅延接続するMCPサーバーとのやり取り

bash
claude

> プロジェクトの概要を教えてください
# → 通常の応答(キャッシュ構築)

# バックグラウンドでMCPサーバーが接続完了...

> データベースのスキーマを確認してください
# 修正前: MCPサーバー接続でキャッシュが無効化され、再構築が必要
# 修正後: キャッシュが保持されたまま、MCPツールが使用可能になる

コスト削減の確認

bash
# claude --debug でキャッシュのヒット状況を確認
claude --debug

# キャッシュヒット時のログ例:
# cache_creation_input_tokens: 0  # キャッシュから読み込み
# cache_read_input_tokens: 5000   # キャッシュ済みトークンを再利用

注意点

  • この修正は instructions フィールドを定義しているMCPサーバーを使用している場合に効果があります
  • プロンプトキャッシュはClaude APIのコスト削減機能で、同じコンテキストの再利用でトークンコストを削減します
  • MCPサーバーの接続タイミングはネットワーク状況やサーバーの起動時間に依存します
  • 多数のMCPサーバーを使用している環境ほど、この修正による恩恵が大きくなります

関連情報