Appi · Documentación para desarrolladores

Construye tu propio sitio sobre los servicios de contenido, comunidad, tienda y cursos de Droni.

¿Qué es appi?

Appi es un backend multi-sitio expuesto como servicio HTTP/JSON. Cada sitio es un espacio aislado con sus propios usuarios, contenidos, productos, pedidos y cursos. Tú pones el frontend (Nuxt, Next, Astro, una app móvil…) y appi pone la autenticación, los datos y las reglas de negocio.

Droni.co mismo está construido así: este sitio y su panel de administración son dos clientes de appi.

Módulos disponibles

1. Obtén tu siteId

Para empezar necesitas que creemos tu sitio. Te entregaremos un siteId (UUID) y una cuenta con rol owner, con la que podrás administrar el contenido desde drodmin o desde tu propio panel usando los endpoints de administración. Si vas a usar el inicio de sesión con Google, indícanos también las URLs de callback de tu frontend.

Solicitar un sitio

2. Haz tu primera petición

Todas las rutas cuelgan de https://appi.droni.co y requieren el header x-site-id. Sin él (o con un id inválido) appi responde 400 Invalid site ID.

HeaderCuándoValor
x-site-idSiempreTu siteId
AcceptSiempreapplication/json
Content-TypePeticiones con cuerpoapplication/json o multipart/form-data para archivos
AuthorizationRutas protegidasBearer <token>
curl
curl https://appi.droni.co/content/posts?per_page=5 \
  -H "x-site-id: $APPI_SITE_ID" \
  -H "Accept: application/json"

3. Arquitectura recomendada: llama a appi desde tu servidor

Appi no está abierto a peticiones directas desde navegadores de dominios de terceros (CORS). La forma soportada es un backend-for-frontend: tu navegador habla con tu servidor y tu servidor habla con appi. Así además:

  • El token del usuario vive en una cookie httpOnly, fuera del alcance de JavaScript del navegador.
  • El siteId y la URL de appi se configuran como variables de entorno del servidor.
  • Puedes cachear respuestas públicas (posts, productos, cursos) para ganar velocidad.

Ejemplo con Nuxt 3 — un proxy genérico en server/api/appi/[...path].ts:

server/api/appi/[...path].ts
// .env → APPI_URL=https://appi.droni.co  APPI_SITE_ID=<tu-site-id>
export default defineEventHandler(async (event) => {
  const config = useRuntimeConfig()
  const token = getCookie(event, 'appi_token')
  const path = event.context.params?.path ?? ''
  const method = event.method

  return await $fetch(`/${path}`, {
    baseURL: config.appiUrl,
    method,
    query: getQuery(event),
    body: ['POST', 'PUT', 'PATCH'].includes(method) ? await readBody(event) : undefined,
    headers: {
      'x-site-id': config.appiSiteId,
      Accept: 'application/json',
      ...(token ? { Authorization: `Bearer ${token}` } : {}),
    },
  }).catch((error) => {
    throw createError({ statusCode: error.statusCode, data: error.data })
  })
})

Y un endpoint de login que guarda el token en la cookie:

server/api/session/login.post.ts
export default defineEventHandler(async (event) => {
  const config = useRuntimeConfig()
  const { email, password } = await readBody(event)

  const { user, enrollment, token } = await $fetch<any>('/auth/login', {
    baseURL: config.appiUrl,
    method: 'POST',
    headers: { 'x-site-id': config.appiSiteId, Accept: 'application/json' },
    body: { email, password },
  })

  setCookie(event, 'appi_token', token, {
    httpOnly: true,
    secure: true,
    sameSite: 'lax',
    path: '/',
    maxAge: 60 * 60 * 24 * 7,
  })

  // Nunca devuelvas el token al navegador
  return { user, enrollment }
})

4. Usuarios y roles

Un usuario se registra con email y contraseña (y verifica su correo) o entra con Google. El login devuelve un token que debes enviar como Authorization: Bearer. Cada endpoint de esta documentación indica qué nivel de acceso necesita:

Público

