<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Justin Castilla - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Justin Castilla - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/es/search-labs/author/justin-castilla</link>
    </image>
    <link>https://www.elastic.co/es/search-labs/author/justin-castilla</link>
    <atom:link href="https://www.elastic.co/es/search-labs/rss/author/justin-castilla.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[es]]></language>
    <lastBuildDate>Mon, 14 Sep 2026 05:51:00 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Creación de una redacción de agentes LLM con protocolo A2A y MCP en Elasticsearch: Parte II]]></title>
    <description><![CDATA[Descubre cómo construir una sala de redacción híbrida especializada para agentes LLM empleando el protocolo A2A para la colaboración de agentes y MCP para el acceso a herramientas en Elasticsearch.]]></description>
    <content:encoded><![CDATA[<h2>A2A y MCP: el código en acción</h2><p>Este es el artículo complementario al artículo "¡Creando una redacción para agentes LLM con protocolo A2A y MCP en Elasticsearch!", que explicaba los beneficios de implementar tanto las arquitecturas A2A como MCP dentro del mismo agente para aprovechar realmente los beneficios únicos de ambos frameworks. Hay un <a href="https://github.com/justincastilla/elastic-newsroom">repositorio</a> disponible si deseas ejecutar la demo por tu cuenta.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt232e466d2153c764/6a17f15f631730042d585b8d/7196f004089127f83547b2e5dc3f663205cfcdce-1162x1600.png" alt="Flujo de trabajo de agentes de protocolos A2A y MCP" /><p>Vamos a repasar cómo colaboran nuestros agentes de redacción empleando tanto A2A como MCP para producir un artículo de noticias. El repositorio adjunto para ver a los agentes en acción se puede <a href="https://github.com/justincastilla/elastic-newsroom">encontrar aquí</a>.</p><h3>Paso 1: Asignación de la historia</h3><p>El <strong>Jefe de Noticias</strong> (actuando como cliente) asigna una noticia:</p>{
  "message_type": "task_request",
  "sender": "news_chief",
  "receiver": "reporter_agent",
  "payload": {
    "task_id": "story_renewable_energy_2024",
    "assignment": {
      "topic": "Renewable Energy Adoption in Europe",
      "angle": "Policy changes driving solar and wind expansion",
      "target_length": 1200,
      "deadline": "2025-09-30T18:00:00Z"
    }
  }
}<h3>Paso 2: El reportero aplicar investigación</h3><p>El <strong>Agente Reportero</strong> reconoce que necesita información de fondo y delega al <strong>Agente Investigador</strong> mediante A2A:</p>{
  "message_type": "task_request",
  "sender": "reporter_agent",
  "receiver": "researcher_agent",
  "payload": {
    "task_id": "research_eu_renewable_2024",
    "parent_task_id": "story_renewable_energy_2024",
    "capability": "fact_gathering",
    "parameters": {
      "queries": [
        "EU renewable energy capacity 2024",
        "Solar installations growth Europe",
        "Wind energy policy changes 2024"
      ],
      "depth": "comprehensive"
    }
  }
}<h3>Paso 3: El reportero aplicar contexto histórico al Agente de Archivo</h3><p>El <strong>Reporter Agent</strong> reconoce que el contexto histórico fortalecería la historia. Delega al <strong>Agente de Archivo</strong> (impulsado <a href="https://www.elastic.co/docs/solutions/search/elastic-agent-builder">por el Agente A2A de Elastic</a>) a través de A2A para buscar en el archivo de artículos impulsado por Elasticsearch de la redacción:</p>{
  "message_type": "task_request",
  "sender": "reporter_agent",
  "receiver": "archive_agent",
  "payload": {
    "task_id": "archive_search_renewable_2024",
    "parent_task_id": "story_renewable_energy_2024",
    "capability": "search_archive",
    "parameters": {
      "query": "European renewable energy policy changes and adoption trends over past 5 years",
      "focus_areas": ["solar", "wind", "policy", "Germany", "France"],
      "time_range": "2019-2024",
      "result_count": 10
    }
  }
}<h3>Paso 4: El Agente de Archivo emplea el Agente Elastic A2A con MCP</h3><p><strong>El Archive Agent</strong> emplea el A2A Agent de Elastic, que a su vez emplea MCP para acceder a las herramientas de Elasticsearch. Esto demuestra la arquitectura híbrida donde A2A permite la colaboración entre agentes mientras que MCP proporciona acceso a herramientas:</p># Archive Agent using Elastic A2A Agent
async def search_historical_articles(self, query_params):
    # The Archive Agent sends a request to Elastic's A2A Agent
    elastic_response = await self.a2a_client.send_request(
        agent="elastic_agent",
        capability="search_and_analyze",
        parameters={
            "natural_language_query": query_params["query"],
            "index_pattern": "newsroom-articles-*",
            "filters": {
                "topics": query_params["focus_areas"],
                "date_range": query_params["time_range"]
            },
            "analysis_type": "trend_analysis"
        }
    )
    
    # Elastic's A2A Agent internally uses MCP tools:
    # - platform.core.search (to find relevant articles)
    # - platform.core.generate_esql (to analyze trends)
    # - platform.core.index_explorer (to identify relevant indices)
    
    return elastic_response<p>El <strong>Agente de Archivo</strong> recibe datos históricos completos del Agente A2A de Elastic y los devuelve al Reportero:</p>{
  "message_type": "task_response",
  "sender": "archive_agent",
  "receiver": "reporter_agent",
  "payload": {
    "task_id": "archive_search_renewable_2024",
    "status": "completed",
    "archive_data": {
      "historical_articles": [
        {
          "title": "Germany's Energiewende: Five Years of Solar Growth",
          "published": "2022-06-15",
          "key_points": [
            "Germany added 7 GW annually 2020-2022",
            "Policy subsidies drove 60% of growth"
          ],
          "relevance_score": 0.94
        },
        {
          "title": "France Balances Nuclear and Renewables",
          "published": "2023-03-20",
          "key_points": [
            "France increased renewable target to 40% by 2030",
            "Solar capacity doubled 2021-2023"
          ],
          "relevance_score": 0.89
        }
      ],
      "trend_analysis": {
        "coverage_frequency": "EU renewable stories increased 150% since 2019",
        "emerging_themes": ["policy incentives", "grid modernization", "battery storage"],
        "coverage_gaps": ["Small member states", "offshore wind permitting"]
      },
      "total_articles_found": 47,
      "search_confidence": 0.91
    }
  }
}<p>Este paso demuestra cómo el Agente A2A de Elastic se integra en el flujo de trabajo de la redacción. El Agente de Archivo (un agente específico de redacción) coordina con el Agente A2A de Elastic (un especialista externo) para aprovechar las poderosas capacidades de búsqueda y análisis de Elasticsearch. El agente de Elastic emplea MCP internamente para acceder a las herramientas de Elasticsearch, mostrando la separación limpia entre la coordinación del agente (A2A) y el acceso a la herramienta (MCP).</p><h3>Paso 5: El investigador emplea servidores MCP</h3><p>El <strong>Agente Investigador</strong> accede a múltiples servidores MCP para recopilar información:</p># Researcher Agent using MCP to access tools
async def gather_facts(self, queries):
    results = []
    
    # Use News API MCP Server
    news_data = await self.mcp_client.invoke_tool(
        server="news_api_mcp",
        tool="search_articles",
        parameters={
            "query": queries[0],
            "date_range": "2024-01-01 to 2024-09-30",
            "sources": ["reuters", "bloomberg", "euractiv"]
        }
    )
    
    # Use Statistics MCP Server
    stats_data = await self.mcp_client.invoke_tool(
        server="eurostat_mcp",
        tool="get_energy_statistics",
        parameters={
            "metrics": ["solar_capacity_mw", "wind_capacity_mw"],
            "countries": ["EU27"],
            "year": 2024
        }
    )
    
    # Use Fact-Checking MCP Server
    verified_facts = await self.mcp_client.invoke_tool(
        server="factcheck_mcp",
        tool="verify_claims",
        parameters={
            "claims": [
                "EU solar capacity increased 40% in 2024",
                "Germany leads in wind installations"
            ]
        }
    )
    
    return self._synthesize_research(news_data, stats_data, verified_facts)<h3>Paso 6: El investigador devuelve los datos al Reportero</h3><p>El <strong>Agente Investigador</strong> envía una investigación exhaustiva de vuelta a través de A2A:</p>{
  "message_type": "task_response",
  "sender": "researcher_agent",
  "receiver": "reporter_agent",
  "payload": {
    "task_id": "research_eu_renewable_2024",
    "status": "completed",
    "research_data": {
      "key_facts": [
        {
          "claim": "EU solar capacity reached 260 GW in 2024",
          "source": "Eurostat Q3 2024 Report",
          "confidence": 0.95,
          "verified": true
        },
        {
          "claim": "Germany installed 12 GW of wind capacity in 2024",
          "source": "German Federal Network Agency",
          "confidence": 0.92,
          "verified": true
        }
      ],
      "statistics": {
        "solar_growth_rate": "35%",
        "wind_growth_rate": "28%"
      },
      "sources_count": 15
    }
  }
}<h3>Paso 7: Reportero escribe artículo</h3><p>El <strong>Reporter Agent</strong> emplea los datos de investigación y sus propias capacidades de LLM para redactar el artículo. Durante la redacción, el Reportero emplea los servidores MCP para el estilo y las plantillas:</p># Reporter Agent writing with MCP assistance
async def write_article(self, research_data, assignment):
    # Get style guidelines via MCP
    style_guide = await self.mcp_client.get_resource(
        server="newsroom_mcp",
        resource="style://editorial/ap_style_guide"
    )
    
    # Get article template via MCP
    template = await self.mcp_client.get_resource(
        server="newsroom_mcp",
        resource="template://articles/news_story"
    )
    
    # Generate article using LLM + research + style
    draft = await self.llm.generate(
        prompt=f"""
        Write a news article following these guidelines:
        {style_guide}
        
        Using this template:
        {template}
        
        Based on this research:
        {research_data}
        
        Assignment: {assignment}
        """
    )
    
    # Self-evaluate confidence in claims
    confidence_check = await self._evaluate_confidence(draft)
    
    return draft, confidence_check<h3>Paso 8: la baja confianza desencadena la re-investigación</h3><p>El <strong>Agente Reportero</strong> evalúa su borrador y encuentra que una afirmación tiene baja confianza. Envía otra solicitud al <strong>Agente Investigador</strong>:</p>{
  "message_type": "collaboration_request",
  "sender": "reporter_agent",
  "receiver": "researcher_agent",
  "payload": {
    "request_type": "fact_verification",
    "claims": [
      {
        "text": "France's nuclear phase-down contributed to 15% increase in renewable capacity",
        "context": "Discussing policy drivers for renewable growth",
        "current_confidence": 0.45,
        "required_confidence": 0.80
      }
    ],
    "urgency": "high"
  }
}<p>El <strong>investigador</strong> verifica la afirmación empleando servidores MCP de verificación de hechos y devuelve información actualizada:</p>{
  "message_type": "collaboration_response",
  "sender": "researcher_agent",
  "receiver": "reporter_agent",
  "payload": {
    "verified_claims": [
      {
        "original_claim": "France's nuclear phase-down contributed to 15% increase...",
        "verified_claim": "France's renewable capacity increased 18% in 2024, partially offsetting reduced nuclear output",
        "confidence": 0.88,
        "corrections": "Percentage was 18%, not 15%; nuclear phase-down is gradual, not primary driver",
        "sources": ["RTE France", "French Energy Ministry Report 2024"]
      }
    ]
  }
}<h3>Paso 9: El reportero revisa y envía al editor</h3><p>El <strong>Reportero</strong> incorpora los hechos verificados y envía el borrador completo al <strong>Agente Editor</strong> a través de A2A:</p>{
  "message_type": "task_request",
  "sender": "reporter_agent",
  "receiver": "editor_agent",
  "payload": {
    "task_id": "edit_renewable_story",
    "parent_task_id": "story_renewable_energy_2024",
    "content": {
      "headline": "Europe's Renewable Revolution: Solar and Wind Surge 30% in 2024",
      "body": "[Full article text...]",
      "word_count": 1185,
      "sources": [/* array of sources */]
    },
    "editing_requirements": {
      "check_style": true,
      "check_facts": true,
      "check_seo": true
    }
  }
}<h3>Paso 10: Revisiones del editor usando herramientas MCP</h3><p>El <strong>Editor Agent</strong> emplea múltiples servidores MCP para revisar el artículo:</p># Editor Agent using MCP for quality checks
async def review_article(self, content):
    # Grammar and style check
    grammar_issues = await self.mcp_client.invoke_tool(
        server="grammarly_mcp",
        tool="check_document",
        parameters={"text": content["body"]}
    )
    
    # SEO optimization check
    seo_analysis = await self.mcp_client.invoke_tool(
        server="seo_mcp",
        tool="analyze_content",
        parameters={
            "headline": content["headline"],
            "body": content["body"],
            "target_keywords": ["renewable energy", "Europe", "solar", "wind"]
        }
    )
    
    # Plagiarism check
    originality = await self.mcp_client.invoke_tool(
        server="plagiarism_mcp",
        tool="check_originality",
        parameters={"text": content["body"]}
    )
    
    # Generate editorial feedback
    feedback = await self._generate_feedback(
        grammar_issues, 
        seo_analysis, 
        originality
    )
    
    return feedback<p>El <strong>editor</strong> aprueba el artículo y lo envía hacia adelante:</p>{
  "message_type": "task_response",
  "sender": "editor_agent",
  "receiver": "reporter_agent",
  "payload": {
    "status": "approved",
    "quality_score": 9.2,
    "minor_edits": [
      "Changed 'surge' to 'increased' in paragraph 3 for AP style consistency",
      "Added Oxford comma in list of countries"
    ],
    "approved_content": "[Final edited article]"
  }
}<h3>Paso 11: El editor publica vía CI/CD</h3><p>Finalmente, el <strong>Agente de Impresora</strong> publica el artículo aprobado empleando los servidores MCP para la tubería CMS y CI/CD:</p># Publisher Agent publishing via MCP
async def publish_article(self, content, metadata):
    # Upload to CMS via MCP
    cms_result = await self.mcp_client.invoke_tool(
        server="wordpress_mcp",
        tool="create_post",
        parameters={
            "title": content["headline"],
            "body": content["body"],
            "status": "draft",
            "categories": metadata["categories"],
            "tags": metadata["tags"],
            "featured_image_url": metadata["image_url"]
        }
    )
    
    post_id = cms_result["post_id"]
    
    # Trigger CI/CD deployment via MCP
    deploy_result = await self.mcp_client.invoke_tool(
        server="cicd_mcp",
        tool="trigger_deployment",
        parameters={
            "pipeline": "publish_article",
            "environment": "production",
            "post_id": post_id,
            "schedule": "immediate"
        }
    )
    
    # Track analytics
    await self.mcp_client.invoke_tool(
        server="analytics_mcp",
        tool="register_publication",
        parameters={
            "post_id": post_id,
            "publish_time": datetime.now().isoformat(),
            "story_id": metadata["story_id"]
        }
    )
    
    return {
        "status": "published",
        "post_id": post_id,
        "url": f"https://newsroom.example.com/articles/{post_id}",
        "deployment_id": deploy_result["deployment_id"]
    }<p>El <strong>editor</strong> confirma la publicación a través de A2A:</p>{
  "message_type": "task_complete",
  "sender": "printer_agent",
  "receiver": "news_chief",
  "payload": {
    "task_id": "story_renewable_energy_2024",
    "status": "published",
    "publication": {
      "url": "https://newsroom.example.com/articles/renewable-europe-2024",
      "published_at": "2025-09-30T17:45:00Z",
      "post_id": "12345"
    },
    "workflow_metrics": {
      "total_time_minutes": 45,
      "agents_involved": ["reporter", "researcher", "archive", "editor", "printer"],
      "iterations": 2,
      "mcp_calls": 12
    }
  }
}<p>Aquí está la secuencia completa del flujo de trabajo A2A en el repositorio adjunto usando los mismos Agentes descritos anteriormente.</p><p>#</p><p>De</p><p>Para</p><p>Acción</p><p>Protocolo</p><p>Descripción</p><p>1</p><p>Usuario</p><p>Jefe de Noticias</p><p>Asignar historia</p><p>HTTP POST</p><p>El usuario presenta la historia, tema y ángulo</p><p>2</p><p>Jefe de Noticias</p><p>Interno</p><p>Crear historia</p><p>-</p><p>Crea un registro de historia con un ID único</p><p>3</p><p>Jefe de Noticias</p><p>Reportero</p><p>Asignación de Delegados</p><p>A2A</p><p>Envía asignación de historia mediante el protocolo A2A</p><p>4</p><p>Reportero</p><p>Interno</p><p>Aceptar Asignación</p><p>-</p><p>Asignación interna de almacenes</p><p>5</p><p>Reportero</p><p>Servidor MCP</p><p>Generar esquema</p><p>MCP/HTTP</p><p>Crea un esquema de artículos y preguntas de investigación</p><p>6A</p><p>Reportero</p><p>Investigador</p><p>Solicitud de investigación</p><p>A2A</p><p>Envía preguntas (paralelo con 6b)</p><p>6b</p><p>Reportero</p><p>Archivero</p><p>Archivo de búsqueda</p><p>A2A JSONRPC</p><p>Busca en artículos históricos (paralelo con 6a)</p><p>7</p><p>Investigador</p><p>Servidor MCP</p><p>Preguntas de investigación</p><p>MCP/HTTP</p><p>Emplea Anthropic vía MCP para responder preguntas</p><p>8</p><p>Investigador</p><p>Reportero</p><p>Investigación de Retorno</p><p>A2A</p><p>Respuestas de investigación de retornos</p><p>9</p><p>Archivero</p><p>Elasticsearch</p><p>Índice de búsqueda</p><p>ES REST API</p><p>Consultas news_archive índice</p><p>10</p><p>Archivero</p><p>Reportero</p><p>Archivo de retorno</p><p>A2A JSONRPC</p><p>Devuelve resultados históricos de búsqueda</p><p>11</p><p>Reportero</p><p>Servidor MCP</p><p>Generar artículo</p><p>MCP/HTTP</p><p>Crea un artículo con contexto de investigación/archivo</p><p>12</p><p>Reportero</p><p>Interno</p><p>Tiro de la tienda</p><p>-</p><p>Salvamentos en el draft interno</p><p>13</p><p>Reportero</p><p>Jefe de Noticias</p><p>Enviar Borrador</p><p>A2A</p><p>Entrega borrador completado</p><p>14</p><p>Jefe de Noticias</p><p>Interno</p><p>Actualización de la historia</p><p>-</p><p>Borrador de la tienda, actualiza el estado a "draft_submitted"</p><p>15</p><p>Jefe de Noticias</p><p>Editor</p><p>Borrador de revisión</p><p>A2A</p><p>Rutas automáticas al Editor para su revisión</p><p>16</p><p>Editor</p><p>Servidor MCP</p><p>Artículo de revisión</p><p>MCP/HTTP</p><p>Analiza contenido usando Anthropic a través de MCP</p><p>17</p><p>Editor</p><p>Jefe de Noticias</p><p>Reseña de Retorno</p><p>A2A</p><p>Envía comentarios y sugerencias editoriales</p><p>18</p><p>Jefe de Noticias</p><p>Interno</p><p>Reseña de la tienda</p><p>-</p><p>Comentarios sobre el editor de tiendas</p><p>19</p><p>Jefe de Noticias</p><p>Reportero</p><p>Aplicar ediciones</p><p>A2A</p><p>Comentarios de la revisión de rutas al Reportero</p><p>20</p><p>Reportero</p><p>Servidor MCP</p><p>Aplicar ediciones</p><p>MCP/HTTP</p><p>Revisa el artículo basar en los comentarios</p><p>21</p><p>Reportero</p><p>Interno</p><p>Actualización del borrador</p><p>-</p><p>Borrador de actualizaciones con revisiones</p><p>22</p><p>Reportero</p><p>Jefe de Noticias</p><p>Devolución revisada</p><p>A2A</p><p>Artículo revisado de declaraciones</p><p>23</p><p>Jefe de Noticias</p><p>Interno</p><p>Actualización de la historia</p><p>-</p><p>Borrador revisado de las tiendas, estado a "revisado"</p><p>24</p><p>Jefe de Noticias</p><p>Editor</p><p>Publicar artículo</p><p>A2A</p><p>Rutas automáticas hacia el editor</p><p>25</p><p>Editor</p><p>Servidor MCP</p><p>Generar etiquetas</p><p>MCP/HTTP</p><p>Crea etiquetas y categorías</p><p>26</p><p>Editor</p><p>Elasticsearch</p><p>Artículo índice</p><p>ES REST API</p><p>Índice de artículos a índice news_archive</p><p>27</p><p>Editor</p><p>Sistema de archivos</p><p>Almacenar Markdown</p><p>E/S de archivos</p><p>Almacena el artículo como .md archivo en /articles</p><p>28</p><p>Editor</p><p>Jefe de Noticias</p><p>Confirmar publicación</p><p>A2A</p><p>Resultados de éxito</p><p>29</p><p>Jefe de Noticias</p><p>Interno</p><p>Actualización de la historia</p><p>-</p><p>Actualiza el estado de la noticia a "publicado"</p><h2>Conclusión</h2><p>Tanto A2A como MCP tienen papeles importantes en el paradigma moderno de infraestructura de LLM aumentado. A2A ofrece flexibilidad para sistemas complejos multiagente, pero potencialmente menos portabilidad y mayor complejidad operativa. MCP ofrece un enfoque estandarizado para la integración de herramientas que es más sencillo de implementar y mantener, aunque no está diseñado para manejar orquestación multiagente.</p><p>La elección no es binaria. Como demuestra nuestro ejemplo de redacción, los sistemas respaldados por LLM más sofisticados y efectivos suelen combinar ambos enfoques: los agentes coordinan y se especializan mediante protocolos A2A mientras acceden a sus herramientas y recursos a través de servidores MCP. Esta arquitectura híbrida ofrece los beneficios organizacionales de los sistemas multiagente junto con los beneficios de estandarización y ecosistema del MCP. Esto sugiere que puede que no sea necesario elegir en absoluto: simplemente usar ambos como un enfoque estándar</p><p>Depende de ti, como desarrollador o arquitecto, probar y determinar la mejor combinación de ambas soluciones para crear el resultado adecuado para tu caso de uso específico. Comprender las fortalezas, limitaciones y aplicaciones adecuadas de cada enfoque te permitirá construir sistemas de IA más eficaces, mantenibles y escalables.</p><p>Ya sea que estés construyendo una redacción digital, una plataforma de atención al cliente, un asistente de investigación o cualquier otra aplicación impulsada por LLM, considerar cuidadosamente tus necesidades de coordinación (A2A) y requisitos de acceso a herramientas (MCP) te pondrá en el camino hacia el éxito.</p><h2>Recursos adicionales</h2><ul><li><p><strong>Constructor de agentes Elasticsearch: </strong><a href="https://www.elastic.co/docs/solutions/search/elastic-agent-builder">https://www.elastic.co/docs/solutions/search/elastic-agent-builder</a></p></li><li><p><strong>Especificación A2A</strong>: <a href="https://a2a-protocol.org/latest/specification/">https://a2a-protocol.org/latest/specification/</a></p></li><li><p><strong>Integración de A2A y MCP</strong>: <a href="https://a2a-protocol.org/latest/topics/a2a-and-mcp/">https://a2a-protocol.org/latest/topics/a2a-and-mcp/</a></p></li><li><p><strong>Protocolo de Contexto del Modelo</strong>: <a href="https://modelcontextprotocol.io/">https://modelcontextprotocol.io</a></p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/a2a-protocol-mcp-llm-agent-workflow-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/a2a-protocol-mcp-llm-agent-workflow-elasticsearch</guid>
    <category><![CDATA[Agentic AI]]></category>
    <category><![CDATA[AI]]></category>
    <dc:creator><![CDATA[Justin Castilla]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1b1f22cdc2130333/6a17f161ec0f8917fa5a6712/f87330e5d4ca961593b3cfb861ca850a4cc34186-1519x1173.png" length="0" type="image/png"/>
    <pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Creando una sala de redacción de un agente LLM con protocolo A2A y MCP en Elasticsearch: Parte I]]></title>
    <description><![CDATA[Explora los conceptos del protocolo A2A y MCP en un ejemplo práctico de redacción donde agentes especializados en LLM colaboran para investigar, escribir, editar y publicar artículos de noticias.]]></description>
    <content:encoded><![CDATA[<h2>Introducción</h2><p>Los sistemas actuales respaldados por LLM están evolucionando rápidamente más allá de aplicaciones de modelo único hacia redes complejas donde agentes especializados trabajan juntos para realizar tareas que la informática moderna nunca antes consideró posibles. A medida que estos sistemas se vuelven más complejos, la infraestructura que permite la comunicación de agentes y el acceso a herramientas se convierte en el principal foco de desarrollo. Surgieron dos enfoques complementarios para abordar estas necesidades: los protocolos <strong>Agent2Agent (A2A)</strong> para la coordinación multiagente y el <strong>Protocolo de Contexto del Modelo (MCP)</strong> para el acceso estandarizado a herramientas y recursos.</p><p>Entender cuándo usar cada uno en armonía con y sin el otro puede afectar significativamente la escalabilidad, mantenibilidad y efectividad de tus aplicaciones. Este artículo explora los conceptos e implementaciones de <strong>A2A</strong> dentro del ejemplo práctico de una redacción digital, donde agentes especializados en LLM colaboran para investigar, escribir, editar y publicar artículos de noticias.</p><p>Aquí <a href="https://github.com/justincastilla/elastic-newsroom/tree/main">se puede encontrar</a> un repositorio adjunto, y examinaremos ejemplos concretos de A2A en acción cerca del final del artículo en la Sección 5.</p><h3>Prerrequisitos</h3><p>El <a href="https://github.com/justincastilla/elastic-newsroom/tree/main">repositorio</a> consiste en implementaciones basadas en Python de los agentes A2A. Flask proporciona un servidor API, así como un servicio de mensajería personalizado en Python llamado Event Hub, que enruta mensajes para registro y actualizaciones de la interfaz. Por último, se dispone de una interfaz React para el uso independiente de las funciones de la redacción. Todo está contenido dentro de una imagen Docker para facilitar su implementación. Si quieres ejecutar los servicios directamente con tu máquina, querrás cerciorarte de tener estas tecnologías instaladas:</p><p>Lenguajes y tiempos de ejecución</p><ul><li><p>Python 13.12 - Lenguaje central de backend</p></li><li><p>Node.js 18+ - Interfaz de React opcional</p></li></ul><p>Frameworks y SDKS básicos:</p><ul><li><p>A2A SDK 0.3.8 - Coordinación y comunicación de agentes</p></li><li><p>SDK Anthropic - Integración de Claude para generación de IA</p></li><li><p>Uvicorn - servidor ASGI para ejecutar agentes</p></li><li><p>FastMCP 2.12.5+ - Implementación del servidor MCP</p></li><li><p>React 18.2 - Marco de interfaz de usuario frontend</p></li></ul><p>Datos y búsqueda</p><ul><li><p>Elasticsearch 9.1.1+ - Indexación y búsqueda de artículos</p></li></ul><p>Despliegue en Docker (opcional, pero recomendado)</p><ul><li><p>Docker 28.5.1+</p></li></ul><h2>Sección 1: ¿Qué es Agent2Agent (A2A)?</h2><h3>Definición y conceptos fundamentales</h3><p>Agent2Agent (A2A) es un protocolo estandarizado para la interacción entre agentes independientes de LLM. En lugar de un único sistema monolítico que gestione todas las tareas, A2A permite que múltiples agentes especializados se comuniquen, coordinen y colaboren para lograr flujos de trabajo complejos que serían difíciles, lentos o directamente imposibles de manejar eficientemente para un solo agente.</p><p><strong>Especificaciones oficiales</strong>: <a href="https://a2a-protocol.org/latest/specification/">https://a2a-protocol.org/latest/specification/</a></p><h3>Orígenes y evolución</h3><p>El concepto de comunicación Agent2Agent, o sistemas multiagente, tiene raíces en sistemas distribuidos, microservicios e investigación multiagente que se remontan <a href="https://en.wikipedia.org/wiki/Multi-agent_system">a décadas</a> atrás. Los primeros trabajos en inteligencia artificial distribuida sentaron las bases para agentes capaces de negociar, coordinar y colaborar. Estos primeros sistemas estaban dedicados a <a href="https://www.jasss.org/5/1/7.html">simulaciones sociales</a> a gran escala, <a href="https://arxiv.org/html/2410.09403v1">investigación académica</a> y <a href="https://www.researchgate.net/publication/334765661_Generation_Expansion_Planning_Considering_Investment_Dynamic_of_Market_Participants_Using_Multi-agent_System">gestión de redes eléctricas</a>.</p><p>Con la llegada de la disponibilidad de LLMs y la reducción del costo operativo, los sistemas multiagente estuvieron disponibles para los mercados "prosumers", con el respaldo de Google y la comunidad de investigación en IA en general. Ahora conocido como sistemas Agent2Agent, la incorporación del protocolo A2A evolucionó hasta convertir en un estándar moderno diseñado específicamente para la era de múltiples grandes modelos de lenguaje coordinando esfuerzos y tareas.</p><p>El protocolo A2A garantiza una comunicación y coordinación fluidas entre agentes aplicando estándares y principios consistentes a los puntos de interacción donde los LLMs se conectan y comunican. Esta estandarización permite que agentes de diferentes desarrolladores —empleando distintos modelos subyacentes— trabajen juntos de forma eficaz.</p><p>Los protocolos de comunicación no son nuevos y tienen raíces ampliamente arraigadas en casi todas las transacciones digitales realizadas en Internet. Si <a href="https://www.elastic.co/search-labs">escribiste https://www.elastic.co/search-labs</a> en un navegador para acceder a este artículo, las probabilidades son altas de que se ejecutaron protocolos TCP/IP, transporte HTTP y consulta DNS, cerciorando una experiencia de navegación coherente para nosotros.</p><h3>Características clave</h3><p>Los sistemas A2A se basan en varios principios fundamentales para garantizar una comunicación fluida. Construir sobre estos principios garantiza que diferentes agentes, basados en distintos LLMs, frameworks y lenguajes de programación, interactúen de forma fluida.</p><p>Estos son los cuatro principios principales:</p><ul><li><p><strong>Paso de mensajes</strong>: Los agentes se comunican mediante mensajes estructurados con propiedades y formatos bien definidos</p></li><li><p><strong>Coordinación</strong>: Los agentes orquestan flujos de trabajo complejos delegando tareas entre sí y gestionando dependencias sin bloquear a otros agentes</p></li><li><p><strong>Especialización</strong>: Cada agente se centra en un dominio o capacidad específica, convertir en un experto en su área y ofreciendo la realización de tareas basar en ese conjunto de habilidades</p></li><li><p><strong>Estado distribuido</strong>: El estado y el conocimiento se distribuyen entre agentes en lugar de centralizar, con los agentes con la capacidad de actualizar mutuamente sobre el progreso con el estado de la tarea y retornos parciales (artefactos)</p></li></ul><h3>La redacción: Un ejemplo recurrente</h3><p>Imagina una redacción digital impulsada por agentes de IA, cada uno especializado en un aspecto diferente del periodismo:</p><ul><li><p><strong>Jefe de Noticias</strong> (coordinador/cliente): Asigna historias y monitorear el flujo de trabajo</p></li><li><p><strong>Agente reportero</strong>: Escribe artículos basados en investigaciones y entrevistas</p></li><li><p><strong>Agente Investigador</strong>: recopila datos, estadísticas e información de fondo</p></li><li><p><strong>Archive Agent</strong>: Busca en artículos históricos e identifica tendencias usando Elasticsearch</p></li><li><p><strong>Editor Agent</strong>: Reseña artículos para calidad, estilo y optimización SEO</p></li><li><p><strong>Agente editorial</strong>: Publica artículos aprobados en la plataforma de blogs vía CI/CD</p></li></ul><p>Estos agentes no actúan de forma aislada; cuando el Jefe de Noticias asigna una noticia sobre <em>la adopción de energías renovables</em>, el Reportero necesita que el Investigador recopile estadísticas, que el Editor revise el borrador y que el Editor publique el texto final. Esta coordinación se realiza a través de protocolos A2A.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb6c7215a96326481/6a17f2dd445de953024d0243/cc0760dbd74c49b92fa00dafbb8c2e8740eb70b6-963x693.png" alt="" /><h2>Sección 2: comprensión de la arquitectura A2A</h2><h3>Roles de Agente de Cliente y Agente Remoto</h3><p>En la arquitectura A2A, los agentes asumen dos roles principales. El <strong>Agente Cliente</strong> es responsable de formular y comunicar tareas a otros agentes del sistema. Identifica a los agentes remotos y sus capacidades, empleando esta información para tomar decisiones informadas sobre la delegación de tareas. El agente cliente coordina el flujo de trabajo general, cerciorando que las tareas se distribuyan correctamente y que el sistema avance hacia sus objetivos.</p><p>El <strong>Agente Remoto</strong>, en cambio, actúa en tareas delegadas por los clientes. Proporciona información o toma acciones específicas en respuesta a solicitudes, pero no inicia acciones de forma independiente. Los agentes remotos también pueden comunicar con otros agentes remotos según sea necesario para cumplir con sus responsabilidades asignadas, creando una red colaborativa de capacidades especializadas.</p><p>En nuestra redacción, el Jefe de Noticias actúa como agente cliente, mientras que el Reportero, el Investigador, el Editor y el Editor son agentes remotos que responden a las solicitudes y coordinan entre sí.</p><h3>Capacidades básicas de A2A</h3><p>Los protocolos A2A definen varias capacidades que permiten la colaboración multiagente:</p><h4>1. Descubrimiento</h4><p>Los servidores A2A deben anunciar sus capacidades para que los clientes sepan cuándo y cómo emplearlas para tareas específicas. Esto se logra mediante Tarjetas de Agente—documentos JSON que describen las habilidades, entradas y salidas de un agente. Las Tarjetas de Agente están disponibles en puntos finales consistentes y conocidos (como el recomendado <code>/.well-known/agent-card.json</code> endpoint), permitiendo a los clientes descubrir y consultar las capacidades de un agente antes de iniciar la colaboración.</p><p>A continuación hay un ejemplo de Tarjeta de Agente para el Agente de Archivo personalizado de Elastic, "Archie Archivist". Ten en cuenta que proveedores de software como Elastic alojan sus agentes A2A y proporcionan una URL para el acceso:</p>{
  "name": "Archie Archivist",
  "description": "Helps find historical news documents in the Elasticsearch Index of archived news articles and content.",
  "url": "https://xxxxxxxxxxxxx-abc123.kb.us-central1.gcp.elastic.cloud/api/agent_builder/a2a/archive-agent",
  "provider": {
    "organization": "Elastic",
    "url": "https://elastic.co"
  },
  "version": "0.1.0",
  "protocolVersion": "0.3.0",
  "preferred_transport": "JSONRPC",
  "documentationURL": "https://www.elastic.co/docs/solutions/search/agent-builder/a2a-server"
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false
  },
  "skills": [
    {
      "id": "platform.core.search",
      "name": "platform.core.search",
      "description": "A powerful tool for searching and analyzing data within your Elasticsearch cluster.",
      "inputModes": ["text/plain", "application/json"],
      "outputModes": ["text/plain", "application/json"]
    },
    {
      "id": "platform.core.index_explorer",
      "name": "platform.core.index_explorer",
      "description": "List relevant indices, aliases and datastreams based on a natural language query.",
      "inputModes": ["text/plain", "application/json"],
      "outputModes": ["text/plain", "application/json"]
    }
  ],
  "defaultInputModes": ["text/plain"],
  "defaultOutputModes": ["text/plain"]
}<p>Esta Tarjeta de Agente revela varios aspectos importantes del Agente de Archivo de Elastic. El agente se identifica como "Archie Archivist" y deja claro su propósito: ayudar a encontrar documentos históricos de noticias en un índice de Elasticsearch. La tarjeta especifica el proveedor (Elastic) y la versión del protocolo (0.3.0), cerciorando la compatibilidad con otros agentes compatibles con A2A. Lo más importante es que el <code>skills</code> array enumera las capacidades específicas que ofrece este agente, incluyendo una poderosa funcionalidad de búsqueda y una exploración inteligente de índices. Cada habilidad define qué modos de entrada y salida soporta, permitiendo a los clientes entender exactamente cómo comunicar con este agente. Este agente deriva del servicio Agent Builder de Elastic, que ofrece un conjunto de herramientas nativas respaldadas por LLM y endpoints API para mantener una conversación con tu almacén de datos, no solo para recuperarlo de él. El acceso a los agentes A2A en Elasticsearch puede <a href="https://www.elastic.co/docs/solutions/search/agent-builder/a2a-server">encontrar aquí</a>.</p><h4>2. Negociación</h4><p>Clientes y agentes deben acordar los métodos de comunicación —ya sea que las interacciones se realicen mediante texto, formularios, iframes o incluso audio/video— para garantizar una interacción adecuada del usuario y el intercambio de datos. Esta negociación ocurre al inicio de la colaboración entre agentes y establece los protocolos que gobernarán su interacción a lo largo del flujo de trabajo. Por ejemplo, un agente de atención al cliente basado en voz podría negociar para comunicar mediante flujos de audio, mientras que un agente de análisis de datos podría preferir JSON estructurado. El proceso de negociación garantiza que ambas partes puedan intercambiar información de forma eficaz en un formato que se adapte a sus capacidades y a los requisitos de la tarea en cuestión.</p><p>Las capacidades listadas en el fragmento JSON anterior tienen todas esquemas de entrada y salida; Estos establecen una expectativa de cómo interactuar con este agente por parte de otros agentes.</p><h4>3. Gestión de tareas y estado</h4><p>Los clientes y agentes necesitan mecanismos para comunicar el estado de la tarea, cambios y dependencias a lo largo de la ejecución. Esto incluye gestionar todo el ciclo de vida de una tarea, desde su creación y asignación hasta las actualizaciones de progreso y los cambios de estado. Los estados típicos incluyen estados pendientes, en curso, completados o fallidos. El sistema también debe hacer un seguimiento de las dependencias entre tareas para cerciorar que el trabajo previo se complete antes de que comiencen las tareas dependientes. El manejo de errores y la lógica de reintentos también son componentes esenciales, que permiten al sistema recuperar de forma elegante tras fallos y seguir avanzando hacia el objetivo principal.</p><p>Ejemplo de mensaje de tarea:</p>{
  "message_id": "msg_789xyz",
  "message_type": "task_request",
  "sender": "news_chief",
  "receiver": "researcher_agent",
  "timestamp": "2025-09-30T10:15:00Z",
  "payload": {
    "task_id": "task_456abc",
    "capability": "fact_gathering",
    "parameters": {
      "query": "renewable energy adoption rates in Europe 2024",
      "sources": ["eurostat", "iea", "ember"],
      "depth": "comprehensive"
    },
    "context": {
      "story_id": "story_123",
      "deadline": "2025-09-30T18:00:00Z",
      "priority": "high"
    }
  }
}<p>Este mensaje de tarea de ejemplo demuestra varios aspectos clave de la comunicación A2A.</p><ul><li><p>La estructura <strong>del mensaje</strong> incluye metadatos como un identificador único del mensaje, el tipo de mensaje enviado, la identificación del remitente y receptor, y una marca de tiempo para el seguimiento y la depuración.</p></li><li><p>La <strong>carga útil</strong> contiene la información real de la tarea, especificando qué capacidad se está invocando en el agente remoto y proporcionando los parámetros necesarios para ejecutar dicha capacidad.</p></li><li><p>La sección <strong>de contexto</strong> proporciona información adicional que ayuda al agente receptor a comprender el flujo de trabajo más amplio, incluyendo plazos y niveles de prioridad que informan sobre cómo debe asignar sus recursos y programar su trabajo.</p></li></ul><h4>4. Colaboración</h4><p>Clientes y agentes <strong>deben</strong> apoyar una interacción dinámica pero estructurada, permitiendo a los agentes aplicar aclaraciones, información o subacciones al cliente, otros agentes o usuarios. Esto crea un entorno colaborativo donde los agentes pueden hacer preguntas de seguimiento cuando las instrucciones iniciales son ambiguas, aplicar contexto adicional para tomar mejores decisiones, delegar subtareas a otros agentes con experiencia más adecuada y proporcionar resultados intermedios para recibir retroalimentación antes de proceder con la tarea completa. Esta comunicación multidireccional cerciora que los agentes no actúen de forma aislada, sino que participen en un diálogo continuo que conduce a mejores resultados.</p><h3>Comunicación distribuida entre pares</h3><p>A2A permite la comunicación distribuida donde los agentes pueden ser alojados por diferentes organizaciones, con algunos agentes mantenidos internamente mientras que otros son proporcionados por servicios externos. Estos agentes pueden funcionar en diferentes infraestructuras, potencialmente abarcando múltiples proveedores de nube o centros de datos locales. Pueden usar diferentes LLMs subyacentes, con algunos agentes impulsados por modelos GPT, otros por Claude y otros más por alternativas de código abierto. Los agentes incluso podrían operar en diferentes regiones geográficas para cumplir con los requisitos de soberanía de datos o reducir la latencia. A pesar de esta diversidad, todos los agentes acuerdan un protocolo de comunicación común para el intercambio de información, garantizando la interoperabilidad independientemente de los detalles de la implementación. Esta arquitectura distribuida ofrece flexibilidad en la construcción y despliegue de los sistemas, permitiendo a las organizaciones combinar los mejores agentes e infraestructuras según sus necesidades específicas.</p><p>Esta es la arquitectura final de la aplicación de redacción:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt74d59cd9267f54d8/6a17f2de505ac31129ad8c71/82e01a0d9746038eafd69d11177042b5390507ae-1600x838.png" alt="" /><h2>Sección 3: Protocolo de Contexto de Modelo (MCP)</h2><h3>Definición y propósito</h3><p>El Protocolo de Contexto del Modelo (MCP) es un protocolo estandarizado desarrollado por Anthropic para mejorar y potenciar un LLM individual con herramientas, recursos y prompts definidos por el usuario, entre otras adiciones suplementarias a la base de código. MCP proporciona una interfaz universal entre los modelos de lenguaje y los recursos externos que necesitan para completar tareas de manera eficaz. Este <a href="https://www.elastic.co/search-labs/blog/mcp-current-state">artículo</a> describe el estado actual de MCP con ejemplos de casos de uso, tendencias emergentes y la propia implementación de Elastic.</p><h3>Conceptos centrales de MCP</h3><p>MCP opera sobre una arquitectura cliente-servidor con tres componentes principales:</p><ul><li><p><strong>Clientes:</strong> aplicaciones (como Claude Desktop o aplicaciones de IA personalizadas) que se conectan a servidores MCP para acceder a sus capacidades.</p></li><li><p><strong>Servidores</strong>: aplicaciones que exponen recursos, herramientas y prompts a modelos de lenguaje. Cada servidor se especializa en proporcionar acceso a capacidades o fuentes de datos específicas.</p><ul><li><p><strong>Herramientas</strong>: funciones definidas por el usuario que los modelos pueden invocar para realizar acciones, como bases de datos de búsqueda, llamar a APIs externas o transformaciones de ejecución sobre datos</p></li><li><p><strong>Recursos:</strong> fuentes de datos de las que los modelos pueden leer, que se sirven con datos dinámicos o estáticos y se acceden mediante patrones URI (similares a rutas REST)</p></li><li><p><strong>Prompts: </strong>plantillas reutilizables de prompts con variables que guían el modelo para realizar tareas específicas.</p></li></ul></li></ul><h3>Patrón de petición-respuesta</h3><p>MCP sigue un patrón de interacción petición-respuesta familiar similar a las APIs REST. El cliente (LLM) aplicar un recurso o invoca una herramienta, luego el servidor MCP procesa la solicitud y devuelve el resultado, que el LLM emplea para continuar su tarea. Este modelo centralizado con servidores periféricos proporciona un patrón de integración más sencillo en comparación con la comunicación entre agentes entre iguales.</p><h3>MCP en la redacción</h3><p>En nuestro ejemplo de redacción, los agentes individuales emplean servidores MCP para acceder a las herramientas y datos que necesitan:</p><ul><li><p><strong>Utilizaciones de Researcher Agent</strong> :</p><ul><li><p>Servidor MCP de la API de Noticias (acceso a bases de datos de noticias)</p></li><li><p>Verificación de hechos del servidor MCP (verificar afirmaciones frente a fuentes confiables)</p></li><li><p>Servidor MCP de la base de datos académica (artículos académicos e investigaciones)</p></li></ul></li><li><p><strong>Reporter Agent</strong> emplea:</p><ul><li><p>Guía de estilo MCP Server (estándares de redacción para redacción)</p></li><li><p>Servidor MCP de plantillas (plantillas y formatos de artículos)</p></li><li><p>Servidor MCP de Biblioteca de Imágenes (fotos de archivo y gráficos)</p></li></ul></li><li><p><strong>Editor Agent</strong> emplea:</p><ul><li><p>Grammar Checker MCP Server (herramientas de calidad del lenguaje)</p></li><li><p>Servidor MCP de detección de plagio (verificación de originalidad)</p></li><li><p>Análisis SEO Servidor MCP (optimización de titulares y palabras clave)</p></li></ul></li><li><p><strong>Utilizaciones del Agente de la Editorial</strong> :</p><ul><li><p>CMS MCP Server (API del sistema de gestión de contenidos)</p></li><li><p>Servidor CI/CD MCP (Pipeline de despliegue)</p></li><li><p>Servidor MCP de Análisis (seguimiento y monitorización)</p></li></ul></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt195fe0bd36d36a48/6a17f2e0b1e113afe479f36c/b67311e3b58b27f9eb1b42a7b1dbad47ef3be4ad-808x535.png" alt="" /><h2>
Sección 4: comparación de arquitectura</h2><h3>Cuándo usar A2A</h3><p>La arquitectura A2A destaca en <strong>escenarios que requieren colaboración genuina entre múltiples agentes</strong>. Los flujos de trabajo de varios pasos que requieren coordinación se benefician enormemente de A2A, especialmente cuando las tareas implican múltiples pasos secuenciales o paralelos, flujos de trabajo que requieren iteración y refinamiento, y procesos con puntos de control y necesidades de validación. En nuestro ejemplo de redacción, el flujo de trabajo de la historia requiere que el Reportero escriba, pero puede que tenga que iterar de nuevo al Investigador si la confianza en ciertos hechos es baja, luego proceder al Editor y finalmente al Editor.</p><p><strong>La especialización específica de dominio en múltiples áreas</strong> es otro caso de uso estable para A2A. Cuando se necesitan múltiples expertos en distintos campos para realizar una tarea mayor, con cada agente aportando un profundo conocimiento del dominio y capacidades de razonamiento especializadas para distintos aspectos, A2A proporciona el marco de coordinación necesario para establecer esas conexiones. La redacción lo ejemplifica perfectamente: el investigador se especializa en la recopilación de información, el reportero en la escritura y el editor en el control de calidad, cada uno con una experiencia distinta.</p><p>La necesidad de un comportamiento autónomo de agentes hace que A2A sea especialmente valioso. Los agentes que pueden<strong> tomar decisiones independientes, mostrar un comportamiento proactivo basado en condiciones cambiantes y adaptar dinámicamente a los requisitos del flujo de trabajo</strong> prosperan en una arquitectura A2A. La escalada horizontal de funciones especializadas es otro beneficio clave: en lugar de tener un único maestro de todos los oficios, múltiples agentes especializados trabajan coordinados, y múltiples instancias del mismo agente pueden manejar subtareas de forma asíncrona. Durante noticias de última hora en nuestra redacción, por ejemplo, varios agentes de Reporter pueden trabajar simultáneamente en diferentes ángulos de la misma historia.</p><p>Por último, las tareas que requieren colaboración genuina entre múltiples agentes son ideales para A2A. Esto incluye mecanismos <a href="https://arxiv.org/abs/2404.18796">de evaluación de los LLM como jurado</a> , sistemas de construcción de consenso y votación, y <strong>la resolución colaborativa de problemas donde se necesitan múltiples perspectivas</strong> para alcanzar el mejor resultado.</p><h3>Cuándo usar MCP</h3><p>El Protocolo de Contexto del Modelo es ideal para ampliar las capacidades de un solo modelo de IA. Cuando un único modelo de IA necesita acceso a múltiples herramientas y fuentes de datos, MCP ofrece la solución perfecta con razonamiento centralizado combinado con herramientas distribuidas e integración sencilla de herramientas. En nuestro ejemplo de redacción, el Agente de Investigación (un modelo) necesita acceso a múltiples fuentes de datos, incluyendo News API, servicios de verificación de hechos y bases de datos académicas, todo ello accedido a través de servidores MCP estandarizados.</p><p>La integración estandarizada de herramientas se convierte en una prioridad cuando la ampliación de la compartición y la reutilización de las integraciones de herramientas importan. MCP destaca aquí con su ecosistema de servidores MCP preconstruidos que reducen significativamente el tiempo de desarrollo para integraciones comunes. Cuando se requiere simplicidad y mantenibilidad, los patrones de solicitud-respuesta de MCP son familiares para los desarrolladores, más fáciles de entender y depurar que los sistemas distribuidos, y tienen una menor complejidad operativa.</p><p>Por último, MCP suele ser ofrecido por proveedores de software para facilitar la comunicación remota con sus sistemas. Estos servidores MCP ofrecidos por el proveedor reducen significativamente el tiempo de incorporación y desarrollo, al tiempo que ofrecen una interfaz estandarizada con sistemas propietarios, haciendo que la integración sea mucho más sencilla que el desarrollo de APIs personalizadas.</p><h3>Cuándo usar ambos (MCP de A2A ❤️)</h3><p>Muchos sistemas sofisticados se benefician de combinar A2A y MCP, como se indica en la <a href="https://a2a-protocol.org/latest/topics/a2a-and-mcp/">documentación de A2A sobre integración MCP</a>. Los sistemas que requieren tanto coordinación como estandarización son candidatos ideales para un enfoque híbrido. A2A se encarga de la coordinación de agentes y la orquestación de flujos de trabajo, mientras que MCP proporciona acceso a herramientas individuales a los agentes. En nuestro ejemplo de redacción, los agentes coordinan mediante A2A; con el flujo de trabajo pasando de reportero a investigador, luego editor y luego editor. Sin embargo, cada agente emplea servidores MCP para sus herramientas especializadas, creando una separación arquitectónica limpia.</p><p>Múltiples agentes especializados, cada uno usando MCP para acceder a herramientas, representan un patrón común donde hay una capa de coordinación de agentes gestionada por A2A y una capa de acceso a herramientas gestionada por MCP. Esta clara separación de preocupaciones facilita la comprensión y el mantenimiento de los sistemas.</p><p>Los beneficios de combinar ambos enfoques son sustanciales. Obtienes los beneficios organizacionales de los sistemas multiagente, incluyendo especialización, autonomía y procesamiento en paralelo, además de disfrutar de los beneficios de estandarización y ecosistema del MCP, como la integración de herramientas y el acceso a recursos. Hay una clara separación entre la coordinación de agentes (A2A) y el acceso a recursos (MCP), y lo importante es que A2A no es necesario solo para tareas pequeñas como el acceso a API—MCP las gestiona de forma eficiente sin la sobrecarga de la orquestación multiagente.</p><p><strong>Preguntas frecuentes: A2A vs. MCP - Casos de uso</strong></p><p>Característica</p><p>Agent2Agent (A2A)</p><p>Protocolo de Contexto de Modelo (MCP)</p><p>Híbrido (A2A + MCP)</p><p>Objetivo principal</p><p>Coordinación Multiagente: Permite que un equipo de agentes especializados trabaje juntos en flujos de trabajo complejos y de varios pasos.</p><p>Mejora de un solo agente: Extiende la capacidad de un único LLM/Agente con herramientas, recursos y datos externos.</p><p>Fuerza combinada: A2A gestiona el flujo de trabajo del equipo, mientras que MCP proporciona herramientas a cada miembro del equipo.</p><p>Ejemplo de equipo de redacción</p><p>La cadena de flujo de trabajo: Jefe de Noticias → Reportero → Investigador → Editor → Editor. Esta es la capa de coordinación.</p><p>Herramientas individuales del agente: El Agente Reportero accede al servidor de la guía de estilo y al servidor de plantillas (a través de MCP). Esta es la capa de acceso a herramientas.</p><p>El sistema completo: el reportero coordina con el editor (A2A), y el reportero emplea el servidor MCP de la Biblioteca de Imágenes para encontrar un gráfico para la historia.</p><p>Cuándo usar cuál</p><p>Cuando necesitas colaboración genuina, iteración y refinamiento, o experiencia especializada repartida entre varios agentes.</p><p>Cuando un solo agente necesita acceso a múltiples herramientas y fuentes de datos o requiere integración estandarizada con sistemas propietarios.</p><p>Cuando necesitas los beneficios organizacionales de los sistemas multiagente y los beneficios de estandarización y ecosistema del MCP.</p><p>Beneficio fundamental</p><p>Autonomía y escalado: Los agentes pueden tomar decisiones independientes, y el sistema permite la escalado horizontal de funciones especializadas.</p><p>Simplicidad y estandarización: Más fácil de depurar y mantener gracias al razonamiento centralizado, y proporciona una interfaz universal para los recursos.</p><p>Separación clara de preocupaciones: Facilita la comprensión del sistema: A2A = trabajo en equipo, MCP = acceso a la herramienta.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1735ea5de41e10fd/6a17f2e26864a4125cb688c4/ddf6a29b1107ac6a63e94ecef703abc561a29e1e-986x656.png" alt="" /><h2>Conclusión</h2><p>Esta es la primera sección de dos partes que cubren la implementación de agentes basados en A2A reforzados con servidores MCP para proporcionar soporte y acceso externo a datos y herramientas. El siguiente artículo explorará el código real para demostrar que trabajan juntos para emular las actividades en una redacción online. Aunque ambos sistemas son extremadamente capaces y flexibles por sí mismos, verás cuánto se complementan cuando trabajan en conjunto.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/a2a-protocol-mcp-llm-agent-newsroom-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/a2a-protocol-mcp-llm-agent-newsroom-elasticsearch</guid>
    <category><![CDATA[Agentic AI]]></category>
    <category><![CDATA[AI]]></category>
    <dc:creator><![CDATA[Justin Castilla]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2716d804698ec878/6a17f2e41480095fd7b48888/9f938d8e2f0fdf7509edf028816c48bdbc8b3fc7-1600x900.png" length="0" type="image/png"/>
    <pubDate>Thu, 13 Nov 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>