run-docker-mcp.sh•2.91 kB
#!/bin/bash
# PrestaShop MCP Server - Docker Wrapper for Claude Desktop/Code
#
# This script makes it easy to run the PrestaShop MCP server in Docker
# and integrate it with Claude Desktop or Claude Code.
#
# Usage:
# ./run-docker-mcp.sh
#
# Environment Variables:
# PRESTASHOP_DOCS_PATH - Path to local PrestaShop docs (optional, will auto-fetch if not provided)
# PRESTASHOP_AUTO_FETCH - Set to "false" to disable auto-fetching (default: true)
# PRESTASHOP_DB_PATH - Path to local database cache (optional)
set -e
# Configuration
IMAGE_NAME="prestashop-mcp:latest"
CONTAINER_NAME="prestashop-mcp-$$" # Unique name per invocation
# Check if Docker is running
if ! docker info >/dev/null 2>&1; then
echo "ERROR: Docker is not running. Please start Docker Desktop." >&2
exit 1
fi
# Check if image exists, build if missing
if ! docker image inspect "$IMAGE_NAME" >/dev/null 2>&1; then
echo "Building PrestaShop MCP Docker image..." >&2
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
docker build -f "$SCRIPT_DIR/Dockerfile.mcp" -t "$IMAGE_NAME" "$SCRIPT_DIR" >&2
echo "Build complete!" >&2
fi
# Prepare Docker run arguments
DOCKER_ARGS=(
--rm
--name "$CONTAINER_NAME"
-i # Interactive mode for STDIN (NO -t for TTY!)
)
# Mount local docs if available
if [ -n "$PRESTASHOP_DOCS_PATH" ] && [ -d "$PRESTASHOP_DOCS_PATH" ]; then
echo "Using local documentation from: $PRESTASHOP_DOCS_PATH" >&2
DOCKER_ARGS+=(
-v "$PRESTASHOP_DOCS_PATH:/data/prestashop-docs:ro"
-e "PRESTASHOP_DOCS_PATH=/data/prestashop-docs"
)
else
echo "No local docs mounted. Will auto-fetch from GitHub." >&2
fi
# Mount database cache if specified
if [ -n "$PRESTASHOP_DB_PATH" ]; then
DB_DIR=$(dirname "$PRESTASHOP_DB_PATH")
mkdir -p "$DB_DIR"
echo "Using database cache: $PRESTASHOP_DB_PATH" >&2
DOCKER_ARGS+=(
-v "$PRESTASHOP_DB_PATH:/app/database.db"
)
fi
# Set auto-fetch behavior
AUTO_FETCH="${PRESTASHOP_AUTO_FETCH:-true}"
DOCKER_ARGS+=(-e "PRESTASHOP_AUTO_FETCH=$AUTO_FETCH")
# Print connection info (to stderr, not stdout - important for MCP!)
echo "" >&2
echo "========================================" >&2
echo "PrestaShop MCP Server (Docker)" >&2
echo "========================================" >&2
echo "Ready to accept MCP requests via STDIO" >&2
echo "" >&2
echo "Add to your Claude Desktop config:" >&2
echo '{' >&2
echo ' "mcpServers": {' >&2
echo ' "prestashop": {' >&2
echo " \"command\": \"$(realpath "$0")\"" >&2
echo ' }' >&2
echo ' }' >&2
echo '}' >&2
echo "========================================" >&2
echo "" >&2
# Cleanup on exit
cleanup() {
docker stop "$CONTAINER_NAME" >/dev/null 2>&1 || true
}
trap cleanup EXIT INT TERM
# Run the container
# IMPORTANT: No -t flag! This breaks STDIO communication with MCP clients
exec docker run "${DOCKER_ARGS[@]}" "$IMAGE_NAME"