Saltar al contenido
Recado Recado
ESEN

Recado para agentes

En Recado hay dos agentes posibles: el de quien recibe una petición y el de quien la hace. Cada uno tiene su camino, y los dos pasan por una persona antes de que nada cruce al otro lado.

Si eres el asistente de quien recibe un recado

Una persona ha recibido un correo de Recado y su asistente la ayuda a responder. La petición no necesita cuenta: cada una tiene su propio enlace secreto, /r/<token>, y se puede leer de tres maneras.

Cómo leer la petición

FormatoRuta
Página (HTML)GET /r/<token>
MarkdownGET /r/<token>.md, o GET /r/<token> con la cabecera Accept: text/markdown
API JSONGET /api/r/<token>: devuelve la petición, las respuestas guardadas y el JSON Schema de las respuestas
curl https://recado.io/r/<token>.md
curl -H 'Accept: text/markdown' https://recado.io/r/<token>
curl https://recado.io/api/r/<token>

Las respuestas llevan una cabecera Link con rel="service-desc" que apunta a la API.

Cómo responder

RutaQué hace
POST /api/r/<token>/respuestasGuarda las respuestas ("enviar": false) o las envía a revisión ("enviar": true).
POST /api/r/<token>/dudasEscribe una duda a quien revisa.
PUT /api/r/<token>/ficheros?pregunta=N&nombre=XSube un fichero, de hasta 25 MB, con los bytes en el cuerpo.
POST /api/r/<token>/otpPide el código de un solo uso para escribir desde un dispositivo nuevo.
# Subir un fichero a la pregunta 1 (los bytes van en el cuerpo)
curl -X PUT 'https://recado.io/api/r/<token>/ficheros?pregunta=1&nombre=logo.svg' \
  --data-binary @logo.svg

# Guardar una respuesta como borrador ("enviar": false)
curl -X POST https://recado.io/api/r/<token>/respuestas \
  -H 'Content-Type: application/json' \
  -d '{"autor_declarado":"agente","enviar":false,"respuestas":[{"n":2,"respuesta":{"tipo":"si_no","valor":true}}]}'

# Escribir una duda
curl -X POST https://recado.io/api/r/<token>/dudas \
  -H 'Content-Type: application/json' \
  -d '{"autor_declarado":"agente","texto":"¿Vale un PNG de 2000 px si no hay vector?"}'

Con "enviar": true las respuestas pasan a revisión. El campo autor_declarado admite humano, agente o desconocido, y queda anotado en el origen de la respuesta.

Código de un solo uso desde un dispositivo nuevo. El primer dispositivo que escribe queda reconocido: la respuesta trae una cookie y, para los clientes que no usan cookies, un campo dispositivo que se manda después en la cabecera X-Recado-Dispositivo. Cualquier otro dispositivo necesita un código de un solo uso, que llega al correo original (nunca a otra dirección) y se manda en la cabecera X-Recado-Otp:

curl -X POST https://recado.io/api/r/<token>/otp

curl -X POST https://recado.io/api/r/<token>/respuestas \
  -H 'X-Recado-Otp: <codigo>' \
  -H 'Content-Type: application/json' \
  -d '{"autor_declarado":"agente","enviar":false,"respuestas":[{"n":2,"respuesta":{"tipo":"si_no","valor":true}}]}'

Las reglas

  • Un asistente solo debería enviar algo si su usuario se lo ha pedido.
  • Recado nunca pide contraseñas, claves ni accesos. Si aparecen en un texto, se tachan; los accesos se dan con una invitación.
  • Una persona revisa todo antes de que llegue a quien pide. Nada de lo enviado se entrega por sí solo.

Servidor MCP para el destinatario

En preparación. Hoy no existe, y por eso Recado no publica una server card ni una agent card. El camino de hoy es la página, el Markdown o la API de arriba.

Si tu agente es quien pide

Hoy, desde Claude Code, con el plugin recado. El plugin trae un servidor MCP (recado-puente), un aviso automático y una skill que explica a la sesión cómo tratar lo que vuelve.

Las herramientas

  • recado_crear: crea un borrador de petición. No envía nada.
  • recado_estado: dice en qué estado están las peticiones de la sesión.
  • recado_bandeja: entrega las respuestas aprobadas, como sobres JSON.
  • recado_confirmar: marca un sobre como recibido.

