diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7fefe69 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,422 @@ +services: + # ========================================== + # Design & Engineering (3 servers) + # ========================================== + + # KiCAD MCP - PCB design automation + kicad-mcp: + build: + context: ./vendor/KiCAD-MCP-Server + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-kicad-mcp + restart: unless-stopped + environment: + - NODE_ENV=production + command: ["node", "dist/index.js"] + profiles: + - dev + + # Blender MCP - 3D modeling and materials + blender-mcp: + build: + context: ./vendor/blender-mcp + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-blender-mcp + restart: unless-stopped + environment: + - PYTHONUNBUFFERED=1 + command: ["uvx", "blender-mcp"] + profiles: + - dev + + # FreeCAD MCP - CAD modeling + freecad-mcp: + build: + context: ./vendor/freecad-mcp + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-freecad-mcp + restart: unless-stopped + environment: + - PYTHONUNBUFFERED=1 + command: ["uvx", "freecad-mcp"] + profiles: + - dev + + # ========================================== + # Hosting & Infrastructure (5 servers) + # ========================================== + + # Kubernetes MCP - K8s/OpenShift management + kubernetes-mcp: + build: + context: ./vendor/kubernetes-mcp-server + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-kubernetes-mcp + restart: unless-stopped + ports: + - "8081:8080" + volumes: + - ~/.kube/config:/root/.kube/config:ro + profiles: + - ops + + # Docker MCP - Container and compose management + docker-mcp: + build: + context: ./vendor/docker-mcp + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-docker-mcp + restart: unless-stopped + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ~/.docker/config.json:/root/.docker/config.json:ro + environment: + - PYTHONUNBUFFERED=1 + command: ["uvx", "docker-mcp"] + profiles: + - ops + + # Proxmox MCP - Hypervisor management + proxmox-mcp: + build: + context: ./vendor/ProxmoxMCP + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-proxmox-mcp + restart: unless-stopped + environment: + - PYTHONUNBUFFERED=1 + - PROXMOX_HOST=${PROXMOX_HOST} + - PROXMOX_USER=${PROXMOX_USER} + - PROXMOX_TOKEN=${PROXMOX_TOKEN} + - PROXMOX_NODE=${PROXMOX_NODE} + command: ["uvx", "proxmox-mcp"] + profiles: + - ops + + # Terraform MCP - IaC automation + terraform-mcp: + build: + context: ./vendor/terraform-mcp-server + dockerfile: Dockerfile + target: dev + container_name: KNELDevStack-AIMW-terraform-mcp + restart: unless-stopped + environment: + - HOME=/terraform + volumes: + - ~/.terraform.d:/terraform/.terraform.d:ro + - ./terraform-cache:/terraform/.terraform.cache + profiles: + - ops + + # Cloudron MCP - Self-hosted app management + cloudron-mcp: + build: + context: ./vendor/mcp-cloudron + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-cloudron-mcp + restart: unless-stopped + environment: + - CLOUDRON_URL=${CLOUDRON_URL} + - CLOUDRON_TOKEN=${CLOUDRON_TOKEN} + profiles: + - ops + + # ========================================== + # Development Tools (2 servers) + # ========================================== + + # Bash Language Server - LSP for bash + bash-language-server: + build: + context: ./vendor/bash-language-server + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-bash-language-server + restart: unless-stopped + ports: + - "8082:8080" + command: ["npm", "start"] + profiles: + - dev + + # Context7 MCP - Documentation framework + context7-mcp: + build: + context: ./vendor/context7 + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-context7-mcp + restart: unless-stopped + environment: + - UPSTASH_REDIS_REST_URL=${UPSTASH_REDIS_REST_URL} + - UPSTASH_REDIS_REST_TOKEN=${UPSTASH_REDIS_REST_TOKEN} + command: ["node", "packages/mcp/dist/index.js", "--transport", "stdio"] + profiles: + - dev + + # ========================================== + # Content Management (4 servers) + # ========================================== + + # Nextcloud MCP - 90+ tools across 8 apps + nextcloud-mcp: + build: + context: ./vendor/nextcloud-mcp-server + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-nextcloud-mcp + restart: unless-stopped + environment: + - PYTHONUNBUFFERED=1 + - NEXTCLOUD_HOST=${NEXTCLOUD_HOST} + - NEXTCLOUD_USERNAME=${NEXTCLOUD_USERNAME} + - NEXTCLOUD_APP_PASSWORD=${NEXTCLOUD_APP_PASSWORD} + ports: + - "8083:8080" + profiles: + - ops + + # Ghost MCP - CMS management + ghost-mcp: + build: + context: ./vendor/ghost-mcp + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-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: + build: + context: ./vendor/docspace-mcp + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-docspace-mcp + restart: unless-stopped + environment: + - DOCSPACE_HOST=${DOCSPACE_HOST} + - DOCSPACE_TOKEN=${DOCSPACE_TOKEN} + profiles: + - ops + + # WordPress MCP Adapter + wordpress-mcp: + build: + context: ./vendor/mcp-adapter + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-wordpress-mcp + restart: unless-stopped + environment: + - WORDPRESS_URL=${WORDPRESS_URL} + - WORDPRESS_USERNAME=${WORDPRESS_USERNAME} + - WORDPRESS_APPLICATION_PASSWORD=${WORDPRESS_APPLICATION_PASSWORD} + command: ["npx", "-y", "@wordpress/mcp-adapter"] + profiles: + - ops + + # ========================================== + # Communication & Collaboration (3 servers) + # ========================================== + + # Discourse MCP - Forum integration + discourse-mcp: + build: + context: ./vendor/discourse-mcp + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-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: + build: + context: ./vendor/imap-mcp + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-imap-mcp + restart: unless-stopped + environment: + - PYTHONUNBUFFERED=1 + - IMAP_SERVER=${IMAP_SERVER} + - IMAP_PORT=${IMAP_PORT:-993} + - IMAP_USERNAME=${IMAP_USERNAME} + - IMAP_PASSWORD=${IMAP_PASSWORD} + command: ["uvx", "imap-mcp"] + profiles: + - ops + + # Postiz MCP - Social media management + postizz-mcp: + build: + context: ./vendor/postizz-MCP + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-postizz-mcp + restart: unless-stopped + environment: + - POSTIZ_API_KEY=${POSTIZ_API_KEY} + - POSTIZ_URL=${POSTIZ_URL} + profiles: + - ops + + # ========================================== + # Analytics & Security (2 servers) + # ========================================== + + # Matomo MCP Client + matomo-mcp: + build: + context: ./vendor/matomo-mcp-client + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-matomo-mcp + restart: unless-stopped + environment: + - MATOMO_URL=${MATOMO_URL} + - MATOMO_TOKEN=${MATOMO_TOKEN} + profiles: + - ops + + # Bitwarden MCP - Password vault + bitwarden-mcp: + build: + context: ./vendor/mcp-server + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-bitwarden-mcp + restart: unless-stopped + environment: + - BITWARDEN_CLIENT_ID=${BITWARDEN_CLIENT_ID} + - BITWARDEN_CLIENT_SECRET=${BITWARDEN_CLIENT_SECRET} + - BITWARDEN_PASSWORD=${BITWARDEN_PASSWORD} + - BITWARDEN_SERVER_URL=${BITWARDEN_SERVER_URL:-https://vault.bitwarden.com} + command: ["npx", "-y", "@bitwarden/mcp-server"] + profiles: + - ops + + # ========================================== + # Productivity & Automation (6 servers) + # ========================================== + + # GIMP MCP - Image editing + gimp-mcp: + build: + context: ./vendor/gimp-mcp + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-gimp-mcp + restart: unless-stopped + environment: + - PYTHONUNBUFFERED=1 + command: ["uvx", "gimp-mcp"] + profiles: + - dev + + # Snipe-IT MCP - Asset inventory + snipeit-mcp: + build: + context: ./vendor/snipeit-mcp + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-snipeit-mcp + restart: unless-stopped + environment: + - PYTHONUNBUFFERED=1 + - SNIPEIT_URL=${SNIPEIT_URL} + - SNIPEIT_TOKEN=${SNIPEIT_TOKEN} + command: ["uvx", "snipeit-mcp"] + profiles: + - ops + + # Redmine MCP - Project management + mcp-redmine: + build: + context: ./vendor/mcp-redmine + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-mcp-redmine + restart: unless-stopped + environment: + - PYTHONUNBUFFERED=1 + - REDMINE_URL=${REDMINE_URL} + - REDMINE_API_KEY=${REDMINE_API_KEY} + command: ["uvx", "mcp-redmine"] + profiles: + - ops + + # Ansible MCP - IT automation + mcp-ansible: + build: + context: ./vendor/mcp-ansible + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-mcp-ansible + restart: unless-stopped + environment: + - PYTHONUNBUFFERED=1 + volumes: + - ./ansible-playbooks:/playbooks:ro + - /var/run/docker.sock:/var/run/docker.sock + command: ["uvx", "mcp-ansible"] + profiles: + - ops + + # Elasticsearch MCP + elasticsearch-mcp: + build: + context: ./vendor/mcp-server-elasticsearch + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-elasticsearch-mcp + restart: unless-stopped + environment: + - ELASTICSEARCH_URL=${ELASTICSEARCH_URL:-http://localhost:9200} + - ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME} + - ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD} + ports: + - "8084:8080" + profiles: + - ops + + # Audiobook MCP Server + audiobook-mcp: + build: + context: ./vendor/audiobook-mcp-server + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-audiobook-mcp + restart: unless-stopped + environment: + - AUDIOBOOK_LIBRARY_PATH=${AUDIOBOOK_LIBRARY_PATH:-/audiobooks} + volumes: + - ${AUDIOBOOK_LIBRARY_PATH:-/audiobooks}:/audiobooks + command: ["npx", "-y", "audiobook-mcp-server"] + profiles: + - dev + + # ========================================== + # Additional Tools (3 servers) + # ========================================== + + # Draw.io MCP Server + drawio-mcp: + build: + context: ./vendor/drawio-mcp-server + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-drawio-mcp + restart: unless-stopped + environment: + - DRAWIO_URL=${DRAWIO_URL:-https://app.diagrams.net} + command: ["npx", "-y", "drawio-mcp-server"] + profiles: + - dev + + # Docker Language Server + docker-language-server: + build: + context: ./vendor/docker-language-server + dockerfile: Dockerfile + container_name: KNELDevStack-AIMW-docker-language-server + restart: unless-stopped + ports: + - "8085:8080" + profiles: + - dev