AWS Machine LearningPublicación de la fuente

Descubra herramientas en tiempo de ejecución con AWS Agent Registry

El descubrimiento en tiempo de ejecución con AWS Agent Registry puede ayudar a abordar un problema que las demostraciones de agentes podrían ocultar. Las herramientas fijas funcionan bien para un puñado, empiezan a degradarse con unas dos docenas y se vuelven ingobernables más allá de eso.

El descubrimiento en tiempo de ejecución con AWS Agent Registry puede ayudar a abordar un problema que las demostraciones de agentes podrían ocultar. Las herramientas fijas funcionan bien para un puñado, empiezan a degradarse con unas dos docenas y se vuelven ingobernables más allá de eso. Los sistemas empresariales exponen cientos de API internas para precios, soporte, pedidos, inventario y datos de clientes. En estos sistemas, el modelo puede gastar más tokens desambiguando nombres de herramientas que razonando sobre la solicitud del usuario. Cada nueva capacidad requiere un cambio de código en el orquestador, un nuevo despliegue y una liberación coordinada entre equipos que preferirían publicar con su propio ritmo.

Este patrón puede surgir en compromisos de software como servicio (SaaS) empresariales donde los equipos exponen grandes superficies de API internas a consumidores agénticos. El cableado en tiempo de compilación puede convertirse en un cuello de botella a medida que el catálogo se expande. Un enfoque es cambiar la forma en que el orquestador accede a sus herramientas: en lugar de compilar cada herramienta en el agente, el agente puede descubrir las herramientas relevantes en tiempo de ejecución.

AWS Agent Registry es un servicio administrado para catalogar y descubrir servidores de Model Context Protocol (MCP), agentes y habilidades de agentes. Los publicadores registran descriptores específicos del protocolo y descripciones indexables. En tiempo de ejecución, un orquestador puede buscar registros aprobados y detectables, y usar el endpoint y el contenido del descriptor devueltos para construir un cliente. Los resultados de búsqueda del Registry no devuelven las credenciales de invocación ni el esquema de autenticación de la capacidad.

Esta publicación describe el bucle Descubrir → Instanciar → Ejecutar demostrado por la muestra de Python refactorizada. El código despliega un servidor MCP de gestión de pedidos mediante Amazon Bedrock AgentCore Gateway, una capacidad de Amazon Bedrock AgentCore, dos agentes agente-a-agente (A2A) en AgentCore runtime, un Registry y un orquestador. El directorio de la muestra contiene el script de despliegue, el orquestador, los módulos de ayuda y el script de limpieza.

Descripción general de la solución: descubrir, instanciar, ejecutar

El agente orquestador de esta muestra no tiene conocimiento integrado de herramientas ni de agentes.

Figura 1: Sin AWS Agent Registry (izquierda), los endpoints están fijos en el código y agregar un nuevo agente implica cambios de código más un nuevo despliegue. Con AWS Agent Registry (derecha), el orquestador descubre capacidades mediante búsqueda semántica y las nuevas integraciones son utilizables después del registro y la aprobación

Descubrir

El orquestador envía una consulta en lenguaje natural al plano de datos de AWS Agent Registry. La respuesta de la búsqueda incluye la identidad del registro, el nombre, la descripción, el tipo de registro, el estado, la versión y descriptores de protocolo como los metadatos de un servidor MCP o una tarjeta de agente A2A. No incluye credenciales de invocación. La aplicación debe obtener y aplicar las credenciales apropiadas a través de una ruta de configuración de confianza separada.

Instanciar

Para cada registro devuelto, el orquestador construye un cliente a partir del tipo de descriptor. En esta muestra, el servidor MCP registrado representa herramientas que primero se añadieron como destinos a Amazon Bedrock AgentCore Gateway. Por lo tanto, el descriptor MCP apunta al endpoint del Gateway. El orquestador obtiene por separado un token de acceso de Cognito OAuth y lo usa al crear el MCPClient. Los registros A2A contienen una tarjeta de agente cuya URL identifica un endpoint de AgentCore runtime. El wrapper invoca ese runtime a través del cliente de plano de datos de boto3 , que firma la solicitud con las credenciales de AWS del solicitante. El descubrimiento del Registry proporciona metadatos de conexión, no el material de autenticación.

