Skip to main content

MCP Manager

CI License: MIT Python 3.10+

Universal MCP Server Manager — add, remove, monitor, and configure all your MCP servers from one place.

Features

  • 7 harnesses — OpenCode, Claude Desktop, Cursor, Windsurf, Cline, Zed, Continue.dev
  • 23 tools — server management, health checks, token rotation, cross-harness sync
  • 20+ server catalog — GitHub, Supabase, Playwright, Docker, PostgreSQL, and more
  • Encrypted tokens — Fernet AES-128-CBC with PBKDF2 key derivation
  • Cross-harness sync — migrate servers between different AI coding tools

Quick Start

git clone https://github.com/kobramantra-debug/mcp-manager-mcp-manage.git
cd mcp-manager-mcp-manage
pip install -e .

Installation

From source

git clone https://github.com/kobramantra-debug/mcp-manager-mcp-manage.git
cd mcp-manager-mcp-manage
pip install -e .

Docker

docker build -t mcp-manager .

Configuration

Environment Variables

Variable Default Description
MCP_HARNESS opencode Active harness to manage
MCP_CONFIG_PATH (auto-detected) Override config file path
MCP_MANAGER_MASTER_PASSWORD (none) Master password for Fernet encryption

OpenCode

Add to ~/.config/opencode/opencode.json:

{
  "mcp": {
    "mcp-manager": {
      "type": "local",
      "command": ["python", "-m", "src"],
      "cwd": "/path/to/mcp-manager",
      "enabled": true
    }
  }
}

Claude Desktop

Add to %APPDATA%/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "mcp-manager": {
      "command": "python",
      "args": ["-m", "src"],
      "cwd": "/path/to/mcp-manager"
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "mcp-manager": {
      "command": "python",
      "args": ["-m", "src"],
      "cwd": "/path/to/mcp-manager"
    }
  }
}

Docker (STDIO)

{
  "mcp": {
    "mcp-manager": {
      "type": "docker",
      "command": ["docker", "run", "-i", "--rm", "mcp-manager"],
      "enabled": true
    }
  }
}

Examples

1. List all harnesses and see which are installed

list_harnesses_info()
{
  "harnesses": [
    {"id": "opencode", "name": "OpenCode", "installed": true, "is_active": true},
    {"id": "claude-desktop", "name": "Claude Desktop", "installed": true, "is_active": false},
    {"id": "cursor", "name": "Cursor", "installed": false, "is_active": false},
    {"id": "windsurf", "name": "Windsurf", "installed": false, "is_active": false},
    {"id": "cline", "name": "Cline", "installed": false, "is_active": false},
    {"id": "zed", "name": "Zed", "installed": false, "is_active": false},
    {"id": "continue", "name": "Continue.dev", "installed": false, "is_active": false}
  ],
  "active": "opencode",
  "installed_count": 2
}

2. Switch to Claude Desktop and list its servers

switch_harness("claude-desktop")
list_servers()
{
  "harness": "Claude Desktop",
  "servers": [
    {"name": "github", "enabled": true, "type": "docker"},
    {"name": "playwright", "enabled": true, "type": "npx"}
  ],
  "count": 2
}

3. Add GitHub MCP server from the catalog

add_from_catalog("github")
{
  "success": true,
  "action": "added",
  "server": "github",
  "harness": "OpenCode",
  "catalog_entry": "github",
  "config": {
    "type": "docker",
    "command": ["docker", "run", "-i", "--rm", "-e", "GITHUB_TOKEN={env:GITHUB_TOKEN}", "ghcr.io/github/github-mcp-server"],
    "enabled": true
  }
}

4. Add a custom remote server

add_server(
    name="my-api",
    server_type="remote",
    url="https://api.example.com/mcp",
    env_vars="API_KEY=sk-123,BASE_URL=https://api.example.com"
)
{
  "success": true,
  "action": "added",
  "server": "my-api",
  "config": {
    "type": "remote",
    "url": "https://api.example.com/mcp",
    "environment": {"API_KEY": "sk-123", "BASE_URL": "https://api.example.com"},
    "enabled": true
  }
}

5. Run health check on all servers

health_check()
{
  "harness": "opencode",
  "summary": {"total": 3, "healthy": 2, "unhealthy": 1, "unknown": 0, "timeout": 0},
  "results": {
    "github": {"status": "healthy", "message": "Server: github-mcp-server", "latency_ms": 1250.3},
    "playwright": {"status": "healthy", "message": "Server: playwright", "latency_ms": 890.1},
    "my-api": {"status": "unhealthy", "message": "No response (exit 1)", "latency_ms": 5000.0}
  }
}

6. Sync all servers from OpenCode to Cursor

sync_to_harness("cursor")
{
  "success": true,
  "source": "OpenCode",
  "target": "Cursor",
  "servers_synced": 3,
  "added": 3,
  "updated": 0
}

7. Rotate a token with expiration

rotate_token("github", "ghp_new_token_abc123", expires_at="2026-12-31")
{
  "success": true,
  "action": "token_rotated",
  "server": "github",
  "preview": "ghp_***abc123",
  "expires_at": "2026-12-31"
}

