MCP segurança e autorização
MCP padroniza como capacidades são descritas e chamadas. Ele não decide quais capacidades um agente deve receber nem quais efeitos colaterais um usuário aprovou.
Quatro decisões separadas
- Autenticação da conexão — este cliente pode se conectar a este servidor?
- Visibilidade da capacidade — quais ferramentas e recursos o modelo pode ver?
- Autorização de execução — esta identidade pode realizar esta ação específica sobre este recurso agora?
- Aprovação humana — uma ação com consequências exige que uma pessoa confirme suas entradas e efeitos exatos?
Não agrupe essas decisões em uma lista de configuração autoApprove.
Servidores locais stdio
Um processo filho local herda uma posição privilegiada dentro do host da aplicação.
- Use um caminho absoluto e revisado para o executável.
- Fixe versões de pacote e binário; evite tags
latest. - Passe apenas as variáveis de ambiente necessárias.
- Não coloque segredos em argumentos de linha de comando.
- Restrinja raízes do sistema de arquivos e diretórios de trabalho.
- Aplique um perfil de sandbox do sistema operacional quando o servidor lidar com entrada não confiável.
- Trate descrições, recursos e resultados do servidor como conteúdo não confiável.
Os caminhos de carregamento e atualização em tempo de execução de JSON validam IDs de servidor.
McpServerManager não coloca em sandbox o comando configurado.
HTTP remoto transmissível
McpHttpClientBuilder pode aplicar:
- tokens bearer;
- um cabeçalho de chave API selecionado pelo chamador;
- cabeçalhos arbitrários revisados;
- aquisição fixa de token de credenciais de cliente OAuth 2.0;
- tempos limite de solicitação; e
- uma reinitialização de sessão limitada após uma resposta de sessão expirada.
OAuth2Config não é o fluxo completo de autorização MCP. Ele não realiza
descoberta de metadados de recurso protegido, descoberta do servidor de autorização, autorização no navegador, PKCE ou negociação de indicador de recurso. Use a rmcp de autorização de APIs ou um componente de identidade quando a implantação exigir esse fluxo.
Limite a solicitação de token para que um servidor de autorização lento ou inacessível não possa travar a inicialização da conexão, e observe que o cliente nunca ecoa o segredo do cliente de volta — os corpos de erro do endpoint de token são redigidos antes de chegarem aos logs:
use adk_tool::mcp::OAuth2Config;
use std::time::Duration;
let auth = OAuth2Config::new(client_id, token_url)
.with_secret(client_secret)
.with_scopes(vec!["mcp.read".into(), "mcp.invoke".into()])
.with_timeout(Duration::from_secs(10)); // token request timeout
O tempo limite padrão da solicitação de token é de 30 segundos.
Exposição e execução de ferramentas
Use with_tools ou with_filter para manter capacidades desnecessárias fora da
solicitação do modelo. Em seguida, aplique a autorização e confirmação de ferramenta de ADK-Rust em
tempo de execução.
Para ferramentas com consequências:
- mostre à pessoa os argumentos finais resolvidos;
- diferencie permissão única de política durável;
- mantenha a aprovação vinculada ao ID exato da chamada de função;
- torne as gravações externas idempotentes sempre que possível;
- armazene a decisão de aprovação e o resultado da ferramenta juntos; e
- nunca trate uma resposta de protocolo bem-sucedida como prova de um resultado de negócio bem-sucedido sem verificar as evidências retornadas.
Elicitação
Elicitação é uma solicitação do servidor por mais informações, não uma instrução que a aplicação deve obedecer. Revise a mensagem, URL, os campos solicitados e os metadados. Recuse solicitações sem suporte ou inesperadas. Valide todos os valores de formulário aceitos antes de usá-los.
Logs e segredos
Redija variáveis de ambiente, cabeçalhos de autorização, chaves API, respostas de elicitação e argumentos sensíveis de ferramentas. Registre, em vez disso, o ID do servidor, o nome da ferramenta, o ID da tarefa, o status, o tempo, a aprovação e um resumo limitado do resultado.