Ejecutar

Se construye un agente interno efímero solo con las herramientas descubiertas dinámicamente. El modelo de lenguaje de gran escala (LLM) elige la(s) correcta(s) para la solicitud, y el resultado se sintetiza de vuelta al usuario. Una vez que termina el turno, el agente interno y sus clientes se desmontan. La siguiente solicitud obtiene una búsqueda nueva y un conjunto de herramientas nuevo.

Figura 2: Arquitectura de extremo a extremo. Un único orquestador en Amazon Bedrock AgentCore runtime consulta AWS Agent Registry. Los servidores MCP coincidentes se invocan a través de Amazon Bedrock AgentCore Gateway, y los agentes A2A coincidentes se invocan en Amazon Bedrock AgentCore runtime

La arquitectura de referencia utilizada en la muestra incluye AWS Agent Registry, Amazon Bedrock AgentCore Gateway, Amazon Bedrock AgentCore runtime, Amazon Bedrock, Amazon Cognito, AWS Lambda y AWS Secrets Manager.

  • AWS Agent Registry proporciona el catálogo gobernado y consultable que consulta el orquestador. Solo los registros que completan el flujo de trabajo de aprobación configurado están disponibles a través del plano de datos descubrible.
  • Amazon Bedrock AgentCore Gateway expone las herramientas de Lambda para gestión de pedidos como un servidor MCP. El ejemplo configura JWT de Cognito la autorización para las llamadas entrantes al Gateway y utiliza el rol de AWS Identity and Access Management (IAM) del Gateway para invocar el destino de Lambda.
  • Amazon Bedrock AgentCore runtime aloja el orquestador y los agentes A2A de Pricing y Customer Support. Las invocaciones en tiempo de ejecución usan autorizado por IAM Boto3 llamadas.
  • Amazon Bedrock proporciona el modelo fundacional (FM) que utilizan el orquestador y los agentes A2A. Actualmente, el ejemplo configura un modelo de Anthropic Claude Sonnet mediante un ID de modelo de varias Regiones. Consulte Modelos admitidos por región de AWS en Amazon Bedrock.

Tres escenarios de demostración ejercitan el bucle de descubrimiento con diferentes combinaciones de capacidades. El primero es una llamada solo de MCP (estado del pedido). El segundo encadena MCP + A2A (precios y descuentos). El tercero prueba una coincidencia puramente semántica contra una intención ambigua del usuario: devolución y reembolso, donde esas palabras no aparecen en el nombre del agente A2A con el que se hace la coincidencia.

Implementación técnica

El descubrimiento en tiempo de ejecución vinculado muestra implementa las dependencias, crea y rellena el Registro, verifica el descubrimiento, implementa el orquestador y ejecuta tres demostraciones. orchestrator_agent.py contiene el bucle de descubrimiento por solicitud. utils.py analiza los descriptores del Registry y crea clientes MCP y A2A. cleanup.py elimina recursos.

1. El modelo de registro

Un registro de Registry contiene una descripción buscable más un descriptor específico del protocolo. El ejemplo utiliza el cliente del plano de control de Agent Registry para las operaciones de Registry y del ciclo de vida de los registros, y el cliente del plano de datos de Agent Registry para el descubrimiento en tiempo de ejecución.

Creación de un Registry con aprobación manual y autorización de IAM.

registry_client = session.client("agent-registry-control")
dp_client = session.client("agent-registry")
reg = registry_client.create_registry(
    name="OrderManagementRegistry",
    description=(
        "Registry for Order Management & Customer Service — "
        "agent discovers tools and agents via semantic search"
    ),
    approvalConfiguration={"autoApprovalRules": []},
)
REGISTRY_ARN = reg["registryArn"]
REGISTRY_ID = REGISTRY_ARN.split("/")[-1]

El recordType campo obligatorio al crear un registro. En este ejemplo, los servidores MCP usan recordType="MCP" y los agentes respaldados por A2A usan 2 recordType="AGENT". Los metadatos del protocolo se almacenan en mcpServer o a2aAgentCard en el descriptors objeto. Un descriptor MCP contiene metadatos del servidor y definiciones de herramientas. Un descriptor A2A contiene la tarjeta del agente. Los descriptores contienen metadatos de conexión pero no las credenciales que un consumidor debe presentar al invocar la capacidad.

