docker-agent-backend
Lightweight, secure Docker agent with REST and WebSocket APIs for container management and real-time monitoring, built with FastAPI.
Install / Use
claude mcp add ahmed-gelemli -- npx -y github:ahmed-gelemli/docker-agent-backendIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
OperationsSupported Platforms
Skill content
View source on GitHubDocker Agent Backend
A lightweight, secure, and extensible backend agent built with FastAPI that lets you manage and monitor Docker containers remotely — via both REST APIs and real-time WebSocket streaming.
Features
- List Docker containers
- View container details and logs
- Start / stop / restart containers
- Real-time log streaming via WebSocket
- Stream live container stats
- Docker events stream (start/stop/etc)
- List images
- MCP (Model Context Protocol) support for AI assistants
- API versioning (
/api/v1/) - JWT authentication with token expiration
- Rate limiting to prevent abuse
- CORS configuration
- Request tracing with unique request IDs
- Structured logging (JSON in production)
- Production-ready Docker setup (non-root, health checks)
API Overview
Note: All endpoints are prefixed with
/api/v1
Auth
| Method | Endpoint | Description | Auth Required |
|--------|---------------------|---------------------------------|---------------|
| POST | /api/v1/auth/login | Get JWT token | No |
| GET | /api/v1/auth/check | Validate token & get user info | Yes |
Containers
| Method | Endpoint | Description | Rate Limit |
|--------|-----------------------------------|---------------------------|------------|
| GET | /api/v1/containers/ | List all containers | 60/min |
| GET | /api/v1/containers/{id} | Get container details | 60/min |
| GET | /api/v1/containers/{id}/logs | View container logs | 60/min |
| POST | /api/v1/containers/{id}/start | Start container | 10/min |
| POST | /api/v1/containers/{id}/stop | Stop container | 10/min |
| POST | /api/v1/containers/{id}/restart | Restart container | 10/min |
Stats & System
| Method | Endpoint | Description | Auth Required |
|--------|-----------------------|------------------------------------------|---------------|
| GET | /api/v1/stats/{id} | CPU, memory, network, I/O stats | Yes |
| GET | /api/v1/version | Docker version, API version, OS, arch | Yes |
| GET | /api/v1/healthz | Basic health check | No |
| GET | /api/v1/health | Enhanced health with system info | Yes |
Images
| Method | Endpoint | Description |
|--------|--------------------|----------------------|
| GET | /api/v1/images/ | List Docker images |
WebSocket Endpoints
Real-time streaming with JWT token passed as query parameter.
| Path | Description |
|-----------------------------------------|-----------------------------|
| /api/v1/logs/ws/{id}?token=JWT | Stream live logs |
| /api/v1/stats/ws/{id}?token=JWT | Stream live CPU/memory |
| /api/v1/events/ws?token=JWT | Stream Docker events |
MCP (Model Context Protocol)
Enables AI assistants (Claude, Cursor, etc.) to interact with Docker via the MCP protocol.
| Path | Description | Auth |
|-----------------------|------------------------------------------|-------------------|
| GET /mcp/sse | SSE endpoint for MCP connection | API Key (Bearer) |
| POST /mcp/messages/ | Handle MCP messages | API Key (Bearer) |
Available MCP Tools:
| Tool | Description |
|-----------------------|--------------------------------------------------|
| docker_health | Get Docker daemon health and system info |
| docker_version | Get Docker version information |
| list_containers | List all containers with status and ports |
| get_container | Get detailed container info |
| get_container_logs | Get container logs |
| get_container_stats | Get container CPU/memory/network stats |
| list_images | List all Docker images |
| start_container | Start a stopped container |
| stop_container | Stop a running container |
| restart_container | Restart a container |
Installation
Using Docker Compose (Recommended)
# Clone the repo
git clone https://github.com/ahmed-gelemli/docker-agent-backend.git
cd docker-agent-backend
# Create environment file
cat > .env << EOF
SECRET_KEY=$(openssl rand -base64 32)
API_USERNAME=admin
API_PASSWORD=your_secure_password
EOF
# Build and run
docker compose up --build -d
Local Development
# Create virtual environment
python -m venv venv
source venv/bin/activate # Linux/Mac
# or: venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
# Create .env file (see Configuration section)
# Run development server
python run.py
Configuration
Create a .env file in the project root:
# REQUIRED - Generate with: openssl rand -base64 32
SECRET_KEY=your-secret-key-at-least-32-characters
# API Credentials
API_USERNAME=admin
API_PASSWORD=your_secure_password
# JWT Settings (optional)
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
# CORS (optional) - comma-separated origins
CORS_ORIGINS=https://your-dashboard.com,https://another-origin.com
# Rate Limiting (optional)
RATE_LIMIT_ENABLED=true
RATE_LIMIT_REQUESTS=100
RATE_LIMIT_WINDOW=60
# MCP Configuration
MCP_ENABLED=true
MCP_API_KEY=your-mcp-api-key-at-least-16-chars # Generate with: openssl rand -base64 32
MCP_DEBUG=false
# Application (optional)
DEBUG=false
APP_NAME=Docker Agent
Usage
1. Get a JWT Token
curl -X POST http://localhost:9000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "your_password"}'
Response:
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "bearer",
"expires_in": 1800
}
2. Use the Token
# List containers
curl http://localhost:9000/api/v1/containers/ \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
{
"containers": [
{
"id": "9a2dd44bdbed",
"name": "my-container",
"image": "nginx:latest",
"status": "running",
"state": "running",
"created": 1735123456,
"ports": []
}
],
"total": 1
}
# Get container details
curl http://localhost:9000/api/v1/containers/CONTAINER_ID \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
{
"id": "9a2dd44bdbedabc123...",
"short_id": "9a2dd44bdbed",
"name": "my-container",
"image": "nginx:latest",
"status": "running",
"state": {
"status": "running",
"running": true,
"paused": false,
"pid": 12345,
"exit_code": 0
},
"config": {
"hostname": "9a2dd44bdbed",
"env": ["PATH=/usr/local/bin", "NGINX_VERSION=1.25"],
"cmd": ["nginx", "-g", "daemon off;"],
"labels": {}
},
"mounts": [],
"networks": {
"bridge": {
"ip_address": "172.17.0.2",
"gateway": "172.17.0.1"
}
},
"ports": []
}
# Get enhanced health check
curl http://localhost:9000/api/v1/health \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
{
"status": "ok",
"docker_connected": true,
"docker_version": "24.0.7",
"api_version": "1.43",
"os": "linux",
"arch": "amd64",
"containers_running": 3,
"containers_total": 5,
"images_total": 12,
"memory_total": 16777216000,
"cpus": 8
}
# Restart a container
curl -X POST http://localhost:9000/api/v1/containers/CONTAINER_ID/restart \
-H "Authorization: Bearer YOUR_TOKEN"
3. WebSocket Connection
const token = "your_jwt_token";
const ws = new WebSocket(`ws://localhost:9000/api/v1/logs/ws/CONTAINER_ID?token=${token}`);
ws.onmessage = (event) => {
console.log("Log:", event.data);
};
4. MCP Connection
Configure your AI assistant (Claude Desktop, Cursor, etc.) with the MCP server URL:
{
"mcpServers": {
"docker-agent": {
"url": "http://localhost:9000/mcp/sse",
"headers": {
"Authorization": "Bearer YOUR_MCP_API_KEY"
}
}
}
}
Or use the API key as a query parameter:
http://localhost:9000/mcp/sse?api_key=YOUR_MCP_API_KEY
MCP Deployment Notes
✅ Works With
| Environment | Status | |--------------------------------------|--------| | Single instance deployment | ✅ | | Cloud VMs (EC2, DigitalOcean, etc.) | ✅ | | Kubernetes (1 replica) | ✅ | | Docker Compose (single container) | ✅ |
⚠️ Limitations
| Environment | Issue | |--------------------------------------|----------------------------------------------| | Horizontal scaling (multiple replicas) | SSE sessions are stored in-memory; needs sticky sessions | | Serverless (Lambda, Vercel Functions) | SSE requires long-lived connections | | Some load balancers | May timeout idle SSE connections (30-60s) |
Workarounds
- Sticky Sessions: Configure your load balancer to route the same client to the same instance
- Single Replica: Deploy with
replicas: 1if horizontal scaling isn't needed - Increase Timeouts: Configure load balancer idle timeout > expected connection duration
Future TODOs
- [ ] Add
StreamableHTTPtransport for stateless MCP (better scaling support) - [ ] Redis-backed session store for multi-instance deployments
- [ ] MCP tool for
docker execcommands - [ ] MCP tool for pulling images
- [ ] MCP tool for creating/removing containers
- [ ] MCP prompts and resources support
Security & Observability
| Feature | Description |
|---------|-------------|
| API Versioning | All endpoints prefixed with /api/v1 for future compatibility |
| JWT Auth | Tokens expire after 30 minutes (configurable) |
| Rate Limiting | Auth: 5/min, Actions: 10/min, Reads: 60/min |
| CORS | Configurable allowed origins |
| Request Tracing | Every response includes X-Request-ID and X-Process-Time headers |
| Structured Logging | JSON logs in production, colored output in debug mode |
| Non-root Container | Runs as dockeragent user |
| No Stack Traces | Errors don't leak internal details |
| Health Checks | Basic (/healthz) and enhanced (/health) endpoints |
Related Skills
Agent-Reach
84.7kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
73.5kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
ruflo
73.1k🌊 The original agent harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, federation, vector RAG integration, and native Claude Code / Codex / Hermes and many more Integrated
CowAgent
47.1kOpen-source super AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
