Files
state-hub/scripts/migrate_mcp_config.py
tegwick 398f458374 Rename MCP server identifier from state-hub to dev-hub
Introduce canonical MCP_SERVER_NAME constants, shared registration helpers,
and a migrate_mcp_config.py script for ~/.claude.json upgrades. Registration,
patch, and custodian CLI checks accept both dev-hub and legacy state-hub during
transition. API root metadata and session-protocol template reflect the new name.
2026-06-22 20:46:14 +02:00

51 lines
1.6 KiB
Python

#!/usr/bin/env python3
"""Rename legacy state-hub MCP registration to dev-hub in ~/.claude.json."""
from __future__ import annotations
import json
import shutil
from datetime import datetime, timezone
from pathlib import Path
from mcp_server.constants import LEGACY_MCP_SERVER_NAME, MCP_SERVER_NAME
CLAUDE_JSON = Path.home() / ".claude.json"
def migrate_config(config: dict) -> tuple[dict, bool]:
servers = config.setdefault("mcpServers", {})
if MCP_SERVER_NAME in servers:
return config, False
if LEGACY_MCP_SERVER_NAME not in servers:
return config, False
servers[MCP_SERVER_NAME] = servers.pop(LEGACY_MCP_SERVER_NAME)
return config, True
def main() -> None:
if not CLAUDE_JSON.exists():
print(f"ERROR: {CLAUDE_JSON} not found.")
raise SystemExit(1)
config = json.loads(CLAUDE_JSON.read_text())
migrated_config, changed = migrate_config(config)
if not changed:
if MCP_SERVER_NAME in config.get("mcpServers", {}):
print(f"OK: '{MCP_SERVER_NAME}' already registered.")
else:
print(
f"Nothing to migrate: neither '{LEGACY_MCP_SERVER_NAME}' nor "
f"'{MCP_SERVER_NAME}' found in mcpServers."
)
return
stamp = datetime.now(tz=timezone.utc).strftime("%Y%m%dT%H%M%SZ")
backup = CLAUDE_JSON.with_name(f".claude.json.bak-{stamp}")
shutil.copy2(CLAUDE_JSON, backup)
CLAUDE_JSON.write_text(json.dumps(migrated_config, indent=2) + "\n")
print(f"Backed up: {backup}")
print(f"Migrated: mcpServers['{LEGACY_MCP_SERVER_NAME}'] → mcpServers['{MCP_SERVER_NAME}']")
if __name__ == "__main__":
main()