Solo requiere el header x-site-id.

Sesión opcional

Público, pero si envías un token la respuesta incluye datos del usuario.

Autenticado

Requiere Authorization: Bearer <token>.

Miembro del sitio

Requiere token y que el usuario esté inscrito en el sitio.

Owner del sitio

Requiere token de un usuario con rol owner en el sitio.

Estudiante del curso

Requiere rol student en el curso.

Inscrito en el curso

Requiere rol student, teacher o admin en el curso.

Teacher / Admin del curso

Requiere rol teacher o admin en el curso.

Admin del curso

Requiere rol admin en el curso.

Los roles de curso (student, teacher, admin) son independientes del rol en el sitio (user, owner); se explican en el módulo Learn.

5. Convenciones

Nombres de campos

Los cuerpos de las peticiones usan snake_case (coupon_code, per_page) y las respuestas usan camelCase (createdAt, autoEnroll). Los ids son UUID y las fechas, ISO 8601. Los montos y porcentajes pueden llegar como string decimal: conviértelos con Number().

Paginación

Los listados aceptan page y per_page y responden con meta + data:

json
{
  "meta": {
    "total": 42,
    "perPage": 10,
    "currentPage": 1,
    "lastPage": 5,
    "firstPage": 1
  },
  "data": [ … ]
}

Slugs e ids

Las rutas públicas identifican posts, productos, temas, cursos y lecciones por slug (perfecto para URLs amigables). Las rutas de administración usan siempre el id.

6. Errores

CódigoSignificado
400Petición inválida para el estado actual (cupón vencido, curso sin autoinscripción, email sin verificar, siteId inválido…). Revisa message.
401Falta el token o ya no es válido.
403Autenticado, pero sin el rol necesario (por ejemplo, rol de curso) o fuera de la ventana permitida.
404El recurso no existe, no pertenece a tu sitio o no es tuyo. Las rutas protegidas por rol de sitio también pueden responder 404 en lugar de 403.
422Error de validación del cuerpo o query: revisa errors[].field y errors[].message.
Error de negocio
HTTP/1.1 400 Bad Request
{ "message": "El cupón ha expirado." }
Error de validación (422)
HTTP/1.1 422 Unprocessable Entity
{
  "errors": [
    { "field": "email", "rule": "email", "message": "The email field must be a valid email address" }
  ]
}

7. Buenas prácticas de seguridad

  • Llama a appi desde tu servidor y guarda el token en una cookie httpOnly, secure y sameSite. No lo pongas en localStorage ni en la URL.
  • Nunca devuelvas el token al navegador ni lo registres en logs.
  • Mantén las credenciales del owner fuera del frontend público. Si tu sitio necesita acciones de administración, constrúyelas en un panel aparte y protegido.
  • No confíes en totales calculados en el cliente: appi recalcula precios y descuentos al crear un pedido.
  • Confirma los pagos con tu pasarela desde tu servidor (webhooks) antes de marcarlos como completados.
  • Valida en tu frontend lo que muestres como HTML: si un post o lección usa formato html, sanitízalo antes de renderizarlo.
  • Llama a /auth/logout cuando el usuario cierre sesión para revocar el token, además de borrar la cookie.

8. Usa appi desde asistentes de IA (MCP)

Appi expone sus módulos como servidores MCP (Model Context Protocol), el estándar abierto para conectar asistentes como Claude con servicios externos. Conectas un servidor y puedes pedirle en lenguaje natural cosas como "publica un borrador con este texto", "¿qué pedidos siguen pendientes?" o "califica las respuestas de la lección 3".

Cada tool del MCP llama al mismo endpoint de la API que documenta esta página, con tu token. Por eso aplican exactamente los mismos permisos y validaciones: el asistente solo puede hacer lo que tu usuario puede hacer en ese sitio.

Servidores disponibles

Hay un servidor por módulo, para que el asistente trabaje con pocas tools y bien enfocadas. Conecta solo los que necesites: un asistente de atención al cliente no necesita store-admin.

Content

/mcp/content
14 tools

