Servidores MCP de Longa Duração no Amazon Bedrock AgentCore com Integração Strands Agents

Agentes de IA Evoluindo Para Operações Complexas

Os agentes de inteligência artificial estão deixando de ser simples interfaces de conversação para se tornarem ferramentas sofisticadas de processamento de dados. Organizações cada vez mais utilizam esses agentes para treinar modelos, processar grandes volumes de informações e executar simulações estendidas. Esse cenário traz uma questão técnica fundamental: operações que levam minutos ou horas extrapolam completamente os limites de tempo típicos das sessões de usuário.

O desafio central abordado pela AWS diz respeito à execução de tarefas que persistem além das conexões convencionais. Imagine um cenário onde seu agente de IA inicia um processamento de dados que durará várias horas, o usuário fecha seu navegador, e quando retorna dias depois, o sistema apresenta os resultados completos com visibilidade total sobre o progresso e qualquer erro ocorrido. Isso é possível através de padrões arquiteturais que combinam Amazon Bedrock AgentCore e Strands Agents para gerenciar estado persistente.

Sem esses padrões, encontram-se erros de timeout, utilização ineficiente de recursos e potencial perda de dados quando conexões se encerram abruptamente. A solução proposta integra três estratégias complementares: comunicação contínua entre servidores e clientes durante operações estendidas, gerenciamento de tarefas assíncronas que permite aos agentes iniciar processos sem bloquear outras operações, e a integração desses componentes em um sistema pronto para produção.

Duas Estratégias Para Tarefas de Longa Duração

Ao projetar servidores Model Context Protocol (MCP) para tarefas prolongadas, surge uma decisão arquitetural fundamental: a conexão deve permanecer ativa fornecendo atualizações em tempo real, ou deve haver desacoplamento entre execução e requisição inicial? Essa escolha delineia duas abordagens distintas.

Mensagens de Contexto: Mantendo Conexões Ativas

A abordagem de mensagens de contexto preserva comunicação contínua entre servidor MCP e cliente durante toda a execução. O servidor utiliza o objeto de contexto integrado do MCP para enviar notificações periódicas. Essa estratégia funciona melhor para cenários onde tarefas completam dentro de 10 a 15 minutos e a conectividade permanece estável.

As vantagens dessa abordagem incluem implementação direta, ausência de lógica adicional de verificação repetida, implementação simplificada no cliente e sobrecarga mínima.

A implementação funciona através de mensagens de “heartbeat” que mantêm a conexão viva durante operações estendidas. Cada notificação de progresso previne que o servidor encerre a conexão por inatividade. Exemplos práticos incluem relatórios de progresso em treinamento de modelos, onde a cada iteração um novo percentual de conclusão é reportado.

Quando o progresso exato não é facilmente quantificável—como em processamento de datasets imprevisíveis ou chamadas a APIs externas—implementa-se um sistema de heartbeat baseado em tempo: notificações periódicas simplesmente informam que o processamento continua ativo, sem necessidade de métrica específica.

Gerenciamento de Tarefas Assíncronas: O Modelo “Fire-and-Forget”

O padrão de gerenciamento assíncronico separa a iniciação da tarefa de sua execução e recuperação de resultados. Após executar a ferramenta MCP, ela retorna imediatamente uma mensagem com identificador de tarefa enquanto o trabalho prossegue em background. Essa abordagem excele em cenários empresariais exigentes onde tarefas podem durar horas, usuários precisam de flexibilidade para desconectar e reconectar, e a confiabilidade do sistema é paramount.

Os benefícios incluem verdadeira operação “fire-and-forget”, segurança para desconexão do cliente enquanto tarefas continuam, prevenção de perda de dados através de armazenamento persistente, suporte para operações de muitas horas, resiliência contra interrupções de rede e suporte a fluxos de trabalho completamente assíncronos.

Este padrão espelha como organizações interagem com sistemas de processamento em lote: submete-se um job, desconecta-se, e verifica-se progresso quando conveniente. A implementação cria três ferramentas MCP distintas: uma que inicia a tarefa e retorna um identificador único, outra para verificar status e progresso em qualquer momento, e uma terceira para recuperar resultados quando concluídos.

Quando Usar Cada Abordagem

Mensagens de contexto funcionam melhor quando tarefas levam entre um e 15 minutos, conexões de rede são geralmente estáveis e a sessão do cliente permanece ativa durante toda a operação. O limite de 15 minutos baseia-se no tempo máximo para requisições síncronas no Amazon Bedrock AgentCore.

