Saudações.
Hoje vou ensinar como instalar o MCP Inspector.
1 – Sobre o MCP Inspector
O MCP Inspector é um agenda que, como o nome diz, inspeciona do número telefônico de registro de contexto para modelos de IA.
Ele é um agenda oficial do planejamento MCP e permite que o administrador ou utilizador de um máquina MCP possa navegar nos recursos providos como se fosse um agente de IA.
Links:
Ele pode ser executado dentro de projetos, paralelo a projetos ou independente em uma URL (localhost ou pública).
Eu gosto mais da última opção, URL pública, implementando em sua infra essa instrumento muito útil.
2 – Instalando no Docker
Vamos rodar o MCP Inspector no Docker, criando o container mcp-inspector .
2.1 – Rede Docker
Criando a arcabouço para containers (network_public ):
Bash # Rede de containers
docker network create network_public \
-d ponte de rede \
-o com.docker.network.bridge.name=br-net-public \
-o com.docker.network.driver.mtu=1500 \
-o com.docker.network.bridge.gateway_mode_ipv4=nat-unprotected \
--subnet 10.249.0.0/16 \
--gateway 10.249.255.254;
# Rede de containers
docker network create network_public \
-d bridge \
-o com.docker.network.bridge.name=br-net-public \
-o com.docker.network.driver.mtu= 1500 \
-o com.docker.network.bridge.gateway_mode_ipv4=nat-unprotected \
--subnet 10.249.0.0/ 16 \
--gateway 10.249.255.254 ;
2.2 – Container do MCPI
Vou rodar o container publicando o acesso pelas portas diretas (HTTP) e por proxy-reverso Traefik.
Personalize o residência mcpi.seudominio.com.br para um nome de servidor de nomes que você configurou apontando para o endereço de protocolo do máquina Docker.
Bash # Variaveis
NAME=mcp-inspector;
IMAGE="ghcr.io/modelcontextprotocol/inspector:latest";
# nomes de dns:
FQDN="mcpi.seudominio.com.br";
#FQDN="mcp-inspector.$(hostname -f)";
#FQDN="mcp-inspector.$(hostname -d)";
# URLs de acesso CORs
URL_LOCAL="http://localhost:8080";
URL_CONTAINER="http://localhost:6274,http://127.0.0.1:6274";
URL_PUBLICS="https://$FQDN";
# Juntar
ALLOWED_ORIGINS="$URL_LOCAL,$URL_CONTAINER,$URL_PUBLICS";
# Atualizar/baixar imagem:
docker pull $IMAGE;
# Renovar/Rodar:
docker rm -f $NAME 2>/dev/null;
docker run \
-d --restart=always \
--name $NAME -h $NAME.intranet.br \
--memory=1g --memory-swap=1g --shm-size=1g \
\
--network network_public \
\
-p 6274:6274 \
-p 6277:6277 \
\
--read-only \
--tmpfs /run:rw,noexec,nosuid,size=16m \
--tmpfs /tmp:rw,noexec,nosuid,size=16m \
\
-e HOST=0.0.0.0 \
-e CLIENT_PORT=6274 \
-e SERVER_PORT=6277 \
\
-e ALLOWED_ORIGINS=$ALLOWED_ORIGINS \
-e DANGEROUSLY_OMIT_AUTH=true \
-e MCP_AUTO_OPEN_ENABLED=false \
\
--label "traefik.enable=true" \
\
--label "traefik.http.routers.${NAME}.rule=Host(\`$FQDN\`)" \
--label "traefik.http.routers.${NAME}.entrypoints=web,websecure" \
--label "traefik.http.routers.${NAME}.tls=true" \
--label "traefik.http.routers.${NAME}.tls.certresolver=letsencrypt" \
--label "traefik.http.routers.${NAME}.service=${NAME}" \
--label "traefik.http.services.${NAME}.loadbalancer.server.port=6274" \
--label "traefik.http.services.${NAME}.loadbalancer.passHostHeader=true" \
\
$IMAGE \
server /data --console-address ":9001";
# Variaveis
NAME = mcp-inspector ;
IMAGE = " ghcr.io/modelcontextprotocol/inspector:latest " ;
# nomes de dns:
FQDN = " mcpi.seudominio.com.br " ;
#FQDN="mcp-inspector.$(hostname -f)";
#FQDN="mcp-inspector.$(hostname -d)";
# URLs de acesso CORs
URL_LOCAL = " http://localhost:8080 " ;
URL_CONTAINER = " http://localhost:6274,http://127.0.0.1:6274 " ;
URL_PUBLICS = " https:// $FQDN " ;
# Juntar
ALLOWED_ORIGINS = " $URL_LOCAL , $URL_CONTAINER , $URL_PUBLICS " ;
# Atualizar/baixar imagem:
docker pull $IMAGE ;
# Renovar/Rodar:
docker rm -f $NAME 2 > /dev/null ;
docker run \
-d --restart=always \
--name $NAME -h $NAME .intranet.br \
--memory=1g --memory-swap=1g --shm-size=1g \
\
--network network_public \
\
-p 6274 : 6274 \
-p 6277 : 6277 \
\
--read-only \
--tmpfs /run:rw,noexec,nosuid,size=16m \
--tmpfs /tmp:rw,noexec,nosuid,size=16m \
\
-e HOST=0.0.0.0 \
-e CLIENT_PORT= 6274 \
-e SERVER_PORT= 6277 \
\
-e ALLOWED_ORIGINS= $ALLOWED_ORIGINS \
-e DANGEROUSLY_OMIT_AUTH= true \
-e MCP_AUTO_OPEN_ENABLED= false \
\
--label " traefik.enable=true " \
\
--label " traefik.http.routers. ${ NAME } .rule=Host( \` $FQDN \` ) " \
--label " traefik.http.routers. ${ NAME } .entrypoints=web,websecure " \
--label " traefik.http.routers. ${ NAME } .tls=true " \
--label " traefik.http.routers. ${ NAME } .tls.certresolver=letsencrypt " \
--label " traefik.http.routers. ${ NAME } .service= ${ NAME }" \
--label " traefik.http.services. ${ NAME } .loadbalancer.server.port=6274 " \
--label " traefik.http.services. ${ NAME } .loadbalancer.passHostHeader=true " \
\
$IMAGE \
server /data --console-address " :9001 " ;
2.3 – Stack para Compose
Caso prefira no modelo de Stack para docker compose:
YAML services:
mcp-inspector:
image: ghcr.io/modelcontextprotocol/inspector:latest
container_name: mcp-inspector
hostname: mcp-inspector.intranet.br
restart: always
mem_limit: 1g
memswap_limit: 1g
shm_size: 1g
networks:
- network_public
ports:
- "6274:6274"
- "6277:6277"
read_only: true
tmpfs:
- /run:rw,noexec,nosuid,size=16m
- /tmp:rw,noexec,nosuid,size=16m
environment:
HOST: 0.0.0.0
CLIENT_PORT: 6274
SERVER_PORT: 6277
ALLOWED_ORIGINS: "https://mcpi.seudominio.com.br"
DANGEROUSLY_OMIT_AUTH: "true"
MCP_AUTO_OPEN_ENABLED: "false"
command: server /data --console-address ":9001"
labels:
traefik.enable: "true"
traefik.http.routers.mcp-inspector.rule: "Host(`mcpi.seudominio.com.br`)"
traefik.http.routers.mcp-inspector.entrypoints: "web,websecure"
traefik.http.routers.mcp-inspector.tls: "true"
traefik.http.routers.mcp-inspector.tls.certresolver: "letsencrypt"
traefik.http.routers.mcp-inspector.service: "mcp-inspector"
traefik.http.services.mcp-inspector.loadbalancer.server.port: "6274"
traefik.http.services.mcp-inspector.loadbalancer.passHostHeader: "true"
networks:
network_public:
external: true services :
mcp-inspector :
image : ghcr.io/modelcontextprotocol/inspector:latest
container_name : mcp-inspector
hostname : mcp-inspector.intranet.br
restart : always
mem_limit : 1g
memswap_limit : 1g
shm_size : 1g
networks :
- network_public
ports :
- " 6274:6274 "
- " 6277:6277 "
read_only : true
tmpfs :
- /run:rw,noexec,nosuid,size=16m
- /tmp:rw,noexec,nosuid,size=16m
environment :
HOST : 0.0.0.0
CLIENT_PORT : 6274
SERVER_PORT : 6277
ALLOWED_ORIGINS : " https://mcpi.seudominio.com.br "
DANGEROUSLY_OMIT_AUTH : " true "
MCP_AUTO_OPEN_ENABLED : " false "
command : server /data --console-address ":9001"
labels :
traefik.enable : " true "
traefik.http.routers.mcp-inspector.rule : " Host(`mcpi.seudominio.com.br`) "
traefik.http.routers.mcp-inspector.entrypoints : " web,websecure "
traefik.http.routers.mcp-inspector.tls : " true "
traefik.http.routers.mcp-inspector.tls.certresolver : " letsencrypt "
traefik.http.routers.mcp-inspector.service : " mcp-inspector "
traefik.http.services.mcp-inspector.loadbalancer.server.port : " 6274 "
traefik.http.services.mcp-inspector.loadbalancer.passHostHeader : " true "
networks :
network_public :
external : true
2.4 – Acesso
Abra no navegador (exemplo: https://mcpi.seudominio.com.br ou http://ip-do-servidor:6274 ) no navegador.
3 – Outras Ferramentas
Existem várias ferramentas que você pode instalar no PC/Notebook ou em máquina para inspecionar, testar, estressar e depurar seu máquina MCP.
3.1 – Ferramentas online
CUIDADO : Ferramentas conectado podem expor seu MCP a vazamento de credenciais e dados, use com foco e não forneça chaves ou acessos de produção.
Caso queira testar um máquina MCP usando ferramentas online, eis algumas opções:
.
“Nunca teste a profundidade do rio com os dois pés “ Provérbio Africano
Terminamos por hoje!
Patrick Brandão, patrickbrandao@gmail.com