Construir las formas actuales de descriptores del SDK público para registros MCP y A2A.

# MCP descriptor
mcp_descriptors = {
    "mcpServer": {
        "data": json.dumps(server_metadata),
        "dataSchemaVersion": "2025-12-11",
        "additionalData": {
            "tools": {
                "data": json.dumps({"tools": tool_schemas}),
                "dataSchemaVersion": "2025-06-18",
            }
        },
    }
}

# A2A descriptor
a2a_descriptors = {
    "a2aAgentCard": {
        "data": json.dumps(agent_card),
        "dataSchemaVersion": "0.3",
    }
}

Escriba descripciones en lenguaje orientado al usuario que distingan la capacidad de los registros vecinos. El contenido del descriptor proporciona los datos específicos del protocolo: servidor, herramienta o tarjeta del agente. La calidad de la búsqueda debe evaluarse con consultas representativas. Esta publicación no asume que el crecimiento del catálogo mejore automáticamente el posicionamiento.

Crear un registro del Registry con la forma actual del plano de control.

descriptors = (
    mcp_descriptors
    if cfg["protocol"] == "MCP"
    else a2a_descriptors
)

response = registry_client.create_registry_record(
    registryId=REGISTRY_ID,
    name=name,
    description=cfg["description"],
    recordType=cfg["protocol"],
    descriptors=descriptors,
    recordVersion="1.0",
)
record_id = response["recordId"]

2. Flujo de trabajo de aprobación

Con autoApproval establecido en false, un nuevo registro debe pasar de DRAFT a PENDING_APPROVAL y luego APPROVED. Las acciones de envío y actualización de estado están autorizadas por IAM, lo que permite separar los permisos de publicador y aprobador. Solo los registros aprobados son devueltos por el plano de datos de registros detectables del Registry.

La transición de aprobación en dos pasos.

record = registry_client.get_registry_record(
    registryId=REGISTRY_ID,
    recordId=record_id,
)
if record["status"] == "DRAFT":
    registry_client.submit_registry_record_for_approval(
        registryId=REGISTRY_ID,
        recordId=record_id,
    )
    registry_client.update_registry_record_status(
        registryId=REGISTRY_ID,
        recordId=record_id,
        status="APPROVED",
        statusReason="Approved",
    )

3. La capa de descubrimiento

El cliente del plano de datos admite búsqueda híbrida por palabras clave y semántica entre los registros detectables. El nombre del método más reciente es search_discoverable_registry_records. Los resultados exponen campos de registro normalizados y descriptores detectables. No exponen las credenciales de invocación de la capacidad.

Búsqueda de registros aprobados y detectables a través de protocolos.

response = dp_client.search_discoverable_registry_records(
    registryIds=[REGISTRY_ARN],
    searchQuery=query,
    maxResults=3,
)
records = response.get("registryRecords", [])

En el escenario de ejemplo, una consulta de devolución y reembolso recupera el Customer Support Agent porque su descripción captura esa intención. Trate esto como un resultado de demostración, no como una afirmación general de que el ranking mejora simplemente porque el catálogo es más grande.

4. El orquestador

El orquestador es un agente de Strands desplegado en el runtime de Amazon Bedrock AgentCore. Expone discover_and_execute, que busca en el Registry, analiza cada descriptor devuelto, crea el cliente MCP o A2A correspondiente y construye un agente interno con ámbito de solicitud a partir únicamente de las capacidades descubiertas.

Figura 3: El flujo por solicitud del orquestador. El agente externo traduce la solicitud del usuario en una búsqueda en el Registry. El agente interno se ensambla a partir de los resultados de la búsqueda y se desmantela al final del turno

El núcleo de discover_and_execute cabe en un solo bloque de código:

El bucle descubrir/instanciar/ejecutar del orquestador.