Contudo, essa abordagem possui limitações críticas: a sessão do cliente deve permanecer ativa—se o navegador fecha ou a rede cai, o trabalho é perdido. Manter conexões abertas consome recursos significativos no servidor e cliente, potencialmente aumentando custos. Instabilidade de rede ainda pode interromper o processo, exigindo reinício completo. A maioria das infraestruturas possui limites de timeout absolutos que mensagens de heartbeat não conseguem contornar.

Para operações verdadeiramente prolongadas que possam durar horas, ou quando usuários precisam desconectar e reconectar posteriormente, o gerenciamento assíncronico torna-se necessário. Porém, essa abordagem introduz suas próprias limitações: requer que usuários verifiquem manualmente status de tarefa, lembrem identificadores entre sessões e solicitem resultados explicitamente, aumentando complexidade de interação. Armazenamento em memória volátil—como em exemplo básico—significa que tarefas e resultados desaparecem se o servidor reinicia, tornando inadequado para produção sem persistência externa. Em ambientes serverless efêmeros, instâncias terminam automaticamente após inatividade, causando perda permanente do estado de tarefa em memória.

Solução Robusta: Persistência Externa

Para resolver essas limitações críticas, é necessário incluir persistência externa que sobreviva tanto a reinicializações de servidor quanto a terminações de instância. A solução avançada utiliza Amazon Bedrock AgentCore Memory como armazenamento persistente de estado de agente.

Quando um servidor MCP executa tarefa de longa duração, escreve resultados intermediários ou finais diretamente no armazenamento de memória externa que o agente pode acessar. Isso cria resiliência contra dois tipos de falhas: a instância executando o servidor MCP pode ser encerrada por inatividade após conclusão da tarefa, e a instância hospedando o próprio agente pode ser reciclada em ambientes serverless. Quando usuários retornam para interagir com o agente—seja minutos, horas ou dias depois—o agente recupera resultados completados do armazenamento persistente.

Essa abordagem minimiza dependências de runtime: mesmo que ambas as instâncias, servidor MCP e agente, sejam terminadas, os resultados da tarefa permanecem preservados e acessíveis quando necessário.

Implementação Com Amazon Bedrock AgentCore e Strands Agents

Escolhendo Entre Gateway e Runtime

Antes de implementar, é importante compreender as opções de deployment disponíveis para servidores MCP no Amazon Bedrock AgentCore. Existem duas abordagens primárias: Amazon Bedrock AgentCore Gateway e AgentCore Runtime.

AgentCore Gateway possui timeout de cinco minutos para invocações, tornando-o inadequado para hospedar servidores MCP que ofereçam ferramentas exigindo tempos de resposta estendidos ou operações longas. Amazon Bedrock AgentCore Runtime, por outro lado, oferece significativamente mais flexibilidade: timeout de 15 minutos para requisições síncronas e duração máxima de sessão ajustável para processos assíncronos—a duração padrão é oito horas.

Embora fosse possível hospedar um servidor MCP em ambiente tradicional com servidores físicos para tempo de execução ilimitado, AgentCore Runtime proporciona equilíbrio ótimo para a maioria dos cenários de produção. Obtém-se benefícios serverless como scaling automático, preço por uso e sem gerenciamento de infraestrutura, enquanto os máximos ajustáveis cobrem praticamente todas as operações reais longas—desde processamento de dados e treinamento de modelos até geração de relatórios e simulações complexas. Essa abordagem permite construir agentes sofisticados sem overhead operacional de gerenciar servidores, reservando deployments com infraestrutura física apenas para casos raros que genuinamente exigem execuções de múltiplos dias.

Servidor MCP Com Persistência de Memória

A implementação do servidor MCP utiliza AgentCore Memory para atingir persistência de resultados. O cliente de memória estabelece comunicação com o armazenamento persistente. Quando uma tarefa em background completa, o método agentcore_memory_client.create_event() salva os resultados diretamente na memória do agente utilizando os identificadores apropriados de memória, ator e sessão.

Diferentemente de abordagens tradicionais onde resultados podem ser armazenados temporariamente ou exigir recuperação manual, essa integração torna os resultados de tarefas uma parte permanente da memória conversacional do agente. O agente pode então referenciar esses resultados em interações futuras, criando experiência contínua de construção de conhecimento através de múltiplas sessões.

