<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rockerfeler</title>
    <description>The latest articles on DEV Community by Rockerfeler (@mauricioperera).</description>
    <link>https://dev.to/mauricioperera</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F520221%2Fa92f1723-0099-4866-8854-75accecbaae1.jpeg</url>
      <title>DEV Community: Rockerfeler</title>
      <link>https://dev.to/mauricioperera</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mauricioperera"/>
    <language>en</language>
    <item>
      <title>Más allá del Prompt: Cómo ATDF y la Ingeniería de Contexto Transforman tus Flujos de IA</title>
      <dc:creator>Rockerfeler</dc:creator>
      <pubDate>Fri, 11 Jul 2025 13:42:36 +0000</pubDate>
      <link>https://dev.to/mauricioperera/mas-alla-del-prompt-como-atdf-y-la-ingenieria-de-contexto-transforman-tus-flujos-de-ia-8k5</link>
      <guid>https://dev.to/mauricioperera/mas-alla-del-prompt-como-atdf-y-la-ingenieria-de-contexto-transforman-tus-flujos-de-ia-8k5</guid>
      <description>&lt;p&gt;En el desarrollo de agentes conversacionales y sistemas basados en LLM, &lt;strong&gt;la ingeniería de contexto&lt;/strong&gt; y los &lt;strong&gt;estándares de descripción de herramientas&lt;/strong&gt; juegan un papel esencial para garantizar respuestas coherentes, fiables, escalables y fácilmente mantenibles. Este artículo explora en profundidad cómo &lt;strong&gt;&lt;a href="https://mauricioperera.github.io/agent-tool-description-format/" rel="noopener noreferrer"&gt;ATDF&lt;/a&gt;&lt;/strong&gt; (Agent Tool Description Format) se integra de forma natural en un flujo de ingeniería de contexto, utilizando un ejemplo representativo de validación de rangos de fechas.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué es ATDF?
&lt;/h2&gt;

&lt;p&gt;ATDF es un formato estructurado, agnóstico y estandarizado para describir las &lt;strong&gt;interfaces funcionales&lt;/strong&gt; de herramientas que un agente puede invocar, independientemente de la plataforma subyacente, motor de ejecución o lenguaje de programación utilizado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Schema de entrada&lt;/strong&gt; (&lt;code&gt;input&lt;/code&gt;): especificación formal de los parámetros requeridos, con sus tipos, formatos y descripciones claras.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schemas de salida&lt;/strong&gt; (&lt;code&gt;output&lt;/code&gt;): estructuras detalladas para las respuestas esperadas en caso de éxito y de error, validadas mediante JSON Schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ejemplos&lt;/strong&gt; (&lt;code&gt;examples&lt;/code&gt;): casos de uso documentados que sirven como guía para el modelo, facilitando pruebas, debugging y generación automática de instrucciones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Al definir explícitamente la interfaz de cada herramienta, ATDF permite:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Validación automática&lt;/strong&gt; de los datos antes y después de invocar la herramienta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autodocumentación contextual&lt;/strong&gt; integrada en el prompt, de forma que el modelo entienda de forma clara cómo interactuar con la herramienta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manejo de errores estructurado&lt;/strong&gt; mediante plantillas predictibles que pueden ser analizadas y reutilizadas por el agente de manera programática.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reusabilidad&lt;/strong&gt; de herramientas en distintos agentes o flujos, sin necesidad de modificaciones específicas.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Fundamentos de la Ingeniería de Contexto
&lt;/h2&gt;

&lt;p&gt;La ingeniería de contexto diseña y organiza todos los elementos que conforman el entorno informativo en el que opera el modelo de lenguaje. Esta disciplina actúa como el puente entre el modelo base y su comportamiento adaptado a casos de uso específicos. Incluye:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Recuperación de datos&lt;/strong&gt;: extracción dinámica de información relevante desde bases de conocimiento, APIs externas o documentos (técnicas como RAG).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gestión de memoria&lt;/strong&gt;: uso de scratchpads, historiales y memorias a largo plazo para almacenar interacciones, estados, preferencias y datos temporales del usuario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compresión, chunking y tokenización&lt;/strong&gt;: técnicas para dividir, resumir o estructurar grandes volúmenes de texto para adaptarse a los límites de tokens del modelo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orquestación de herramientas&lt;/strong&gt;: lógica condicional y modular que determina &lt;strong&gt;cuándo&lt;/strong&gt;, &lt;strong&gt;cómo&lt;/strong&gt; y &lt;strong&gt;en qué secuencia&lt;/strong&gt; se deben invocar herramientas externas.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Estas capas no solo permiten que el modelo interactúe con el entorno, sino que también aseguran que lo haga de forma eficiente, precisa y contextualizada.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ejemplo Genérico: Validación de Rango de Fechas
&lt;/h2&gt;

