Version: 1.1.14
Container Manager provides a robust universal interface to manage Docker and Podman containers, networks, volumes, and Docker Swarm services, enabling programmatic and remote container management.
This is package contains an MCP Server + A2A Server Out of the Box!
This repository is actively maintained - Contributions are welcome!
- Manage Docker and Podman containers, images, volumes, and networks
- Support for Docker Swarm operations
- Support for Docker Compose and Podman Compose operations
- FastMCP server for remote API access
- Comprehensive logging and error handling
- Extensible architecture for additional container runtimes
- Multi-agent A2A system for delegated container management
Usage:
| Short Flag | Long Flag | Description |
|---|---|---|
| -h | --help | Display help information |
| -t | --transport | Transport method: 'stdio', 'http', or 'sse' [legacy] (default: stdio) |
| -s | --host | Host address for HTTP transport (default: 0.0.0.0) |
| -p | --port | Port number for HTTP transport (default: 8000) |
| --auth-type | Authentication type: 'none', 'static', 'jwt', 'oauth-proxy', 'oidc-proxy', 'remote-oauth' (default: none) | |
| --token-jwks-uri | JWKS URI for JWT verification | |
| --token-issuer | Issuer for JWT verification | |
| --token-audience | Audience for JWT verification | |
| --oauth-upstream-auth-endpoint | Upstream authorization endpoint for OAuth Proxy | |
| --oauth-upstream-token-endpoint | Upstream token endpoint for OAuth Proxy | |
| --oauth-upstream-client-id | Upstream client ID for OAuth Proxy | |
| --oauth-upstream-client-secret | Upstream client secret for OAuth Proxy | |
| --oauth-base-url | Base URL for OAuth Proxy | |
| --oidc-config-url | OIDC configuration URL | |
| --oidc-client-id | OIDC client ID | |
| --oidc-client-secret | OIDC client secret | |
| --oidc-base-url | Base URL for OIDC Proxy | |
| --remote-auth-servers | Comma-separated list of authorization servers for Remote OAuth | |
| --remote-base-url | Base URL for Remote OAuth | |
| --allowed-client-redirect-uris | Comma-separated list of allowed client redirect URIs | |
| --eunomia-type | Eunomia authorization type: 'none', 'embedded', 'remote' (default: none) | |
| --eunomia-policy-file | Policy file for embedded Eunomia (default: mcp_policies.json) | |
| --eunomia-remote-url | URL for remote Eunomia server |
| Long Flag | Description |
|---|---|
| --host | Host to bind the server to (default: 0.0.0.0) |
| --port | Port to bind the server to (default: 9000) |
| --provider | LLM Provider: openai, anthropic, google, huggingface (default: openai) |
| --model-id | LLM Model ID (default: qwen3:4b) |
| --base-url | LLM Base URL (for OpenAI compatible providers) |
| --api-key | LLM API Key |
| --mcp-url | MCP Server URL (default: http://localhost:8000/mcp) |
The MCP Server can be run in two modes: stdio (for local testing) or http (for networked access). To start the server, use the following commands:
container-manager-mcpcontainer-manager-mcp --transport "http" --host "0.0.0.0" --port "8000"get_version: Retrieve version information of the container runtimeget_info: Get system information about the container runtimelist_images: List all available imagespull_image: Pull an image from a registryremove_image: Remove an imagelist_containers: List running or all containersrun_container: Run a new containerstop_container: Stop a running containerremove_container: Remove a containerget_container_logs: Retrieve logs from a containerexec_in_container: Execute a command in a containerlist_volumes: List all volumescreate_volume: Create a new volumeremove_volume: Remove a volumelist_networks: List all networkscreate_network: Create a new networkremove_network: Remove a networkcompose_up: Start services defined in a Compose filecompose_down: Stop and remove services defined in a Compose filecompose_ps: List containers for a Compose projectcompose_logs: View logs for a Compose project or specific serviceinit_swarm: Initialize a Docker Swarmleave_swarm: Leave a Docker Swarmlist_nodes: List nodes in a Docker Swarmlist_services: List services in a Docker Swarmcreate_service: Create a new service in a Docker Swarmremove_service: Remove a service from a Docker Swarm
The ServiceNow MCP server can be deployed using Docker, with configurable authentication, middleware, and Eunomia authorization.
docker pull knucklessg1/container-manager:latest
docker run -d \
--name container-manager-mcp \
-p 8004:8004 \
-e HOST=0.0.0.0 \
-e PORT=8004 \
-e TRANSPORT=http \
-e AUTH_TYPE=none \
-e EUNOMIA_TYPE=none \
knucklessg1/container-manager:latestdocker run -d \
--name container-manager-a2a \
-p 9000:9000 \
-e PORT=9000 \
-e PROVIDER=openai \
-e MODEL_ID=qwen3:4b \
-e BASE_URL=http://host.docker.internal:11434/v1 \
-e MCP_URL=http://host.docker.internal:8004/mcp \
knucklessg1/container-manager:latest \
container-manager-a2aFor advanced authentication (e.g., JWT, OAuth Proxy, OIDC Proxy, Remote OAuth) or Eunomia, add the relevant environment variables:
docker run -d \
--name container-manager-mcp \
-p 8004:8004 \
-e HOST=0.0.0.0 \
-e PORT=8004 \
-e TRANSPORT=http \
-e AUTH_TYPE=oidc-proxy \
-e OIDC_CONFIG_URL=https://provider.com/.well-known/openid-configuration \
-e OIDC_CLIENT_ID=your-client-id \
-e OIDC_CLIENT_SECRET=your-client-secret \
-e OIDC_BASE_URL=https://your-server.com \
-e ALLOWED_CLIENT_REDIRECT_URIS=http://localhost:*,https://*.example.com/* \
-e EUNOMIA_TYPE=embedded \
-e EUNOMIA_POLICY_FILE=/app/mcp_policies.json \
knucklessg1/container-manager:latestCreate a docker-compose.yml file:
services:
container-manager-mcp:
image: knucklessg1/container-manager:latest
environment:
- HOST=0.0.0.0
- PORT=8004
- TRANSPORT=http
- AUTH_TYPE=none
- EUNOMIA_TYPE=none
ports:
- 8004:8004For advanced setups with authentication and Eunomia:
services:
container-manager-mcp:
image: knucklessg1/container-manager:latest
environment:
- HOST=0.0.0.0
- PORT=8004
- TRANSPORT=http
- AUTH_TYPE=oidc-proxy
- OIDC_CONFIG_URL=https://provider.com/.well-known/openid-configuration
- OIDC_CLIENT_ID=your-client-id
- OIDC_CLIENT_SECRET=your-client-secret
- OIDC_BASE_URL=https://your-server.com
- ALLOWED_CLIENT_REDIRECT_URIS=http://localhost:*,https://*.example.com/*
- EUNOMIA_TYPE=embedded
- EUNOMIA_POLICY_FILE=/app/mcp_policies.json
ports:
- 8004:8004
volumes:
- ./mcp_policies.json:/app/mcp_policies.jsonRun the service:
docker-compose up -d{
"mcpServers": {
"container_manager": {
"command": "uv",
"args": [
"run",
"--with",
"container-manager-mcp",
"container-manager-mcp"
],
"env": {
"CONTAINER_MANAGER_SILENT": "False", //Optional
"CONTAINER_MANAGER_LOG_FILE": "~/Documents/container_manager_mcp.log" //Optional
"CONTAINER_MANAGER_TYPE": "podman", //Optional
"CONTAINER_MANAGER_PODMAN_BASE_URL": "tcp://127.0.0.1:8080" //Optional
},
"timeout": 200000
}
}
}Installation Instructions:
python -m pip install container-manager-mcpor
uv pip install --upgrade container-manager-mcpcontainer-manager-mcp --transport http --host 127.0.0.1 --port 8080This starts the MCP server using HTTP transport on localhost port 8080.
To interact with the MCP server programmatically, you can use a FastMCP client or make HTTP requests to the exposed endpoints. Example using curl to pull an image:
curl -X POST http://127.0.0.1:8080/pull_image \
-H "Content-Type: application/json" \
-d '{"image": "nginx", "tag": "latest", "manager_type": "docker"}'Install the Python package:
python -m pip install container-manager-mcp- Python 3.7+
fastmcpfor MCP server functionalitydockerfor Docker supportpodmanfor Podman supportpydanticfor data validation
Install dependencies:
python -m pip install fastmcp docker podman pydanticEnsure Docker or Podman is installed and running on your system.
Development and Contribution:
Contributions are welcome! To contribute:
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -am 'Add your feature') - Push to the branch (
git push origin feature/your-feature) - Create a new Pull Request
Please ensure your code follows the project's coding standards and includes appropriate tests.