Voltar as noticias
Cliente MCP com LangChain4j
MCP ProtocolAltaEN

Cliente MCP com LangChain4j

Dev.to - MCP·11 de maio de 2026

Cliente MCP com LangChain4j: Conectando um Agente a Múltiplos Serviços

No post anterior, transformei cada microsserviço em um servidor MCP. Agora vamos conectar um agente de IA a todos eles. O agente terá acesso a mais de 12 ferramentas em 4 serviços e o LLM decidirá quais chamar em tempo de execução.

A Configuração do Cliente

LangChain4j fornece McpToolProvider, um provedor de ferramentas que se conecta a um ou mais servidores MCP e expõe suas ferramentas ao agente. Aqui está minha configuração:

@Configuration
@RequiredArgsConstructor
public class McpClientConfig {

    @Value("${mcp.order-service-url}")
    private String orderServiceUrl;
    @Value("${mcp.payment-service-url}")
    private String paymentServiceUrl;
    @Value("${mcp.inventory-service-url}")
    private String inventoryServiceUrl;
    @Value("${mcp.product-validation-url}")
    private String productValidationUrl;

    @Bean
    public McpToolProvider mcpToolProvider() {
        return McpToolProvider.builder()
            .mcpClients(List.of(
                buildClient(orderServiceUrl),
                buildClient(paymentServiceUrl),
                buildClient(inventoryServiceUrl),
                buildClient(productValidationUrl)
            ))
            .build();
    }

    private McpClient buildClient(String sseUrl) {
        return new DefaultMcpClient.Builder()
            .transport(new HttpMcpTransport.Builder()
                .sseUrl(sseUrl)
                .logResponses(true)
                .logRequests(true)
                .build())
            .build();
    }
}

As URLs vêm de application.yml:

mcp:
  order-service-url:      ${ORDER_MCP_URL:http://localhost:3000/sse}
  payment-service-url:    ${PAYMENT_MCP_URL:http://localhost:8091/sse}
  inventory-service-url:  ${INVENTORY_MCP_URL:http://localhost:8092/sse}
  product-validation-url: ${PRODUCT_VALIDATION_MCP_URL:http://localhost:8090/sse}

Variáveis de ambiente para produção, padrões de localhost para desenvolvimento. Padrão do Spring Boot.

Construindo um Agente com Ferramentas MCP

Uma vez que o bean McpToolProvider existe, conectá-lo a um agente é uma linha:

DataAnalystAgent agent = AiServices.builder(DataAnalystAgent.class)
    .chatModel(primaryChatModel)
    .toolProvider(mcpToolProvider)      // todas as 12+ ferramentas de 4 serviços
    .maxSequentialToolsInvocations(5)   // limite de segurança
    .build();

O toolProvider substitui .tools(...). Em vez de passar instâncias específicas de ferramentas, você passa um provedor que resolve dinamicamente ferramentas dos servidores MCP. O agente vê todas as ferramentas de todos os servidores conectados.

maxSequentialToolsInvocations limita quantas chamadas de ferramentas o agente pode fazer em uma única vez. Sem isso, um LLM confuso poderia entrar em um loop infinito chamando ferramentas. Eu defini como 5 para o DataAnalystAgent. O OperationsAgent usa 3 porque só precisa de contexto RAG, sem chamadas MCP.

O que o LLM Vê

Quando o agente começa, LangChain4j chama tools/list em cada servidor MCP. Ele coleta todos os esquemas de ferramentas e os envia ao LLM como objetos functionDeclaration. O LLM vê algo como:

Ferramentas disponíveis:
- getOrderById(orderId: string) - Retorna os detalhes do pedido
- listRecentEvents(limit: integer) - Retorna os eventos recentes da saga
- getPaymentStatus(transactionId: string) - Retorna o status do pagamento
- getFraudRiskScore(totalAmount: number, clientType: string, hourOfDay: integer) - Calcula o risco de fraude
- getStockByProduct(productCode: string) - Retorna o estoque disponível
- getLowStockAlert(threshold: integer)
Contexto Triplo Up

A implementação de um cliente MCP com LangChain4j pode otimizar a integração de serviços em empresas brasileiras. Isso permite que agentes de IA acessem e utilizem múltiplas ferramentas, aumentando a eficiência operacional e a automação de processos.

Noticias relacionadas

Gostou do conteudo?

Receba toda semana as principais novidades sobre WebMCP.