&lt;p&gt;Este ejemplo muestra un patrón común en flujos de procesamiento automático: validar que una fecha de inicio (&lt;strong&gt;Start&lt;/strong&gt;) y una fecha de fin (&lt;strong&gt;End&lt;/strong&gt;) sean válidas, estén en el futuro con respecto al momento actual y que &lt;strong&gt;Start&lt;/strong&gt; ocurra antes que &lt;strong&gt;End&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Diagrama Lógico del Flujo
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Entrada de parámetros&lt;/strong&gt;: el agente recibe los valores &lt;code&gt;Start&lt;/code&gt; y &lt;code&gt;End&lt;/code&gt; como parte del contexto del usuario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluación de condiciones&lt;/strong&gt;: se aplican dos comparaciones sobre objetos tipo &lt;code&gt;dateTime&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;now &amp;lt; Start&lt;/code&gt;  (inicio en el futuro)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Start &amp;lt; End&lt;/code&gt;  (inicio antes que fin)

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Respuesta exitosa&lt;/strong&gt;: si ambas condiciones se cumplen, la herramienta devuelve un JSON estructurado como:
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"'Start' es anterior a 'End' y ambas son posteriores a 'Ahora'"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"meta"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-07-11T14:25:00Z"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Respuesta con error&lt;/strong&gt;: si alguna condición falla, se devuelve una estructura informativa que detalla el fallo:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"400"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Error en fechas de inicio y fin. La fecha de inicio 2025-07-10T09:00:00Z y/o la fecha de fin 2025-07-10T08:00:00Z son iguales o anteriores a 2025-07-11T14:23:45Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"field"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"start: 2025-07-10T09:00:00Z, end: 2025-07-10T08:00:00Z"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"expected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"start: cualquier fecha y hora posterior a 2025-07-11T14:23:45Z, end: cualquier fecha y hora posterior a 'start'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"solution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Asegúrate que ambos valores son fechas válidas y posteriores a 2025-07-11T14:23:45Z"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"meta"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-07-11T14:23:45Z"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Definición de la herramienta en formato ATDF
&lt;/h2&gt;

&lt;p&gt;Con base en este flujo, se define la herramienta &lt;code&gt;validar_rango_de_fechas&lt;/code&gt; utilizando el estándar ATDF:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;validar_rango_de_fechas&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Valida que Start y End sean posteriores a ahora, y que Start &amp;lt; End.&lt;/span&gt;
  &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
    &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;Start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
        &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;date-time&lt;/span&gt;
        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Fecha y hora de inicio.&lt;/span&gt;
      &lt;span class="na"&gt;End&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
        &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;date-time&lt;/span&gt;
        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Fecha y hora de fin.&lt;/span&gt;
    &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Start&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;End&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

  &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
      &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;const&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success"&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
        &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
          &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
              &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Mensaje confirmando el resultado exitoso.&lt;/span&gt;
        &lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
          &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
              &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;date-time&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

    &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
      &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;const&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error"&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
        &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
          &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
              &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Código de error (p. ej. "400").&lt;/span&gt;
            &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
              &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Mensaje legible explicando el error.&lt;/span&gt;
            &lt;span class="na"&gt;details&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
              &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Campos o valores que causaron el fallo.&lt;/span&gt;
            &lt;span class="na"&gt;expected&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
              &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Lo que el sistema esperaba recibir.&lt;/span&gt;
            &lt;span class="na"&gt;solution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
              &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Instrucciones para corregir el error.&lt;/span&gt;
        &lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
          &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
              &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;date-time&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

  &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;Start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-07-12T10:00:00Z"&lt;/span&gt;
        &lt;span class="na"&gt;End&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-07-12T12:00:00Z"&lt;/span&gt;
      &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;success"&lt;/span&gt;
        &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'Start'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;es&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;anterior&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'End'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;y&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ambas&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;son&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;posteriores&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'Ahora'"&lt;/span&gt;
        &lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-07-11T14:25:00Z"&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;Start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-07-10T09:00:00Z"&lt;/span&gt;
        &lt;span class="na"&gt;End&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-07-10T08:00:00Z"&lt;/span&gt;
      &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error"&lt;/span&gt;
        &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;400"&lt;/span&gt;
          &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;en&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fechas&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;de&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;inicio&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;y&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fin..."&lt;/span&gt;
          &lt;span class="na"&gt;details&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;start:…,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;end:…"&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;expected&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;start:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;posterior&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ahora,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;end:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;posterior&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;start"&lt;/span&gt;
          &lt;span class="na"&gt;solution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Asegúrate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;de&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;valores&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;válidos"&lt;/span&gt;
        &lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2025-07-11T14:23:45Z"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Orquestación y Contextualización Dinámica
&lt;/h2&gt;

