Como conectar um MCP local ao ChatGPT usando o Secure MCP Tunnel



⚠️ Nota sobre o escopo
Este guia apresenta um setup voltado principalmente para uso pessoal e desenvolvimento local. Ao transformar uma integração MCP em um produto para terceiros, é mais adequado considerar uma arquitetura própria de autenticação e autorização, como OAuth, em vez de simplesmente reproduzir este setup local.
O
tunnel-clienttambém contempla runtimes gerenciados e cenários de infraestrutura, mas não aprofundei essas possibilidades neste artigo. Portanto, não estou propondo aqui uma arquitetura específica para produção, AWS ou Bedrock — esta é apenas uma observação baseada no funcionamento e na documentação do projeto.
Objetivo: executar um servidor MCP na sua própria máquina e permitir que o ChatGPT o utilize sem expor o servidor MCP diretamente à Internet.
O Model Context Protocol (MCP) permite que aplicações de IA utilizem ferramentas e recursos externos.
O Secure MCP Tunnel, disponibilizado pela OpenAI, permite conectar um MCP que continua rodando localmente ao ChatGPT. O tunnel-client mantém uma conexão de saída com a infraestrutura da OpenAI e encaminha as chamadas recebidas para o processo MCP local.
ChatGPT
│
▼
OpenAI Secure MCP Tunnel
│
│ conexão de saída
▼
tunnel-client
│
│ stdio
▼
MCP local
Assim, não é necessário expor uma porta do computador à Internet ou utilizar serviços como ngrok.
Nota: este guia apresenta o processo utilizando Linux. O conceito é o mesmo em outros sistemas, mas os comandos de instalação e configuração podem variar.
Você precisará de:
stdio;tunnel-client.O Developer Mode permite criar e utilizar aplicativos MCP personalizados no ChatGPT.
Para habilitá-lo, acesse:
ChatGPT → Settings → Apps → Advanced Settings → Developer Mode
A disponibilidade do recurso pode depender do plano ou das configurações do workspace.
Acesse:
Crie um novo Tunnel e copie seu Tunnel ID.
Ele terá um formato semelhante a:
tunnel_<YOUR_TUNNEL_ID>
O Tunnel ID não é uma credencial secreta.
Acesse:
Crie uma Restricted API Key com a permissão:
Tunnels → Read
Guarde a chave somente na sua máquina.
Nunca publique a API Key, coloque-a no Git ou envie-a para terceiros.
Uma Admin API Key não é necessária para conectar um runtime a um Tunnel que já foi criado.
tunnel-clientO tunnel-client é o software distribuído pela OpenAI que executará na máquina onde o MCP está rodando.
Baixe o release correspondente à sua arquitetura em:
OpenAI — tunnel-client Releases
Para Linux x86_64, utilize o pacote linux-amd64.
Depois de extrair o arquivo:
mkdir -p ~/.local/bin
cp tunnel-client ~/.local/bin/
chmod +x ~/.local/bin/tunnel-client
tunnel-client --version
Se o comando não for encontrado, certifique-se de que ~/.local/bin está no seu PATH.
Defina o Tunnel ID:
export CONTROL_PLANE_TUNNEL_ID='tunnel_SEU_ID'
Para informar a API Key sem deixá-la visível no terminal:
read -s CONTROL_PLANE_API_KEY
export CONTROL_PLANE_API_KEY
Agora o tunnel-client poderá utilizar essas variáveis sem que a chave precise ser colocada diretamente nos comandos.
Para demonstrar o processo, utilizaremos o mcp-server-linkedin.
⚠️ Esse é um MCP de terceiros, não desenvolvido ou verificado pela OpenAI ou pelo LinkedIn. O autor deste post não possui vínculo com os responsáveis pelo projeto e não se responsabiliza por eventuais problemas, danos ou consequências decorrentes do uso desse software. Recomenda-se revisar o projeto e utilizá-lo por sua própria conta e risco.
Por isso, antes de executar qualquer MCP de terceiros, revise seu código, dependências, ferramentas disponíveis e credenciais utilizadas.
Neste exemplo, o MCP será executado pelo uvx:
uvx mcp-server-linkedin@latest
O tunnel-client pode iniciar esse processo automaticamente:
tunnel-client runtimes connect \
--alias linkedin \
--tunnel-id "$CONTROL_PLANE_TUNNEL_ID" \
--runtime-api-key env:CONTROL_PLANE_API_KEY \
--mcp-command "uvx mcp-server-linkedin@latest"
O parâmetro --mcp-command pode ser substituído pelo comando necessário para iniciar qualquer outro MCP compatível com stdio.
Depois da conexão, verifique o estado do runtime:
tunnel-client runtimes status linkedin
Um runtime funcionando deverá aparecer como ready:
linkedin ready tunnel_<tunel_id>
Nesse momento, o MCP continua sendo executado localmente, enquanto o Tunnel permite que o ChatGPT encaminhe chamadas para ele.
No ChatGPT, abra:
Settings → Apps
Com o Developer Mode habilitado, adicione um aplicativo MCP personalizado e utilize a conexão por Tunnel.
Selecione o Tunnel criado anteriormente.
Depois, abra um chat e habilite o aplicativo MCP para testar suas ferramentas.
O fluxo completo é:
┌──────────────────┐
│ ChatGPT │
└────────┬─────────┘
│
▼
┌──────────────────────────┐
│ OpenAI Secure MCP Tunnel │
└────────┬─────────────────┘
│
│ conexão de saída
▼
┌──────────────────────────┐
│ tunnel-client │
│ sua máquina │
└────────┬─────────────────┘
│
│ stdio
▼
┌──────────────────────────┐
│ mcp-server-linkedin │
└──────────────────────────┘
O ponto importante é que o servidor MCP não precisa possuir um endpoint HTTP público.
Para consultar os comandos disponíveis na versão instalada:
tunnel-client runtimes --help
Nas versões que possuem o comando stop:
tunnel-client runtimes stop linkedin
Isso interrompe o runtime local.
O Tunnel criado no OpenAI Platform e a API Key continuam existindo. Eles precisam ser removidos separadamente caso não sejam mais necessários.
O Secure MCP Tunnel resolve principalmente o problema de conectividade. Ele não transforma automaticamente um MCP de terceiros em um software confiável.
Um MCP malicioso ou comprometido ainda pode apresentar riscos, incluindo prompt injection e uso indevido das ferramentas ou credenciais às quais ele tenha acesso.
Por isso:
O Tunnel evita a necessidade de expor diretamente o servidor MCP à Internet, mas não elimina os riscos do próprio MCP.