MCP Inspector

há 2 semanas 7

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:

YAMLservices: 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: trueservices: 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