Magisterium AI

Referencia de API

Todos los métodos se invocan mediante POST a https://www.magisterium.com/api/v1/a2a usando JSON-RPC 2.0. Toda solicitud debe incluir Authorization: Bearer $MAGISTERIUM_TOKEN (un token de usuario emitido por OAuth — consulta Autenticación) y Content-Type: application/json.

Métodos

message/send

Envía un mensaje a una habilidad y recibe una tarea completada. Todas las habilidades de Magisterium son síncronas — la respuesta contiene el estado terminal de la tarea (completed o failed), nunca un estado intermedio working.

Parámetros:

CampoTipoObligatorioDescripción
messageMessageEl mensaje del usuario con partes y metadatos opcionales.
message.rolestringDebe ser "user".
message.messageIdstringID único para este mensaje.
message.kindstringDebe ser "message".
message.partsPart[]Al menos una parte (text o data).
message.metadata.skillIdstringNoHabilidad que se invocará. Por defecto es catholic_qa.
message.contextIdstringNoID de contexto opcional para agrupar tareas relacionadas. Si se omite, el servidor genera uno.
configurationobjectNoReservado para uso futuro.

Devuelve: un objeto Task con kind: "task".

tasks/get

Recupera una tarea creada previamente por su ID.

Parámetros:

CampoTipoObligatorioDescripción
idstringEl ID de la tarea devuelto por message/send.

Devuelve: el objeto Task, o un error TASK_NOT_FOUND si ha caducado o no existe. Las tareas se almacenan durante 24 horas.

tasks/cancel

Cancela una tarea si se encuentra en un estado cancelable. Como todas las habilidades se resuelven de forma síncrona, la mayoría de las tareas ya están en un estado terminal (completed / failed) cuando se devuelve la respuesta — intentar cancelar una tarea terminal devuelve INVALID_PARAMS con un mensaje Invalid state transition.

Parámetros:

CampoTipoObligatorioDescripción
idstringEl ID de la tarea que se va a cancelar.

Devuelve: el objeto Task actualizado con status.state: "canceled".

Ciclo de vida de la tarea

Las habilidades de Magisterium se ejecutan de forma síncrona, por lo que una tarea solo se persiste en almacenamiento después de que la habilidad finaliza — siempre en un estado terminal. Los estados submitted y working forman parte de la especificación A2A más amplia, pero la implementación de Magisterium nunca los produce; solo observarás uno de los tres estados terminales que aparecen a continuación.

EstadoSignificado
completedTerminal — los resultados están en artifacts. Devuelto por message/send cuando la habilidad finaliza correctamente.
failedTerminal — status.message contiene el motivo del fallo. Devuelto por message/send cuando la habilidad lanza una excepción.
canceledTerminal — solo es alcanzable invocando tasks/cancel sobre una tarea no terminal. Como las tareas ya están en un estado terminal cuando message/send devuelve, en la práctica la cancelación se rechaza con INVALID_PARAMS para cualquier tarea sobre la que tengas un identificador.

Cada tarea lleva además:

  • contextId — un identificador de agrupación que puedes reutilizar entre mensajes de seguimiento para vincular tareas relacionadas.
  • history — la lista ordenada de mensajes del usuario y del agente que generaron los artefactos de la tarea.

Códigos de error

CódigoNombreDescripción
-32700Parse errorCuerpo JSON inválido.
-32600Invalid requestFaltan los campos jsonrpc, method o id.
-32601Method not foundMétodo JSON-RPC desconocido.
-32602Invalid paramsParámetros ausentes o inválidos (también se devuelve para transiciones de estado inválidas en tasks/cancel).
-32603Internal errorFallo inesperado en el servidor.
-32001Task not foundEl ID de la tarea no existe o ha caducado.
-32002Skill not foundskillId desconocido en los metadatos del mensaje.
-32003Rate limit exceededDemasiadas solicitudes. Revisa retryAfter (segundos) en el data del error.
-32004UnauthorizedFalta el token Bearer o es inválido.
-32005Paid plan requiredA2A requiere un plan Pro, Organización o Empresa.

El estado HTTP refleja la clase del error: 401 para UNAUTHORIZED, 403 para PLAN_REQUIRED, 429 para RATE_LIMITED y 200 para el resto de errores JSON-RPC (según la convención JSON-RPC de devolver 200 con un cuerpo error).

Límites de uso

A2A comparte el mismo grupo de límites de uso que MCP — consulta los Precios de MCP para ver los topes de solicitudes de cada plan.

Se aplican dos variantes:

  • Predeterminada — se aplica a document_search, document_fetch, liturgical_readings y saints_of_the_day.
  • Intensiva — se aplica únicamente a catholic_qa, porque ejecuta una canalización de respuesta respaldada por un LLM. Esta variante utiliza un tope más estricto y bajo.

Cuando alcanzas un límite, el objeto data del error contiene retryAfter en segundos. Los llamadores deben esperar ese intervalo antes de reintentar.

CORS

El endpoint responde a solicitudes preflight OPTIONS y devuelve cabeceras CORS permisivas (Access-Control-Allow-Origin: *, Allow-Methods: POST, OPTIONS, Allow-Headers: Content-Type, Authorization), de modo que A2A puede invocarse desde orquestadores basados en navegador sin necesidad de un proxy.