Skip to content

原文(日本語に翻訳)

stdio MCP サーバーが --resume 時にフック / Bash と同じ CLAUDE_CODE_SESSION_ID を受け取れるようになりました。

原文(英語)

stdio MCP servers now receive the same CLAUDE_CODE_SESSION_ID as hooks/Bash on --resume

概要

claude --resume でセッションを再開する際、stdio MCP サーバーもフックや Bash コマンドと同じ CLAUDE_CODE_SESSION_ID 環境変数を受け取れるようになりました。これにより MCP サーバーがセッションを一意に識別し、セッション再開前後で状態を追跡・引き継ぐことができます。

基本的な使い方

stdio MCP サーバーの実装内で環境変数 CLAUDE_CODE_SESSION_ID を参照できます:

python
import os

session_id = os.environ.get("CLAUDE_CODE_SESSION_ID")
if session_id:
    print(f"Claude Code セッション ID: {session_id}")
    # セッション ID に基づいてセッション固有の状態を管理

実践例

セッション再開時にキャッシュを引き継ぐ MCP サーバー

python
import os
import json

SESSION_CACHE = {}

def get_session_cache():
    session_id = os.environ.get("CLAUDE_CODE_SESSION_ID")
    if not session_id:
        return {}
    return SESSION_CACHE.get(session_id, {})

def save_to_session_cache(key, value):
    session_id = os.environ.get("CLAUDE_CODE_SESSION_ID")
    if session_id:
        if session_id not in SESSION_CACHE:
            SESSION_CACHE[session_id] = {}
        SESSION_CACHE[session_id][key] = value

# セッション再開後も同じ session_id が渡されるため、
# キャッシュの内容を再利用できる

セッション ID でログを整理する MCP サーバー

typescript
import { env } from "process";

const sessionId = env.CLAUDE_CODE_SESSION_ID ?? "unknown";

function log(message: string) {
  console.error(`[session:${sessionId.slice(0, 8)}] ${message}`);
}

// --resume 後も同じセッション ID でログが記録される

フックとの連携でセッション状態を共有

--resume 実行時、フック・Bash・stdio MCP サーバーすべてが同じ CLAUDE_CODE_SESSION_ID を受け取ります。これを利用してセッション間で状態を共有できます:

bash
# hooks/pre_tool_use.sh(フック側)
echo "Session: $CLAUDE_CODE_SESSION_ID" >> /tmp/session-log.txt
python
# MCP サーバー側(同じセッション ID で参照可能)
import os
session_id = os.environ.get("CLAUDE_CODE_SESSION_ID")
# フックが書き込んだログを同じセッション ID で読み取れる

注意点

  • この変更は stdio MCP サーバー(標準入出力で通信するサーバー)に適用されます。HTTP ベースの MCP サーバーには影響しません。
  • CLAUDE_CODE_SESSION_ID--resume での再開時に 同じ値 が渡されます。セッションをまたいで状態を引き継ぐ際に一意のキーとして使用できます。
  • 新規セッション開始時と --resume 時で同じ ID が使われるため、MCP サーバー側でセッションの連続性を判断できます。

関連情報