Posts publicados y archivos propios; con rol owner, CRUD de posts, atributos y archivos del sitio.

Cualquier usuario · owner para admin_*

Social

/mcp/social
16 tools

Comentarios y foro (topics y respuestas); con rol owner, moderación.

Cualquier usuario · owner para admin_*

Store

/mcp/store
13 tools

Catálogo de productos y la cuenta del cliente: direcciones, pedidos y pagos.

Clientes

Store · Admin

/mcp/store-admin
24 tools

Productos, atributos, pedidos, pagos, cupones y reglas de envío.

Owner del sitio

Learn

/mcp/learn
30 tools

Catálogo y progreso, lecciones, actividades y cuestionarios; los profesores gestionan lecciones, banco de preguntas y calificaciones. Cursos y lecciones por slug.

Estudiantes · teacher/admin del curso para teacher_*

Learn · Admin

/mcp/learn-admin
33 tools

Gestión completa de cursos por id: lecciones, banco de preguntas, cuestionarios, respuestas e inscripciones.

Owner del sitio

URLs: varios sitios o un sitio fijo

ModoURLCómo elige el sitio
Varios sitios (recomendado)https://appi.droni.co/mcp/<módulo>Cada tool recibe site_id. Incluye la tool list_my_sites.
Un sitio fijohttps://appi.droni.co/mcp/<siteId>/<módulo>El sitio va en la URL; las tools no piden site_id.

Usa el modo de un sitio fijo para un asistente dedicado a un solo sitio (por ejemplo, el soporte de tu tienda). Usa el de varios sitios si administras más de uno: registras cada módulo una sola vez, sin importar cuántos sitios tengas.

Autenticación: obtén un token

Los servidores MCP usan el mismo token que la API. Haz login con el siteId de un sitio en el que ya estés inscrito y copia el token de la respuesta. Un mismo token sirve para todos tus sitios: lo que cambia por sitio es tu rol.

curl
curl https://appi.droni.co/auth/login \
  -H "x-site-id: $APPI_SITE_ID" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"email": "[email protected]", "password": "…"}'

# → { "user": { … }, "enrollment": { … }, "token": "oat_…" }
  • Haz un login exclusivo para el MCP: si reutilizas el token de otra sesión y cierras esa sesión, el MCP deja de funcionar.
  • El token no vence. Trátalo como una contraseña y revócalo con POST /auth/logout (enviando ese token) cuando ya no lo uses.
  • Si tu usuario es owner, el token da acceso a las tools admin_*. Para un asistente que solo debe leer o atender clientes, usa una cuenta con rol user.

Conectar con Claude Code

Agrega cada servidor con claude mcp add. --scope user lo deja disponible en todos tus proyectos. Comprueba la conexión con /mcp dentro de Claude Code.

bash
# Un módulo, modo varios sitios
claude mcp add --transport http --scope user appi-content \
  https://appi.droni.co/mcp/content \
  --header "Authorization: Bearer $APPI_TOKEN"

# Todos los módulos de una vez
for m in content social store store-admin learn learn-admin; do
  claude mcp add --transport http --scope user "appi-$m" \
    "https://appi.droni.co/mcp/$m" \
    --header "Authorization: Bearer $APPI_TOKEN"
done

# Modo un sitio fijo
claude mcp add --transport http --scope user mitienda-store \
  https://appi.droni.co/mcp/<siteId>/store \
  --header "Authorization: Bearer $APPI_TOKEN"

Para compartir la configuración en un repositorio, usa un .mcp.json y deja el token en una variable de entorno, nunca en el archivo:

.mcp.json
{
  "mcpServers": {
    "appi-content": {
      "type": "http",
      "url": "https://appi.droni.co/mcp/content",
      "headers": { "Authorization": "Bearer ${APPI_TOKEN}" }
    }
  }
}

Conectar con Claude Desktop

Claude Desktop no permite enviar headers a un servidor remoto, así que se usa mcp-remote como puente. Edita claude_desktop_config.json (Settings → Developer → Edit Config) y reinicia la app:

