cat > README.md << 'EOF'
A cross-platform utility for managing Model Context Protocol (MCP) server configurations across Claude, Gemini, Codex, and other AI systems.
Based on the battle-tested mcp_toggle.py script with enhanced architecture and GUI interface.
The graphical interface is complete and working with all major features operational. The application provides a modern, user-friendly way to manage MCP servers without touching JSON files.
- π₯οΈ Graphical User Interface - Modern cross-platform GUI with PyQt6/tkinter
- π¨ Dual GUI Backend - PyQt6 for rich styling and tooltips, automatic fallback to tkinter if PyQt6 not available
- π Server Configuration Editor - Edit server configurations directly in the GUI
- π§ Field Editor System - Dynamic field editing with real-time validation
- π Project Discovery - Automatically discover MCP servers from project .claude.json files
- ποΈ Bulk Server Deletion - Delete multiple servers with confirmation dialog
- β Enhanced Server Addition - Add servers with improved JSON validation and cleanup
- πΎ Advanced Backup System - Organized backups in dedicated directory with GUI integration
- π¦ Quick Backup & Restore - One-click backup and restore from toolbar with file selection
- π Server Restore - Restore servers from backup files including disabled servers
- Interactive CLI Management - Full-featured interactive mode for server management
- Multi-Client Support - Manages
.claude.json,.gemini/settings.json, and Codex configuration files - Server Enable/Disable - Toggle servers on/off without losing configurations
- Master Checkbox - Bulk select/deselect all servers at once
- Configuration Syncing - Synchronize servers between Claude, Gemini, and Codex
- Automatic Backups - Timestamped backups before any changes
- Preset Management - Save and load project-specific configurations
- Quick Preset Modes - Minimal, web dev, fullstack, and testing presets
- JSON Server Addition - Add new servers by pasting JSON configurations
- Cross-Platform Support - Works on Windows, macOS, and Linux
- Command Line Interface - Full CLI with individual commands
- Configuration Validation - Validate config file structure
- Visual Status Indicators - Clear enabled/disabled status with colors
- Keyboard Shortcuts - Professional keyboard navigation (Ctrl+S to save, Esc to cancel)
- Visual Polish - Blue selection highlights, orange unsaved indicators, red validation errors
- Health Monitoring - Real-time server connection status
- Advanced Import/Export - Import/export presets and configurations between machines
One-command installation:
curl -fsSL https://raw.githubusercontent.com/holstein13/mcp-config-manager/master/install.sh | bashThe installer will:
- β Check system requirements automatically
- π Ask where to install (with smart defaults)
- π Set up isolated Python environment
- π Add
mcpcommand to your PATH - π₯οΈ Create desktop shortcuts (Linux)
- ποΈ Provide easy uninstall option
# Launch GUI (recommended)
mcp gui
# or use the alias
mcp-gui
# Interactive CLI mode
mcp interactive
# Check status
mcp status
# Show all options
mcp --help
# Uninstall easily
mcp uninstallClick to expand manual installation steps
- Python 3.8 or higher
- Claude Code CLI, Gemini CLI, and/or Codex installed
- PyQt6 (recommended but optional): Provides rich styling, tooltips, and better UX
- If not installed, app automatically falls back to tkinter (built into Python)
- Install with:
pip install PyQt6
git clone https://github.com/holstein13/mcp-config-manager.git
cd mcp-config-manager
pip install -e .
# Optional: Install PyQt6 for better GUI experience
pip install PyQt6# Set up development environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements-dev.txt
pip install -e .
# Run tests
pytestLaunch the graphical interface:
mcp-config-manager guiFor easier launching on macOS, you can create a native .app bundle that can be double-clicked, added to your Dock, or launched via Spotlight.
Due to macOS's externally-managed Python environment (PEP 668), you need to use a virtual environment:
# Create virtual environment
python3 -m venv venv
# Activate virtual environment
source venv/bin/activate
# Install build dependencies
pip install py2app
# Install the application in editable mode
pip install -e .
# Install PyQt6 for GUI support (if not already installed)
pip install PyQt6# Activate virtual environment (if not already active)
source venv/bin/activate
# Build the .app bundle (from project root)
./build_app.sh
# Or manually:
python3 scripts/build/setup_app.py py2app --dist-dir artifacts/dist
# Install to Applications folder
cp -r "artifacts/dist/MCP Config Manager.app" /Applications/The app will be created in artifacts/dist/MCP Config Manager.app. You can then:
- Double-click "MCP Config Manager.app" to launch
- Launch via Spotlight (β + Space, type "MCP Config Manager")
- Add it to your Dock for quick access
# Activate virtual environment
source venv/bin/activate
# Clean previous build artifacts
rm -rf build artifacts/dist
# Build the .app bundle
./build_app.sh
# Install to Applications folder
cp -r "artifacts/dist/MCP Config Manager.app" /Applications/If the build fails:
- Make sure you're in the virtual environment (
source venv/bin/activate) - Check that all dependencies are installed (
pip list) - Clean build artifacts and try again (
rm -rf build artifacts/dist)
If the app crashes on launch:
- Run from terminal to see error messages:
/Applications/MCP\ Config\ Manager.app/Contents/MacOS/MCP\ Config\ Manager
Note: The .app bundle is completely self-contained with Python and all dependencies bundled. It works independently of your virtual environment once built.
The GUI provides:
- π₯οΈ Visual server list with checkboxes
- β Master checkbox for bulk operations (β/β/β states)
- π Server Detail Editor - Click any server to edit its configuration
- π§ Dynamic Field Editors - Smart editors for each field type:
- Text fields for strings and commands
- Number fields with validation
- Boolean toggles for true/false values
- Array editors for list management
- Object editors for nested configurations
- π Project Discovery:
- Discover button scans for project .claude.json files
- Automatically finds MCP servers in your projects
- Smart duplicate detection and consolidation
- Location-aware server management (Global vs Project)
- β Real-time Validation - Immediate feedback on configuration errors
- π¨ Visual Feedback:
- Blue highlights for selected servers
- Orange indicators for unsaved changes
- Red borders for validation errors
- Empty state guidance when no server selected
- πΎ Backup & Restore:
- Backup button creates timestamped backups
- Restore button lists and restores previous backups
- Automatic backups before any changes
- π Mode switching between Claude/Gemini/Codex/All
- πΎ Save button with visual feedback
- β Add new servers via JSON with enhanced validation
- ποΈ Bulk delete servers with confirmation
- πΎ Quick backup and restore with GUI feedback
- π Preset management dialog
- β¨οΈ Full keyboard shortcuts (Ctrl+S to save, Esc to cancel)
Launch the command-line interactive interface:
mcp-config-manager interactiveThis gives you the complete interface from the original mcp_toggle.py script with:
- β /β Visual server status
- π Real-time mode switching (Claude/Gemini/Codex/All)
- π Preset management
- β Add servers by pasting JSON
- π― Quick preset modes (minimal, web dev, etc.)
# Show current status
mcp-config-manager status
# Enable/disable specific servers
mcp-config-manager enable server-name
mcp-config-manager disable server-name
# Bulk operations
mcp-config-manager enable-all
mcp-config-manager disable-all
# Backup and restore
mcp-config-manager backup # Create timestamped backup
mcp-config-manager restore backup-file.json # Restore from backup
# Server management
mcp-config-manager add-server server-name config.json # Add server from file
mcp-config-manager delete-server server-name # Delete server permanently
# Apply preset modes
mcp-config-manager preset minimal # Only context7 + browsermcp
mcp-config-manager preset webdev # + playwright
mcp-config-manager preset fullstack # + supabase, clerk, railway
# Validate configurations
mcp-config-manager validate ~/.claude.jsonThe tool supports four modes:
- Claude only (
--mode claude) - Only manages.claude.json - Gemini only (
--mode gemini) - Only manages.gemini/settings.json - Codex only (
--mode codex) - Only manages Codex configurations - All (synced) (
--mode all) - Keeps all configs synchronized
The MCP Config Manager GUI showing server configuration editing with visual feedback
π§ MCP Config Manager - Interactive Mode
==================================================
π Current Status:
------------------------------
Mode: π All CLIs (synced)
β
ACTIVE servers (will run):
[1] context7
[2] browsermcp
[3] playwright
β DISABLED servers (won't run):
[d1] supabase
[d2] clerk
π Actions:
[1-N] Disable active server
[d1-N] Enable disabled server
[a] Enable ALL
[n] Disable ALL
[m] Minimal (context7 + browsermcp)
[w] Web dev (+ playwright)
[+] β Add new MCP server
[p] π Preset management
[c] π Change CLI mode
[s] Save and exit
[q] Quit without saving
Action:
src/mcp_config_manager/
βββ core/
β βββ config_manager.py # Main configuration management
β βββ server_manager.py # Server enable/disable logic
β βββ presets.py # Preset management
βββ parsers/
β βββ claude_parser.py # Claude config parsing
β βββ gemini_parser.py # Gemini config parsing
β βββ base_parser.py # Parser interface
βββ utils/
β βββ backup.py # Backup functionality
β βββ sync.py # Config synchronization
β βββ file_utils.py # File path utilities
βββ gui/ # GUI components
β βββ main_window.py # Main application window
β βββ controllers/ # GUI-library bridge
β β βββ server_controller.py
β βββ widgets/ # UI components
β β βββ server_list.py
β β βββ server_details_panel.py
β β βββ field_editors/ # Dynamic field editors
β β βββ base.py
β β βββ text.py
β β βββ number.py
β β βββ boolean.py
β β βββ array.py
β β βββ object.py
β βββ dialogs/ # Modal dialogs
βββ cli.py # Command line interface
The field editor system provides dynamic, type-specific editors for server configuration fields:
- Base Editor (
field_editors/base.py): Abstract base class defining the interface - Type-Specific Editors: Specialized editors for each data type
- Factory Pattern:
FieldEditorFactorycreates appropriate editor based on field type - Validation: Real-time validation with visual feedback
- Text Editor - Single/multi-line text fields for strings and commands
- Number Editor - Integer/float fields with min/max validation
- Boolean Editor - Checkbox for true/false values
- Array Editor - List management with add/remove/reorder capabilities
- Object Editor - Nested object editing with key-value pairs
- Orange Border - Field has been modified (unsaved changes)
- Red Border - Validation error with 2px width
- Light Red Background - Additional error indication (#FFF5F5)
- Tooltip - Error message on hover for invalid fields
# The ServerDetailsPanel automatically creates appropriate editors
field_editor = FieldEditorFactory.create_editor(
field_name="command",
field_value="npx @modelcontextprotocol/server-sqlite",
field_type="string",
parent=self
)
# Connect signals for change tracking
field_editor.value_changed.connect(self.on_field_changed)
field_editor.validation_error.connect(self.on_validation_error)The following new functions have been added across recent commits:
create_backup()- Create timestamped backups and return GUI-compatible resultsadd_server()- Add a server with the interface expected by ServerController- Enhanced error handling - Improved error reporting for GUI integration
add_server_with_name()- Add server with explicit name and configurationdelete_server()- Permanently delete servers from configurations and storageupdate_server_config()- Update existing server configurations- Enhanced mode support - Better handling of 'claude', 'gemini', 'codex', 'all' modes
backup_all_configs()- Create organized backups in dedicated directorylist_backups()- List available backup files by typerestore_backup()- Restore configurations from backup files- Organized storage - Backups now stored in dedicated
backups/directory
add_server()- GUI integration for server additiondelete_servers()- Bulk deletion with confirmation dialog- Enhanced event handling - Better signal/slot management for GUI updates
DeleteServersDialog- Bulk deletion with safety confirmations- Enhanced
AddServerDialog- JSON validation and cleanup features BackupRestoreDialog- GUI for backup and restore operations
- JSON cleanup - Remove comments and fix malformed JSON in AddServerDialog
- Enhanced validation - Better error reporting for invalid JSON configurations
- Batch processing - Support for adding multiple servers from single JSON input
# Clone the repository
git clone https://github.com/holstein13/mcp-config-manager
cd mcp-config-manager
# Set up development environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements-dev.txt
pip install -e .
# Run tests
pytest
# Run the application
mcp-config-manager interactive- Claude config:
~/.claude.json - Gemini config:
~/.gemini/settings.json - Codex config:
~/.codex.json - Presets:
~/.mcp_presets.json - Disabled servers:
~/.mcp_disabled_servers.json(in user's home directory) - Organized backups:
~/Documents/MCP Config Manager/backups/with timestamped files:claude-backup-YYYYMMDD_HHMMSS.jsongemini-backup-YYYYMMDD_HHMMSS.jsondisabled-backup-YYYYMMDD_HHMMSS.json
- Legacy backups:
~/.claude.json.backup.YYYYMMDD_HHMMSS
- Interactive CLI interface
- Multi-client support (Claude + Gemini)
- Server enable/disable with storage
- Configuration synchronization
- Automatic backups
- Preset management
- JSON server addition
- Command line interface
- Cross-platform GUI framework (PyQt6/tkinter)
- Main server management window with checkboxes
- Master checkbox for bulk operations
- Preset management dialog
- Settings and configuration dialogs
- Add server via JSON paste
- Keyboard shortcuts and professional UX
- Visual status indicators and feedback
Current focus:
- β macOS platform testing and optimization
- β³ Windows platform testing
- β³ Linux platform testing
- β³ Performance optimization for large server lists
- β³ PyInstaller packaging
Completed:
- β Server Detail View - Click server name to edit configuration in side panel
- β Field Editors - Visual editors for each configuration field type
- β Real-time Validation - Immediate feedback on configuration changes
Next features:
- Health Monitoring - Real-time server connection status
- Import/Export - Backup and restore configurations
- Packaged installers (Windows MSI, macOS DMG, Linux AppImage)
- Auto-updater mechanism
- Plugin architecture for extensions
- IDE integrations (VS Code, IntelliJ, etc.)
If you're using the original mcp_toggle.py script:
- Your configs are preserved - The tool uses the same file locations
- Your presets carry over -
~/.mcp_presets.jsonis used directly - Same functionality - All original features are available in interactive mode
- Enhanced capabilities - Plus new CLI commands and better error handling
We welcome contributions! The original mcp_toggle.py script was a fantastic foundation, and we're building on that success.
- π¨ GUI Development - Help build the cross-platform interface
- π Server Discovery - Auto-detect available MCP servers
- π§ͺ Testing - Add test coverage for all components
- π Documentation - Improve guides and examples
- π Bug Reports - Found an issue? Let us know!
MIT License - see LICENSE file for details.
- Original
mcp_toggle.pyscript that inspired this project - The Anthropic team for developing the Model Context Protocol
- The open source community for feedback and contributions
Ready to get started? Run mcp-config-manager interactive and experience the full power of MCP server management!
