- 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.
475 lines
14 KiB
YAML
475 lines
14 KiB
YAML
services:
|
|
# ==========================================
|
|
# Design & Engineering (3 servers)
|
|
# ==========================================
|
|
|
|
# KiCAD MCP - PCB design automation
|
|
# 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
|
|
restart: unless-stopped
|
|
environment:
|
|
- NODE_ENV=production
|
|
- KICAD_HOST=${KICAD_HOST:-host.docker.internal}
|
|
- KICAD_PORT=${KICAD_PORT:-5555}
|
|
command: ["node", "dist/index.js"]
|
|
profiles:
|
|
- dev
|
|
|
|
# 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
|
|
restart: unless-stopped
|
|
environment:
|
|
- PYTHONUNBUFFERED=1
|
|
command: ["uvx", "blender-mcp"]
|
|
profiles:
|
|
- dev
|
|
|
|
# FreeCAD MCP - CAD modeling
|
|
freecad-mcp:
|
|
image: kneldevstack-aimiddleware-freecad-mcp
|
|
build:
|
|
context: ./vendor/freecad-mcp
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-kubernetes-mcp
|
|
build:
|
|
context: ./vendor/kubernetes-mcp-server
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-docker-mcp
|
|
build:
|
|
context: ./vendor/docker-mcp
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-proxmox-mcp
|
|
build:
|
|
context: ./vendor/ProxmoxMCP
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-terraform-mcp
|
|
build:
|
|
context: ./vendor/terraform-mcp-server
|
|
dockerfile: Dockerfile
|
|
target: dev
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-cloudron-mcp
|
|
build:
|
|
context: ./vendor/mcp-cloudron
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
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
|
|
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
|
|
restart: unless-stopped
|
|
environment:
|
|
- UPSTASH_REDIS_REST_URL=${UPSTASH_REDIS_REST_URL}
|
|
- UPSTASH_REDIS_REST_TOKEN=${UPSTASH_REDIS_REST_TOKEN}
|
|
profiles:
|
|
- dev
|
|
|
|
# ==========================================
|
|
# Content Management (4 servers)
|
|
# ==========================================
|
|
|
|
# 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
|
|
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 integration
|
|
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}
|
|
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
|
|
restart: unless-stopped
|
|
environment:
|
|
- DOCSPACE_HOST=${DOCSPACE_HOST}
|
|
- DOCSPACE_TOKEN=${DOCSPACE_TOKEN}
|
|
profiles:
|
|
- ops
|
|
|
|
# WordPress MCP Adapter
|
|
wordpress-mcp:
|
|
image: kneldevstack-aimiddleware-wordpress-mcp
|
|
build:
|
|
context: ./vendor/mcp-adapter
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
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}
|
|
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
|
|
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:
|
|
image: kneldevstack-aimiddleware-postizz-mcp
|
|
build:
|
|
context: ./vendor/postizz-MCP
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-matomo-mcp
|
|
build:
|
|
context: ./vendor/matomo-mcp-client
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-matomo-mcp
|
|
restart: unless-stopped
|
|
environment:
|
|
- MATOMO_URL=${MATOMO_URL}
|
|
- MATOMO_TOKEN=${MATOMO_TOKEN}
|
|
profiles:
|
|
- ops
|
|
|
|
# Bitwarden MCP - Password vault
|
|
bitwarden-mcp:
|
|
image: kneldevstack-aimiddleware-bitwarden-mcp
|
|
build:
|
|
context: ./vendor/mcp-server
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-gimp-mcp
|
|
build:
|
|
context: ./vendor/gimp-mcp
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-gimp-mcp
|
|
restart: unless-stopped
|
|
environment:
|
|
- PYTHONUNBUFFERED=1
|
|
command: ["uvx", "gimp-mcp"]
|
|
profiles:
|
|
- dev
|
|
|
|
# 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
|
|
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:
|
|
image: kneldevstack-aimiddleware-mcp-redmine
|
|
build:
|
|
context: ./vendor/mcp-redmine
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-mcp-ansible
|
|
build:
|
|
context: ./vendor/mcp-ansible
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-elasticsearch-mcp
|
|
build:
|
|
context: ./vendor/mcp-server-elasticsearch
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-audiobook-mcp
|
|
build:
|
|
context: ./vendor/audiobook-mcp-server
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
image: kneldevstack-aimiddleware-drawio-mcp
|
|
build:
|
|
context: ./vendor/drawio-mcp-server
|
|
dockerfile: Dockerfile
|
|
container_name: kneldevstack-aimiddleware-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:
|
|
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
|
|
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
|
|
restart: "no"
|
|
profiles:
|
|
- dev
|
|
|
|
# ==========================================
|
|
# Design Tools (Added Later)
|
|
# ==========================================
|
|
|
|
# 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
|
|
restart: unless-stopped
|
|
environment:
|
|
- PENPOT_URL=${PENPOT_URL:-https://design.penpot.app}
|
|
- PENPOT_TOKEN=${PENPOT_TOKEN}
|
|
profiles:
|
|
- dev
|