claude_desktop_config.json
{
  "mcpServers": {
    "appi-content": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://appi.droni.co/mcp/content",
        "--header",
        "Authorization:${APPI_AUTH}"
      ],
      "env": { "APPI_AUTH": "Bearer oat_…" }
    }
  }
}

claude.ai y otros clientes web

Los conectores personalizados de claude.ai (y de otros asistentes web) solo admiten servidores sin autenticación o con OAuth; no dejan configurar un token. Puedes agregar la URL de un módulo y usar las tools públicas (listar posts, productos o cursos), pero las que requieren sesión responderán 401. El soporte de OAuth, para iniciar sesión desde el propio conector, aún no está disponible.

Trabajar con varios sitios

En el modo de varios sitios no hay un sitio "activo" guardado en el servidor: el asistente envía site_id en cada llamada. Al conectarse recibe la instrucción de usar list_my_sites cuando no sepa en qué sitio trabajar, preguntarte cuál usar y mantenerlo hasta que le pidas cambiar. En la práctica:

conversación
Tú:      Publica un borrador con el resumen de la reunión.
Claude:  (list_my_sites) Tienes acceso a "Droni" (owner) y "Mi tienda" (owner).
         ¿En cuál lo creo?
Tú:      En Droni.
Claude:  (admin_create_post, site_id: <Droni>) Listo, quedó como borrador.
Tú:      Ahora muéstrame los pedidos pendientes de Mi tienda.
Claude:  (admin_list_orders, site_id: <Mi tienda>, status: pending) …

También puede trabajar con dos sitios en la misma conversación, por ejemplo para comparar sus catálogos.

Permisos y comportamiento

  • Las tools admin_* requieren rol owner en el sitio; las teacher_* (servidor learn), rol teacher o admin en el curso (las de eliminar, solo admin). Si no tienes el rol, el asistente recibe el error y te lo explica.
  • Los errores de la API (401, 403, 404, 422) llegan al asistente con su mensaje, así que puede corregir los datos y reintentar.
  • Las actualizaciones son parciales: solo cambian los campos que el asistente envía.
  • Los comentarios y topics nuevos quedan ocultos hasta que un owner los aprueba, igual que desde la API.
  • create_order y register_payment piden al asistente confirmar contigo antes de ejecutarse. Aun así, revisa lo que vas a aprobar.
  • La subida de archivos (multipart) y las importaciones masivas no están disponibles por MCP; usa la API o drodmin.

Catálogo de tools

En el modo de varios sitios cada tool recibe además site_id. Los parámetros de cada tool son los del endpoint equivalente de esta documentación.

lecturasolo consultaescrituracrea o modificaborraelimina datos
Content /mcp/content14 tools
list_postslectura

Listar posts publicados

Lista los posts publicados del sitio, del más reciente al más antiguo.

get_postlectura

Ver post publicado

Obtiene un post publicado por su slug, con autor y atributos.

list_my_attachmentslectura

Listar mis archivos

Lista los archivos subidos por el usuario autenticado en este sitio.

delete_my_attachmentborra

Eliminar mi archivo

Elimina un archivo subido por el usuario autenticado (también del storage).

admin_list_postslectura

[Admin] Listar posts

Lista todos los posts del sitio, incluidos los borradores. Requiere ser owner.

admin_get_postlectura

[Admin] Ver post

Obtiene un post por ID (publicado o borrador) con autor y atributos. Requiere ser owner.

admin_create_postescritura

[Admin] Crear post

Crea un post. El slug se genera a partir del nombre. Por defecto queda como borrador (active=false). Requiere ser owner.

admin_update_postescritura

[Admin] Actualizar post

Actualiza solo los campos enviados de un post (tags: null las borra). Requiere ser owner.

admin_delete_postborra

[Admin] Eliminar post

Elimina un post definitivamente. Requiere ser owner.

admin_list_post_attributeslectura

[Admin] Listar atributos de un post

Lista los atributos clave-valor personalizados de un post. Requiere ser owner.

admin_add_post_attributeescritura

[Admin] Agregar atributo a un post

