Production-grade MCP server for automated Docker CI/CD deployments
Server has 8 well-named tools with complete input schemas and descriptions. Tool names follow verb_noun pattern (prepare_repo, detect_project_type, build_image, deploy_container, get_logs, healthcheck, stop_deployment, rollback). All parameters have type definitions and descriptions. However, output schemas are not explicitly documented in the visible code, only inferred from docstrings. Error handling is present but lacks recovery guidance (e.g., 'try X next'). Security considerations are good (non-root user, localhost binding, memory limits documented), but no explicit permission gates or scope declarations visible. Descriptions average ~150 chars, meeting baseline. Parameter descriptions are detailed with format/constraint info. No secrets exposed as parameters.
Build Docker image with log capture. Builds a Docker image from a Dockerfile in the specified path, capturing all build logs for troubleshooting.
Deploy Docker container with port conflict resolution. Deploys a container from the specified image with automatic port conflict detection and resolution. Implements security best practices: localhost-only binding, non-root user, memory limits.
Detect build system and framework from repository file markers. Analyzes the repository structure to determine the project type and extract relevant configuration details.
Retrieve container logs with optional filtering. Fetches logs from a running or stopped container with support for tailing (last N lines) and filtering by timestamp.
Validate service availability with exponential backoff retry. Polls the specified URL until it returns the expected HTTP status code or the timeout is reached. Uses exponential backoff between retries to avoid overwhelming the service during startup.
Output schemas not explicitly documented in visible code. Docstrings describe return fields informally, but no formal JSON Schema output definitions visible. LLMs cannot reliably parse unstructured responses.
Error handling lacks recovery guidance. Exceptions are logged but responses do not tell the LLM what to do next (e.g., 'Try prepare_repo() first' or 'Retry with a different port'). Agents cannot self-correct.
No explicit permission gates or scope declarations. Tools like stop_deployment and rollback are destructive but lack permission checks or audit logging visible in the code snippet. No scope metadata (e.g., 'requires: write:docker').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Clone or update a Git repository for deployment. This tool handles repository preparation by cloning from the specified URL, checking out the requested branch/tag/commit, and extracting commit metadata.
Rollback to the previous successful deployment. Finds the last successful deployment for the specified repository, stops the current failed deployment, and redeploys the previous working version on the same port.
Stop and remove a running deployment container. Gracefully stops the container (10 second timeout) and removes it from the Docker daemon. Does not remove the image.
Destructive operations (stop_deployment, rollback) lack confirmation/dry-run support. Agents can irreversibly stop containers without a confirmation step, risking accidental service disruption.
deploy_container has many parameters (11 total) with complex interdependencies (deployment_id auto-generated if not provided, host_port auto-assigned if None). Dependencies not explicitly documented in parameter descriptions.