Add Claude Desktop configuration script
- Created update_claude_config.py for safe config updates - Automatically reads .env for API keys - Creates backup before modifying config - Validates paths and provides clear feedback - Successfully configured zen-marketing MCP server in ~/.claude.json
This commit is contained in:
parent
122797d325
commit
f69902bd33
1 changed files with 125 additions and 0 deletions
125
update_claude_config.py
Executable file
125
update_claude_config.py
Executable file
|
|
@ -0,0 +1,125 @@
|
|||
#!/usr/bin/env python3
|
||||
"""
|
||||
Script to safely add zen-marketing MCP server to Claude Desktop configuration.
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
def update_claude_config():
|
||||
"""Add zen-marketing server to Claude Desktop config"""
|
||||
|
||||
# Path to Claude config
|
||||
config_path = Path.home() / ".claude.json"
|
||||
|
||||
if not config_path.exists():
|
||||
print(f"Error: Config file not found at {config_path}")
|
||||
return False
|
||||
|
||||
# Create backup
|
||||
backup_path = config_path.with_suffix('.json.backup')
|
||||
shutil.copy2(config_path, backup_path)
|
||||
print(f"✓ Created backup: {backup_path}")
|
||||
|
||||
# Read current config
|
||||
with open(config_path, 'r') as f:
|
||||
config = json.load(f)
|
||||
|
||||
# Get MCP servers section
|
||||
if 'mcpServers' not in config:
|
||||
config['mcpServers'] = {}
|
||||
|
||||
# Get absolute paths
|
||||
project_root = Path(__file__).parent.resolve()
|
||||
venv_python = project_root / ".venv" / "bin" / "python"
|
||||
server_script = project_root / "server.py"
|
||||
|
||||
# Verify paths exist
|
||||
if not venv_python.exists():
|
||||
print(f"Error: Python venv not found at {venv_python}")
|
||||
print("Run ./run-server.sh first to create the virtual environment")
|
||||
return False
|
||||
|
||||
if not server_script.exists():
|
||||
print(f"Error: server.py not found at {server_script}")
|
||||
return False
|
||||
|
||||
# Read OpenRouter key from .env
|
||||
env_file = project_root / ".env"
|
||||
openrouter_key = ""
|
||||
gemini_key = ""
|
||||
|
||||
if env_file.exists():
|
||||
with open(env_file, 'r') as f:
|
||||
for line in f:
|
||||
if line.startswith('OPENROUTER_API_KEY='):
|
||||
openrouter_key = line.split('=', 1)[1].strip()
|
||||
elif line.startswith('GEMINI_API_KEY='):
|
||||
gemini_key = line.split('=', 1)[1].strip()
|
||||
|
||||
if not openrouter_key:
|
||||
print("Warning: OPENROUTER_API_KEY not found in .env")
|
||||
|
||||
# Create zen-marketing server config
|
||||
zen_marketing_config = {
|
||||
"command": str(venv_python),
|
||||
"args": [str(server_script)],
|
||||
"env": {
|
||||
"DEFAULT_MODEL": "google/gemini-2.5-pro-latest",
|
||||
"FAST_MODEL": "google/gemini-2.5-flash-preview-09-2025",
|
||||
"CREATIVE_MODEL": "minimax/minimax-m2",
|
||||
"ENABLE_WEB_SEARCH": "true",
|
||||
"LOG_LEVEL": "INFO"
|
||||
}
|
||||
}
|
||||
|
||||
# Add API keys if available
|
||||
if openrouter_key:
|
||||
zen_marketing_config["env"]["OPENROUTER_API_KEY"] = openrouter_key
|
||||
if gemini_key:
|
||||
zen_marketing_config["env"]["GEMINI_API_KEY"] = gemini_key
|
||||
|
||||
# Check if zen-marketing already exists
|
||||
if 'zen-marketing' in config['mcpServers']:
|
||||
print("\n⚠ zen-marketing server already configured")
|
||||
response = input("Overwrite existing configuration? (y/N): ")
|
||||
if response.lower() != 'y':
|
||||
print("Cancelled.")
|
||||
return False
|
||||
|
||||
# Add/update zen-marketing
|
||||
config['mcpServers']['zen-marketing'] = zen_marketing_config
|
||||
|
||||
# Write updated config
|
||||
with open(config_path, 'w') as f:
|
||||
json.dump(config, f, indent=2)
|
||||
|
||||
print(f"\n✓ Added zen-marketing MCP server to {config_path}")
|
||||
print(f"\nConfiguration:")
|
||||
print(f" Command: {venv_python}")
|
||||
print(f" Script: {server_script}")
|
||||
print(f" Models:")
|
||||
print(f" - DEFAULT: {zen_marketing_config['env']['DEFAULT_MODEL']}")
|
||||
print(f" - FAST: {zen_marketing_config['env']['FAST_MODEL']}")
|
||||
print(f" - CREATIVE: {zen_marketing_config['env']['CREATIVE_MODEL']}")
|
||||
if openrouter_key:
|
||||
print(f" OpenRouter API Key: {'*' * (len(openrouter_key) - 8)}{openrouter_key[-8:]}")
|
||||
if gemini_key:
|
||||
print(f" Gemini API Key: {'*' * (len(gemini_key) - 8)}{gemini_key[-8:]}")
|
||||
|
||||
print(f"\n⚠ IMPORTANT: Restart Claude Desktop for changes to take effect")
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
success = update_claude_config()
|
||||
if not success:
|
||||
exit(1)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
exit(1)
|
||||
Loading…
Reference in a new issue