Agrega un atributo clave-valor personalizado a un post. Requiere ser owner.

admin_delete_post_attributeborra

[Admin] Eliminar atributo de un post

Elimina un atributo de un post. Requiere ser owner.

admin_list_attachmentslectura

[Admin] Listar archivos

Lista todos los archivos del sitio (de cualquier usuario). Requiere ser owner.

admin_delete_attachmentborra

[Admin] Eliminar archivo

Elimina un archivo del sitio (también del storage). Requiere ser owner.

Social /mcp/social16 tools
list_commentslectura

Listar comentarios

Lista los comentarios activos de un recurso (por ejemplo un post).

get_commentlectura

Ver comentario

Obtiene un comentario aprobado con sus respuestas aprobadas.

create_commentescritura

Comentar

Publica un comentario en un recurso, o responde a otro comentario con parent_id. Queda oculto hasta que un admin lo apruebe (admin_moderate_comment). Requiere usuario autenticado.

update_my_commentescritura

Editar mi comentario

Edita un comentario propio. Solo se permite durante los 5 minutos siguientes a publicarlo.

list_topicslectura

Listar topics

Lista los topics (hilos de foro) activos del sitio.

get_topiclectura

Ver topic

Obtiene un topic por slug con sus respuestas paginadas.

create_topicescritura

Crear topic

Abre un nuevo topic en el foro. Queda oculto hasta que un admin lo active (admin_update_topic). Requiere estar inscrito en el sitio.

reply_to_topicescritura

Responder topic

Publica una respuesta en un topic. Requiere estar inscrito en el sitio.

admin_list_commentslectura

[Admin] Listar comentarios

Lista todos los comentarios del sitio, incluidos los ocultos. Requiere ser owner.

admin_get_commentlectura

[Admin] Ver comentario

Obtiene un comentario con su hilo completo. Requiere ser owner.

admin_moderate_commentescritura

[Admin] Moderar comentario

Muestra (active=true) u oculta (active=false) un comentario. Requiere ser owner.

admin_delete_commentborra

[Admin] Eliminar comentario

Elimina un comentario definitivamente. Requiere ser owner.

admin_list_topicslectura

[Admin] Listar topics

Lista todos los topics del sitio, incluidos los inactivos. Requiere ser owner.

admin_get_topiclectura

[Admin] Ver topic

Obtiene un topic por ID. Requiere ser owner.

admin_update_topicescritura

[Admin] Actualizar topic

Edita el nombre o contenido de un topic, o lo activa/desactiva. Requiere ser owner.

admin_list_topic_replieslectura

[Admin] Listar respuestas de un topic

Lista las respuestas de un topic. Requiere ser owner.

Store /mcp/store13 tools
list_productslectura

Listar productos

Lista los productos activos del catálogo.

get_productlectura

Ver producto

Obtiene un producto activo por su slug, con sus atributos.

list_my_addresseslectura

Listar mis direcciones

Lista las direcciones del usuario autenticado en este sitio.

get_my_addresslectura

Ver mi dirección

Obtiene una dirección propia.

create_addressescritura

Crear dirección

Guarda una nueva dirección para el usuario autenticado.

update_addressescritura

Actualizar dirección

Actualiza solo los campos enviados de una dirección propia.

delete_addressborra

Eliminar dirección

Elimina una dirección propia.

list_my_orderslectura

Listar mis pedidos

Lista los pedidos del usuario autenticado.

get_my_orderlectura

Ver mi pedido

Obtiene un pedido propio con sus items y pago.

create_orderescritura

Crear pedido

Crea un pedido en estado pending. Precios, stock y cupón se validan en el servidor. Confirma con el usuario antes de llamarla.

list_my_paymentslectura

Listar mis pagos

Lista los pagos del usuario autenticado.

get_my_paymentlectura

Ver mi pago

Obtiene un pago propio con su pedido.

register_paymentescritura

Registrar pago

Registra el pago de un pedido propio (por ejemplo tras pagar en la pasarela). Confirma con el usuario antes de llamarla.

