Voltar as noticias
Dominando a descoberta de ferramentas WebMCP em .NET: Do Protótipo à Produção
WebMCPAltaEN

Dominando a descoberta de ferramentas WebMCP em .NET: Do Protótipo à Produção

Dev.to - WebMCP·21 de agosto de 2026

Dominando a descoberta da ferramenta webmcp no .net: Do Protótipo à Produção

Resposta Rápida

A descoberta da ferramenta webmcp no .NET requer middleware ciente do inquilino, cache em duas camadas, circuit breakers do Polly e clientes seguros e observáveis para manter a latência baixa e evitar falhas de ponto único.

Armadilhas da Descoberta Naive do WebMCP

Microserviços que dependem de ferramentas externas—motores de fraude, pipelines de análise, serviços de cobrança—frequentemente expõem um contrato de descoberta via webmcp. O padrão ingênuo é acessar um único endpoint /discover em cada solicitação, não armazenar nada em cache e ignorar a isolação do inquilino. Em um grande SaaS com milhares de inquilinos, esse padrão inflaciona a latência, dobra a superfície de ataque e pode paralisar toda a cadeia de solicitações quando o servidor MCP é limitado ou temporariamente indisponível.

Exemplo do Mundo Real

Em uma plataforma de Pagamento transfronteiriço, o cliente do motor de fraude estava configurado para chamar https://mcp.mycorp.com/discover/FraudEngine de forma síncrona em cada transação. Sob carga máxima (≈15 k TPS), o endpoint MCP era o único ponto de falha: uma viagem de ida e volta de 200 ms por chamada empurrou a latência total da transação além do SLA de 250 ms. Quando o serviço MCP estava temporariamente sobrecarregado, todo o fluxo de pagamento parou, causando uma cascata de timeouts em serviços a jusante.

Compromissos

  • Descoberta imediata vs. latência: Uma única chamada garante frescor, mas adiciona latência. O cache reduz a latência, mas introduz desafios de obsolescência e consistência.
  • MCP centralizado vs. registros distribuídos: Um único MCP simplifica a governança, mas é um gargalo. Distribuir o registro (por exemplo, via Azure Cosmos DB com replicação regional) melhora a disponibilidade, mas complica a consistência e o versionamento.
  • Filtragem de escopo vs. catálogo completo: Aplicar DiscoveryScope reduz o tamanho da carga útil, mas requer extração cuidadosa do ID do inquilino e aplicação de políticas.
  • Verificações de saúde vs. sobrecarga operacional: Expor endpoints de verificação de saúde e Swagger em produção ajuda as operações, mas aumenta a superfície de ataque para invasores.
  • Quando eu escolheria a descoberta imediata: Se o serviço puder tolerar os 200 ms extras e o registro estiver altamente disponível, uma única chamada mantém a lógica simples e garante dados atualizados. O que eu evitaria: Usar descoberta imediata em um fluxo de pagamento de alta frequência onde os orçamentos de latência são apertados.

Decisões sobre Latência, Isolamento e Segurança

  1. Avaliar a tolerância à latência: Se o serviço puder suportar <200 ms por solicitação, uma única chamada de descoberta é aceitável. Se <100 ms de SLA, cache agressivamente.
  2. Determinar o nível de isolamento do inquilino: Para isolamento rigoroso, habilite DiscoveryScope e aplique verificações de políticas no servidor MCP.
  3. Escolher o nível de cache: Use LRU em memória para frescor por solicitação; suporte com Redis para compartilhamento entre instâncias. Defina TTL para corresponder a MaxAgeSeconds da política.
  4. Implementar circuit breaker no lado do cliente para evitar falhas em cascata quando o MCP estiver fora do ar.
  5. Proteger o contrato: Use TLS mútuo, JWTs assinados e lista de permissões de IP. Evite expor o endpoint MCP publicamente.
  6. Observabilidade em primeiro lugar: Instrumente latência, taxa de acertos de cache e violações de limite de taxa. Defina alertas em p95 de latência >200 ms ou taxa de acertos <85 %.
  7. Implantar de forma sem estado: Execute o MCP atrás do Azure Front Door ou AWS ALB, habilite sessões fixas apenas para a interface do usuário administrativa. Escale horizontalmente sem estado de sessão.
  8. Custo vs. complexidade: Um registro distribuído com gravações em múltiplas regiões pode reduzir a latência em 30 %, mas introduz sobrecarga de consistência entre regiões. Eu escolheria isso apenas quando o SLA exigir latência sub-50 ms entre geografias.