​​​@tool 
 def discover_and_execute(request: str) -> str: 
     records = dp_client.search_discoverable_registry_records( 
         registryIds=[REGISTRY_ARN], 
         searchQuery=request, 
         maxResults=5, 
     ).get("registryRecords", []) 
  
    # Registry returns descriptors, not invocation credentials. 
     oauth_token = fetch_oauth_token_from_config() 
     mcp_clients, a2a_tools = [], [] 
     for record in records: 
         metadata = parse_server_metadata(record) 
         if metadata["protocol"] == "MCP": 
             mcp_clients.append( 
                 create_mcp_client_from_metadata(metadata, oauth_token) 
             ) 
         elif metadata["protocol"] == "A2A": 
             a2a_tools.append( 
                 create_a2a_tool_from_metadata(metadata, session, REGION) 
             ) 
  
    return run_request_scoped_agent(request, mcp_clients, a2a_tools)​​ 

​​model = BedrockModel(model_id=MODEL_ID, region_name=REGION) 
​    started_clients = [] 
​    try: 
​        mcp_tools = [] 
​        for c in mcp_clients: 
​            c.start() 
​            started_clients.append(c) 
​            mcp_tools.extend(c.list_tools_sync()) 

​ 	    ##agent compiled in realtime within agent 
​        sub_agent = Agent( 
​            model=model, 
​            tools=mcp_tools + a2a_tools, 
​            system_prompt=( 
​                "You are an Order Management & Customer Service assistant. " 
​                "Use the RIGHT tool for each request:\\n" 
​                "- Order lookups, status, cancellations, address changes: use MCP tools\\n" 
​                "- Pricing, discounts, promo codes: use the pricing_agent tool\\n" 
​                "- Returns, refunds, complaints, escalations: use the customer_support_agent tool\\n" 
​                "Always use the most specific tool for the task." 
​            ), 
​        ) 
​        return str(sub_agent(request)) 
​    finally: 
​        for c in started_clients: 
​            try: 
​                c.stop() 
​            except Exception: 
​                pass​ 

El ejemplo lanza varias consultas de búsqueda en paralelo para mejorar la recuperación en su dominio de gestión de pedidos, deduplica los registros y desmantela los clientes MCP después de la solicitud. Ese fan-out es una elección de orquestación específica del ejemplo, no un requisito del Registry. La autenticación permanece fuera del descubrimiento: el token OAuth del Gateway se obtiene de la configuración de Cognito y de Secrets Manager, mientras que las llamadas al runtime de A2A se firman a través de la sesión de boto3 .

5. Ejecución de las tres demostraciones

Cada demostración ejercita una forma diferente del bucle de descubrimiento.

Demostración 1: Estado del pedido (solo MCP)

Una solicitud que se resuelve en una única llamada a una herramienta MCP.

result = invoke_orchestrator(
    "What is the current status and tracking info for order 123?",
    agentcore_client, orchestrator_arn,
)

El Registry devuelve el servidor MCP de gestión de pedidos. El orquestador llama get_order_status a través del Gateway, el LLM sintetiza una respuesta legible para humanos y el agente interno termina. Sin participación de A2A en este turno.

Demostración 2: Precios y descuentos (MCP + A2A)

Una solicitud que se resuelve en una cadena multiprotocolo.

result = invoke_orchestrator(
    "Order 123 has 2x Widget Pro at $99.98. What discount tiers or "
    "promo codes can reduce the price?",
    agentcore_client, orchestrator_arn,
)

El Registry devuelve el servidor MCP de gestión de pedidos y el agente A2A de precios: dos protocolos, una consulta en lenguaje natural. El LLM llama get_order_status para obtener las líneas de pedido, luego llama al agente de precios en runtime para el análisis de descuentos, y finalmente sintetiza una única recomendación.

Demo 3: Devolución y reembolso (coincidencia semántica)

Una solicitud cuya intención no aparece literalmente en el nombre de ninguna herramienta.

result = invoke_orchestrator(
    "I want to return order 789 (Premium Headphones, delivered "
    "March 10). Am I eligible for a return and what is the refund "
    "amount?",
    agentcore_client, orchestrator_arn,
)

Esta demo muestra el valor del descubrimiento semántico. La frase «return refund» no aparece en el nombre registrado del Customer Support Agent. La búsqueda híbrida la posiciona en un lugar destacado porque su descripción captura la intención. Sin Registry, el orquestador necesitaría conocimiento codificado de forma fija sobre qué agente gestiona las devoluciones.

