====== MCP Inspector ====== https://github.com/modelcontextprotocol/inspector ===== Docker et Php STDIO ===== 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 [[https://github.com/modelcontextprotocol/inspector/tree/main#dns-rebinding-protection|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''. * Le point d'entrée sur mcp est ''/home/user/dev/mbox-mcp/bin/mbox-mcp.php'' * Les datas nécessaire au MCP sont dans ''/home/user/dev/mbox-mcp/data'' Ce qui donne dans l'IHM de MCP inspector : * **Transport** : STDIO * **Command** : php * **Arguments**: /mcp/bin/mbox-mcp.php /mcp-data/www