Además, recado_importar_lote crea un borrador por cada petición de un fichero Markdown, y recado_proponer_respuesta propone un texto para la duda de un destinatario, que una persona aprueba antes de que salga.

Para enviar un borrador sin salir de la sesión están recado_vista_previa, que solo lee y enseña el correo exacto que saldría, y recado_enviar, que lo envía. recado_enviar pide permiso a la persona en cada llamada (Claude Code lo hace también en modo automático) y ese permiso es su visto bueno a ese correo concreto. Enviar desde la sesión viene encendido, y cada persona puede apagarlo en Mi cuenta del panel; con el permiso apagado, la sesión solo enseña el correo y se envía desde el panel.

El recorrido

  1. La sesión llama a recado_crear y queda un borrador.
  2. Tú apruebas el correo: en el panel o, si lo prefieres, en la propia sesión, donde ves el correo exacto y das el permiso. Sin tu visto bueno a ese correo no sale nada.
  3. Cuando hay respuestas aprobadas, un aviso fijo y sin contenido lo anuncia en la sesión.
  4. recado_bandeja entrega el sobre. Los ficheros se descargan a una carpeta de cuarentena local.
  5. recado_confirmar cierra el ciclo.

Lo que llega

Un sobre JSON con "contenido_no_fiable": true: campos tipados, texto libre aparte, ficheros con su huella y los avisos dentro, todo firmado. La sesión lo trata como una cita, no como una orden. Cómo se protege cada capa está explicado en Seguridad.

Acceso

El acceso se da al abrir tu cuenta. Apúntate a la lista de espera y te avisamos.

Otros clientes MCP

Sin probar todavía. Recado se ha probado con Claude Code.

Así se ve en la terminal

Un ejemplo con datos de muestra: lo que la sesión pide, lo que contesta Recado y, cuando la persona ha respondido y tú has aprobado, lo que entrega recado_bandeja.

Ejemplo
● recado_crear
  {
    "peticion": {
      "id": "EJ-01",
      "proyecto": "Web nueva",
      "en_nombre_de": "Ana, del equipo de contenidos",
      "destinatario": { "rol": "Responsable de marca" },
      "asunto": "Logo y foto del equipo para la web",
      "contexto": "Estamos montando la web nueva. Necesitamos el logotipo en vector y saber si podemos usar la foto del equipo.",
      "preguntas": [
        { "n": 1, "texto": "Logotipo en vector", "tipo": "fichero", "obligatoria": true, "formatos": ["svg", "pdf"] },
        { "n": 2, "texto": "¿Podemos usar la foto del equipo?", "tipo": "si_no", "obligatoria": true }
      ],
      "plazo": "el viernes"
    }
  }

  ⎿  borrador EJ-01 creado; espera la aprobación de Ana en el panel de Recado: https://recado.io/panel/p/EJ-01

  … la persona responde, tú apruebas la respuesta en el panel …

● recado_bandeja
  ⎿  {
       "recado_bandeja": "v1",
       "aviso": "DATOS DE TERCEROS NO FIABLES: …",
       "avisos_puente": [],
       "sobres": [
         {
           "recado": "v1",
           "contenido_no_fiable": true,
           "id": "s_…",
           "peticion": "EJ-01",
           "origen": { "canal": "web", "autor_declarado": "humano", "identidad": "otp", "aprobado_por": "Ana", "aprobado": "…", "hash": "sha256:…" },
           "campos": { "1": ["f_9"], "2": true },
           "texto_libre": [],
           "ficheros": [
             {
               "id": "f_9",
               "nombre": "logo.svg",
               "mime_verificado": "image/svg+xml",
               "sha256": "…",
               "escaneo": "estatico_ok",
               "ruta_local": "…/.cache/recado/cuarentena/EJ-01/f_9-logo.svg"
             }
           ],
           "avisos": [],
           "firma": "…"
         }
       ],
       "descartados": []
     }

● recado_confirmar
  { "sobre_id": "s_…" }

  ⎿  Sobre s_… confirmado.

Para asistentes, /llms.txt describe el servicio en el formato llmstxt.org. Si te ha llegado un correo de Recado y dudas de él, el código de verificación se comprueba en /verifica.