原文(日本語に翻訳)
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.txtpython
# 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 サーバー側でセッションの連続性を判断できます。