Skip to main content

A unified CLI and daemon/service to manage and proxy multiple MCP servers, with robust logging and a modern CLI UX.

Project description

MCP Manager CLI

A unified CLI and daemon/service to manage and proxy multiple MCP servers, with robust logging and a modern CLI UX.

โšก Powered by CloudThinker - The Future of Cloud Operations

Table of Contents

Features

  • Daemon/Service Architecture: Background FastAPI HTTP server for robust, multi-process management.
  • Unified CLI: Interactive CLI for all management and tool operations.
  • Server Management: Start, stop, and monitor multiple MCP servers defined in a config file.
  • SSE Support: Built-in /sse, /messages/, and /mcp-server-name/sse endpoints for real-time communication with individual servers.
  • CloudThinker Integration: Seamlessly connect with CloudThinker AI Agents for intelligent cloud operations.
  • All runtime and config files are stored in the .cache/ directory for easy management and cleanup.

Architecture Overview

flowchart TD
    classDef user fill:#e0f7fa,stroke:#00796b,stroke-width:2px;
    classDef daemon fill:#fff3e0,stroke:#f57c00,stroke-width:2px;
    classDef process fill:#e8f5e9,stroke:#388e3c,stroke-width:2px;

    subgraph User
        CLI["๐Ÿ‘ค CLI (mcp-manager)"]:::user
        OtherClient["๐Ÿ‘ค Other MCP Client (SSE/WebSocket)"]:::user
    end

    subgraph "MCP Manager Daemon (FastAPI)"
        APIServer["๐Ÿ–ฅ๏ธ API Server (FastAPI)"]:::daemon
        ServerManager["๐Ÿ—„๏ธ ServerManager"]:::daemon
        Config["๐Ÿ“ Config (.cache/mcp_config.json)"]:::daemon
    end

    subgraph "Managed MCP Servers"
        MCPServer1["โš™๏ธ MCP Server 1 (Stdio Process)"]:::process
        MCPServer2["โš™๏ธ MCP Server 2 (Stdio Process)"]:::process
        MCPServerN["..."]:::process
    end

    CLI -- "HTTP" --> APIServer
    OtherClient -- "SSE" --> APIServer
    APIServer -- "Reads/writes" --> Config
    APIServer -- "Manages via" --> ServerManager
    ServerManager -- "Spawns & manages via stdio/stdout" --> MCPServer1
    ServerManager -- "Spawns & manages via stdio/stdout" --> MCPServer2
    ServerManager -- "Spawns & manages via stdio/stdout" --> MCPServerN

Installation

Quick install from PyPI:

pip install mcp-manager-cli

Or, to install from source:

  1. Clone the repo:
    git clone <repo-url>
    cd mcp-manager
    
  2. Install uv (recommended for Python environments).
  3. Create and activate a virtual environment:
    uv venv .venv
    source .venv/bin/activate
    
  4. Install dependencies:
    uv pip install -e .
    

Run with Docker

You can run MCP Manager CLI using Docker. This is the easiest way to get started without installing Python or dependencies on your system.

Basic Docker Usage

Using Docker Compose

  1. Make sure you have Docker and Docker Compose installed.
  2. Use the provided docker-compose.yml (already configured):
    docker-compose up -d
    
    This will pull and run the image khaitrinhxuan/mcp-manager-cli:latest and expose port 4123.
  3. The .cache directory will be used for configuration and runtime files, and is mounted for persistence.

Using Docker CLI directly

You can also run the container directly:

docker run -d \
  --name mcp-manager \
  -p 4123:4123 \
  -v $(pwd)/.cache:/app/.cache \
  khaitrinhxuan/mcp-manager-cli:latest

Using Docker CLI with Docker Socket

docker run -d \
  --name mcp-manager \
  -p 4123:4123 \
  -v $(pwd)/.cache:/app/.cache \
  -v /var/run/docker.sock:/var/run/docker.sock \
  khaitrinhxuan/mcp-manager-cli:latest

When to Use Docker Socket Mounting