Store · Admin /mcp/store-admin24 tools
admin_list_productslectura

[Admin] Listar productos

Lista todos los productos, incluidos los inactivos.

admin_get_productlectura

[Admin] Ver producto

Obtiene un producto por ID.

admin_create_productescritura

[Admin] Crear producto

Crea un producto. El slug se genera a partir del nombre.

admin_update_productescritura

[Admin] Actualizar producto

Actualiza solo los campos enviados de un producto.

admin_delete_productborra

[Admin] Eliminar producto

Elimina un producto definitivamente.

admin_list_product_attributeslectura

[Admin] Listar atributos de un producto

Lista los atributos (ej: Color, Talla) de un producto.

admin_add_product_attributeescritura

[Admin] Agregar atributo a un producto

Agrega un atributo nombre-valor a un producto.

admin_delete_product_attributeborra

[Admin] Eliminar atributo de un producto

Elimina un atributo de un producto.

admin_list_orderslectura

[Admin] Listar pedidos

Lista los pedidos del sitio.

admin_get_orderlectura

[Admin] Ver pedido

Obtiene un pedido con sus items y pago.

admin_update_order_statusescritura

[Admin] Cambiar estado de pedido

Cambia el estado de un pedido (por ejemplo a shipped cuando se despacha).

admin_list_paymentslectura

[Admin] Listar pagos

Lista los pagos del sitio.

admin_get_paymentlectura

[Admin] Ver pago

Obtiene un pago con su pedido asociado.

admin_update_payment_statusescritura

[Admin] Cambiar estado de pago

Cambia el estado de un pago.

admin_list_couponslectura

[Admin] Listar cupones

Lista los cupones de descuento del sitio.

admin_get_couponlectura

[Admin] Ver cupón

Obtiene un cupón por ID.

admin_create_couponescritura

[Admin] Crear cupón

Crea un cupón de descuento. El código se guarda en mayúsculas.

admin_update_couponescritura

[Admin] Actualizar cupón

Actualiza solo los campos enviados de un cupón.

admin_delete_couponborra

[Admin] Eliminar cupón

Elimina un cupón.

admin_list_shipping_ruleslectura

[Admin] Listar reglas de envío

Lista las reglas de costo de envío del sitio.

admin_get_shipping_rulelectura

[Admin] Ver regla de envío

Obtiene una regla de envío por ID.

admin_create_shipping_ruleescritura

[Admin] Crear regla de envío

Crea una regla de costo de envío, opcionalmente limitada a un estado o ciudad.

admin_update_shipping_ruleescritura

[Admin] Actualizar regla de envío

Actualiza solo los campos enviados de una regla de envío.

admin_delete_shipping_ruleborra

[Admin] Eliminar regla de envío

Elimina una regla de envío.

Learn /mcp/learn30 tools
list_courseslectura

Listar cursos

Lista los cursos activos del sitio.

get_courselectura

Ver curso

Obtiene un curso activo por slug, incluida la inscripción del usuario si existe.

list_my_courseslectura

Listar mis cursos

Lista los cursos en los que el usuario autenticado está inscrito, con su progreso.

list_my_completed_lessonslectura

Listar mis lecciones vistas

Lista las lecciones que el usuario autenticado ya vio, más recientes primero.

enroll_in_courseescritura

Inscribirme en un curso

Inscribe al usuario autenticado como alumno. Solo funciona si el curso tiene auto_enroll.

list_lessonslectura

Listar lecciones

Lista las lecciones de un curso. Los alumnos ven solo las activas; profesores y admins del curso ven todas.

get_lessonescritura

Ver lección

Obtiene una lección con la respuesta y el último intento de cuestionario del usuario, y las preguntas del cuestionario (sin la respuesta correcta). Si el usuario está inscrito, la marca como vista y actualiza su progreso.

submit_lesson_answerescritura

Responder actividad

Envía la respuesta del alumno a la actividad de una lección. Requiere ser alumno del curso.

get_lesson_answerlectura

Ver respuesta de actividad

