Table des matières

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 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.

Ce qui donne dans l'IHM de MCP inspector :