Mount the Docker socket when your MCP servers need to:

  • ๐Ÿณ Build Docker images - For development workflows
  • ๐Ÿš€ Run containers - For testing or deployment automation
  • ๐Ÿ” Inspect Docker state - For monitoring or management tools
  • ๐Ÿ› ๏ธ Docker-based development tools - IDEs, linters, or build systems

AWS Support Inside Container

The Docker image includes AWS CLI v2 for MCP servers that need AWS integration. Configure AWS access by mounting credentials or using environment variables.

Using AWS Credentials File (Recommended)

Mount your AWS credentials directory to provide access to profiles, SSO sessions, and configurations:

# With AWS credentials and Docker access
docker run -d -p 4123:4123 \
  -v $(pwd)/.cache:/app/.cache \
  -v ~/.aws:/root/.aws \
  -v /var/run/docker.sock:/var/run/docker.sock \
  khaitrinhxuan/mcp-manager-cli:latest

Using Environment Variables

# With AWS environment variables
docker run -d -p 4123:4123 \
  -v $(pwd)/.cache:/app/.cache \
  -e AWS_ACCESS_KEY_ID=your-access-key \
  -e AWS_SECRET_ACCESS_KEY=your-secret-key \
  -e AWS_DEFAULT_REGION=us-east-1 \
  -e AWS_PROFILE=your-sso-profile \
  khaitrinhxuan/mcp-manager-cli:latest

Example AWS MCP Server Configuration

Add this to your .cache/mcp_config.json:

{
  "mcpServers": {
    "aws-cli-mcp-server": {
      "command": "uvx",
      "args": [
        "aws-cli-mcp-server"
      ],
      "env": {
        "AWS_PROFILE": "your-sso-profile"
      },
      "auto_start": true
    }
  }
}
  • The API server will be available on http://localhost:4123
  • All config and runtime files are stored in .cache/ on your host.

Configuration

Define MCP servers in .cache/mcp_config.json:

{
  "mcpServers": {
    "hackernews": {
      "command": "uvx",
      "args": [
        "mcp-hn"
      ],
      "auto_start": true
    }
  }
}
  • auto_start: If true, the server starts automatically with the daemon.
  • After editing .cache/mcp_config.json, run server reload in the CLI to apply changes.
  • All config and runtime files are stored in the .cache/ directory.

Security & API Key Authentication

  • On first run, the server generates an API key in .cache/mcp_manager_api_key.txt.
  • All management endpoints require this API key as a Bearer token in the Authorization header.
  • The CLI uses this API key automatically.
  • To view the API key:
    api-key
    
  • To regenerate the API key:
    regenerate-api-key
    
  • For manual requests (e.g., curl/Postman), use:
    Authorization: Bearer <your-api-key>
    
  • API key file location: .cache/mcp_manager_api_key.txt

Quickstart

  1. Start the CLI:
    mcp-manager
    
  2. Example commands:
    • daemon start (default port 4123)
    • daemon start --port 5000 (custom port)
    • server list, server reload, tools list, api-key, regenerate-api-key, etc.
  3. Type help for all commands.
  4. All config and runtime files are in .cache/.

SSE Endpoints

The MCP Manager daemon provides several SSE (Server-Sent Events) endpoints for real-time communication:

  • Unified SSE Proxy:
    • GET /sse โ€” Connect to all managed servers via a unified SSE stream.
  • Per-Server SSE Endpoint:
    • GET /<mcp-server-name>/sse โ€” Connect directly to a specific managed server's SSE stream. Replace <mcp-server-name> with the name of your server (e.g., /hackernews/sse).
  • Messages Endpoint:
    • POST /messages โ€” Send messages to all servers (with authentication).
    • POST /<mcp-server-name>/messages โ€” Send messages to a specific server.

Tip: Use the per-server SSE endpoint (/<mcp-server-name>/sse) for direct, real-time communication with a single managed server.