Um componente crucial envolve extrair contexto de sessão através dos headers HTTP da requisição MCP. O header “Mcp-Session-Id” faz parte do protocolo MCP padrão. Esse header passa um identificador composto contendo três informações essenciais em formato delimitado: session_id@@@memory_id@@@actor_id. Headers são usados em vez de variáveis de ambiente por necessidade: esses identificadores mudam dinamicamente a cada conversa, enquanto variáveis de ambiente permanecem estáticas desde startup do container. Essa escolha é particularmente importante em cenários multi-tenant onde um único servidor MCP simultaneamente gerencia requisições de múltiplos usuários, cada um com seu próprio contexto de sessão distinto.

Ao salvar eventos no AgentCore Memory, cada mensagem requer dois componentes: o conteúdo e um identificador de papel (role). Esses componentes precisam ser formatados de maneira que o framework de agente reconheça. Para o framework Strands Agents, isso significa serializar o conteúdo como JSON interno contendo detalhes da mensagem incluindo papel, conteúdo textual e identificador de mensagem, com um identificador de papel externo (USER neste exemplo) ajudando a categorizar a origem da mensagem no AgentCore Memory.

Integração Com Strands Agents

Integrar Amazon Bedrock AgentCore Memory com Strands Agents é notavelmente simples utilizando a classe AgentCoreMemorySessionManager do Bedrock AgentCore SDK. A implementação requer configuração mínima: criar um objeto AgentCoreMemoryConfig com os identificadores de sessão, inicializar o gerenciador de sessão com essa configuração, e passá-lo diretamente ao construtor do agente. O gerenciador de sessão transparentemente gerencia operações de memória nos bastidores, mantendo histórico de conversa e contexto através de interações enquanto organiza memórias utilizando a combinação de session_id, memory_id e actor_id.

O gerenciamento de contexto de sessão é particularmente elegante nessa abordagem. O agente recebe identificadores de sessão através dos parâmetros de payload e contexto fornecidos pelo AgentCore Runtime. Esses identificadores formam uma ponte contextual crucial conectando interações do usuário através de múltiplas sessões. O session_id pode ser extraído do objeto contexto—gerando um novo se necessário—enquanto memory_id e actor_id são recuperados do payload. Esses identificadores são então empacotados em um header HTTP customizado que é passado ao servidor MCP durante o estabelecimento de conexão.

Para manter essa experiência persistente através de múltiplas interações, clientes devem consistentemente fornecer os mesmos identificadores ao invocar o agente. Fornecendo consistentemente o mesmo memory_id, actor_id e runtimeSessionId através de invocações, usuários criam experiência conversacional contínua onde resultados de tarefas persistem independentemente de limites de sessão. Quando um usuário retorna dias depois, o agente pode automaticamente recuperar tanto histórico de conversa quanto resultados de tarefa que foram completados durante sua ausência.

Uma Nova Geração de Agentes Autônomos

Essa arquitetura representa avanço significativo nas capacidades de agentes de IA, transformando operações de longa duração de processos frágeis e dependentes de conexão em tarefas robustas e persistentes que continuam funcionando independentemente de estado de conexão. O resultado é um sistema que pode entregar assistência genuinamente assíncrona através de IA, onde trabalho complexo continua progredindo em background e resultados são integrados perfeitamente sempre que o usuário retorna à conversa.

Tanto mensagens de contexto quanto gerenciamento assíncronico oferecem caminhos viáveis: mensagens de contexto para tarefas moderadas mantendo conexões ativas, gerenciamento assíncronico para necessidades que crescem. As soluções descritas podem ser rapidamente adaptadas para necessidades específicas, ajudando a construir IA que entrega resultados confiávelmente—mesmo quando usuários desconectam e retornam dias depois.

Para conhecer mais detalhes, consulte a documentação do Amazon Bedrock AgentCore e explore o notebook de exemplo fornecido. Mais informações sobre quotas de serviço estão disponíveis na documentação de quotas do Amazon Bedrock AgentCore, e a documentação do AgentCore Memory Session Manager oferece detalhes sobre integração com Strands Agents.

Fonte

Build long-running MCP servers on Amazon Bedrock AgentCore with Strands Agents integration (https://aws.amazon.com/blogs/machine-learning/build-long-running-mcp-servers-on-amazon-bedrock-agentcore-with-strands-agents-integration/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *