From 338094fef07d7e93fcd02ee6811b4a535086260b Mon Sep 17 00:00:00 2001 From: Charles N Wyble Date: Thu, 22 Jan 2026 10:05:29 -0500 Subject: [PATCH] refactor: standardize container names to lowercase kneldevstack-aimiddleware-* - Update all 29 container_name fields from KNELDevStack-AIMiddleware-* to kneldevstack-aimiddleware-* - Add explicit image: fields to all services for consistent image naming - Fix ghost-mcp and discourse-mcp to use build context instead of direct npx calls - Ensures consistent lowercase naming across all services This resolves confusion between service names, image names, and container names. All three tiers (service, image, container) now use the same lowercase naming convention. --- docker-compose.yml | 99 ++++++++++++++++++++++++++++++---------------- 1 file changed, 64 insertions(+), 35 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 01a8676..8e3b7db 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,10 +7,11 @@ services: # NOTE: Requires KiCAD to be installed on host machine # The MCP server connects to an existing KiCAD instance via TCP kicad-mcp: + image: kneldevstack-aimiddleware-kicad-mcp build: context: ./vendor/KiCAD-MCP-Server dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-kicad-mcp + container_name: kneldevstack-aimiddleware-kicad-mcp restart: unless-stopped environment: - NODE_ENV=production @@ -22,10 +23,11 @@ services: # Blender MCP - 3D modeling and materials blender-mcp: + image: kneldevstack-aimiddleware-blender-mcp build: context: ./vendor/blender-mcp dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-blender-mcp + container_name: kneldevstack-aimiddleware-blender-mcp restart: unless-stopped environment: - PYTHONUNBUFFERED=1 @@ -35,10 +37,11 @@ services: # FreeCAD MCP - CAD modeling freecad-mcp: + image: kneldevstack-aimiddleware-freecad-mcp build: context: ./vendor/freecad-mcp dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-freecad-mcp + container_name: kneldevstack-aimiddleware-freecad-mcp restart: unless-stopped environment: - PYTHONUNBUFFERED=1 @@ -52,10 +55,11 @@ services: # Kubernetes MCP - K8s/OpenShift management kubernetes-mcp: + image: kneldevstack-aimiddleware-kubernetes-mcp build: context: ./vendor/kubernetes-mcp-server dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-kubernetes-mcp + container_name: kneldevstack-aimiddleware-kubernetes-mcp restart: unless-stopped ports: - "8081:8080" @@ -66,10 +70,11 @@ services: # Docker MCP - Container and compose management docker-mcp: + image: kneldevstack-aimiddleware-docker-mcp build: context: ./vendor/docker-mcp dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-docker-mcp + container_name: kneldevstack-aimiddleware-docker-mcp restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock @@ -82,10 +87,11 @@ services: # Proxmox MCP - Hypervisor management proxmox-mcp: + image: kneldevstack-aimiddleware-proxmox-mcp build: context: ./vendor/ProxmoxMCP dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-proxmox-mcp + container_name: kneldevstack-aimiddleware-proxmox-mcp restart: unless-stopped environment: - PYTHONUNBUFFERED=1 @@ -99,11 +105,12 @@ services: # Terraform MCP - IaC automation terraform-mcp: + image: kneldevstack-aimiddleware-terraform-mcp build: context: ./vendor/terraform-mcp-server dockerfile: Dockerfile target: dev - container_name: KNELDevStack-AIMiddleware-terraform-mcp + container_name: kneldevstack-aimiddleware-terraform-mcp restart: unless-stopped environment: - HOME=/terraform @@ -115,10 +122,11 @@ services: # Cloudron MCP - Self-hosted app management cloudron-mcp: + image: kneldevstack-aimiddleware-cloudron-mcp build: context: ./vendor/mcp-cloudron dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-cloudron-mcp + container_name: kneldevstack-aimiddleware-cloudron-mcp restart: unless-stopped environment: - CLOUDRON_URL=${CLOUDRON_URL} @@ -132,20 +140,22 @@ services: # Bash Language Server - LSP for bash bash-language-server: + image: kneldevstack-aimiddleware-bash-language-server build: context: ./vendor/bash-language-server dockerfile: ../../dockerfiles/bash-language-server/Dockerfile - container_name: KNELDevStack-AIMiddleware-bash-language-server + container_name: kneldevstack-aimiddleware-bash-language-server restart: "no" profiles: - dev # Context7 MCP - Documentation framework context7-mcp: + image: kneldevstack-aimiddleware-context7-mcp build: context: ./vendor/context7 dockerfile: ../../dockerfiles/context7/Dockerfile - container_name: KNELDevStack-AIMiddleware-context7-mcp + container_name: kneldevstack-aimiddleware-context7-mcp restart: unless-stopped environment: - UPSTASH_REDIS_REST_URL=${UPSTASH_REDIS_REST_URL} @@ -159,10 +169,11 @@ services: # Nextcloud MCP - 90+ tools across 8 apps nextcloud-mcp: + image: kneldevstack-aimiddleware-nextcloud-mcp build: context: ./vendor/nextcloud-mcp-server dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-nextcloud-mcp + container_name: kneldevstack-aimiddleware-nextcloud-mcp restart: unless-stopped environment: - PYTHONUNBUFFERED=1 @@ -175,24 +186,26 @@ services: - ops # Ghost MCP - CMS integration - # Note: Using npx directly with @fanyangmeng/ghost-mcp package ghost-mcp: - image: node:22-alpine - container_name: KNELDevStack-AIMiddleware-ghost-mcp + image: kneldevstack-aimiddleware-ghost-mcp + build: + context: ./vendor/ghost-mcp + dockerfile: ../../dockerfiles/ghost-mcp/Dockerfile + container_name: kneldevstack-aimiddleware-ghost-mcp restart: unless-stopped environment: - GHOST_API_URL=${GHOST_API_URL} - GHOST_ADMIN_API_KEY=${GHOST_ADMIN_API_KEY} - command: ["npx", "-y", "@fanyangmeng/ghost-mcp"] profiles: - ops # ONLYOFFICE DocSpace MCP - Room and file management docspace-mcp: + image: kneldevstack-aimiddleware-docspace-mcp build: context: ./vendor/docspace-mcp dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-docspace-mcp + container_name: kneldevstack-aimiddleware-docspace-mcp restart: unless-stopped environment: - DOCSPACE_HOST=${DOCSPACE_HOST} @@ -202,10 +215,11 @@ services: # WordPress MCP Adapter wordpress-mcp: + image: kneldevstack-aimiddleware-wordpress-mcp build: context: ./vendor/mcp-adapter dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-wordpress-mcp + container_name: kneldevstack-aimiddleware-wordpress-mcp restart: unless-stopped environment: - WORDPRESS_URL=${WORDPRESS_URL} @@ -220,25 +234,27 @@ services: # ========================================== # Discourse MCP - Forum integration - # Note: Using npx directly due to TypeScript compilation errors in 0.2.4 discourse-mcp: - image: node:24-alpine - container_name: KNELDevStack-AIMiddleware-discourse-mcp + image: kneldevstack-aimiddleware-discourse-mcp + build: + context: ./vendor/discourse-mcp + dockerfile: ../../dockerfiles/discourse-mcp/Dockerfile + container_name: kneldevstack-aimiddleware-discourse-mcp restart: unless-stopped environment: - DISCOURSE_URL=${DISCOURSE_URL} - DISCOURSE_API_KEY=${DISCOURSE_API_KEY} - DISCOURSE_API_USERNAME=${DISCOURSE_API_USERNAME} - command: ["npx", "-y", "@discourse/mcp"] profiles: - ops # IMAP MCP - Email processing imap-mcp: + image: kneldevstack-aimiddleware-imap-mcp build: context: ./vendor/imap-mcp dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-imap-mcp + container_name: kneldevstack-aimiddleware-imap-mcp restart: unless-stopped environment: - PYTHONUNBUFFERED=1 @@ -252,10 +268,11 @@ services: # Postiz MCP - Social media management postizz-mcp: + image: kneldevstack-aimiddleware-postizz-mcp build: context: ./vendor/postizz-MCP dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-postizz-mcp + container_name: kneldevstack-aimiddleware-postizz-mcp restart: unless-stopped environment: - POSTIZ_API_KEY=${POSTIZ_API_KEY} @@ -269,10 +286,11 @@ services: # Matomo MCP Client matomo-mcp: + image: kneldevstack-aimiddleware-matomo-mcp build: context: ./vendor/matomo-mcp-client dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-matomo-mcp + container_name: kneldevstack-aimiddleware-matomo-mcp restart: unless-stopped environment: - MATOMO_URL=${MATOMO_URL} @@ -282,10 +300,11 @@ services: # Bitwarden MCP - Password vault bitwarden-mcp: + image: kneldevstack-aimiddleware-bitwarden-mcp build: context: ./vendor/mcp-server dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-bitwarden-mcp + container_name: kneldevstack-aimiddleware-bitwarden-mcp restart: unless-stopped environment: - BITWARDEN_CLIENT_ID=${BITWARDEN_CLIENT_ID} @@ -302,10 +321,11 @@ services: # GIMP MCP - Image editing gimp-mcp: + image: kneldevstack-aimiddleware-gimp-mcp build: context: ./vendor/gimp-mcp dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-gimp-mcp + container_name: kneldevstack-aimiddleware-gimp-mcp restart: unless-stopped environment: - PYTHONUNBUFFERED=1 @@ -315,10 +335,11 @@ services: # Snipe-IT MCP - Asset inventory snipeit-mcp: + image: kneldevstack-aimiddleware-snipeit-mcp build: context: ./vendor/snipeit-mcp dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-snipeit-mcp + container_name: kneldevstack-aimiddleware-snipeit-mcp restart: unless-stopped environment: - PYTHONUNBUFFERED=1 @@ -330,10 +351,11 @@ services: # Redmine MCP - Project management mcp-redmine: + image: kneldevstack-aimiddleware-mcp-redmine build: context: ./vendor/mcp-redmine dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-mcp-redmine + container_name: kneldevstack-aimiddleware-mcp-redmine restart: unless-stopped environment: - PYTHONUNBUFFERED=1 @@ -345,10 +367,11 @@ services: # Ansible MCP - IT automation mcp-ansible: + image: kneldevstack-aimiddleware-mcp-ansible build: context: ./vendor/mcp-ansible dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-mcp-ansible + container_name: kneldevstack-aimiddleware-mcp-ansible restart: unless-stopped environment: - PYTHONUNBUFFERED=1 @@ -361,10 +384,11 @@ services: # Elasticsearch MCP elasticsearch-mcp: + image: kneldevstack-aimiddleware-elasticsearch-mcp build: context: ./vendor/mcp-server-elasticsearch dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-elasticsearch-mcp + container_name: kneldevstack-aimiddleware-elasticsearch-mcp restart: unless-stopped environment: - ELASTICSEARCH_URL=${ELASTICSEARCH_URL:-http://localhost:9200} @@ -377,10 +401,11 @@ services: # Audiobook MCP Server audiobook-mcp: + image: kneldevstack-aimiddleware-audiobook-mcp build: context: ./vendor/audiobook-mcp-server dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-audiobook-mcp + container_name: kneldevstack-aimiddleware-audiobook-mcp restart: unless-stopped environment: - AUDIOBOOK_LIBRARY_PATH=${AUDIOBOOK_LIBRARY_PATH:-/audiobooks} @@ -396,10 +421,11 @@ services: # Draw.io MCP Server drawio-mcp: + image: kneldevstack-aimiddleware-drawio-mcp build: context: ./vendor/drawio-mcp-server dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-drawio-mcp + container_name: kneldevstack-aimiddleware-drawio-mcp restart: unless-stopped environment: - DRAWIO_URL=${DRAWIO_URL:-https://app.diagrams.net} @@ -409,20 +435,22 @@ services: # Docker Language Server docker-language-server: + image: kneldevstack-aimiddleware-docker-language-server build: context: ./vendor/docker-language-server dockerfile: ../../dockerfiles/docker-language-server/Dockerfile - container_name: KNELDevStack-AIMiddleware-docker-language-server + container_name: kneldevstack-aimiddleware-docker-language-server restart: "no" profiles: - dev # Marksman LSP - Markdown language server marksman: + image: kneldevstack-aimiddleware-marksman build: context: ./vendor/marksman dockerfile: ../../dockerfiles/marksman/Dockerfile - container_name: KNELDevStack-AIMiddleware-marksman + container_name: kneldevstack-aimiddleware-marksman restart: "no" profiles: - dev @@ -433,10 +461,11 @@ services: # Penpot MCP - Design collaboration platform penpot-mcp: + image: kneldevstack-aimiddleware-penpot-mcp build: context: ./vendor/penpot-mcp dockerfile: Dockerfile - container_name: KNELDevStack-AIMiddleware-penpot-mcp + container_name: kneldevstack-aimiddleware-penpot-mcp restart: unless-stopped environment: - PENPOT_URL=${PENPOT_URL:-https://design.penpot.app}