6. Observabilidad

Instrumente la ruta de descubrimiento e invocación usando Amazon Bedrock AgentCore Observability y Amazon CloudWatch donde corresponda. Las señales útiles incluyen el éxito y el fallo de las búsquedas en el Registry, los identificadores de los registros seleccionados, los errores de construcción del cliente, los resultados de las invocaciones aguas abajo, la correlación de trazas de extremo a extremo y los errores de aplicación. El ejemplo otorga permisos de Amazon CloudWatch Logs, pero no crea métricas ni paneles personalizados. Los equipos de producción deben definir las trazas, los registros y las alertas requeridas por su modelo de operación. Las implementaciones de producción también deberían aplicar Amazon Bedrock Guardrails como control estándar sobre las respuestas de los agentes.

Lo que los equipos obtienen del descubrimiento en runtime con gobernanza

Una vez implementado el bucle de descubrimiento, varias capacidades que antes estaban acopladas a las versiones del orquestador se vuelven independientes.

  • Publicación desacoplada. Los equipos pueden desplegar y registrar sus propios servidores MCP, agentes y skills. La política de aprobación determina cuándo un registro publicado pasa a estar disponible para los consumidores.
  • Sin cambios de código en el orquestador para registros recién aprobados. En este patrón, añadir un registro del Registry compatible y aprobado no requiere agregar una importación o un endpoint específico de la herramienta al orquestador. Los cambios en los protocolos, la configuración de autenticación o la política de orquestación aún pueden requerir actualizaciones de código o configuración.
  • Descubrimiento con gobernanza. Con la aprobación manual, solo los registros revisados y aprobados se vuelven detectables. Los permisos de IAM pueden separar a los publicadores de registros de los aprobadores.
  • Autenticación separada. La autorización del Registry puede usar IAM o JWT personalizado. La autenticación de invocación de capacidades es independiente: el ejemplo usa Cognito OAuth para Gateway y firma Boto3/IAM para el runtime de AgentCore. Los resultados de búsqueda no devuelven esas credenciales.
  • Búsqueda en catálogo en lugar de sobrecargar el prompt. Con la búsqueda híbrida del Registry, el orquestador recupera un pequeño conjunto de candidatos en lugar de colocar todo el catálogo en el contexto del modelo. La calidad de la búsqueda depende de las descripciones, la calidad de los descriptores, el diseño de las consultas y la evaluación.

Cuándo no usar el descubrimiento en runtime

El descubrimiento en runtime no es necesario para todas las cargas de trabajo. Dos patrones pueden seguir favoreciendo la conexión explícita en tiempo de construcción:

  • Catálogos pequeños y estables. Si el conjunto completo de capacidades es pequeño y cambia con poca frecuencia, el cableado explícito en tiempo de compilación puede ser más sencillo y evitar una solicitud de descubrimiento adicional.
  • Pipelines fijos. Cuando las mismas capacidades siempre se ejecutan en un orden fijo, implementarlas como un flujo determinista es más directo y mantiene el trazado enfocado.

Conclusión

El descubrimiento de assets desde Registry en tiempo de ejecución hace que el orquestador dependa menos de un catálogo fijo. Frente a un AWS Agent Registry, puede buscar capacidades aprobadas con búsqueda híbrida semántica y por palabras clave, analizar descriptores MCP o A2A, e instanciar clientes con ámbito de solicitud. La gobernanza determina qué es detectable. La autenticación sigue siendo una preocupación explícita para el Registry y para cada capacidad invocada.

AWS Agent Registry está generalmente disponible con capacidades que van más allá de este ejemplo de cuenta única:

Ejecute el ejemplo de descubrimiento en tiempo de ejecución, luego registre un servidor MCP o agente compatible propio. Confirme que su descriptor, estado de aprobación, ruta de autenticación y comportamiento de búsqueda coincidan con sus requisitos de producción.

Aprenda más


Sobre los autores

Fuente original

AWS Machine Learning

Notas sobre el contenido

La publicación original y los derechos pertenecen a la fuente.

Traducción automática · Consulte el original