As ferramentas do seu agente de IA são as novas extensões de navegador: uma camada de conveniência com autoridade suficiente para arruinar sua semana. O Model Context Protocol (MCP) torna trivial conectar agentes a sistemas de arquivos, APIs SaaS e data lakes. Também torna trivial vazar segredos, exfiltrar PII de clientes ou rodar um loop caro que aciona o SRE às 3 da manhã. Se você entrega servidores MCP sem uma arquitetura para isolamento, identidade com escopo e controle de egresso, vai aprender essas lições em produção.
Nas últimas semanas, vários praticantes compartilharam alertas: servidores MCP rodando com duas chaves de API no mesmo processo; chamadas de ferramentas que herdam privilégios ambientais; agentes capazes de alcançar qualquer destino de egresso. Ao mesmo tempo, plataformas de segurança estão correndo para “governar agentes de IA” — um sinal de que budgets e reguladores estão de olho. Você pode esperar um vendor resolver, ou pode implementar agora um blueprint pragmático e dormir melhor.
O que o MCP muda (e por que é arriscado)
O MCP padroniza um meio para modelos e runtimes de agentes chamarem “ferramentas” via um servidor local ou remoto. Uma ferramenta pode ler um arquivo local, buscar um registro no CRM ou disparar um deployment. É ótimo para DX. Também é um novo limite de confiança:
- As ferramentas costumam rodar em laptops de desenvolvedores, onde vivem credenciais ambientais, agentes SSH e configurações de rede permissivas.
- As chamadas de ferramentas são orquestradas por LLMs não determinísticos, propensos a prompt injection e ações excessivamente amplas.
- Servidores MCP de terceiros chegam como binários ou pacotes com dependências transitivas opacas e canais de atualização pouco claros.
Se isso soa como o ecossistema de extensões de navegador outra vez, é exatamente isso — só que, desta vez, o “content script” pode atingir seu banco de dados de produção se você permitir.
Modelo de Ameaças de CTO para Servidores MCP
- Escalada por prompt injection: Conteúdo não confiável leva um agente a chamar uma ferramenta poderosa (por exemplo, “exporte todos os contratos para uma URL externa”).
- Mistura de credenciais: Múltiplas chaves carregadas no mesmo processo; a ferramenta errada usa a identidade errada.
- Egresso sem limites: Ferramentas podem chamar domínios arbitrários, transformando sua rede em um cano de exfiltração.
- Risco de supply chain: Servidores MCP com autoatualização implícita ou releases não assinados; dependências de tempo de desenvolvimento viram passivos em produção.
- Abuso de recursos: Loops infinitos ou operações em lote grandes excedem custos/SLOs.
- Vazamento entre locatários: MCP hospedado multi-tenant sem limites de identidade fortes vaza dados entre clientes.
Um plano crível limita o raio de impacto em cinco eixos: processo, identidade, rede, dados e custo.
Uma arquitetura que contém o raio de impacto
1) Execute ferramentas fora do processo, com um contrato estreito
Não hospede todas as ferramentas dentro de um único processo de longa duração. Gere cada invocação de ferramenta em um worker isolado com:
- Isolamento no SO: Processo separado com um perfil restritivo (seccomp, AppArmor no Linux; sandbox-exec no macOS; job objects no Windows). Desative escrita no sistema de arquivos, exceto em um diretório temporário.
- Canal de E/S explícito: Comunique-se via stdin/stdout usando um envelope compacto e tipado (MessagePack ou CBOR). Mantenha o contrato minúsculo: entradas, saídas, erro, métricas. Sem globais compartilhadas.
- TTL curto: Vida do processo medida em segundos. Do start ao teardown em até 60 s para a maioria das ferramentas; 5–10 minutos no máximo para jobs em lote, com heartbeat.
Sim, inicializar um worker por chamada adiciona 10–25 ms em um laptop e 5–15 ms em um container aquecido. É um seguro barato contra movimentação lateral.
2) Identidade por ferramenta com credenciais de curta duração
Cada chamada de ferramenta deve ter uma identidade exclusiva e com limite de tempo. Dois padrões funcionam bem:
- Identidade de workload (preferido): Use SPIFFE/SPIRE ou identidade de workload da nuvem para emitir um SVID X.509/JWT por chamada. O worker o troca por um token de serviço de curta duração (2–10 minutos) com escopo para as ações permitidas da ferramenta.
- Broker de tokens com escopo: Se você precisa usar chaves de API, rode um broker local ou hospedado que emita tokens por chamada, com escopo limitado e assinados pela sua organização. Nada de chaves brutas de vendors no processo do worker. Expire em T+5 minutos; vincule a tool_call_id e audience.
Torne impossível uma “ferramenta de sistema de arquivos” herdar acidentalmente o token do CRM. Nunca carregue duas credenciais não relacionadas no mesmo processo; deixe o broker impor o isolamento.
3) Guardrails de egresso: force todo o tráfego por um proxy de política
Não confie em variáveis de ambiente. Force os workers a alcançar a internet apenas via um proxy de egresso local ou remoto com mTLS e política. A política deve cobrir:
- Lista de permissões por ferramenta: A Ferramenta A pode chamar github.com e internal-api.company, a Ferramenta B pode chamar crm.vendor.com. Negue todo o restante.
- Restrições de método e caminho: Apenas GET/POST; bloqueie DELETE; restrinja por regex de caminho (por exemplo, ^/v1/contacts/[^/]+$).
- Pinning de DNS e restrições de certificado: Bloqueie CAs coringa; prefira certificate pinning ou TOFU com alertas.
- Orçamentos de taxa e bytes: Máximo de 60 requisições/minuto e 5 MB de egresso por chamada, a menos que explicitamente elevado.
Open Policy Agent (OPA) ou um proxy leve, feito para esse fim, funcionam. Espere 3–8 ms de latência adicional por requisição. Isso é aceitável comparado ao custo de um incidente.
4) Orçamentos de recursos e controles de máquina de estados finitos
Agentes se perdem. Seus controles não devem. Coloque orçamentos e máquinas de estado explícitas entre “o modelo diz para fazer X” e “a ferramenta faz X”:
- Orçamentos por chamada: Segundos de CPU, limite de memória (por exemplo, 256 MB), máximo de invocações de ferramentas (por exemplo, 10), TTL de relógio de parede (por exemplo, 120 s), bytes de egresso (por exemplo, 2 MB).
- FSM para ferramentas críticas: Exija que o agente percorra estados distintos: PLAN → PREVIEW → USER_ACK → EXECUTE. Aprove automaticamente PREVIEW para operações de baixo risco; exija ACK do usuário para mudanças de alto risco.
- Disjuntor fora de banda: Um kill switch global e desabilite por ferramenta que entre em vigor em até 60 segundos via seu config store/feature flag.
Não enterre a FSM no prompt do modelo. Faça cumprir no orquestrador.
5) Prevenção de perda de dados nas entradas e saídas
Não deixe dados sensíveis passarem por ferramentas sem observabilidade. Implemente DLP leve:
- Classificação: Regex+ML para e-mails, CPFs/SSNs, cartões de crédito, chaves. Rotule cada campo de saída com um nível de sensibilidade.
- Redação e minimização: Remova ou faça hash de campos sensíveis, a menos que a ferramenta declare um escopo need-to-know aprovado pela política.
- Checagens de exfiltração no proxy: Bloqueie posts para domínios desconhecidos se o payload contiver rótulos de alta sensibilidade.
Comece com um conjunto simples de regras e faça tuning. Você vai capturar vazamentos óbvios rapidamente.
Modos de entrega: local, hospedado ou híbrido
Local (agente na máquina do desenvolvedor)
Prós: Zero custo de infra, ótima integração com arquivos locais e ferramentas de CLI, iteração rápida. Contras: Ambiente menos controlável; variância de SO; credenciais ambientais por toda parte; dispositivos BYOD.
- Empacotamento: Distribua como um binário assinado com autoatualização por canais assinados por código. Entregue builds reprodutíveis e um SBOM.
- Isolamento: Use workers por chamada com sandbox do SO; sistema de arquivos somente leitura por padrão; faça bind mount de um diretório temporário para quaisquer escritas.
- Egresso: Empacote um proxy local pequeno (escutando em 127.0.0.1) que imponha a política e saia pela rede corporativa ou pessoal.
Almeje latência de cold start abaixo de 250 ms para uma ferramenta simples; os usuários vão tolerar isso.
Hospedado (sua nuvem)
Prós: Controle mais forte sobre identidade, egresso e auditoria; atualizações centrais; amigável a enterprise. Contras: Custo de infra e complexidade de tenancy; mais difícil tocar arquivos locais ou recursos air-gapped.
- Multi-tenancy: Um namespace do Kubernetes por tenant ou pool com políticas de rede estritas. Use identidade de workload por pod worker.
- Segredos: Nada de segredos estáticos no K8s. Use KMS da nuvem + broker para emitir tokens por chamada.
- Armazenamento: Volumes efêmeros apenas; retenção máxima de 24 horas para logs sem payloads; payloads sensíveis vão para um objeto criptografado e com tempo limitado, com URLs pré-assinadas que expiram em 15 minutos.
Espere gastar $1k–$3k/mês para rodar um proxy de egresso modesto e um pool de workers para pico de ~100 RPS. Isso é mais barato do que uma única revisão de incidente de segurança.
Híbrido (cliente local fino, backend remoto robusto)
Um servidor MCP local fino lida com leituras de sistema de arquivos ou integração com IDE, enquanto ferramentas de alta potência (CRM, billing, deployment) rodam hospedadas. Direcione chamadas sensíveis pelo proxy de egresso e broker de identidade hospedados; mantenha ferramentas locais como somente leitura por padrão. Assim você obtém UX local sem abrir mão do controle de operações críticas.
Observabilidade que você realmente vai usar
Um blob de log por chamada de ferramenta não é observabilidade. Você precisa de eventos estruturados que digam quem fez o quê, por quê e para onde foi.
- Esquema de eventos: tenant_id, user_id (ou agent_id), model_trace_id, tool_name, tool_call_id (UUIDv7), worker_spiffe_id, policy_decision_id, egress_rule_id, budgets_used, bytes_out, status e hash de entrada/saída.
- Correlação: Propage um model_trace_id desde a requisição ao LLM por todas as invocações de ferramentas e hops no proxy.
- Amostragem e retenção: Guarde 100% das negações de política, 100% dos fluxos de alta sensibilidade e uma amostra de 5–10% do resto por 30 dias. Redija payloads; mantenha hashes para deduplicação.
- Alertas que importam: Destinos de egresso incomuns, picos de esgotamento de orçamento, negações de política repetidas pela mesma ferramenta e tentativas de acesso entre tenants.
Crie um runbook para cada alerta com um botão para desabilitar a ferramenta implicada. Meça o tempo para desabilitar em segundos, não minutos.
Aquisição e conformidade para servidores MCP de terceiros
Se você vai adotar servidores MCP da comunidade ou de vendors, adicione um gate leve de segurança:
- Releases assinadas e SBOM: Verifique assinaturas (Sigstore/cosign). O SBOM deve incluir dependências transitivas e frequência de atualização.
- Prova de sandbox: Estratégia documentada de isolamento de processos; nada de misturar credenciais por processo. Peça um teste de unidade ou demo provando o isolamento.
- Configurabilidade: Listas de permissões de egresso, tokens por ferramenta, controles de orçamento e ganchos de auditoria devem ser de primeira classe, não TODOs.
- Builds reprodutíveis: Capacidade de reconstruir a partir do fonte e verificar que os binários batem.
- Tratamento de dados: Política de retenção clara; capacidade de desabilitar logging de payload; garantias de deleção em até 24 horas para quaisquer dados em cache.
Defina essa barra agora; seus futuros incidentes serão mais curtos, baratos e discretos.
Plano de rollout: 30 / 60 / 90 dias
Dia 0–30: inventário e contenção
- Inventarie todas as ferramentas e servidores MCP em uso (oficiais e sombra) e classifique por risco: somente leitura, leitura/gravação interno, leitura/gravação externo.
- Introduza um orquestrador mínimo que padronize workers por chamada e um proxy de egresso local com lista de permissões para as 3 principais ferramentas. Meça a latência adicionada.
- Ative logging de eventos estruturados com model_trace_id e tool_call_id. Sem payloads ainda, só metadados.
Dia 31–60: identidade e política
- Coloque de pé um broker de tokens ou SPIRE; migre uma ferramenta de alto valor para credenciais por chamada e de curta duração. Elimine quaisquer chaves de vendor de longa duração no processo.
- Escreva políticas OPA para egresso e orçamentos. Faça cumprir restrições de método/caminho para sua API externa de maior risco (CRM, billing, code host).
- Adicione um gate de ACK do usuário para qualquer ferramenta que escreva em sistemas de produção. Meça latência de aprovação e satisfação do usuário.
Dia 61–90: escalar e fortalecer
- Estenda controles de identidade e egresso para 80% do volume de ferramentas. Habilite hashing/redação de payload para DLP.
- Adicione kill switches e feature flags por ferramenta conectados a um runbook de on-call. Teste um incidente simulado end-to-end.
- Adote releases assinadas e checagens de SBOM para servidores MCP de terceiros. Falhe fechado para binários não assinados após um período de graça.
Até o dia 90, você deve conseguir responder, em menos de cinco minutos: “O que este agente fez, com qual identidade, contra quais sistemas, e como eu o desligo?”
Quanto custa (e por que vale a pena)
- Latência: +10–25 ms para isolamento por processo; +3–8 ms por requisição no proxy; +5–20 ms para emissão de token. Líquido: +20–50 ms por chamada de ferramenta nos caminhos comuns. Para UX no p95, está ok.
- Infra: Um pequeno cluster de proxy de egresso e orquestração adiciona cerca de $1k–$3k/mês em ~100 RPS de pico, mais armazenamento para 30 dias de retenção de metadados (~dezenas de GB).
- Tempo de dev: 2–3 semanas‑engenheiro para construir um orquestrador e políticas de proxy mínimos; mais 2–4 semanas para integrar identidade de workload e DLP para ferramentas de alto risco.
Compare esses números ao custo mediano de um incidente de segurança menor ($50k–$200k em triagem/forense/jurídico) ou a uma semana perdida em rotação de segredos e comunicação com clientes. Isso não é dourar a pílula; é evitar feridas auto-infligidas.
Quando dizer não
- Sem acesso de escrita a prod por padrão: Exija permissão explícita, gates de FSM e ACK do usuário para qualquer caminho de escrita em produção.
- Sem credenciais ambientais: Se uma ferramenta exige colar chaves de API estáticas em um arquivo de config, passe antes por um broker — ou não entregue.
- Sem egresso arbitrário: Ferramentas que “precisam da internet aberta” ganham um perfil de navegador em sandbox ou um ambiente de pesquisa, não produção.
- Sem tenancy misto sem limites de identidade: Se você não consegue desenhar a caixa ao redor de um tenant, não os rode juntos.
Nearshoring deste trabalho sem perder o controle
Se falta gente na sua equipe de plataforma, isso combina bem com um pod nearshore: um sprint focado e pesado em segurança, com entregáveis claros e SLOs mensuráveis. Você quer engenheiros que entreguem um guardrail minimamente viável em duas semanas, não um “plataforma de políticas” de um ano. Exija:
- Prova de isolamento: Demo em que uma ferramenta tenta ler arquivos proibidos e chamar domínios bloqueados — e falha com logs úteis.
- Benchmarks: P50 e P95 de latência adicionada por chamada de ferramenta e hop no proxy em hardware real de desenvolvedor.
- Runbooks: Um checklist de uma página para desabilitar uma ferramenta, rotacionar uma chave e exportar uma auditoria para segurança.
O pool de talentos sênior do Brazil está confortável com containers Linux, OPA e o stack de identidade em nuvem que você já roda. Você ganha 6–8 horas de sobreposição com os fusos horários dos EUA para iterar rápido em políticas que sempre precisam de tuning.
No fim das contas
MCP é um bom padrão. O perigo não é o protocolo — é a postura padrão de empilhar ferramentas poderosas em um único processo com confiança ambiental, sem identidade e com egresso aberto. Trate seus servidores MCP como software de produção com um novo limite de confiança. Contenha o escopo de processo, emita identidades por chamada, force o tráfego por um proxy de política, imponha orçamentos e FSMs, e faça logs como se você fosse auditado amanhã. Faça isso uma vez e você poderá dizer “sim” a mais capacidades de agentes sem apostar a empresa.
Pontos-chave
- Ferramentas MCP são um novo limite de confiança. Trate-as como extensões de navegador com poderes de produção.
- Execute ferramentas fora do processo com sandbox no SO; workers por chamada adicionam ~10–25 ms e evitam incidentes.
- Emita identidades de curta duração por ferramenta via SPIFFE ou um broker de tokens; nunca compartilhe credenciais entre ferramentas.
- Force todas as chamadas de rede por um proxy de política com listas de permissões, restrições de método/caminho e mTLS.
- Imponha orçamentos e gates de FSM fora do prompt do modelo; adicione um kill switch global ligado a runbooks.
- Adote eventos de auditoria estruturados e correlacionados com model_trace_id e tool_call_id; retenha 30 dias de metadados.
- Comece com um plano 30/60/90: inventário, identidade/egresso, depois escale e fortaleça.
- Espere +20–50 ms por chamada e ~$1k–$3k/mês de infra para guardrails fortes — barato comparado a um incidente.