CLI User Interface Example

  __  __  ___ ___   __  __                             
 |  \/  |/ __| _ \ |  \/  |__ _ _ _  __ _ __ _ ___ _ _ 
 | |\/| | (__|  _/ | |\/| / _` | ' \/ _` / _` / -_) '_|
 |_|  |_|\___|_|   |_|  |_|\__,_|_||_\__,_\__, \___|_|  
                                         |___/          โ˜๏ธ CloudThinker

MCP Manager: Multi MCP Server Control Panel. Powered by CloudThinker (https://www.cloudthinker.io)
Type 'help' for commands, 'exit' to quit.

mcp-manager> daemon start
MCP Manager daemon started (PID: 12345) on port 4123

mcp-manager> server list
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ    Name    โ”ƒ  Status  โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”ƒ hackernews โ”ƒ  running โ”ƒ
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”˜

mcp-manager> api-key
Current API Key: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

mcp-manager> help
[Shows the list of available commands]

Available CLI Commands

Command Description
daemon start [--port PORT] Start the MCP Manager daemon (optionally on a custom port)
daemon stop Stop the MCP Manager daemon
daemon status Show daemon status
daemon log Show the last N lines of the daemon log file
server list List all managed servers (shows Name and Status)
server reload Reload the MCP servers from the config file
server remove Remove a managed server
server start Start a managed server
server stop Stop a managed server
tools list List all tools
api-key Show the current API key
regenerate-api-key Regenerate and show a new API key
config edit Edit the MCP config JSON in your preferred editor (with JSON validation)
clear Clear the screen
exit Exit the CLI

Note:

  • daemon start runs the server on port 4123 by default. Use --port <PORT> to specify a different port.
  • All config and runtime files are stored in .cache/.
  • The config edit command opens .cache/mcp_config.json in your preferred editor (set by $EDITOR, or falls back to vim/nano/notepad) and checks for valid JSON before saving.

Daemon Log

  • The daemon log file is stored at .cache/mcp_manager_daemon.log.
  • Use the daemon log command to view the last N lines of the log.

Using with ngrok

Use ngrok to share your local MCP Manager server publicly:

# In another terminal:
ngrok http 4123

Using with Cursor

Use supergateway to connect with Cursor. Update the port and API key as needed:

{
  "mcpServers": {
    "mcp-manager": {
      "command": "npx",
      "args": [
        "-y",
        "supergateway",
        "--sse",
        "http://localhost:YOUR_PORT/sse",
        "--oauth2Bearer",
        "YOUR-API-KEY"
      ]
    }
  }
}

Replace YOUR_PORT with the port used by daemon start (default 4123), and YOUR-API-KEY with the value from .cache/mcp_manager_api_key.txt or the api-key command.

CloudThinker Integration

MCP Manager is designed to work seamlessly with CloudThinker, a platform that provides tireless AI agents to help save time, reduce costs, and boost efficiency in cloud operations.

๐Ÿ“š Official Documentation

For comprehensive setup and integration guide, visit the official CloudThinker documentation: Deploy multiples and secure MCP from your private environment with MCP Manager

Learn more at cloudthinker.io

Roadmap

  • Support Multi-Tenant

License

MIT License

Project 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_cli-1.0.1.tar.gz (21.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_cli-1.0.1-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file mcp_manager_cli-1.0.1.tar.gz.

File metadata

  • Download URL: mcp_manager_cli-1.0.1.tar.gz
  • Upload date:
  • Size: 21.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for mcp_manager_cli-1.0.1.tar.gz
Algorithm Hash digest
SHA256 2d1d826d2e8711b8f46db266765b71ffb5c0ab9f8b16062e3e8edaaaddf2a2df
MD5 7c9205054e107d56c6c93daa9f96bc31
BLAKE2b-256 c931355b8c8b49d7e02a0c99518d1fd66324c16f93e277f7ddc3bc001f403cd7

See more details on using hashes here.

File details

Details for the file mcp_manager_cli-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_manager_cli-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 48bdbd02157750478e8730e0e3e087a452dd8af742f7547f57489d2f65bfd9cf
MD5 f9184f75c65ad0c5ab97428bbb123fb1
BLAKE2b-256 133b92de52f057c55c799e790fefd59b1430d876bfe05ac77e33f0123c47d186

See more details on using hashes here.

Supported by

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