
Seu MCP controla nomes de ferramentas, não o que elas retornam
Se você executa um servidor MCP ao qual os clientes de outras pessoas se conectam, provavelmente você escreveu um perfil: uma lista de nomes de ferramentas que um determinado cliente está autorizado a chamar. O meu tinha quatro entradas e a palavra read-only ao lado dela na documentação.
Um perfil é uma afirmação sobre quais funções são executadas. Não é uma afirmação sobre o que retorna. Esses são conjuntos diferentes, e eu descobri qual deles importa perguntando a um cliente sob o perfil mais restritivo que eu tinha para listar minhas habilidades disponíveis e lendo meu próprio endereço residencial na resposta.
Seis commits em dois dias corrigiram isso e então construíram as três coisas que só foram possíveis uma vez que foi corrigido: identidade por cliente, um log de auditoria e limites de taxa por cliente. A parte interessante são os dois dias, não as funcionalidades.
O que um cliente realmente recebe agora: uma identidade, uma lista de ferramentas, um envelope reduzido, um teto
Vodou pode funcionar como um host MCP, então Cursor ou Claude Desktop ou um script se conecta e alcança a mesma memória e as mesmas ferramentas conectadas. Dois transportes: stdio, onde o cliente inicia seu próprio processo e seu escopo é passado por argv, e uma porta HTTP de loopback atendendo todos os clientes ao mesmo tempo. O caminho HTTP é onde tudo isso deu errado, porque a multiplexação é o que removeu o limite por processo que o stdio obteve de graça.
Uma chamada de um cliente conectado
A ferramenta cujo nome soava como recall respondeu com um inventário dos meus servidores
O perfil somente leitura foi enviado com quatro ferramentas. Uma delas era vc_intelligent_query, na lista porque seu nome soava como recuperação de memória. Era um stub de hello-world. Perguntado "qual é o nome do meu cachorro?", ele retornou um banner de status listando todos os servidores MCP conectados pelo nome.
Essa é exatamente a divulgação que eu havia excluído vc_server_status para evitar. Eu havia removido a ferramenta que diz "aqui está sua topologia" e mantido uma ferramenta que diz a mesma coisa enquanto é nomeada após recall. Eu curadoria o perfil lendo os nomes das ferramentas, que é a mesma coisa que curá-lo lendo cópias de marketing.
Removê-la do perfil levou uma linha. A lição levou mais tempo: eu não poderia te dizer, naquele momento, o que qualquer uma das três restantes realmente retornava, porque eu nunca havia olhado para um corpo de resposta bruto. Eu havia olhado para a lista.
47KB sem cwd, 73KB com ele, e nenhum dos números dizia respeito à lista de ferramentas
Então eu olhei. Cada resultado de ferramenta do nosso despachante tinha um envelope context anexado a ele: diretório de trabalho absoluto, branch do git, hits de memória sem filtro de cofre aplicado, e um resumo de espaço de trabalho de cerca de 24KB que carregava MEMORY.md verbatim.
Sob o perfil restrito, uma simples consulta de habilidades retornou meu endereço residencial e o diretório em que eu estava. Não através de uma ferramenta que alguém classificaria como sensível. Através da ferramenta mais segura da lista, em um campo que o perfil nunca havia ouvido falar.
Retirar uma ferramenta não vale nada enquanto uma permitida carrega os mesmos dados para fora no envelope. A correção reduz os resultados de tools/call às chaves do MCP-spec para cada perfil, exceto o totalmente confiável, e é uma lista de permissão sobre campos, não uma lista de negação: o próximo campo que alguém anexar a um resultado é excluído por padrão, porque o custo de esquecer é a divulgação silenciosa em vez de uma construção quebrada.
Mesma consulta de habilidades, dois perfis
A diferença de 26KB é o envelope. Ele estava saindo sob ambos os perfis antes, e a lista de permissão de ferramentas era idêntica em ambos os casos.
Tudo o que eu havia verificado era curl, e curl nunca mantém uma sessão
A razão pela qual nada disso surgiu antes é que cada teste do modo host MCP era curl contra um servidor que eu havia iniciado eu mesmo no terminal seguinte.
curl nunca envia initialize. Ele nunca mantém uma conexão aberta entre chamadas. Ele nunca intercala dois clientes. Ele nunca vive o suficiente para atingir um temporizador de nível de processo. O que é como um watchdog de 90 segundos havia matado o modo host stdio desde o dia em que esse modo foi enviado, sem um único teste notando.
A substituição é scripts/dogfood-mcp-host.py: handshake completo, uma sessão mantida aberta entre chamadas, dois clientes ao mesmo tempo em uma porta, e um modo que anexa um processo de editor real e pergunta algo que apenas a memória pode responder. Esse script é o que encontrou o envelope. curl havia retornado 200s sobre isso por semanas.
O invariante: cada campo em uma resposta está na lista de permissão do perfil, ou não está na resposta
Declarado para que você possa verificá-lo em vez de concordar com ele:
Para cada nível de confiança abaixo "este sou eu na minha própria máquina", o conjunto de chaves em um resultado de ferramenta é um subconjunto do próprio esquema de resultado do protocolo, e cada adição a esse conjunto é uma entrada explícita, revisada. Verdadeiro ou falso do seu código, e você pode ir e olhar.
Há um segundo, que é sobre o que os últimos três commits tratam. Um limite, uma revogação e uma linha de auditoria requerem um sujeito, e uma credencial compartilhada não tem sujeito. Antes dos tokens por cliente, cada cliente conectado apresentava o mesmo portador. Portanto, uma linha de auditoria só poderia ter dito "algo leu sua memória", revogar um cliente significava girar um segredo que todos eles possuíam, e limitar "o cliente" significava limitar todos eles ao mesmo tempo. A identidade não é um item opcional em cima do controle de saída; é a coisa à qual os outros três controles se vinculam. migrations/080_mcp_clients.sql é uma tabela com um digest de token, um perfil e um cofre por linha, e tudo depois disso foi barato.
Cinco minutos: canalize um tools/call para o seu próprio servidor e conte as chaves de resultado
Nada aqui é nosso. Aponte para qualquer servidor MCP que você execute.
SERVER="node ./dist/my-mcp-server.js" Empresas brasileiras que utilizam servidores MCP devem estar atentas à configuração de perfis para garantir que informações sensíveis não sejam expostas. A implementação de controles de identidade e auditoria é crucial para a segurança dos dados. A falta de atenção a esses detalhes pode resultar em vazamentos de informações.
Noticias relacionadas
Servidor MCP 1.1.0 da endoflife.ai: Exposição KEV, verificações SBOM e dispositivos de borda para agentes de IA
O servidor MCP da endoflife.ai agora possui dez ferramentas de leitura. Novas funcionalidades incluem exposição a vulnerabilidades conhecidas e status de dispositivos de borda, essenciais para a segurança de versões de software.

O que os agentes de IA realmente veem ao buscar seu Ator Apify
O artigo explora como os agentes de IA interagem com o servidor MCP da Apify, destacando a importância da descrição e otimização dos Ators para serem encontrados. Inclui uma análise de como os resultados de busca diferem entre humanos e agentes.
Como o Protocolo de Contexto do Modelo (MCP) muda para sempre o lançamento de recursos em SaaS
O Protocolo de Contexto do Modelo (MCP) é mais do que leitura de dados; sua aplicação mais poderosa é a orquestração de aplicativos em tempo de execução, permitindo que agentes de IA gerenciem anúncios e guias de onboarding sem código efêmero.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.

