Voltar as noticias
Os rótulos de segurança do servidor MCP são honestos? Uma verificação com um comando (e o que foi encontrado em 31 servidores populares)
MCP ProtocolMediaEN

Os rótulos de segurança do servidor MCP são honestos? Uma verificação com um comando (e o que foi encontrado em 31 servidores populares)

Dev.to - MCP·26 de julho de 2026

Você escreveu isso uma vez, no dia em que a ferramenta nasceu:

{
  "name": "search_docs",
  "annotations": {
    "readOnlyHint": true,
    "destructiveHint": false,
    "openWorldHint": false
  }
}

Então a ferramenta continuou mudando. Um parâmetro foi adicionado. Uma chamada de backend foi conectada. O esquema cresceu.

O bloco de anotações permaneceu exatamente como você o deixou.

Por que a divergência importa

A especificação do MCP chama essas anotações de dicas e diz aos clientes para não confiar nelas cegamente. Muitos clientes as usam de qualquer maneira, porque elas chegam na hora da lista de ferramentas e são baratas para agir. Um padrão comum: readOnlyHint: true significa pular o prompt de confirmação.

Portanto, um rótulo desatualizado custa mais do que um revisor confuso. Ele pode remover silenciosamente uma etapa de segurança que, de outra forma, teria sido acionada.

O protocolo não tem uma etapa que re-verifica o rótulo em relação ao esquema à medida que a ferramenta evolui. Essa é a lacuna que actlint preenche. Ele lê o que um servidor anuncia sobre tools/list, descobre o que cada ferramenta provavelmente faz a partir do nome, descrição e esquema de entrada, e relata onde isso discorda do que a ferramenta declara. Ele nunca chama uma ferramenta.

Nós o direcionamos a 541 ferramentas em 31 servidores amplamente utilizados, incluindo oficiais da Stripe, GitHub, Microsoft, Google, MongoDB e PayPal. Onze voltaram completamente limpas. Quatro carregam um rótulo que nega algo que o próprio esquema da ferramenta diz que ela pode fazer. Cartão de pontuação completo, notas por servidor, metodologia e as duas descobertas que não sobreviveram à nossa própria revisão: Rótulos de Segurança MCP Funcionam no Sistema de Honra.

Este post é sobre executá-lo no seu.

Formas de apontá-lo para um servidor

Servidor stdio local, lançado pelo actlint:

npx actlint npx -y @modelcontextprotocol/server-filesystem .

Servidor hospedado via HTTP, com uma credencial se precisar de uma para listar suas ferramentas:

npx actlint --http https://mcp.example.com/mcp --header "Authorization: Bearer ${MCP_TOKEN}"

Servidor que precisa de uma variável de ambiente para iniciar.

npx actlint --env STRIPE_SECRET_KEY npx -y @stripe/mcp --tools=all

Capturar uma vez, verificar muitas vezes

Conversar com o servidor é a única etapa que toca a rede. Tudo depois disso é puro, então você pode salvar o manifesto e reproduzi-lo quantas vezes quiser com resultados idênticos:

# Uma vez, onde a credencial vive
npx actlint --capture tools.json --http https://mcp.example.com/mcp --header "Authorization: Bearer ${MCP_TOKEN}"

# Cada execução após isso, offline, sem credencial, sem socket
npx actlint --manifest tools.json --fail-on high
npx actlint --manifest tools.json --json  -o report.json
npx actlint --manifest tools.json --sarif -o results.sarif

Essa divisão também é a forma certa para CI: capturar em um trabalho com acesso à rede, controlar em um sem.

No GitHub Actions

- uses: formael/actlint/packages/github-action@df516d81ba3719687d1d72227737887c3534e1db # v0.1.0
  with:
    args: --manifest manifest.json --fail-on high

Ativando-o para um servidor que já tem descobertas, sem uma construção vermelha no primeiro dia:

npx actlint --manifest tools.json --write-baseline baseline.json
npx actlint --manifest tools.json --baseline baseline.json --fail-on low

As entradas de linha de base são indexadas por impressão digital, para que sobrevivam a reordenações e edições não relacionadas.

Lendo o cartão de pontuação

  actlint  ▸  servidor stdio                                      nota de honestidade: A
  ──────────────────────────────────────────────────────────────────────────────
  14 ferramentas escaneadas · 0 subdeclarações · 0 não declaradas · 0 superdeclarações

  avisos — higiene de capacidade, não veredictos de honestidade
  ◐ ADV   move_file  sem-restrição-de-escopo
      Esta é uma ação sensível cujo esquema de entrada não possui restrição de estreitamento …
      ↳ OWASP ASI02:2026 · OWASP MCP02:2025 · CoSAI MCP-T3 · Ato de IA da UE Art.15 · NIST …

Três veredictos, em ordem de quão preocupantes eles devem ser para você:

Veredicto Significado
subdeclarado A ferramenta afirma menos risco do que realmente tem. Este é o que importa.
não declarado Não diz nada de um jeito ou de outro. O padrão da especificação já protege o cliente, então isso é um empurrão.
superdeclarado Cautela excessiva honesta, paga com fadiga de alarme.

Os avisos são notas de capacidade, em vez de veredictos de honestidade, portanto, nunca movem a nota e nunca falham uma construção.

A nota é uma nota de honestidade, não uma pontuação de segurança. Um servidor cheio de ferramentas destrutivas honestamente declaradas ganha um A. Qualquer descoberta subdeclarada limita isso a B.

Cada descoberta carrega uma justificativa em inglês simples e um mapeamento para OWASP ASI, o Top 10 do OWASP MCP, CoSAI, o Ato de IA da UE e NIST. Qualquer ID de regra se explica offline:

npx actlint explain wri
Contexto Triplo Up

As empresas brasileiras que utilizam servidores MCP devem estar atentas à integridade dos rótulos de segurança, pois rótulos desatualizados podem levar a ações inseguras. A ferramenta actlint pode ajudar a garantir que os rótulos reflitam com precisão as capacidades dos servidores, aumentando a segurança operacional.

Noticias relacionadas

Gostou do conteudo?

Receba toda semana as principais novidades sobre WebMCP.