diff --git a/claude-code/hooks/unbound.py b/claude-code/hooks/unbound.py index 8117e73..d62dbe1 100644 --- a/claude-code/hooks/unbound.py +++ b/claude-code/hooks/unbound.py @@ -919,34 +919,36 @@ def _resolve_claude_code_session_connector(server_uuid: str) -> Optional[tuple]: if not _is_uuid(server_uuid): return None try: - files = [] + latest = None + latest_ts = -1.0 for base in _claude_session_dirs(): if not base or not base.exists(): continue try: - files.extend(base.glob('**/local_*.json')) + candidates = base.glob('*/*/local_*.json') except Exception: continue - if not files: + for f in candidates: + ts = _session_file_created_at(f) + if ts > latest_ts: + latest_ts, latest = ts, f + if latest is None: return None - - files.sort(key=_session_file_created_at, reverse=True) - for f in files: - try: - data = json.loads(f.read_text(encoding='utf-8')) - except Exception: - continue - for entry in (data.get('remoteMcpServersConfig') or []): - if isinstance(entry, dict) and (entry.get('uuid') or '').lower() == server_uuid.lower(): - name = entry.get('name') - if not name: - continue - cfg = {"additional_data": {"scope": "claude-connector"}} - url = entry.get('url') - if url: - cfg["url"] = url - cfg["type"] = "http" - return (name, cfg) + try: + data = json.loads(latest.read_text(encoding='utf-8')) + except Exception: + return None + for entry in (data.get('remoteMcpServersConfig') or []): + if isinstance(entry, dict) and (entry.get('uuid') or '').lower() == server_uuid.lower(): + name = entry.get('name') + if not name: + continue + cfg = {"additional_data": {"scope": "claude-connector"}} + url = entry.get('url') + if url: + cfg["url"] = url + cfg["type"] = "http" + return (name, cfg) return None except Exception as exc: log_error(f"mcp cc-session resolve error: {server_uuid}: {exc}", 'mcp_connector')