Quando Isso Falha em Produção

  • Falta de DiscoveryScope: Clientes puxam o catálogo completo, causando 10× de carga útil e 30 ms extras por solicitação.
  • Lag de invalidação de cache: TTL do Redis definido para 10 minutos enquanto a política MaxAgeSeconds é de 60 segundos leva a endpoints obsoletos.
  • Endpoint MCP desprotegido: Invasores enumeram ferramentas, levando a DoS ou escalonamento de privilégios.
  • Limites de taxa excessivamente agressivos: Limites por inquilino atingidos durante um pico, bloqueando tráfego legítimo.
  • Sem circuit breaker: Uma resposta lenta do MCP paralisa toda a cadeia de solicitações.

Erros Comuns que os Engenheiros Cometem

  • Colocando UseWebMcpDiscovery após UseRouting e perdendo dados de rota.
  • Ignorando HttpClientFactory e criando um novo HttpClient por solicitação.
  • Codificando URLs de fallback que ignoram a descoberta, quebrando o versionamento.
  • Assumindo que o Redis está sempre disponível; não lidando com cenários de falta de cache de forma adequada.
  • Expondo excessivamente o contrato MCP (Swagger) em produção sem autenticação.
  • Usando o HttpClient padrão: Mudanças de DNS podem causar falhas silenciosas porque o cliente armazena em cache o IP. Eu evitaria isso em um ambiente dinâmico.

Abordagem Melhor Baseada na Experiência

  1. Middleware ciente do escopo: Extraia o ID do inquilino do JWT e injete DiscoveryScope no contexto da solicitação antes de chamar o MCP.
  2. Cache em duas camadas: Cache local em memória LRU (TTL 60 s) para frescor em nível de solicitação, Redis (TTL 5 min) para compartilhamento entre instâncias. Use IMemoryCache e StackExchange.Redis.
  3. Circuit breaker + bulkhead com Polly: Policy.WrapAsync(new HttpClientPolicyBuilder().CircuitBreakerAsync(5, TimeSpan.FromSeconds(30))).
  4. Integração de verificação de saúde: Exponha /mcp/health que realiza um GET /discover/health leve e retorna 200 apenas se todas as ferramentas registradas responderem.
  5. Observabilidade: Adicione instrumentação personalizada do OpenTelemetry para McpClient.GetToolAsync, emitindo contadores para acertos de cache, falhas e percentis de latência.
  6. Transporte seguro: Configure HttpClientHandler.ClientCertificates com um certificado de principal de serviço e aplique a validação do certificado do servidor.
  7. Guardrails de CI/CD: Inclua uma etapa que inicia uma instância de teste do MCP e executa dotnet test --filter Category=Integration contra o contrato de descoberta.
  8. HttpClient tipado: Registre um cliente tipado para o MCP para manter a configuração isolada e permitir testes de unidade mais fáceis.
Aspecto Abordagem de Implementação Benefícios Compromissos
Middleware Ciente do Inquilino Injetar contexto do inquilino nas chamadas de serviço de saída Garante isolamento do inquilino e roteamento correto, reduz o risco de roteamento incorreto Adiciona pequena sobrecarga, requer propagação de contexto através de limites assíncronos
Cache em Duas Camadas Cache local em memória mais cache distribuído Redis Leituras locais rápidas, menor latência, equilíbrio entre frescor e cache distribuído Complexidade de invalidação de cache, potencial obsolescência se não coordenado
Circuit Breakers do Polly Envolver clientes HTTP com políticas do Polly (nova tentativa, timeout, circuit breaker) Previne falhas em cascata, impediu
Contexto Triplo Up

O artigo aborda práticas recomendadas para a implementação de WebMCP em ambientes de microserviços, destacando a importância da latência e segurança. Empresas brasileiras que utilizam microserviços podem se beneficiar ao evitar pontos únicos de falha e melhorar a eficiência de suas operações.

Noticias relacionadas

Gostou do conteudo?

Receba toda semana as principais novidades sobre WebMCP.