- Move gimp-mcp Dockerfile to tracked dockerfiles/ directory - Update entrypoint from uvx gimp-mcp to uvx gimp-mcp-server - Add uv.lock to dependency copy step - Update docker-compose.yml to use dockerfiles/gimp-mcp/Dockerfile
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
|
|
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
|
|
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
|
|
# NOTE: This is a stdio-based LSP server, run on-demand by Crush via docker run
|
|
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: "no"
|
|
environment:
|
|
- GHOST_API_URL=${GHOST_API_URL:-http://localhost:2368}
|
|
- GHOST_ADMIN_API_KEY=${GHOST_ADMIN_API_KEY:-012345678901234567890123:0123456789012345678901234567890123456789012345678901234567890123}
|
|
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: ../../dockerfiles/gimp-mcp/Dockerfile
|
|
container_name: kneldevstack-aimiddleware-gimp-mcp
|
|
restart: unless-stopped
|
|
environment:
|
|
- PYTHONUNBUFFERED=1
|
|
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: ../../dockerfiles/audiobook-mcp/Dockerfile
|
|
container_name: kneldevstack-aimiddleware-audiobook-mcp
|
|
restart: unless-stopped
|
|
environment:
|
|
- AUDIOBOOK_ROOT=${AUDIOBOOK_ROOT:-/audiobooks}
|
|
volumes:
|
|
- ${AUDIOBOOK_ROOT:-/audiobooks}:/audiobooks
|
|
command: ["node", "dist/index.js"]
|
|
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
|
|
# NOTE: This is a stdio-based LSP server, run on-demand by Crush via docker run
|
|
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
|
|
# NOTE: This is a stdio-based LSP server, run on-demand by Crush via docker run
|
|
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
|