8. Search the server catalog

search_catalog("database")
{
  "results": [
    {"id": "postgres", "name": "PostgreSQL", "description": "PostgreSQL database server", "category": "database"},
    {"id": "sqlite", "name": "SQLite", "description": "SQLite database server", "category": "database"}
  ],
  "count": 2
}

9. Export config for a different harness

export_for_harness("claude-desktop")
{
  "source_harness": "opencode",
  "target_harness": "claude-desktop",
  "config": {
    "mcpServers": {
      "github": {"command": "docker", "args": ["run", "-i", "--rm", "ghcr.io/github/github-mcp-server"]},
      "playwright": {"command": "npx", "args": ["-y", "@anthropic/playwright-mcp"]}
    }
  },
  "note": "Import this JSON into Claude Desktop"
}

10. List all stored tokens (safe — previews only)

list_all_tokens()
{
  "tokens": {
    "github": {"token_preview": "ghp_***abc123", "storage_backend": "encrypted_sqlite"},
    "supabase": {"token_preview": "sb-***xyz789", "storage_backend": "encrypted_sqlite"}
  },
  "count": 2
}

Tools Reference

Harness Management

Tool Description
list_harnesses_info List all harnesses and installation status
switch_harness Switch active harness
get_active_harness Get current harness info

Server Management

Tool Description
list_servers List configured servers
add_server Add a new server
remove_server Remove a server
get_server_detail Get server details
enable_server Enable a disabled server
disable_server Disable a server

Health & Monitoring

Tool Description
test_connection Test a single server
health_check Test all servers
get_logs Get health check history

Token Management

Tool Description
rotate_token Update API token
retrieve_token Get decrypted token (use with caution)
list_all_tokens List stored tokens (previews only)
get_token_history Get rotation history
list_token_backends Show encryption status

Export / Import / Sync

Tool Description
export_config Export config as JSON
import_config Import config from JSON
export_for_harness Export in another harness format
sync_to_harness Sync servers to another harness

Catalog

Tool Description
search_catalog Search server catalog
add_from_catalog Add server from catalog

Supported Harnesses

Harness Config Path Format
OpenCode ~/.config/opencode/opencode.json mcp (keyed object)
Claude Desktop %APPDATA%/Claude/claude_desktop_config.json mcpServers (keyed object)
Cursor ~/.cursor/mcp.json mcpServers (keyed object)
Windsurf ~/.codeium/windsurf/mcp_config.json mcpServers (keyed object)
Cline %APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json mcpServers (keyed object)
Zed %APPDATA%/Zed/settings.json context_servers (nested object)
Continue.dev ~/.continue/config.json mcpServers (array)

Server Catalog

Server Type Description
github docker GitHub MCP Server
supabase npx Supabase MCP Server
playwright npx Playwright browser automation
chrome-devtools npx Chrome DevTools Protocol
context7 npx Context7 documentation lookup
filesystem local Filesystem access
git local Git operations
postgres npx PostgreSQL database
sqlite npx SQLite database
docker local Docker management
brave-search npx Brave Search API
fetch npx HTTP fetch tool
memory local Knowledge graph memory
slack npx Slack workspace integration
gdrive npx Google Drive access
google-maps npx Google Maps API
puppeteer npx Puppeteer browser automation
everything npx Universal search
stitch npx Stitch UI design

Token Security

Tokens are stored in an encrypted SQLite database using Fernet (AES-128-CBC).

Set MCP_MANAGER_MASTER_PASSWORD to enable encryption:

# Linux/macOS
export MCP_MANAGER_MASTER_PASSWORD="your-secure-password"

# Windows
set MCP_MANAGER_MASTER_PASSWORD=your-secure-password

Without a master password, tokens are stored in plaintext (not recommended for production).

License

MIT License — see LICENSE for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_manager_universal-0.1.0.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_manager_universal-0.1.0-py3-none-any.whl (24.8 kB view details)

Uploaded Python 3

File details

Details for the file mcp_manager_universal-0.1.0.tar.gz.

File metadata

  • Download URL: mcp_manager_universal-0.1.0.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for mcp_manager_universal-0.1.0.tar.gz
Algorithm Hash digest
SHA256 898bc2d71f7061159aac6d8ee1278afa4a5dcff0fddead8e60adf7a85e99da65
MD5 29ffbb692f50e88f3b60bf2867134b0b
BLAKE2b-256 22e665bb266b8c3c2eb67d00cae534fd1231788d91f875df4a1a3bb9592ee49e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_manager_universal-0.1.0.tar.gz:

Publisher: publish.yml on kobramantra-debug/mcp-manager-mcp-manage

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcp_manager_universal-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_manager_universal-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9e07568c703c0bd9d20b7f2fae9a1ee97aaad817188eef2eceec92b2d923703a
MD5 bb6d99b98a97a21b1fbd9a1116705298
BLAKE2b-256 1a4f7997ad75ea24fb7fe6ac5ee3539dda2b25963c7406e20ff4d8dcaebfca8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_manager_universal-0.1.0-py3-none-any.whl:

Publisher: publish.yml on kobramantra-debug/mcp-manager-mcp-manage

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page