
Dominando a descoberta de ferramentas WebMCP em .NET: Do Protótipo à Produção
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
DiscoveryScopereduz 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
- 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.
-
Determinar o nível de isolamento do inquilino: Para isolamento rigoroso, habilite
DiscoveryScopee aplique verificações de políticas no servidor MCP. -
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
MaxAgeSecondsda política. - Implementar circuit breaker no lado do cliente para evitar falhas em cascata quando o MCP estiver fora do ar.
- Proteger o contrato: Use TLS mútuo, JWTs assinados e lista de permissões de IP. Evite expor o endpoint MCP publicamente.
- 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 %.
- 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.
- 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
UseWebMcpDiscoveryapósUseRoutinge perdendo dados de rota. - Ignorando
HttpClientFactorye criando um novoHttpClientpor 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
HttpClientpadrã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
-
Middleware ciente do escopo: Extraia o ID do inquilino do JWT e injete
DiscoveryScopeno contexto da solicitação antes de chamar o MCP. -
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
IMemoryCacheeStackExchange.Redis. -
Circuit breaker + bulkhead com Polly:
Policy.WrapAsync(new HttpClientPolicyBuilder().CircuitBreakerAsync(5, TimeSpan.FromSeconds(30))). -
Integração de verificação de saúde: Exponha
/mcp/healthque realiza umGET /discover/healthleve e retorna 200 apenas se todas as ferramentas registradas responderem. -
Observabilidade: Adicione instrumentação personalizada do OpenTelemetry para
McpClient.GetToolAsync, emitindo contadores para acertos de cache, falhas e percentis de latência. -
Transporte seguro: Configure
HttpClientHandler.ClientCertificatescom um certificado de principal de serviço e aplique a validação do certificado do servidor. -
Guardrails de CI/CD: Inclua uma etapa que inicia uma instância de teste do MCP e executa
dotnet test --filter Category=Integrationcontra o contrato de descoberta. - 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 |
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.