&lt;p&gt;La herramienta definida se puede usar de manera flexible dentro de un flujo más amplio de orquestación contextual:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inyección de especificaciones&lt;/strong&gt;: durante la inicialización de sesión, el modelo recibe una sección &lt;code&gt;TOOLS&lt;/code&gt; con toda la definición ATDF correspondiente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Construcción del prompt&lt;/strong&gt;: el sistema de contexto construye automáticamente el payload correcto para invocar &lt;code&gt;validar_rango_de_fechas&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluación del resultado&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Si el resultado es &lt;strong&gt;success&lt;/strong&gt;, el flujo avanza al siguiente paso del proceso (por ejemplo, confirmación de cita, reserva, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Si el resultado es &lt;strong&gt;error&lt;/strong&gt;, el agente presenta el mensaje de error, sugiere soluciones claras, y conserva los detalles técnicos para debugging o retrys.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Persistencia de estado&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Guarda el timestamp del intento y los valores fallidos para evitar loops.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Almacena preferencias temporales o patrones de errores frecuentes en la memoria del agente.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Este ejemplo demuestra con claridad cómo &lt;strong&gt;ATDF&lt;/strong&gt; proporciona un marco claro, modular y reutilizable para definir interfaces de herramientas de forma agnóstica, y cómo &lt;strong&gt;la ingeniería de contexto&lt;/strong&gt; convierte estas definiciones estáticas en experiencias conversacionales dinámicas, seguras y eficaces. Integrando ambas prácticas, es posible construir agentes inteligentes que razonan, validan y corrigen su comportamiento de manera autónoma, precisa y alineada con las necesidades reales del usuario.&lt;/p&gt;

</description>
      <category>aiintegration</category>
      <category>contextengineering</category>
      <category>atdf</category>
      <category>aiworkflows</category>
    </item>
    <item>
      <title>Interoperability Between ATDF and MCP</title>
      <dc:creator>Rockerfeler</dc:creator>
      <pubDate>Fri, 09 May 2025 06:00:31 +0000</pubDate>
      <link>https://dev.to/mauricioperera/interoperability-between-atdf-and-mcp-4jf3</link>
      <guid>https://dev.to/mauricioperera/interoperability-between-atdf-and-mcp-4jf3</guid>
      <description>&lt;p&gt;The &lt;strong&gt;Agent Tool Description Format (ATDF)&lt;/strong&gt; is an open standard based on JSON/YAML for describing tools functionally—what a tool does, when to use it, and how to use it. In contrast, the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; by Anthropic is an open protocol (using JSON-RPC 2.0) that standardizes how AI assistants (LLMs) discover and invoke external tools and data sources. While ATDF is a static format for tool descriptions, MCP defines a two-way mechanism ("hosts" and "clients") for listing and invoking tools at runtime.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: MCP is officially called &lt;em&gt;Model Context Protocol&lt;/em&gt; (not "Multimodal Callable Procedures"), though its design inherently supports "multimodal" calls.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Describing MCP Tools in ATDF&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In MCP, each tool is defined as a JSON object with fields like &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;inputSchema&lt;/code&gt; (parameter definitions in JSON Schema), and optional &lt;code&gt;annotations&lt;/code&gt; (usage hints). For example, Anthropic’s official "fetch" server exposes a &lt;code&gt;fetch&lt;/code&gt; tool with parameters:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;url&lt;/code&gt; (required string)
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;raw&lt;/code&gt; (optional boolean).
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To describe this in ATDF, map these fields to:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;tool_id&lt;/code&gt;&lt;/strong&gt;: Unique identifier (e.g., &lt;code&gt;"fetch"&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;description&lt;/code&gt;&lt;/strong&gt;: Brief explanation (e.g., &lt;em&gt;"Retrieves and processes content from a URL"&lt;/em&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;when_to_use&lt;/code&gt;&lt;/strong&gt;: Contextual usage (e.g., &lt;em&gt;"When needing to fetch or analyze a webpage"&lt;/em&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;how_to_use.inputs&lt;/code&gt;&lt;/strong&gt;: List of parameters with name, type, and description.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;how_to_use.outputs&lt;/code&gt;&lt;/strong&gt;: Success/failure messages (ATDF-specific; MCP does not define these explicitly).
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example ATDF Description for &lt;code&gt;fetch&lt;/code&gt;:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fetch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Retrieves and extracts content from a webpage given its URL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"when_to_use"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Use when you need to obtain or process content from a website"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"how_to_use"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"inputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The URL of the page to retrieve"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"boolean"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"If true, returns raw HTML (default: false)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"outputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Web content retrieved successfully"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"failure"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"invalid_url"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The provided URL is invalid or inaccessible"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fetch_error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Error retrieving content"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Key Similarities and Differences&lt;/strong&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Aspect&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;ATDF&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nature&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Static JSON/YAML format for tool descriptions&lt;/td&gt;
&lt;td&gt;Dynamic JSON-RPC protocol for tool discovery/invocation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Identifier&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;tool_id&lt;/code&gt; (unique string)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;name&lt;/code&gt; (unique string)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;description&lt;/code&gt; + &lt;code&gt;when_to_use&lt;/code&gt; explain functionality and context&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;description&lt;/code&gt; (optional free text); uses &lt;code&gt;annotations&lt;/code&gt; for usage hints (e.g., &lt;em&gt;readOnly&lt;/em&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parameters&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;List in &lt;code&gt;how_to_use.inputs&lt;/code&gt; (name, type, description)&lt;/td&gt;
&lt;td&gt;Defined in &lt;code&gt;inputSchema&lt;/code&gt; (JSON Schema &lt;em&gt;object&lt;/em&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Outputs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;success&lt;/code&gt;/&lt;code&gt;failure&lt;/code&gt; messages in &lt;code&gt;how_to_use.outputs&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Free-form results returned during &lt;code&gt;tools/call&lt;/code&gt;; no standardized output schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Usage Context&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;when_to_use&lt;/code&gt; field&lt;/td&gt;
&lt;td&gt;Relies on agent logic or annotations; no dedicated field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Communication&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;N/A (static specification only)&lt;/td&gt;
&lt;td&gt;Uses &lt;code&gt;tools/list&lt;/code&gt; and &lt;code&gt;tools/call&lt;/code&gt; endpoints (JSON-RPC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Metadata&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Supports multilingual descriptions, versioning, tags (v0.2.0)&lt;/td&gt;
&lt;td&gt;No built-in multilingual metadata in the base protocol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Design Focus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Descriptive and functional; model-agnostic&lt;/td&gt;
&lt;td&gt;Integration-focused; orchestrates workflows between agents and external servers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Examples, Documentation, and Community&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There are no official integrations between ATDF and MCP yet, but both have standalone resources:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ATDF&lt;/strong&gt;: &lt;a href="https://github.com/mauriciope/agent-tool-description-format" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; with formal specs, JSON schemas, and examples.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP&lt;/strong&gt;: &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Official documentation&lt;/a&gt; and examples (e.g., &lt;code&gt;fetch&lt;/code&gt;, &lt;code&gt;analyze_csv&lt;/code&gt;, &lt;code&gt;github_create_issue&lt;/code&gt;).
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Community efforts include:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AutoGen&lt;/strong&gt;: Integrates MCP via &lt;code&gt;McpToolAdapter&lt;/code&gt; (converts tools to &lt;code&gt;BaseTool&lt;/code&gt; objects).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Víctor Dibia&lt;/strong&gt;: Demonstrated MCP integration with AutoGen agents (e.g., &lt;code&gt;fetch&lt;/code&gt; server).
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No public codebases automate MCP-to-ATDF conversion yet. Manual mapping or ad-hoc scripts are required.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Approaches for Translating MCP to ATDF&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Manual Mapping or Custom Scripts&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Write a script (e.g., Python) to:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Map MCP fields to ATDF:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;name&lt;/code&gt; → &lt;code&gt;tool_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;description&lt;/code&gt; → &lt;code&gt;description&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Parse &lt;code&gt;inputSchema.properties&lt;/code&gt; to populate &lt;code&gt;how_to_use.inputs&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Validate with ATDF’s official Python SDK (&lt;code&gt;pip install agent-tool-description-format&lt;/code&gt;).
&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Leverage SDKs&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MCP SDK&lt;/strong&gt;: Use Python/TypeScript SDKs to dynamically fetch tools via &lt;code&gt;tools/list&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ATDF SDK&lt;/strong&gt;: Serialize MCP data into ATDF using the Python SDK for validation.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Agent Frameworks (e.g., AutoGen)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;AutoGen’s &lt;code&gt;McpToolAdapter&lt;/code&gt; converts MCP tools into executable objects. Extend this to serialize metadata into ATDF.  &lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Validation and Refinement&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Validate generated ATDF with JSON schemas. Enhance fields like &lt;code&gt;when_to_use&lt;/code&gt; or add multilingual metadata (ATDF v0.2.0).  &lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;While ATDF and MCP serve different purposes—&lt;strong&gt;ATDF for static tool descriptions&lt;/strong&gt; and &lt;strong&gt;MCP for runtime communication&lt;/strong&gt;—they can complement each other. By mapping fields like &lt;code&gt;name&lt;/code&gt; → &lt;code&gt;tool_id&lt;/code&gt; and &lt;code&gt;inputSchema&lt;/code&gt; → &lt;code&gt;how_to_use.inputs&lt;/code&gt;, developers can create interoperable systems where agents dynamically invoke tools described in ATDF.  &lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>mcp</category>
      <category>agentaichallenge</category>
    </item>
  </channel>
</rss>
