generated from coulomb/repo-seed
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.
51 lines
1.6 KiB
Python
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() |