Rundeck MCP — Docker Build Skill
Purpose: Build the rundeck-mcp Docker image from the local source.
When to use:
- After changes to
src/,Dockerfile, ordocker-entrypoint.sh - To produce an image ready for local testing or publishing
When NOT to use:
- Just want to run the server locally → use
/rundeck-mcp-rebuildinstead (faster, no Docker)
Steps
Before Starting: Create Task List
TaskCreate "Verify environment"
TaskCreate "Build Docker image"
TaskCreate "Verify image"
TaskCreate "Run Docker smoke tests"
Store all returned task IDs.
Step 1: Verify Prerequisites
TaskUpdate taskId=<verify_id> status="in_progress"
ls Dockerfile docker-entrypoint.sh 2>/dev/null
If either file is missing, stop:
"Dockerfile or docker-entrypoint.sh not found. Both ship on
main— make sure your branch is up to date withmain."
Check Docker is available:
docker info --format '{{.ServerVersion}}' 2>/dev/null || echo "unavailable"
If Docker is unavailable, stop:
"Docker daemon is not running. Start Docker Desktop and try again."
TaskUpdate taskId=<verify_id> status="completed"
Step 2: Build the Image
TaskUpdate taskId=<build_id> status="in_progress"
Build with the same tag CircleCI publishes (rundeck/mcp-ci) plus today's date as a secondary tag. .npmrc points npm at a private Cloudsmith mirror, so CLOUDSMITH_NPM_TOKEN must be set in your shell and forwarded in as a build secret (not a build-arg, to avoid leaking it into the image's layer history):
docker build --secret id=cloudsmith_token,env=CLOUDSMITH_NPM_TOKEN \
-t rundeck/mcp-ci:latest -t rundeck/mcp-ci:$(date +%Y%m%d) . 2>&1
If CLOUDSMITH_NPM_TOKEN isn't set in the environment, the build will fail with an npm ci 401 error.
If the build fails, show the full output and stop:
"Docker build failed — see errors above."
TaskUpdate taskId=<build_id> status="completed"
Step 3: Verify Image
TaskUpdate taskId=<verify_image_id> status="in_progress"
docker image inspect rundeck/mcp-ci:latest --format 'Size: {{.Size}} bytes | Created: {{.Created}}'
Print usage instructions:
TaskUpdate taskId=<verify_image_id> status="completed"
Step 4: Run Docker Smoke Tests
TaskUpdate taskId=<smoke_id> status="in_progress"
Verifies the entrypoint's docs fetch, the resulting /app/docs layout (including that the media-heavy .vuepress/public tree stays excluded except for the carved-out rundeck-api.yml OpenAPI spec api_call validates against), the RUNDECK_DOCS_PATH bypass, the restart/skip-fetch path, and that the server answers a real MCP initialize request:
sh ci/docker-smoke-test.sh rundeck/mcp-ci:latest
If any check reports FAIL, show the full output and stop:
"Docker smoke tests failed — see output above. Do not publish this image."
TaskUpdate taskId=<smoke_id> status="completed"
Report
Docker image built successfully.
Image: rundeck/mcp-ci:latest
Smoke tests: PASSED
Add to .mcp.json (stdio transport — docs downloaded on first start):
"rundeck-mcp": {
"command": "docker",
"args": ["run", "-i", "--rm",
"-e", "RUNDECK_URL=https://your-rundeck.example.com",
"-e", "RUNDECK_TOKEN=your-token",
"rundeck/mcp-ci:latest"]
}