Publicado em
- 16 min read
Arquitetura MCP segura e escalável: reforçar o Protocolo de Contexto de Modelo do repositório ao tempo de execução
A segurança e a escalabilidade não acontecem em produção; são desenhadas desde o primeiro commit.
Porque “MCP seguro e escalável” é uma disciplina própria
O Model Context Protocol (MCP) altera a forma do risco nas aplicações. As aplicações tradicionais já lidam com identidade, segredos e acesso a dados — mas o MCP adiciona uma camada nova: orquestração de contexto. O sistema deixa de ser apenas código a chamar APIs. Torna-se uma cadeia de ferramentas, prompts, fontes de recuperação e chamadas de função que podem ser induzidas a comportar-se de forma diferente sob entradas adversariais ou simplesmente desordenadas.
Uma arquitetura MCP robusta trata o contexto como um ativo governado. Isso significa que precisa de proteger:
- Como o contexto é selecionado (o que é incluído ou excluído)
- Como o contexto é transportado (entre cliente, servidor e ferramentas)
- Como o contexto é executado (chamadas de ferramentas, efeitos secundários e operações de escrita)
- Como o contexto é auditado (quem pediu, o que foi usado, o que aconteceu)
E precisa fazer isto enquanto escala horizontalmente, entre repositórios e equipes — sem transformar os servidores MCP em “caixas mágicas” que ninguém consegue perceber.
Este artigo foca concretamente nos repositórios MCP e na arquitetura de nível de produção à sua volta: identidade, limites das ferramentas, segredos, política, observabilidade e controlos da cadeia de fornecimento.
Comece pelo modelo de ameaças: o que corre mal em sistemas MCP
Um design MCP seguro começa por nomear modos de falha em linguagem clara. Na prática, a maioria dos incidentes mapeia-se para algumas categorias:
Abuso orientado por prompts e contexto
- Injeção de contexto via documentos não confiáveis, páginas web, comentários de issues ou mensagens de chat que alteram o comportamento das ferramentas.
- Coerção de ferramentas em que o modelo é induzido a chamar uma ferramenta privilegiada (“delete”, “refund”, “rotate keys”) ou a exfiltrar dados sensíveis.
- Vazamento entre tenants quando índices de recuperação, caches ou logs misturam acidentalmente tenants.
Deriva de identidade e acesso
- Tokens demasiado permissivos em adaptadores de ferramentas.
- Uma “conta de serviço” partilhada sem rastreabilidade por utilizador.
- Falta de verificações de autorização porque o modelo “decide” o que chamar.
Compromisso da cadeia de fornecimento
- Atualizações maliciosas de dependências nos repositórios do servidor MCP.
- Imagens de containers ou imagens base inseguras.
- Definições de ferramentas sem revisão que alargam secretamente capacidades.
Risco operacional em escala
- Falta de limitação de taxa, causando estouros de custo e negação por carteira.
- Observabilidade pobre que torna impossível reconstruir cadeias de chamadas de ferramentas.
- Ausência de rollback seguro de versões de ferramentas, prompts ou regras de recuperação.
A sua postura de segurança melhora rapidamente quando trata o MCP como um sistema distribuído com fronteiras de confiança explícitas, não como uma camada de integração engenhosa.
Baseline arquitetural: separar plano de controlo do plano de dados
Uma arquitetura MCP escalável beneficia de uma separação:
- Plano de controlo: política, mapeamento de identidade, catálogo de ferramentas, versionamento, aprovações e distribuição de configuração.
- Plano de dados: os servidores MCP em runtime e executores de ferramentas que tratam do tráfego de utilizadores e do processamento de contexto.
Este é um padrão familiar de gateways de API e service meshes. A chave é evitar “política espalhada pelo código”. Em vez disso, quer a política definida centralmente e aplicada em runtime através de hooks consistentes.
Layout de referência mínimo para repositórios MCP
Uma topologia comum de repositório para projetos MCP que querem escalar por muitas ferramentas parece-se com isto:
mcp-server/- transport (stdio/http), middleware de autenticação, validação de pedidos
- despachante de ferramentas e camada de sandbox de ferramentas
tools/- implementações de ferramentas agrupadas por domínio (
crm/,billing/,infra/) - declarações de capacidades das ferramentas (esquema, scopes, efeitos secundários)
- implementações de ferramentas agrupadas por domínio (
policies/- regras de acesso por tenant, papel, ambiente, classificação de dados
- allowlists/denylists para invocação de ferramentas
prompts/- system prompts, instruções de ferramentas, restrições de segurança
- versionado, revisto por código, testado como código
infra/- IaC para deployment, segredos, políticas de rede, logging, métricas
tests/- testes unitários para ferramentas
- testes de contrato para o esquema das ferramentas
- testes adversariais para injeção e vazamento de dados
Essa estrutura cria fricção nos pontos certos: definições de ferramentas não podem passar para produção sem revisão, e a política não fica enterrada dentro da implementação.
Identidade em primeiro lugar: autentique o cliente, depois associe chamadas de ferramentas a um ator
O MCP costuma sentar-se entre um cliente (IDE, agente desktop, portal interno) e sistemas privilegiados (hospedagem de Git, consolas cloud, sistemas de tickets). Se não associar chamadas a uma identidade real, perde a capacidade de aplicar o princípio do menor privilégio.
Padrão de identidade recomendado
- Autenticação do cliente: o cliente MCP autentica-se no servidor MCP usando OIDC (preferido), mTLS, ou tokens assinados de curta duração.
- Associação do ator: cada pedido está associado a:
- identidade do utilizador (humano) ou identidade de workload (serviço)
- fronteira tenant/organização
- id de sessão e id de correlação
- Autorização delegada: as chamadas de ferramenta ou:
- executam com um token delegado restrito para o utilizador, ou
- executam com um token de serviço mas com autorização por utilizador rigorosa aplicada no servidor.
A primeira abordagem (delegação) é normalmente mais segura. A segunda pode ser necessária para sistemas legados, mas exige verificações server-side e logging à prova de falhas.
Não confie no modelo para fazer autorização
A autorização deve ser aplicada no despachante de ferramentas do servidor MCP, não dentro do texto do prompt. Regras em prompts são úteis, mas não são aplicação. Quer um portão duro:
- Validar que a ferramenta é permitida para o ator, tenant e ambiente.
- Validar parâmetros (tipos, intervalos, enums permitidos).
- Exigir aprovação adicional para efeitos secundários de alto risco.
Limites das ferramentas: defina “capacidades”, não apenas funções
No MCP, as “ferramentas” são as arestas cortantes. São onde o modelo pode causar efeitos secundários, ler dados sensíveis ou disparar workflows. Uma arquitetura escalável trata cada ferramenta como uma capacidade com:
- Âmbito: o que pode aceder (sistemas, objetos, campos)
- Nível de efeito secundário: apenas leitura, escrita, destrutivo, financeiro, admin privilegiado
- Classificação de dados: público, interno, confidencial, regulado
- Classe de taxa e quota: barato, caro, em rajada, lento
- Modo de aprovação: auto, confirmar pelo utilizador, revisão por duas pessoas, janela de mudança
Um repositório MCP maduro codifica isto num formato legível por máquina juntamente com o esquema da ferramenta. O esquema sozinho não é suficiente — precisa de metadados para conduzir política.
Uma taxonomia prática de risco de ferramentas
- Tier 0 (seguro): formatação, matemática, parsing local, sem rede
- Tier 1 (somente leitura): pesquisa, buscar docs não sensíveis, APIs públicas
- Tier 2 (leitura sensível): tickets internos, info de clientes, pesquisa de código em repositórios privados
- Tier 3 (escrita): criar tickets, abrir PRs, modificar registos
- Tier 4 (destrutivo/privilegiado): apagar, desativar, rotacionar credenciais, alterações em produção
Cada tier mapeia para controlos mais fortes: validação, confirmação, aprovações e sandboxing em runtime.
Manipulação segura do contexto: trate a recuperação como um canal de entrada não confiável
Fluxos augmentados por recuperação podem tornar-se silenciosamente a sua maior superfície de ataque. Documentos podem incluir instruções, segredos embebidos ou conteúdos desenhados para causar uso indevido das ferramentas.
Controlos de higiene de contexto que escalam
- Proveniência do documento: armazene origem, autor, timestamp e score de confiança nos metadados.
- Particionamento de índice: isole tenants e ambientes; nunca misture staging e prod.
- Filtro de conteúdo:
- remover snippets executáveis quando não necessários
- redigir segredos óbvios antes de indexar
- ignorar secções “instrucionais” de fontes não confiáveis
- Orçamentos de contexto: limite quanto conteúdo recuperado pode ser incluído e prefira resumos de fontes confiáveis.
- Recuperação baseada em política: os resultados de recuperação devem ser filtrados pelo mesmo modelo de acesso que as ferramentas.
Um padrão subtil mas importante: tornar a recuperação uma ferramenta com autorização explícita. “Pesquisar na base de conhecimento” não é neutro se a base de conhecimento inclui runbooks confidenciais.
Segredos: remova-os dos repositórios, depois remova-os da memória das ferramentas
Repositórios MCP costumam ser comprometidos da maneira antiga: credenciais em ficheiros de ambiente, tokens vazados em logs de CI, ou chaves API hardcoded deixadas “temporariamente” no código.
Postura base de segredos para repositórios MCP
- Use um gestor de segredos real (Vault, AWS Secrets Manager, GCP Secret Manager, Azure Key Vault).
- Aplique credenciais de curta duração (OIDC para cloud, creds dinâmicas de BD).
- Nunca permita que ferramentas retornem segredos em texto plano a menos que o ator esteja explicitamente autorizado e o evento seja auditado.
- Configure o logging para redigir credenciais e campos sensíveis na ingestão.
Um erro comum: uma ferramenta obtém um segredo para chamar uma API, e o modelo vê o segredo na saída da ferramenta ou em logs verbosos. Ferramentas nunca devem retornar credenciais cruas; devem retornar apenas estado.
Isolamento de rede e runtime: assuma que qualquer ferramenta será abusada eventualmente
Um runtime MCP escalável é normalmente conteinerizado. Isso é bom, mas só se usar o isolamento que já paga.
Controlos de runtime que importam
- Política de egress: as ferramentas devem alcançar apenas hosts conhecidos; default-deny para tráfego outbound.
- Políticas de rede por ferramenta: ferramentas de billing não devem aceder endpoints de infra.
- Constriçõs de filesystem: root FS read-only; mounts graváveis explícitos.
- Sandboxing para ferramentas de alto risco: pools workers separados para ferramentas Tier 3/4.
- Limites de recurso: limites de CPU/memória para prevenir execução descontrolada.
O objetivo é tornar o uso indevido tolerável. Quando uma ferramenta é coagida a fazer algo estúpido, o raio de impacto deve ser pequeno.
Motor de políticas: centralizar autorização e portões de segurança
Para escalar, precisa de uma camada de políticas que seja:
- consistente (mesmas regras em todo o lado),
- audível (quem mudou o quê, quando),
- testável (testes unitários para política),
- deployable (versionado, com rollbacks).
Muitas equipas adoptam uma abordagem policy-as-code (por exemplo, OPA/Rego ou Cedar). O motor exacto importa menos do que estas propriedades:
- Ferramentas declaram capacidades e scopes necessários.
- Pedidos chegam com identidade do ator e contexto (tenant, env, sensibilidade).
- A política decide: allow/deny/allow-with-conditions.
Aprovações condicionais e controlos de elevação de privilégio
Operações de alto risco não devem ser bloqueadas para sempre, mas devem ser travadas:
- Confirmação do utilizador: apresentar um diff legível por humanos ou resumo da ação.
- Step-up auth: exigir reautenticação para ações destrutivas.
- Regra das duas pessoas: para mudanças em produção, exigir um segundo aprovador.
- Janelas de mudança: permitir ferramentas Tier 4 apenas durante períodos agendados.
Estes controlos são normais em plataformas de infra; o MCP apenas precisa deles no despachante de ferramentas.
Testar repositórios MCP como código crítico de segurança
Repositórios MCP não devem confiar em “parece bem no chat”. Quer cobertura automatizada para os modos de falha que realmente teme.
O que testar (e como)
- Testes de contrato de esquema: ferramentas impõem tipos e rejeitam campos inesperados.
- Testes de autorização: negar por padrão; verificar menor privilégio por papel.
- Testes de injeção: alimentar documentos recuperados com conteúdo adversarial e verificar que o sistema recusa elevar privilégios.
- Testes de redacção: garantir que campos sensíveis nunca aparecem na saída da ferramenta ou em logs.
- Testes de replay: gravar uma sessão e verificar decisões de política determinísticas nas chamadas de ferramentas.
Um padrão produtivo é manter um corpus de “documentos maliciosos” no repositório: snippets desenhados para manipular o uso de ferramentas, pedir segredos ou sobrescrever o comportamento do sistema. Os testes devem afirmar que o despachante de ferramentas aplica a política independentemente do texto.
Versionamento e disciplina de release: escalar tornando a mudança segura
Sistemas MCP evoluem rapidamente: novas ferramentas, novas instruções de prompt, novas fontes de recuperação. Sem disciplina de release, obtém deriva e regressões silenciosas.
Versione tudo o que pode mudar comportamento
- Esquemas de ferramentas e metadados de capacidade
- Bundles de política
- Templates de prompts e regras do sistema
- Configuração de recuperação (índices, filtros, definições de ranking)
- Thresholds de segurança e padrões de redacção
Também quer garantias de compatibilidade. Se um cliente fixa v1 de um esquema de ferramenta, o servidor deve respeitá-lo ou negociar explicitamente.
Pipeline de promoção por ambiente
Uma arquitectura segura e escalável promove mudanças:
- dev (iteração rápida, dados sintéticos)
- staging (integrações reais, âmbito restrito)
- prod (política estrita, aprovações, auditoria)
Cada estágio deve ter defaults de política diferentes e allowlists de ferramentas distintas. É normal que staging permita mais introspecção enquanto prod está bloqueado.
Observabilidade: reconstruir a cadeia sem registar segredos
A observabilidade MCP não é só latência e taxas de erro. Precisa responder:
- Quem invocou que ferramenta?
- Com que parâmetros (redigidos)?
- Que fontes de dados foram recuperadas?
- Que decisão de política foi aplicada?
- Que efeitos secundários ocorreram em sistemas externos?
Isto requer logs de eventos estruturados com IDs consistentes.
Conjunto mínimo de telemetria viável
- Request id, session id, actor id, tenant id
- Nome da ferramenta, versão da ferramenta, tier de capacidade
- Decisão de política (allow/deny/conditions)
- Hashes de parâmetros ou mapa de parâmetros redigidos
- Metadados de chamadas externas (host, classe do endpoint, duração, estado)
- Fontes de recuperação e IDs de documentos (não conteúdo bruto)
Um benefício surpreendente: boa telemetria facilita muito a gestão de custos. Pode ver que ferramentas causam chamadas de modelo dispendiosas, que tenants geram carga, e onde o cache é seguro.
Photo by Microsoft Copilot on Unsplash
Estratégias de escala: quando um servidor MCP se torna muitos
Um único servidor MCP pode ser suficiente para ferramentas internas pequenas, mas a escala introduz novas restrições: concorrência, vizinhos ruidosos, quotas por tenant e propriedade operacional.
Escala horizontal sem perder governança
Para escalar runtimes MCP, prefira servidores stateless:
- Armazene estado de sessão numa store partilhada se necessário (mas mantenha-o mínimo).
- Coloque políticas e catálogos de ferramentas numa store de config distribuída.
- Use filas para tarefas longas ou de alto risco.
Depois aplique separação de workloads:
- Gateway MCP frontal: auth, routing, checagens de política, modelagem de pedidos
- Pools de execução de ferramentas: segregados por tier de risco
- Serviços de recuperação: isolados, particionados por tenant, com ACLs estritas
Isto permite escalar o caminho quente (gateway) de forma diferente do caminho lento (execução). Também permite segurança mais apertada para ferramentas Tier 3/4 sem penalizar chamadas Tier 1.
Limitação de taxa e quotas como controlos de primeira classe
A negação por carteira é real no MCP. Precisa de:
- Limites de taxa por tenant
- Quotas de chamadas de ferramentas por utilizador
- Limites de concorrência por ferramenta
- Alarmes de orçamento e circuit breakers
Quotas devem ser aplicadas antes de chamadas dispendiosas ao modelo quando possível. Por exemplo, rejeitar uma chamada de ferramenta de alto risco cedo em vez de gerar primeiro um plano longo.
Governação de dados: classificação, residência e retenção
O MCP costuma tocar em dados sensíveis indiretamente: documentos recuperados, anexos de tickets, código interno, registos de clientes. Governação não é opcional, especialmente em escala.
Aplique classificação de ponta a ponta
- Tagueie fontes e documentos com classificação.
- Tagueie ferramentas com o que podem aceder e o que podem emitir.
- Aplique “sem downgrade”: inputs confidenciais não devem conduzir a outputs públicos sem uma exceção de política explícita.
Regras de retenção para logs e traces MCP
Logs podem tornar-se um repositório sombra de dados. Defina retenção por ambiente e por classe de dados:
- Guarde logs operacionais mínimos pelo período mais curto necessário.
- Armazene traces sensíveis apenas quando necessário, com acesso restrito.
- Suporte workflows de “apagar os meus dados” quando aplicável.
Isto exige disciplina também nos repositórios: não guarde transcrições de conversas como fixtures de teste se contiverem dados reais.
Segurança da cadeia de fornecimento para repositórios MCP
Repositórios MCP são alvos apetecíveis porque se sentam perto de credenciais, integrações e automação. Um compromisso da cadeia de fornecimento pode transformar silenciosamente ferramentas em backdoors.
Medidas práticas de endurecimento de repositório
- Impor commits assinados para branches críticas.
- Exigir revisões de code owner para:
- metadados de capacidade das ferramentas
- bundles de política
- middleware de autenticação e logging
- Pin dependencies e use lockfiles.
- Executar SAST e scanning de dependências em cada PR.
- Construir containers a partir de imagens base mínimas; escanear imagens no CI.
- Manter proveniência de build (metadados estilo SLSA) se a organização suportar.
Trate definições de ferramentas como mudanças de infraestrutura. Uma linha de atualização de esquema pode alargar o acesso mais do que cem linhas de código.
Componentes de produto que aparecem com frequência em stacks MCP seguros
Diferentes equipas montam arquiteturas MCP a partir de um conjunto de blocos de construção. Aqui estão componentes comuns, descritos pelo seu papel em vez de promessas de marketing.
-
Policy engine (OPA/Cedar)
Decisões centralizadas allow/deny baseadas em identidade do ator, tier da ferramenta, tenant e ambiente; políticas versionadas e testáveis. -
Secrets manager (Vault/Cloud secrets)
Credenciais de curta duração, logs de auditoria de acesso a segredos e rotação automática; reduz a dispersão de credenciais nos repositórios MCP. -
API gateway/service mesh
mTLS, modelagem de pedidos, limites de taxa e telemetria consistente entre servidores MCP e pools de execução de ferramentas. -
Vector database com particionamento por tenant
Recuperação com fronteiras de acesso estritas, filtros de metadados e controlos de retenção; crítico para prevenir vazamento entre tenants. -
SIEM + pipeline de logging estruturado
Correlação central de eventos para chamadas de ferramentas, decisões de política e efeitos externos — sem armazenar contexto sensível bruto. -
Sandboxing de runtime de containers (gVisor/Kata)
Isolamento mais forte para ferramentas de alto risco; reduz o raio de impacto quando uma ferramenta é coagida a ações nocivas.
Playbooks operacionais: resposta a incidentes para sistemas orientados por ferramentas
Quando algo corre mal no MCP, muitas vezes parece “o assistente fez uma coisa”. Uma arquitectura escalável faz com que essa “coisa” seja rastreável e reversível.
O que precisa estar pronto antes do incidente
- Um kill switch para desabilitar uma ferramenta globalmente ou por tenant.
- Uma forma de fazer rollback de versões de ferramentas e bundles de política rapidamente.
- Um rasto de auditoria que ligue chamadas de ferramentas a atores e sessões.
- Um modo de quarentena para fontes de recuperação (parar indexação, parar serving).
- Backpressure e circuit breakers para parar cascatas.
Fluxos típicos de incidente
- Suspeita de exfiltração: desabilitar ferramentas de leitura sensível (Tier 2), aumentar redacção, rotacionar credenciais comprometidas, verificar logs por padrões anormais de recuperação.
- Escritas não autorizadas: desabilitar pools Tier 3/4, activar confirmações obrigatórias, verificar se bundles de política e esquemas de ferramentas não foram modificados.
- Alerta da cadeia de fornecimento: congelar deployments, verificar proveniência de build, bloquear atualizações de dependências e rebuild a partir de commits conhecidos e bons.
A diferença entre um dia mau e uma crise é muitas vezes se consegue desabilitar uma ferramenta em segundos sem redeploy de todo o mundo.
Desenhar para controlo humano sem quebrar a velocidade dos desenvolvedores
A tentação no MCP é ou bloquear tudo (e matar a utilidade) ou permitir tudo (e aceitar o caos). O meio sustentável é o controlo graduado.
Um modelo de governação viável
- Desenvolvedores podem adicionar ferramentas Tier 0/1 com revisão padrão.
- Ferramentas Tier 2 requerem revisão de segurança e declarações explícitas de âmbito.
- Ferramentas Tier 3/4 requerem:
- workflow de aprovação
- isolamento em runtime
- campos obrigatórios de observabilidade
- propriedade on-call
Este modelo escala porque corresponde controlos ao risco. Cria também um caminho claro: prototipar como Tier 1, depois promover com salvaguardas adicionais.
Fazer do “seguro” o padrão em templates
Se fornecer templates internos de repositório MCP, inclua de base:
- políticas deny-by-default
- logging estruturado com redacção
- helpers de validação de input
- scaffolding de metadados de capacidade
- harnesses de teste para injeção e autorização
As equipas movem-se mais rápido quando o caminho seguro é também o caminho mais fácil.
A arquitectura que resiste à pressão
Uma arquitectura MCP segura e escalável não é um único padrão, mas tem traços recorrentes:
- pedidos ligados a identidade e autorização delegada
- ferramentas tratadas como capacidades com controlos de risco por tiers
- política centralizada, versionada e aplicada no despachante
- recuperação tratada como input não confiável com proveniência e particionamento
- segredos geridos com credenciais de curta duração e redacção rigorosa
- isolamento em runtime, controlos de egress de rede e limites de recursos
- observabilidade desenhada para reconstrução sem fuga de dados
- controlos da cadeia de fornecimento aplicados às definições de ferramenta e política tão seriamente quanto ao código
Quando constrói o MCP desta forma, o sistema mantém-se compreensível mesmo quando os repositórios se multiplicam, as ferramentas proliferam e o tráfego cresce. Esse é o verdadeiro teste da escala: não apenas lidar com mais pedidos, mas permanecer governável quando o contexto, o código e a organização mudam ao mesmo tempo.
External Links
Build Secure and Scalable MCP Servers | Blogpost How to build secure and scalable remote MCP servers Scaling MCP adoption: Our reference architecture for simpler, safer and cheaper enterprise deployments of MCP Scaling MCP: A simpler, safer enterprise architecture - Cloudflare TV How to Design Secure MCP Deployments - Curity at Platform Summit 2025 | Videos