fix: resolve MCP server startup and configuration issues

- Remove duplicate uvx commands from docker-compose.yml (blender, freecad, gimp)
- Update ghost-mcp to use default environment values for testing
- Update crush.json LSP commands with proper start arguments
- Add ffmpeg dependency to audiobook-mcp Dockerfile
- Create .env file with dummy values for all MCP servers
- Update STATUS.md for ghost-mcp working status

Note: gimp-mcp entrypoint fix excluded (vendor directory is gitignored)
This commit is contained in:
2026-01-22 14:22:41 -05:00
parent 2307eb072d
commit 556e0a32ca
5 changed files with 102 additions and 14 deletions

86
.env Normal file
View File

@@ -0,0 +1,86 @@
# Dummy environment variables for MCP servers
# Replace with actual values as needed
# KiCAD
KICAD_HOST=host.docker.internal
KICAD_PORT=5555
# Proxmox
PROXMOX_HOST=https://proxmox.example.com:8006
PROXMOX_USER=root@pam
PROXMOX_TOKEN=dummy-token-replace-with-real-token
PROXMOX_NODE=pve
# Cloudron
CLOUDRON_URL=https://cloudron.example.com
CLOUDRON_TOKEN=dummy-cloudron-token-replace-with-real
# Context7 (Upstash Redis)
UPSTASH_REDIS_REST_URL=https://dummy-redis-url.upstash.io
UPSTASH_REDIS_REST_TOKEN=dummy-redis-token-replace-with-real
# Nextcloud
NEXTCLOUD_HOST=https://nextcloud.example.com
NEXTCLOUD_USERNAME=admin
NEXTCLOUD_APP_PASSWORD=dummy-app-password-replace-with-real
# Ghost (defaults already set in docker-compose)
GHOST_API_URL=http://localhost:2368
GHOST_ADMIN_API_KEY=012345678901234567890123:0123456789012345678901234567890123456789012345678901234567890123
# DocSpace
DOCSPACE_HOST=https://docspace.example.com
DOCSPACE_TOKEN=dummy-docspace-token-replace-with-real
# WordPress
WORDPRESS_URL=https://wordpress.example.com
WORDPRESS_USERNAME=admin
WORDPRESS_APPLICATION_PASSWORD=dummy-app-password-replace-with-real
# Discourse
DISCOURSE_URL=https://discourse.example.com
DISCOURSE_API_KEY=dummy-api-key-replace-with-real
DISCOURSE_API_USERNAME=admin
# IMAP
IMAP_SERVER=imap.example.com
IMAP_PORT=993
IMAP_USERNAME=user@example.com
IMAP_PASSWORD=dummy-password-replace-with-real
# Postiz
POSTIZ_URL=https://postiz.example.com
POSTIZ_API_KEY=dummy-api-key-replace-with-real
# Matomo
MATOMO_URL=https://matomo.example.com
MATOMO_TOKEN=dummy-token-replace-with-real
# Bitwarden
BITWARDEN_CLIENT_ID=dummy-client-id
BITWARDEN_CLIENT_SECRET=dummy-client-secret
BITWARDEN_PASSWORD=dummy-password
BITWARDEN_SERVER_URL=https://vault.bitwarden.com
# Snipe-IT
SNIPEIT_URL=https://snipeit.example.com
SNIPEIT_TOKEN=dummy-token-replace-with-real
# Redmine
REDMINE_URL=https://redmine.example.com
REDMINE_API_KEY=dummy-api-key-replace-with-real
# Elasticsearch
ELASTICSEARCH_URL=http://localhost:9200
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=dummy-password-replace-with-real
# Audiobook
AUDIOBOOK_ROOT=/audiobooks
# Draw.io (default in compose)
DRAWIO_URL=https://app.diagrams.net
# Penpot (default URL in compose)
PENPOT_URL=https://design.penpot.app
PENPOT_TOKEN=dummy-penpot-token-replace-with-real

View File

@@ -16,7 +16,7 @@ Tracking the setup and validation of MCP/LSP servers via Docker Compose.
| matomo-mcp-client | Pending | | | matomo-mcp-client | Pending | |
| imap-mcp | Built | Container built successfully with uvx entrypoint | | imap-mcp | Built | Container built successfully with uvx entrypoint |
| mcp-redmine | Built | Container built successfully with uvx entrypoint | | mcp-redmine | Built | Container built successfully with uvx entrypoint |
| ghost-mcp | Built | Using npx with @fanyangmeng/ghost-mcp package (node:22-alpine). Requires GHOST_API_URL and GHOST_ADMIN_API_KEY ({24_hex}:{64_hex} format). Container starts successfully with valid credentials. | | ghost-mcp | Working | Built from source (229MB). MCP server initializes and starts properly. Requires GHOST_API_URL and GHOST_ADMIN_API_KEY ({24_hex}:{64_hex} format). Uses default dummy values for testing. Crush can connect via `docker run -i --rm`. Updated docker-compose.yml with restart: "no" for stdio-based containers. |
| discourse-mcp | Pending | | | discourse-mcp | Pending | |
| mcp-cloudron | Pending | | | mcp-cloudron | Pending | |
| postizz-MCP | Pending | | | postizz-MCP | Pending | |

