Pour utiliser le transport STDIO il faut que le moteur soit dans le container, en l’occurrence Php.
Le Dockerfile, un mix avec les images ghcr.io/modelcontextprotocol/inspector et php:8.4-cli-bookworm :
# ── Stage 1 : récupérer les fichiers de l'inspector ──────────────────────────
FROM ghcr.io/modelcontextprotocol/inspector:latest AS inspector
# ── Stage 2 : PHP + Composer + dépendances du projet ─────────────────────
FROM php:8.4-cli-bookworm AS php-deps
RUN apt-get update && apt-get install -y \
libxml2-dev libonig-dev libicu-dev \
&& docker-php-ext-install mbstring xml \
&& rm -rf /var/lib/apt/lists/*
# Pas besoin de composer, le projet est géré localement (hors docker)
#COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# ── Stage 3 : image finale — Node.js + PHP + inspector + ton projet ───────────
FROM node:24-slim
# PHP depuis le stage "php-deps"
# PHP binaire + config + extensions
COPY --from=php-deps /usr/local/bin/php /usr/local/bin/php
COPY --from=php-deps /usr/local/lib/php /usr/local/lib/php
COPY --from=php-deps /usr/local/etc/php /usr/local/etc/php
# Libs système dont PHP dépend (résultat du ldd)
# $ docker run --rm php:8.4-cli ldd /usr/local/bin/php
COPY --from=php-deps /lib/x86_64-linux-gnu /lib/x86_64-linux-gnu
COPY --from=php-deps /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu
# Fichiers de l'inspector depuis le stage "inspector"
# selon son Dockerfile https://github.com/modelcontextprotocol/inspector/blob/main/Dockerfile
WORKDIR /app
COPY --from=inspector /app/package*.json ./
COPY --from=inspector /app/.npmrc ./
COPY --from=inspector /app/client/package*.json ./client/
COPY --from=inspector /app/server/package*.json ./server/
COPY --from=inspector /app/cli/package*.json ./cli/
COPY --from=inspector /app/node_modules ./node_modules
COPY --from=inspector /app/client/dist ./client/dist
COPY --from=inspector /app/client/bin ./client/bin
COPY --from=inspector /app/server/build ./server/build
COPY --from=inspector /app/cli/build ./cli/build
ENV CLIENT_PORT=6274
ENV SERVER_PORT=6277
EXPOSE 6274 6277
ENTRYPOINT ["npm", "start"]
On construit l'image :
docker build -t cyrille37/mcp-inspector .
On run l'inspector avec les bons mappings de dossier :
docker run -i --rm \ -p 127.0.0.1:6274:6274 -p 127.0.0.1:6277:6277 -e HOST=0.0.0.0 \ -e MCP_AUTO_OPEN_ENABLED=false \ -e ALLOWED_ORIGINS="http://127.0.0.1:6274,http://localhost:6274" \ -v /home/user/dev/mbox-mcp:/mcp \ -v /home/user/dev/mbox-mcp/data:/mcp-data \ cyrille37/mcp-inspector
Le ALLOWED_ORIGINS est important pour la communication entre l'IHM et le Proxy. Voir inspector/dns-rebinding-protection. Sans ce paramètre on voit dans la console docker : “Invalid origin: http://127.0.0.1:6274”
Ici le projet Php+composer est dans le dossier /home/user/dev/mbox-mcp.
/home/user/dev/mbox-mcp/bin/mbox-mcp.php/home/user/dev/mbox-mcp/dataCe qui donne dans l'IHM de MCP inspector :