MCP server 'supabase' sendo removido/adicionado repetidamente com comando malformado (openssl rand -hex 32 não interpolado)
What's Wrong?
Durante uma sessão de trabalho, o comando node (rodado repetidas vezes via Bash tool dentro do Claude Code) disparava, a cada execução, mensagens automáticas de reconfiguração de um MCP server local chamado "supabase":
Removed MCP server "supabase" from local config
File modified: ~/.claude.json [project: <project-path>]
Added stdio MCP server supabase with command: npx -y @supabase/mcp-server-supabase@latest --access-token <token> openssl rand -hex 32 to local config
File modified: ~/.claude.json [project: <project-path>]
O comando reconstruído estava malformado: o argumento --access-token <token> vinha seguido de openssl rand -hex 32 como texto literal solto no fim do comando — sugerindo uma interpolação de shell (provavelmente algo como $(openssl rand -hex 32)) que não foi executada/substituída corretamente antes de compor o comando salvo em ~/.claude.json.
Isso teve dois efeitos negativos:
- Um token de acesso (Supabase Personal Access Token) foi impresso em texto puro repetidas vezes no output do terminal, ficando exposto no histórico/transcript da sessão.
- O MCP server "supabase" ficava sendo removido e recriado a cada execução de
node, um comportamento de loop que não deveria acontecer.
Não encontramos a causa no lado do projeto (sem .mcp.json, sem .claude/settings.json/settings.local.json com config de MCP), nem no shell profile do usuário (.zshrc, .zprofile), nem em cron/launchd. A formatação da mensagem ("File modified: ~/.claude.json [project: ...]") corresponde ao padrão interno do próprio Claude Code CLI para relatar mudanças via mcp add/mcp remove, o que sugere que a causa é interna à aplicação (possivelmente ligada à extensão do VS Code ou a alguma rotina de sincronização/reconexão de sessão), não a uma configuração externa.
Removemos e reconfiguramos manualmente o server (claude mcp remove supabase + claude mcp add supabase -- npx -y @supabase/mcp-server-supabase@latest --access-token <novo-token>) com um token novo (o anterior foi rotacionado por precaução, já que havia sido exposto). Após isso, claude mcp list mostrou o server conectado com o comando limpo (sem o openssl rand -hex 32 sobrando). Não confirmamos, no entanto, se o comportamento automático de remover/adicionar a cada node executado voltaria a ocorrer — não rodamos outro script após o fix para testar recorrência.
What Should Happen?
O MCP server deveria ser configurado uma única vez (ou apenas quando necessário), sem entrar em um loop de remoção/recriação a cada execução de comandos no terminal integrado. E, quando um comando de configuração for gerado dinamicamente (com token de acesso), ele nunca deveria ser impresso em texto puro no output visível ao usuário/transcript.
Steps to Reproduce
- Ter um MCP server local "supabase" configurado (via
claude mcp add supabase -- npx -y @supabase/mcp-server-supabase@latest --access-token <token>). - Rodar comandos
node <script>.mjsrepetidamente via o Bash tool do Claude Code, dentro de uma sessão de trabalho longa. - Observar, no output do terminal, mensagens repetidas de "Removed MCP server 'supabase' from local config" seguidas de "Added stdio MCP server supabase with command: ... --access-token <token> openssl rand -hex 32 to local config" — com o token em texto puro e o comando malformado.
Preflight checklist
- [x] I have searched existing issues and this is not a duplicate
- [x] I am running the latest version of Claude Code
- [x] I have provided clear reproduction steps
Environment
- Claude Code Version: 2.1.185 (Claude Code)
- Is this a regression?: Don't know — não temos evidência de que funcionava corretamente em uma versão anterior, só observamos o comportamento nesta sessão.
- Platform: Anthropic API
- OS: macOS
- Terminal: Terminal.app (via extensão do VS Code)
Additional context
Por segurança, o token de acesso exposto nos logs foi revogado e substituído por um novo antes da abertura desta issue. O token real não está incluído aqui — foi substituído por <token> nos trechos de log acima.