View File

@@ -3,15 +3,15 @@
"lsp": { "lsp": {
"bash": { "bash": {
"command": "docker", "command": "docker",
"args": ["run", "-i", "--rm", "kneldevstack-aimiddleware-bash-language-server"] "args": ["run", "-i", "--rm", "kneldevstack-aimiddleware-bash-language-server", "start"]
}, },
"docker": { "docker": {
"command": "docker", "command": "docker",
"args": ["run", "-i", "--rm", "kneldevstack-aimiddleware-docker-language-server"] "args": ["run", "-i", "--rm", "kneldevstack-aimiddleware-docker-language-server", "start", "--stdio"]
}, },
"markdown": { "markdown": {
"command": "docker", "command": "docker",
"args": ["run", "-i", "--rm", "kneldevstack-aimiddleware-marksman"] "args": ["run", "-i", "--rm", "kneldevstack-aimiddleware-marksman", "server"]
} }
}, },
"mcp": { "mcp": {

View File

@@ -31,7 +31,6 @@ services:
restart: unless-stopped restart: unless-stopped
environment: environment:
- PYTHONUNBUFFERED=1 - PYTHONUNBUFFERED=1
command: ["uvx", "blender-mcp"]
profiles: profiles:
- dev - dev
@@ -45,7 +44,6 @@ services:
restart: unless-stopped restart: unless-stopped
environment: environment:
- PYTHONUNBUFFERED=1 - PYTHONUNBUFFERED=1
command: ["uvx", "freecad-mcp"]
profiles: profiles:
- dev - dev
@@ -139,6 +137,7 @@ services:
# ========================================== # ==========================================
# Bash Language Server - LSP for bash # 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: bash-language-server:
image: kneldevstack-aimiddleware-bash-language-server image: kneldevstack-aimiddleware-bash-language-server
build: build:
@@ -192,10 +191,10 @@ services:
context: ./vendor/ghost-mcp context: ./vendor/ghost-mcp
dockerfile: ../../dockerfiles/ghost-mcp/Dockerfile dockerfile: ../../dockerfiles/ghost-mcp/Dockerfile
container_name: kneldevstack-aimiddleware-ghost-mcp container_name: kneldevstack-aimiddleware-ghost-mcp
restart: unless-stopped restart: "no"
environment: environment:
- GHOST_API_URL=${GHOST_API_URL} - GHOST_API_URL=${GHOST_API_URL:-http://localhost:2368}
- GHOST_ADMIN_API_KEY=${GHOST_ADMIN_API_KEY} - GHOST_ADMIN_API_KEY=${GHOST_ADMIN_API_KEY:-012345678901234567890123:0123456789012345678901234567890123456789012345678901234567890123}
profiles: profiles:
- ops - ops
@@ -329,7 +328,6 @@ services:
restart: unless-stopped restart: unless-stopped
environment: environment:
- PYTHONUNBUFFERED=1 - PYTHONUNBUFFERED=1
command: ["uvx", "gimp-mcp"]
profiles: profiles:
- dev - dev
@@ -404,14 +402,14 @@ services:
image: kneldevstack-aimiddleware-audiobook-mcp image: kneldevstack-aimiddleware-audiobook-mcp
build: build:
context: ./vendor/audiobook-mcp-server context: ./vendor/audiobook-mcp-server
dockerfile: Dockerfile dockerfile: ../../dockerfiles/audiobook-mcp/Dockerfile
container_name: kneldevstack-aimiddleware-audiobook-mcp container_name: kneldevstack-aimiddleware-audiobook-mcp
restart: unless-stopped restart: unless-stopped
environment: environment:
- AUDIOBOOK_LIBRARY_PATH=${AUDIOBOOK_LIBRARY_PATH:-/audiobooks} - AUDIOBOOK_ROOT=${AUDIOBOOK_ROOT:-/audiobooks}
volumes: volumes:
- ${AUDIOBOOK_LIBRARY_PATH:-/audiobooks}:/audiobooks - ${AUDIOBOOK_ROOT:-/audiobooks}:/audiobooks
command: ["npx", "-y", "audiobook-mcp-server"] command: ["node", "dist/index.js"]
profiles: profiles:
- dev - dev
@@ -434,6 +432,7 @@ services:
- dev - dev
# Docker Language Server # Docker Language Server
# NOTE: This is a stdio-based LSP server, run on-demand by Crush via docker run
docker-language-server: docker-language-server:
image: kneldevstack-aimiddleware-docker-language-server image: kneldevstack-aimiddleware-docker-language-server
build: build:
@@ -445,6 +444,7 @@ services:
- dev - dev
# Marksman LSP - Markdown language server # Marksman LSP - Markdown language server
# NOTE: This is a stdio-based LSP server, run on-demand by Crush via docker run
marksman: marksman:
image: kneldevstack-aimiddleware-marksman image: kneldevstack-aimiddleware-marksman
build: build:

View File

@@ -1,5 +1,7 @@
FROM node:22-alpine FROM node:22-alpine
RUN apk add --no-cache ffmpeg
WORKDIR /app WORKDIR /app
COPY package.json package-lock.json* ./ COPY package.json package-lock.json* ./