Obtiene una respuesta de actividad (los alumnos solo ven las propias).

submit_lesson_quizescritura

Presentar cuestionario

Envía de una vez las respuestas a TODAS las preguntas del cuestionario de una lección (obtenlas con get_lesson) y devuelve la calificación. Se permiten varios intentos. Requiere ser alumno del curso.

get_lesson_quizlectura

Ver intento de cuestionario

Obtiene un intento de cuestionario (los alumnos solo ven los propios).

teacher_create_lessonescritura

[Profesor] Crear lección

Crea una lección en el curso. El slug se genera a partir del nombre. Requiere ser profesor o admin del curso.

teacher_update_lessonescritura

[Profesor] Actualizar lección

Actualiza los campos enviados de una lección. Requiere ser profesor o admin del curso.

teacher_delete_lessonborra

[Admin del curso] Eliminar lección

Elimina una lección. Requiere ser admin del curso.

teacher_list_questionslectura

[Profesor] Listar banco de preguntas

Lista el banco de preguntas de selección múltiple del curso. Requiere ser profesor o admin del curso.

teacher_get_questionlectura

[Profesor] Ver pregunta

Obtiene una pregunta del banco, incluida la respuesta correcta. Requiere ser profesor o admin del curso.

teacher_create_questionescritura

[Profesor] Crear pregunta

Agrega una pregunta de selección múltiple (2 a 5 opciones) al banco del curso. Requiere ser profesor o admin del curso.

teacher_update_questionescritura

[Profesor] Actualizar pregunta

Actualiza los campos enviados de una pregunta del banco. Requiere ser profesor o admin del curso.

teacher_delete_questionborra

[Admin del curso] Eliminar pregunta

Elimina una pregunta del banco. Requiere ser admin del curso.

teacher_list_lesson_exam_questionslectura

[Profesor] Listar preguntas del cuestionario

Lista las preguntas del banco vinculadas al cuestionario de una lección. Requiere ser profesor o admin del curso.

teacher_link_exam_questionescritura

[Profesor] Vincular pregunta al cuestionario

Agrega una pregunta del banco del curso al cuestionario de una lección. Requiere ser profesor o admin del curso.

teacher_unlink_exam_questionborra

[Profesor] Desvincular pregunta del cuestionario

Quita una pregunta del cuestionario de una lección (la pregunta sigue en el banco). Requiere ser profesor o admin del curso.

teacher_list_enrollmentslectura

[Profesor] Listar inscritos

Lista los inscritos del curso con su rol, estado y progreso. Requiere ser profesor o admin del curso.

teacher_get_enrollmentlectura

[Profesor] Ver inscripción

Obtiene una inscripción del curso. Requiere ser profesor o admin del curso.

teacher_list_lesson_answerslectura

[Profesor] Listar respuestas de actividad

Lista las respuestas de los alumnos a la actividad de una lección. Requiere ser profesor o admin del curso.

teacher_grade_lesson_answerescritura

[Profesor] Calificar respuesta de actividad

Pone nota y/o retroalimentación a la respuesta de un alumno. Requiere ser profesor o admin del curso.

teacher_delete_lesson_answerborra

[Admin del curso] Eliminar respuesta de actividad

Elimina la respuesta de un alumno. Requiere ser admin del curso.

teacher_list_lesson_quizzeslectura

[Profesor] Listar intentos de cuestionario

Lista los intentos de cuestionario de los alumnos en una lección. Requiere ser profesor o admin del curso.

teacher_update_lesson_quizescritura

[Profesor] Corregir intento de cuestionario

Corrige el estado o la nota de un intento de cuestionario. Requiere ser profesor o admin del curso.

teacher_delete_lesson_quizborra

[Admin del curso] Eliminar intento de cuestionario

Elimina un intento de cuestionario. Requiere ser admin del curso.

Learn · Admin /mcp/learn-admin33 tools
admin_list_courseslectura

[Admin] Listar cursos

Lista todos los cursos del sitio, incluidos los inactivos.

admin_get_courselectura

[Admin] Ver curso

Obtiene un curso por ID.

admin_create_courseescritura

[Admin] Crear curso

Crea un curso. El slug se genera a partir del nombre.

admin_update_courseescritura

[Admin] Actualizar curso

Actualiza los campos enviados de un curso.

admin_delete_courseborra

[Admin] Eliminar curso

Elimina un curso definitivamente.

admin_list_lessonslectura

[Admin] Listar lecciones

Lista todas las lecciones de un curso.

admin_get_lessonlectura

[Admin] Ver lección

Obtiene una lección por ID.

admin_create_lessonescritura

[Admin] Crear lección

Crea una lección en un curso. El slug se genera a partir del nombre.

admin_update_lessonescritura

[Admin] Actualizar lección

Actualiza los campos enviados de una lección.

admin_delete_lessonborra

[Admin] Eliminar lección

Elimina una lección.

admin_list_questionslectura

[Admin] Listar banco de preguntas

Lista el banco de preguntas de un curso.

admin_get_questionlectura

[Admin] Ver pregunta

Obtiene una pregunta del banco, incluida la respuesta correcta.

admin_create_questionescritura

[Admin] Crear pregunta

Agrega una pregunta de selección múltiple (2 a 5 opciones) al banco de un curso.

admin_update_questionescritura

[Admin] Actualizar pregunta

Actualiza los campos enviados de una pregunta del banco.

admin_delete_questionborra

[Admin] Eliminar pregunta

Elimina una pregunta del banco.

admin_list_lesson_exam_questionslectura

[Admin] Listar preguntas del cuestionario

Lista las preguntas vinculadas al cuestionario de una lección.

admin_link_exam_questionescritura

[Admin] Vincular pregunta al cuestionario

Agrega una pregunta del banco del curso al cuestionario de una lección.

admin_unlink_exam_questionborra

[Admin] Desvincular pregunta del cuestionario

Quita una pregunta del cuestionario de una lección (la pregunta sigue en el banco).

admin_list_lesson_answerslectura

[Admin] Listar respuestas de actividad

Lista las respuestas de los alumnos a la actividad de una lección.

admin_get_lesson_answerlectura

[Admin] Ver respuesta de actividad

Obtiene una respuesta de actividad por ID.

admin_create_lesson_answerescritura

[Admin] Registrar respuesta de actividad

Registra manualmente la respuesta de un alumno (el usuario debe estar inscrito en el curso).

admin_update_lesson_answerescritura

[Admin] Calificar respuesta de actividad

Actualiza la respuesta, la nota o la retroalimentación de una respuesta de actividad.

admin_delete_lesson_answerborra

[Admin] Eliminar respuesta de actividad

Elimina una respuesta de actividad.

admin_list_lesson_quizzeslectura

[Admin] Listar intentos de cuestionario

Lista los intentos de cuestionario de una lección.

admin_get_lesson_quizlectura

[Admin] Ver intento de cuestionario

Obtiene un intento de cuestionario por ID.

admin_update_lesson_quizescritura

[Admin] Corregir intento de cuestionario

Corrige el estado o la nota de un intento de cuestionario.

admin_delete_lesson_quizborra

[Admin] Eliminar intento de cuestionario

Elimina un intento de cuestionario.

admin_list_enrollmentslectura

[Admin] Listar inscripciones

Lista las inscripciones a cursos del sitio.

admin_get_enrollmentlectura

[Admin] Ver inscripción

Obtiene una inscripción por ID.

admin_enroll_userescritura

[Admin] Inscribir usuario

Inscribe un usuario del sitio en un curso con un rol (student, teacher o admin del curso). Busca el user_id con admin_search_site_users.

admin_update_enrollmentescritura

[Admin] Actualizar inscripción

Cambia el rol, estado o progreso de una inscripción.

admin_delete_enrollmentborra

[Admin] Eliminar inscripción

Elimina la inscripción de un usuario a un curso.

admin_search_site_userslectura

[Admin] Buscar usuarios del sitio

Busca usuarios inscritos en el sitio por nombre o email, para asignarlos a un curso.