dutic-mcp
Task Management: List upcoming or all tasks, including hidden ones not shown on the standard calendar. Get full assignment details with instructions, attachments, due dates, and automatic date conflict detection. View course-specific tasks.
Grades & Academic Records: View grade summaries or detailed per-course item-by-item grades. Fetch official partial grades from SISACAD and compare them with Moodle grades to identify discrepancies.
Course Content & Materials: List enrolled courses with their teachers. Browse course sections and modules. Download all course materials, auto-convert PDFs to Markdown for offline study, and read resource contents as Markdown. Bulk download course files to a local directory.
People & Profiles: List participants of a course with roles, groups, and last access. Search for a person by name or email across courses. View detailed profiles with shared courses, and identify course teachers. Check your own profile.
Monitoring & Changes: Detect new or changed tasks, grades, submission statuses, and deadline changes since your last review.
Exploration: Fetch any Moodle page via URL to access information beyond the standard tools, returning content as text, HTML, or links.
Session Management: Check session status, refresh your session (including via Google SSO), and perform initial browser login.
Allows interaction with the DUTIC (Moodle) virtual classroom of UNSA, providing tools to list tasks (including hidden ones), courses, and resources, and to download files from courses.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dutic-mcpshow me my upcoming tasks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
dutic-mcp
Servidor MCP + CLI para el aula virtual DUTIC (Moodle) de la UNSA. Tus tareas —incluidas las ocultas—, notas, materiales de estudio y compañeros, en la terminal y disponibles para agentes de IA (Claude Code, Antigravity, OpenCode, mimocode…).
┌─────────────────────────────────────────────┐
│ 24 tareas · 10 SIN ENTREGAR │
│ 18 ocultas que el calendario no te muestra │
└─────────────────────────────────────────────┘Por qué existe
El timeline de Moodle sólo muestra tareas accionables (futuras y sin entregar). Las tareas sin
fecha de calendario, ya vencidas o ya entregadas desaparecen de la vista — y así se pierden
entregas. dutic barre todos los cursos, encuentra esas tareas, las marca como OCULTA y ordena
lo pendiente por urgencia.
Related MCP server: Campus
Instalación
Requisitos: Node.js ≥ 20 y Google Chrome (o Edge) instalado. No hace falta descargar Chromium: se usa el navegador que ya tienes.
Un solo comando
npm install -g @josetra/dutic-mcpEsto deja dutic y dutic-mcp en tu PATH.
git clone https://github.com/JOSETRA44/dutic-mcp.git
cd dutic-mcp
npm install # compila automáticamente (script prepare)
npm install -g . # deja los comandos en el PATHPrimeros pasos
1. Configura tus agentes (una vez)
dutic setupRegistra el servidor MCP en los agentes que tengas instalados y copia la skill dutic a sus
directorios. Hace copia de seguridad (*.dutic-bak) y no toca el resto de tu configuración.
[OK] Claude Code (MCP) C:\Users\tu-usuario\.claude.json
[OK] Antigravity (MCP) ...\.antigravity\config\mcp_config.json
[OK] OpenCode (MCP) ...\.config\opencode\opencode.jsonc
[OK] mimocode (MCP) ...\.config\mimocode\mimocode.jsonc
[OK] Claude Code (skill) ...\.claude\skills\duticReinicia cada agente para que cargue el servidor.
2. Inicia sesión (una vez)
dutic loginSe abre tu Chrome en el aula virtual. Pulsa «Ingresar con Correo UNSA», elige tu cuenta de Google y espera: la ventana se cierra sola al capturar la sesión. El perfil del navegador queda guardado, así que las renovaciones posteriores suelen ser automáticas.
3. Compruébalo
dutic status # ¿sesión válida?
dutic tasks --all # tus tareas, incluidas las ocultasSi ves tus tareas, ya está todo listo. Pídeselo también a tu agente: «¿tengo alguna tarea pendiente en el aula virtual?»
3. Comandos Rapidos (Cheat Sheet)
Una vez iniciada la sesion, usa estos comandos frecuentemente para interactuar con tu entorno:
# Ver estado de sesion
dutic status
# Revisar que tareas faltan (incluyendo ocultas)
dutic tasks --all
# Descargar materiales del curso a tu computadora
dutic study <courseId> --dest ./materiales
# Forzar busqueda de nuevos cursos matriculados
dutic courses --refresh
# Buscar un curso o docente en la base de datos local
dutic search "estadistica"Uso — CLI
Comando | Qué hace |
| Tareas próximas del timeline (rápido) |
| + barrido de cursos → incluye las ocultas |
| Sólo las ocultas |
| Novedades desde la última revisión (tareas/notas nuevas, entregas, fechas) |
| Tu propio perfil (nombre, correo, id) |
| Captura tus notas parciales de SISACAD — tú haces el login + CAPTCHA; sólo tus datos |
| Muestra las notas ya capturadas, agrupadas por curso con promedio ponderado |
| Compara el promedio de SISACAD (oficial) con el total que calcula Moodle |
| Tu horario de clases (sistema de matrícula del extranet, sin CAPTCHA) |
| Horario de ese alumno (misma escuela por defecto; |
| Guarda y verifica usuario/clave/Escuela del sistema de matrícula (clave sin eco) |
| Último horario descargado (sin red) / estado de credenciales y caché |
| Oferta del ciclo (todas las secciones, por año) / horario de una asignatura-sección |
| Aulas de la escuela / qué se dicta en un aula (por código o parte del nombre) |
| Detalle: consigna, fechas, adjuntos, conflicto de fechas |
| Notas: resumen de todos los cursos, o detalle de uno |
| Cursos matriculados |
| Archivos del curso, por unidad |
| Baja materiales y convierte PDFs a Markdown |
| Lee un recurso (PDF→Markdown) para analizarlo |
| Convierte un PDF local a Markdown |
| Todos los compañeros del curso, con correo ( |
| Busca por nombre/correo: su correo y sus cursos reales (con grupo), marcando cuáles compartes |
| Perfil por id (docentes incluidos): correo, rol, cursos — resuelve el curso en común solo, sin |
| Docentes del curso |
| Busca cursos o docentes en la base de datos local |
| Escanea cursos por rango de IDs para armar tu base de datos y respaldar en la nube |
| Explora cualquier página del aula por URL (cambiar ids, ver lo que no tiene botón) |
| Descarga todos los materiales |
| Revisión automática en segundo plano (tarea programada, sin daemon) |
| Gestiona la caché local (perfiles, cursos…) |
| Configuración y sesión |
Opciones globales: --refresh (ignora la caché y trae datos frescos), --no-cache, --json.
Rendimiento y Refresco
Las consultas de personas/cursos se cachean en disco (~/.dutic/cache/): repetir person,
people, grades o tasks es casi instantaneo. Usa --refresh para ignorar el cache temporalmente y forzar datos frescos. Esto es muy util para reescanear tras algun cambio (matriculas nuevas, fechas extendidas, etc.).
Ejemplos Utiles
# Que me falta entregar exactamente?
dutic tasks --all
# Forzar que busque nuevas tareas saltandose el cache
dutic tasks --all --refresh
# Preparar solo la unidad que voy a estudiar
dutic study 2279 --section "Tema 2" --dest ./materiales
# Que pide exactamente esta tarea?
dutic task 385686
# Forzar el rescanneo de materiales de un curso
dutic materials 2279 --refresh
# Quien es y en que cursos coincido con el? (correo + todos los cursos compartidos)
dutic person "Piero"
# Escanear perfiles de cursos (1 al 5000) para crear tu propia base de datos offline
dutic scan-courses --from 1 --to 5000
# Quien ensena Estadistica? (requiere haber ejecutado scan-courses primero)
dutic search "Estadistica"Uso — con agentes (MCP)
Tras dutic setup no hay nada más que hacer: pregúntale a tu agente por tus tareas, notas o
materiales y usará las herramientas del servidor.
{
"mcpServers": {
"dutic": {
"command": "dutic-mcp"
}
}
}El semestre no se configura aquí: vive en ~/.dutic/semesters.json y el servidor lo lee en
cada llamada, así que dutic semester use surte efecto sin reiniciar el agente.
Si tu cliente no resuelve comandos del PATH, usa la ruta absoluta que imprime dutic setup:
{ "command": "node", "args": ["<ruta>/dist/mcp/server.js"] }
37 herramientas: semestres (dutic_semester_list, dutic_semester_use,
dutic_semester_current, dutic_semester_discover), novedades (dutic_check_changes), notas SISACAD (dutic_get_sisacad_grades,
dutic_compare_grades), horario (dutic_get_horario, dutic_get_course_catalog,
dutic_get_subject_schedule, dutic_get_aula_schedule), perfil propio (dutic_whoami), tareas
(dutic_list_tasks, dutic_get_assignment_detail, …), notas
(dutic_get_grades), materiales (dutic_list_course_materials, dutic_study_course,
dutic_read_resource, dutic_pdf_to_markdown), personas (dutic_list_participants,
dutic_find_person, dutic_get_person_profile, dutic_get_course_teachers), exploración por URL
(dutic_fetch_page) y sesión.
Encuesta de desempeño docente
Cada semestre toca llenar la encuesta de evaluación docente en el extranet
(extranet.unsa.edu.pe/encuesta2): 21 preguntas por cada profesor. Con 7 docentes son ~147
clics en un formulario de hace quince años. Esto lo reduce a una frase.
dutic encuesta login # usuario + clave (la de matrícula)
dutic encuesta policy set --escala Siempre --calificacion 18 # tu criterio, una sola vez
dutic encuesta fill --todas # SIMULA: enseña las 21 respuestas
dutic encuesta fill --todas --enviar --si-es-irreversible # envía de verdadCon matices por docente o por pregunta:
dutic encuesta policy set --docente QUENAYA --escala "A veces" --calificacion 12
dutic encuesta show BEJAR --escala Siempre --pregunta 4=Nunca # puntualidad aparteEl envío es irreversible y sólo se puede hacer una vez por docente. Por eso:
Todo simula por defecto; enviar exige
--enviary--si-es-irreversible.No hay respuesta por defecto escondida en el código: sin política configurada, la herramienta se niega a completar en vez de inventarse una valoración.
Antes de cada POST se vuelve a comprobar que el id de alternativa que va a viajar corresponde a la etiqueta que se te mostró. En este sistema los ids van al revés que la escala (
731=Nunca…728=Siempre, la mejor respuesta tiene el id más bajo), así que todo se resuelve por la etiqueta de texto y nunca por posición.Nunca se reenvía algo ya llenado: se comprueba contra el servidor y contra un registro local (
~/.dutic/encuesta-log.json), que es la única prueba de lo enviado porque el sistema no da acuse.
Desde un agente: dutic_encuesta_preview para revisar y dutic_encuesta_submit para una evaluación
real docente por docente, o dutic_encuesta_fill_all para el modo zero touch con tu política.
Horario de clases
El horario vive en el sistema de matrícula del extranet (extranet.unsa.edu.pe/sisacad/...),
otro sistema aparte del aula virtual y de SISACAD de notas: login con usuario + clave +
Escuela/Programa sin CAPTCHA, así que el MCP lo opera entero por HTTP.
dutic hrs login # una vez: usuario + clave + escuela (ECONOMÍA o su código 4700)
dutic hrs # tu horario, día por día: hora, asignatura y aula
dutic hrs <CUI> # el horario de ese alumno (la URL del sistema acepta otro codi_usua)
dutic hrs show # el último descargado, sin tocar la red
dutic hrs courses # oferta del ciclo de tu escuela: todas las secciones, por año
dutic hrs courses 2501209A # horario semanal de esa asignatura-sección (2501209 sin sección se resuelve)
dutic hrs aulas # las aulas de la escuela (código y nombre)
dutic hrs aulas 105 # qué asignaturas se dictan en esa aula y cuándo (por código o parte del nombre)Las clases de varias horas seguidas llegan como un solo bloque con su franja inicial (el sistema las marca con rowspan en la grilla semanal).
Para otra Escuela/Programa añade
--escuelacon su nombre (BIOLOGÍA) o código (4020), o--depecon su código de dependencia (p. ej.470= ECONOMÍA; la depe se deriva del código de escuela dividiendo por 10). Sin nada, se usa la del propio login.Si las credenciales fallan, el sistema responde su mensaje oficial ("Cuenta NO ES Valida"); la escuela se acepta por nombre o por código y se valida contra el select real del login.
Guarda las credenciales en
~/.dutic/sisacad-login.json(permisos 600) y el último horario en~/.dutic/horario.json— nunca se versionan.
Piloto de notificaciones por WhatsApp (opt-in)
Experimento separado del uso personal de arriba: un bot que avisa por WhatsApp cuando aparece una tarea o nota nueva. Sólo para quien decida enrolarse explícitamente — nadie queda inscrito sin haberlo pedido.
dutic saas enroll # te registra (una vez) y te da un código corto de 6 caracteres
# le escribes ese código, tal cual, al número de WhatsApp del bot (te lo da el operador del piloto)Y ya está — no hay nada más que recordar. dutic saas enroll deja activada la revisión
automática: tu PC revisa el aula virtual sola cada 3 horas y te avisa por WhatsApp si aparece una
tarea o una nota. Puedes verlo con dutic auto status y desactivarlo con dutic auto uninstall.
Cómo está construido, y por qué:
El scraping nunca sale de tu PC.
dutic saas pushreutiliza el mismodutic watchde siempre; sólo empuja el resultado (tarea nueva, nota nueva) a Supabase — jamás tuMoodleSessionni tusesskey. Centralizar el login de Google OAuth de otros estudiantes en la nube no es viable (los sistemas anti-bot de Google bloquean ese patrón) ni seguro (expondría la sesión de todos en un solo lugar), así que el login sigue pasando, como siempre, en la máquina de cada quien.La mensajería usa Baileys (librería no oficial de WhatsApp) con 1-3 números dedicados/externos del piloto — nunca el número personal de un estudiante. Sólo esos números del bot están expuestos a un eventual baneo de Meta; son reemplazables sin afectar a nadie más. El envío tiene demoras aleatorias entre mensajes y variación de texto para reducir el riesgo de detección como spam.
"Despertador" del bot: el dispatcher normalmente sólo corre por cron (2x/día), así que un código de vinculación enviado justo después de
dutic saas enrollpodía quedar con el check gris horas. La Edge Functionenrolldispara unworkflow_dispatchde GitHub Actions apenas se crea un estudiante nuevo, con una ventana de escucha más larga (150s) que la de las corridas por cron (20s). Comoenrolles un endpoint público, el disparo está limitado a uno cada 2 minutos (tabladispatch_wakeups, claim atómico) sin importar cuántas veces se llame — así no se puede agotar el presupuesto gratis de Actions ni el rate-limit del token de GitHub llamandoenrollen bucle.Sin daemon residente. La revisión automática no deja ningún proceso vivo consumiendo RAM: se registra una tarea en el Programador de tareas de Windows que ejecuta
dutic auto runcada 3 h; cada pasada dura segundos y termina. En reposo el consumo es cero. Se usa el Programador de tareas y no una claveRundel registro precisamente porque esa clave es el patrón de persistencia que marcan los antivirus.Respetuoso con tu laptop y con la UNSA. Corre en prioridad baja, sólo si hay red, nunca despierta un equipo dormido, y se salta la pasada si no hay conexión o si estás usando
dutica mano. El disparo lleva retraso aleatorio (hasta 45 min) para que, si muchos estudiantes lo tienen instalado, no barran el aula virtual todos en el mismo instante.Nunca aparece una ventana de la nada. La renovación de sesión en segundo plano es estrictamente headless. Si el SSO de Google caduca de verdad y no se puede renovar en silencio, en vez de abrirte un navegador sin avisar, el bot te escribe por WhatsApp pidiéndote que corras
dutic login.Piloto con consentimiento explícito de cada participante — no un lanzamiento masivo a la facultad.
Configuración
Variable | Para qué | Por defecto |
| Fija el semestre desde el entorno ( | auto |
| Navegador para el login: |
|
| Dónde guardar sesión y perfil |
|
| Usuario de la encuesta docente (evita guardarlo en disco) | — |
| Clave de la encuesta docente | — |
| Usuario del sistema de matrícula ( | — |
| Clave del sistema de matrícula | — |
| Escuela del sistema de matrícula (código o nombre) | — |
| Ruta del login de matrícula. Se deriva del semestre ( | auto |
Varios semestres a la vez
Cada período académico es un Moodle independiente (/2025B/, /2026A/…) con su propia sesión,
sus cursos y sus notas. dutic los mantiene aislados en ~/.dutic/semesters/<ID>/, así que
cambiar de ciclo no pierde nada del anterior.
dutic semester discover # sondea el aula: qué períodos existen
dutic semester list # cuáles conoces, cuál está activo, cuál tiene sesión
dutic semester use 2025B # cambiar el activo (persistente)
dutic semester use 2025B --login # …y entrar de una vez
dutic tasks --all -s 2026A # consulta puntual sin cambiar el activo
dutic semester auto # volver a la selección automática (por fecha)
dutic semester forget 2024B --purge --yes # archivar un ciclo y liberar su espacioEl semestre se resuelve por precedencia: --semester → DUTIC_SEMESTER → activo guardado →
sesión existente → deducido de la fecha. dutic semester current te dice cuál se aplicó y por qué.
Al actualizar desde una versión anterior, el estado plano de ~/.dutic/ se migra solo al
directorio del semestre que declara la sesión guardada; no hay que hacer nada.
Cómo funciona
No usa la API pública de web services (la UNSA la tiene bloqueada). Captura la cookie
MoodleSession y el token sesskey tras el login de Google (Playwright manejando tu Chrome) y con
ellos llama al endpoint AJAX interno de Moodle, complementado con scraping donde hace falta.
Necesidad | Fuente | Estado |
Descubrir todas las tareas |
| SI |
Cursos matriculados |
| SI |
Timeline y fechas |
| SI (sólo accionables) |
Estado de entrega, consigna, adjuntos | scraping de | SI |
Notas | scraping de | SI |
Personas y correos | scraping de | SI |
| — | NO bloqueadas por la UNSA |
Fechas contradictorias: algunas consignas mencionan una fecha distinta a la configurada en
Moodle. dutic task <cmid> compara ambas y avisa (dateConflict) — es la causa típica de entregas
perdidas.
SISACAD es distinto a propósito. Es un sistema aparte (extranet.unsa.edu.pe) protegido con
CAPTCHA, y esa protección se respeta: dutic sisacad no automatiza el login ni resuelve el CAPTCHA
por ti — abre el navegador, tú entras con tu usuario/clave y lo resuelves, y sólo cuando aparecen
tus notas la herramienta las lee y las estructura (por curso, con el promedio ponderado). Nunca
accede a datos de otros estudiantes.
El horario (dutic hrs) vive en el sistema de matrícula del mismo extranet — login
usuario+clave+escuela sin CAPTCHA — y su página acepta un CUI cualquiera en la URL
(horario_datos.php3?codi_usua=…), así que se opera entero por HTTP. La ruta del login
(matr_int_2026b_v2.00) cambia cada ciclo: se ajusta con DUTIC_MATRICULA_PATH.
Publicar en npm
npm login # cuenta de npm
npm version patch # o minor / major
npm publish # el paquete es scoped y público (publishConfig.access)
git push --follow-tagsprepublishOnly compila antes de publicar y files limita el tarball a dist/ y skills/.
Si tu scope de npm no es
@joswetra, cambia el camponameenpackage.jsonpor@tu-scope/dutic-mcp(o un nombre sin scope que esté libre).
Privacidad y seguridad
La sesión (
~/.dutic/session.json) y el perfil del navegador contienen credenciales de tu cuenta: no se versionan y el archivo se crea con permisos restrictivos.El certificado de
aulavirtual.unsa.edu.pe(CA privada de la UNSA) se acepta sólo para ese host.La herramienta accede únicamente a lo que tú ya ves en el aula. Donde Moodle oculta información (docentes en el listado, compañeros de otros grupos) se respeta esa restricción.
dutic profile <userId>resuelve un id a la vez, dado por una vía legítima tuya (una tarea calificada, un correo, un enlace que ya tenías). No está pensado ni se debe usar para recorrer rangos de ids y construir un directorio de docentes/estudiantes de la facultad — eso sería scraping masivo de datos personales de terceros sin su consentimiento.El piloto de notificaciones (
dutic saas enroll/push) es opt-in: sólo guarda datos de quien ejecutaenrollexplícitamente.pending_notificationsystudentsen Supabase existen sólo para avisar al propio dueño de esa fila — nunca para leer, listar o reenviar datos de otro estudiante.
Licencia
MIT © JOSETRA44
Available Tools
24 toolsdutic_check_changesNovedades desde la última revisiónA
Compara el estado académico actual con la última vez que se revisó y devuelve QUÉ cambió: tareas nuevas (incl. ocultas), notas recién publicadas o modificadas, cambios de estado de entrega y de fecha. Actualiza la línea base salvo que save sea false. Ideal para responder '¿hay algo nuevo?' o para un chequeo periódico. Usa datos frescos (ignora la caché).
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | Actualizar la línea base con el estado actual (false = sólo comparar). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: uses fresh data (ignores cache), updates baseline unless save=false. With no annotations, description fully covers behavioral context. Could mention side-effect of baseline update more prominently.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the action and provide essential usage guidance. Every sentence contributes value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and one parameter, the description sufficiently defines behavior and return content. Lacks structured output details, but the description is adequate for an agent to form expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description repeats the schema's description for the 'save' parameter without adding new meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares current academic status with last review and returns specific changes (new tasks, grades, delivery status, dates). It distinguishes from siblings by focusing on change detection rather than single-purpose retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends the tool for answering 'Is there anything new?' and periodic checking. Provides clear context, though does not explicitly mention when to avoid it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_compare_gradesComparar notas SISACAD vs. MoodleA
Compara el promedio ponderado de SISACAD (oficial) con el total que calcula Moodle, curso por curso (usando el nombre normalizado, sin confundir 'II' con 'III'). Útil para detectar si el aula virtual y el sistema oficial de notas están desincronizados. Requiere haber capturado antes con dutic sisacad; si no hay datos, avisa al usuario.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that it requires prior captured data and alerts if data is missing. It implies read-only behavior, though it does not explicitly state side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core functionality, then use case and prerequisite. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers essential aspects: purpose, prerequisite, and usefulness. Lacks details on output format or error handling, but sufficient for a zero-parameter comparison tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. The description adds no parameter details, which is acceptable given zero params; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it compares weighted averages from SISACAD and Moodle course by course, distinguishing from the capture tool (dutic_get_sisacad_grades) by explicitly requiring prior capture.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when to use (detect sync issues) and a prerequisite (prior capture with dutic sisacad), but does not explicitly mention when not to use or compare to alternatives like dutic_get_grades.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_download_fileDescargar un archivoA
Descarga un archivo del aula virtual a una ruta local. Acepta la URL de vista del módulo o directamente una URL de pluginfile.php.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| destPath | Yes | Ruta local de destino. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It lacks behavioral details such as whether files are overwritten, authentication requirements, error handling, or side effects. Only states action and URL types.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The main action and key detail on URL types are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward tool with 2 required parameters and no output schema, the description is adequate but incomplete. It does not mention the tool's output (e.g., success message or file path), nor error cases or permissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning for the 'url' parameter by specifying acceptable URL types (module view URL or pluginfile.php URL), which the schema only describes as URI. The 'destPath' parameter remains minimally described ('local destination path'). Schema coverage is 50%, so description partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads a file from the virtual classroom to a local path, specifying acceptable URL types. Distinguishes from siblings like dutic_read_resource (inline reading) and dutic_fetch_page (page fetching).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on when to use (to download files) and acceptable URL formats, but does not explicitly exclude alternatives or mention when not to use. Siblings are distinct enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_fetch_pageExplorar cualquier página del aula por URLA
Descarga CUALQUIER página del aula virtual con la sesión activa y devuelve su contenido. Pensada para explorar Moodle 'jugando con las URLs' — cambiar ids, ver páginas a las que no llegas por un botón: perfiles (user/view.php?id=N), cursos, foros, calificadores, etc. format: 'text' (texto legible), 'html' (crudo, para inspeccionar), 'links' (sólo enlaces internos, para descubrir a dónde navegar). Restringida al host del aula. Úsala cuando el usuario quiera investigar algo que las otras herramientas no cubren, o para descubrir ids.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL completa del aula o ruta (p. ej. 'user/view.php?id=3492&course=2271'). | |
| format | No | text | |
| maxChars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that it downloads pages with the active session, returns content, and is restricted to the host. It implies read-only behavior but does not mention potential rate limits or what happens if the session is expired. Still, it provides adequate transparency for a fetch tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet packed with information: main action, examples, format details, and usage guidance. Every sentence adds value without fluff. It is well-structured with front-loaded purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should hint at return format. It mentions formats and that it returns content, but does not detail the structure of the returned data. However, given the simple fetch nature and the format enum providing clues, it is mostly complete. Could mention error handling or session state requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 33% (only 'url' has description). The description compensates by explaining the 'format' parameter options ('text', 'html', 'links') and their intended use. 'maxChars' is mentioned only by schema default without elaboration, but the overall parameter meaning is clear enough for usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads any page from the virtual classroom using the active session and returns its content. It lists specific use cases (profiles, courses, forums) and distinguishes itself from sibling tools by stating it is for exploring things other tools don't cover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to use this tool when the user wants to investigate something not covered by other tools or to discover IDs. It also notes the restriction to the host domain, providing clear context for when to use vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_find_personBuscar una persona por nombre o correoA
Busca a una persona entre los participantes de TODOS los cursos del usuario, por nombre o por correo. Abre su perfil y devuelve su correo, su acceso MÁS RECIENTE (lastAccess + lastSeenAgoSeconds; se toma el más reciente entre todos los cursos, no el más antiguo) y TODOS sus cursos reales (course id + grupo, GA = Grupo A). Cada curso trae shared: true/false según si TÚ llevas exactamente ese curso (mismo course id — nunca confunde tu sección con la suya) y, si lo compartes, su lastAccess a ese curso. sharedCount = cuántos comparten. Úsalo para '¿quién es X?', '¿qué cursos lleva X?', '¿cuándo se conectó X?' o buscar por correo.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Nombre (o parte) o correo a buscar. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It details behavior: returns most recent access across courses, shared flag logic, and limits to real courses. Safe read operation implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose with many field details and usage examples. Front-loaded with purpose, but could be more concise (e.g., separate return details).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description comprehensively lists return fields and use cases. Sufficient for an agent to understand what the tool provides.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a minimal description of 'query'. The tool description adds nuance about partial name/email but does not significantly expand on parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for a person by name or email across all user's courses, with specific return fields. It distinguishes from siblings like list_participants by searching across courses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly lists example queries ('¿quién es X?') but does not mention when not to use or alternatives, though the context is clear from sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_get_assignment_detailDetalle completo de una tareaA
Devuelve TODO lo de una tarea: la consigna/instrucciones completas, los archivos adjuntos a la consigna (guías, rúbricas — puedes leerlos con dutic_read_resource), fechas oficiales de apertura y cierre, estado de entrega, nota y quién calificó. IMPORTANTE: incluye dateConflict y datesInDescription — los docentes a veces escriben en el texto una fecha distinta a la configurada en Moodle; si dateConflict es true, AVISA al usuario de la discrepancia. Úsalo cuando el usuario pregunte qué pide una tarea o cuándo se entrega.
| Name | Required | Description | Default |
|---|---|---|---|
| cmid | Yes | Course module id de la tarea. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral details: returns specific fields (dateConflict, datesInDescription), and instructs on handling date discrepancies. It does not mention authentication or side effects, but the tool appears read-only and the description is transparent about its output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with four sentences that are front-loaded with the main purpose and key details. Every sentence adds value: listing contents, highlighting important fields, providing usage guidance. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input schema (one parameter) and no annotations, the description is highly complete. It covers all necessary aspects: what the tool does, what it returns, special fields handling, and when to use it. It also references a sibling tool for reading attachments, providing a complete context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing a brief description for the single parameter 'cmid'. The tool description adds context by connecting cmid to assignment identity but does not elaborate on format or usage beyond the schema. This meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states that the tool returns all assignment details: instructions, attachments, dates, submission status, grade, and grader. It uses a specific verb ('devuelve') and resource ('tarea'), and distinguishes itself from sibling tools like dutic_read_resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: 'Úsalo cuando el usuario pregunte qué pide una tarea o cuándo se entrega.' It also instructs to alert the user if dateConflict is true. It does not explicitly state when not to use it, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_get_course_contentsContenido de un cursoC
Devuelve las secciones y módulos (tareas, recursos, foros...) de un curso.
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must carry the full behavioral burden, but it only describes what is returned. It does not disclose whether it is read-only, requires authentication, or any other behavioral traits. The agent gets no information about side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that effectively communicates the tool's purpose. While it could include more structured details, it achieves conciseness without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and only one parameter, the description is too sparse. It does not explain the structure of the returned data (e.g., nested sections, fields per module), leaving significant uncertainty for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention any parameters. With 0% schema description coverage, the agent must rely solely on the schema, which only provides type and min value for courseId. No additional meaning or format hints are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns sections and modules (tasks, resources, forums) of a course, using a specific verb and resource. It distinguishes well from sibling tools like dutic_get_course_tasks (which only returns tasks) and dutic_list_course_materials (which may have different scope).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives. No mentions of use cases, prerequisites, or exclusions, leaving the agent to infer optimal usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_get_course_tasksTareas de un cursoC
Lista las tareas de un curso concreto, incluidas las ocultas (hidden=true).
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears full responsibility for behavioral disclosure. It reveals that hidden tasks are included (hidden=true), which is a useful behavioral trait. However, it does not specify whether the operation is read-only, requires authentication, or has any side effects. The lack of a readOnlyHint or destructiveHint means the agent must assume unknown risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It conveys the core purpose and key behavioral detail (hidden tasks) efficiently. While it could benefit from a bit more structure (e.g., a brief note on input format), it remains appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter, no output schema, and no annotations, the description is somewhat complete for a simple list operation. It explains what tasks are retrieved (including hidden ones). However, it omits information about output format, potential pagination, or whether the list is ordered. This is adequate for a minimal tool but leaves some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% – the schema has no descriptions for its sole parameter 'courseId'. The description mentions 'de un curso concreto' but does not explain what the courseId represents (e.g., 'the numeric course ID from the course list'). With zero schema documentation, the description should fully compensate, but it does not, leaving the parameter semantics unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Lista' (lists) and the resource 'tareas de un curso' (tasks of a course), with the added detail of including hidden tasks. This is specific and distinguishes from siblings like 'dutic_list_tasks' which likely has broader scope. However, it does not explicitly compare to siblings, so it is strong but not perfect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'dutic_list_tasks' or 'dutic_get_assignment_detail'. There are no use cases, exclusions, or prerequisities mentioned, leaving the agent to infer context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_get_course_teachersDocentes de un cursoA
Identifica a los docentes del curso combinando los contactos del curso, los roles del listado y —lo que suele funcionar en esta aula— el nombre de quien calificó las tareas. Úsalo cuando el usuario pregunte quién es su profesor de un curso.
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the tool's approach: combining contacts, roles, and the grader's name—including a note that the grader method 'usually works in this classroom' (indicating a heuristic). With no annotations provided, the description carries the full burden and gives meaningful insight into the algorithm and its reliability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary purpose, and contains no filler. Every sentence earns its place: the first states what it does, the second tells when to use it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (single parameter, no output schema), the description adequately covers the tool's algorithm and usage. It could optionally describe the expected return format (e.g., list of teacher names) to be fully complete, but the current content is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'courseId' is self-explanatory from its name, but the description does not add any additional semantic information (e.g., format, source, validation). Since schema description coverage is 0%, the description should compensate, but it does not elaborate beyond what the parameter name implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool identifies teachers of a course by combining multiple data sources (contacts, roles, grader). It uses a specific verb+resource ('identifica docentes del curso') and distinguishes itself from siblings like 'dutic_list_participants' or 'dutic_get_grades' which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Úsalo cuando el usuario pregunte quién es su profesor de un curso' (use it when the user asks who their teacher is), providing clear usage context. It does not mention when not to use it or alternatives, but the unique purpose implies it's the correct tool for that query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_get_gradesVer calificacionesA
Devuelve las calificaciones del usuario. Sin courseId: resumen de TODOS los cursos (nota total + cuántos ítems quedan por calificar). Con courseId: detalle por ítem (nota, rango, porcentaje, peso). Úsalo cuando el usuario pregunte por sus notas, promedio, o cómo va en un curso.
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | No | Si se indica, detalle de ese curso; si no, resumen de todos. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses functional behavior (two modes) but omits authentication, error handling, or side effects. Adequate for a read tool but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise: two functional sentences plus a usage sentence. No unnecessary words, front-loaded with key info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional param, no output schema), the description sufficiently explains both invocation patterns and return content. Minor gap: no mention of error cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a parameter description that mirrors the tool description. No additional meaning beyond what schema provides. Baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns user grades and distinguishes two modes based on courseId presence. However, it does not explicitly differentiate from sibling tools like 'dutic_get_sisacad_grades'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes explicit usage guidance: 'Úsalo cuando el usuario pregunte por sus notas, promedio, o cómo va en un curso.' But lacks when-not-to-use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_get_person_profilePerfil de una persona (por id)A
Perfil de CUALQUIER usuario por su userId (sirve también para DOCENTES): nombre, correo, ROL ('Estudiante'/'Profesor' — así confirmas si es docente), zona horaria y TODOS sus cursos reales con course id y grupo. Sin courseId, prueba automáticamente tus propios cursos hasta encontrar uno que la persona también curse/dicte — no hace falta que el usuario lo busque a mano. Puede recibir un array de userIds (máx. 50) para resolver múltiples perfiles en lote.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | ||
| courseId | No | Curso de contexto ya conocido (si se omite, se busca automáticamente). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It mentions batch capability and auto-course lookup, but does not state whether the operation is read-only, safe, or if any destructive side effects exist. It is adequate but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that is front-loaded with the most important information (profile fields, auto-course, batch). It is concise with no redundant text, though it could be slightly more structured with bullet points for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers the key return fields and the auto-course behavior. It is mostly complete for a profile retrieval tool, though it lacks details on error handling or authentication requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema: it explains the batch use for userId arrays with a max of 50, and clarifies that courseId is optional with an automatic fallback. This compensates for the schema's 50% description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool gets a user profile by userId, including specific fields like name, email, role, time zone, and courses. It distinguishes from siblings by specifying details not covered in other tools like 'dutic_find_person' or 'dutic_list_participants'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the automatic course discovery feature when courseId is omitted, which guides usage. However, it does not explicitly mention when not to use this tool or compare it to alternatives like 'dutic_find_person'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_get_sisacad_gradesNotas de SISACAD (parciales oficiales)A
Devuelve las notas parciales OFICIALES de SISACAD que el usuario capturó con dutic sisacad (sistema aparte del aula, protegido con CAPTCHA; el usuario hace su propio login). Cada curso trae sus ítems (parcial, nota 0-20, peso %, ausente) y el weightedAverageSoFar (promedio ponderado con lo ya calificado). Sólo lee lo ya guardado — no abre navegador ni accede a datos de terceros. Si no hay datos, indícale al usuario que ejecute dutic sisacad en una terminal.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully bears the burden of transparency. It states that the tool only reads pre-saved data, does not open browsers, and does not access third-party data. It also describes the return structure (course items with grades, weight, absence, and weighted average), providing full behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of three sentences. The first sentence states the main purpose, the second explains the behavior and return elements, and the third provides usage guidance for empty data. Every sentence adds value, and the description is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is complete. It covers purpose, the underlying system, behavioral traits, return structure, and fallback instructions. No additional information is needed for an agent to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters (schema coverage 100%), so the baseline is 4. The description adds meaning by detailing the returned data structure (parcial, nota, peso, ausente, weightedAverageSoFar), which compensates for the lack of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns official partial grades from SISACAD, differentiating it from sibling tools like dutic_get_grades. It specifies that it reads data already captured by 'dutic sisacad', which is a separate system requiring CAPTCHA. This provides a specific verb and resource, and distinguishes from other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the tool only reads already saved data and does not open a browser or access third-party data. It also instructs the user to run 'dutic sisacad' on the terminal if no data exists. While it doesn't explicitly list alternative tools or conditions when not to use, it gives clear context and a fallback action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_list_course_filesRecursos descargables de un cursoB
Lista los archivos/recursos descargables de un curso (con su URL de descarga).
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not explicitly state whether the operation is read-only, requires authentication, or any limits on returned data. The implication of 'lista' suggests a read operation, but behavioral traits are insufficiently disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is concise and front-loaded. There is no redundant or extraneous information; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a single parameter, the description minimally conveys that the result includes download URLs. However, it lacks details on result structure (e.g., whether it includes file names, sizes), pagination, or ordering, leaving gaps for an AI agent to infer correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no meaning to the sole parameter 'courseId'. It does not explain its purpose, format, or where to obtain it, leaving the agent to rely solely on the integer type and exclusiveMinimum constraint in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists downloadable files/recursos of a course, including download URLs. It uses a specific verb 'Lista' and resource 'archivos/recursos descargables de un curso', effectively distinguishing it from siblings like dutic_download_file and dutic_list_course_materials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any conditions or prerequisites. It simply states what it does without context for selection among sibling tools like dutic_download_file or dutic_read_resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_list_course_materialsListar materiales de un curso (carpetas expandidas)A
Lista TODOS los archivos descargables de un curso, expandiendo las carpetas a sus archivos reales (diapositivas, lecturas, prácticas…). Devuelve nombre, URL, sección (unidad) y carpeta. Úsalo para saber qué materiales hay, y por qué unidad, antes de leer o descargar. Con section filtras a una unidad concreta.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | Filtra por nombre de unidad/sección (subcadena, ignora acentos). | |
| courseId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the tool's behavior: it lists files, expands folders, and returns name, URL, section, and folder. It implies a read-only operation but does not explicitly state that no data is modified. The behavioral transparency is adequate but could be strengthened by confirming it is a read-only, non-destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It front-loads the main action in the first sentence, then lists return fields, and provides usage guidance. Every sentence adds value with no redundant or extraneous information. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description appropriately mentions the return fields (nombre, URL, sección, carpeta). The tool has only two parameters and is a simple listing operation. The description could mention potential error cases or pagination, but it is sufficiently complete for typical use. It provides enough context for an agent to understand what the tool offers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only the `section` parameter has a description in the schema). The description adds context for `section' ('Con `section` filtras a una unidad concreta') reinforcing its filtering purpose. For `courseId`, no additional detail is provided beyond the schema's type and constraints. The description adds some value but does not fully compensate for the missing schema description of `courseId`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: listing all downloadable files of a course, expanding folders into real files (slides, readings, etc.). It identifies the specific verb ('Lista'), resource ('archivos descargables de un curso'), and scope (expanding folders). This distinguishes it from sibling tools like dutic_list_course_files which might not expand folders, and dutic_get_course_contents which is likely structural.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Úsalo para saber qué materiales hay, y por qué unidad, antes de leer o descargar.' It explains when to use the tool (before reading or downloading) and how to filter with the `section` parameter. While it does not explicitly state when not to use it or name alternatives, the context is clear enough for an AI agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_list_coursesListar cursos DUTICA
Lista los cursos en los que estás matriculado (id, nombre, docentes).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the sole source of behavioral information. The description is straightforward but minimal; it does not mention any side effects, permissions, or limitations beyond the basic 'lists courses you are enrolled in.' For a simple read-only tool, this is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that communicates the essential information without any unnecessary words. It is front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and is a straightforward listing operation, the description adequately covers the necessary information. It explains what is returned and the scope (enrolled courses). No additional details are needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters in the input schema, and schema coverage is trivially 100%. The description does not need to add parameter information. The baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list), the resource (courses), and the scope (enrolled courses). It also specifies the returned fields: id, name, teachers. This differentiates it from sibling tools like dutic_get_course_contents or dutic_list_tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It lacks context on when it is appropriate to call this tool, such as prerequisites or cases where other tools should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_list_participantsParticipantes de un cursoA
Lista TODOS los participantes de un curso recorriendo la paginación (nombre, rol, grupo, último acceso y, con withEmail, su correo institucional). Si el curso usa grupos separados, Moodle sólo muestra a los del grupo del usuario — es lo mismo que ve en la web. Úsalo para saber quiénes son sus compañeros o de qué grupo es alguien.
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | ||
| withEmail | No | Resolver el correo de cada participante (abre su perfil; más lento). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It discloses pagination handling ('recorriendo la paginación'), the group visibility limitation, and the performance impact of the withEmail option ('más lento'). Missing details on error conditions or idempotency, but adequately covers key behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: one longer sentence listing functionality and a clarifying note on groups. Information-dense without fluff, though slightly verbose in the first sentence. Still concise and well-structured for a non-trivial tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (pagination, group visibility, optional email) and lack of output schema, the description covers use cases, caveats, and returned fields. It is sufficient for an agent to decide when to invoke and what parameters to use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (only withEmail has a description). The description adds meaning: explains that withEmail resolves institutional email and is slower. For courseId, no additional context beyond schema type and range. It partially compensates for the coverage gap but does not add detail for the required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (list) and specific resource (participants of a course), with explicit attributes returned (name, role, group, last access, optionally email). It differentiates from sibling tools like dutic_find_person or dutic_get_course_teachers by focusing on all participants with pagination and group context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use it to know who classmates are or determine a person's group. It also warns about separated groups limiting visibility. However, it does not explicitly state when not to use or list alternative tools for specific scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_list_tasksListar tareas DUTICB
Lista tus tareas del aula virtual. scope='upcoming' usa el calendario (rápido). scope='all' barre TODOS los cursos para incluir tareas ocultas que no aparecen en el calendario (marcadas con hidden=true) — útil para no perder entregas.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | upcoming | |
| detailed | No | Con scope='all', scrapear el estado de entrega y la nota de cada tarea. | |
| onlyHidden | No | Con scope='all', devolver sólo las ocultas. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions speed differences but does not state whether the operation is read-only, requires authentication, or has any side effects. Crucial safety info is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences concisely state purpose and scope behaviors without wasted words. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 3 parameters and no output schema, the description does not explain the return format, pagination, or what fields are included in results. With no annotations to supplement, this is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (detailed and onlyHidden have descriptions). The description adds useful context for the 'scope' parameter but does not elaborate on the other parameters beyond what the schema already says. This meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists tasks from the virtual classroom, specifying two scopes ('upcoming' and 'all') and their behaviors. However, it does not explicitly distinguish this tool from siblings like 'dutic_get_course_tasks' or 'dutic_list_courses'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when to use each scope (e.g., 'upcoming' is fast, 'all' includes hidden tasks) but no direction on when to prefer this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_pdf_to_markdownConvertir un PDF local a MarkdownA
Convierte un PDF que ya está en disco a Markdown/texto para analizarlo sin gastar tokens en el binario. Opcionalmente guarda el resultado en outPath. No requiere sesión de Moodle.
| Name | Required | Description | Default |
|---|---|---|---|
| outPath | No | Si se indica, guarda el Markdown aquí. | |
| filePath | Yes | Ruta local del PDF. | |
| maxChars | No | Máximo de caracteres a devolver (0 = sin límite). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description notes 'sin gastar tokens en el binario' and 'No requiere sesión de Moodle,' which are helpful. It does not disclose error handling, file size limits, or whether the PDF is left unmodified. Score 3 as it adds some but not full context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences cover the core function, optional output, and authentication context. Every sentence adds value; no fluff. Could be slightly more structured, but effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple conversion tool with no output schema, the description covers the main purpose, input, optional output, and token-saving benefit. It lacks details on return format but maxChars parameter partly addresses output control. Overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions. The description adds that outPath optionally saves the result, but this is already in the schema. No additional semantics beyond the schema are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it converts a local PDF to Markdown/text, distinguishing it from sibling tools that deal with grades, courses, files, etc. The verb 'convertir' and the resource 'PDF a Markdown' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'No requiere sesión de Moodle,' which clarifies when to use (no session needed). It implies use when you have a local PDF and want to save tokens. However, it does not explicitly state when not to use or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_pull_course_filesDescargar todos los recursos de un cursoB
Descarga en bloque todos los archivos/recursos de un curso a un directorio local. Devuelve la lista de archivos guardados con su tamaño.
| Name | Required | Description | Default |
|---|---|---|---|
| destDir | Yes | Directorio local de destino. | |
| section | No | Sólo materiales de esta unidad/sección (subcadena). | |
| courseId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool downloads files to a local directory and returns saved files with sizes, but does not address key behaviors such as overwrite policy, error handling, authentication requirements, or handling of large courses. Minimal context beyond basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence in Spanish that efficiently communicates the action and output. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has 3 parameters, no output schema, and no annotations, the description is too minimal. It lacks details on recursive downloads, error behavior, file size limits, and progress indication. For a bulk download operation, the description is incomplete for an agent to fully understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (destDir and section have descriptions, courseId lacks one). The description mentions 'a un directorio local' and 'todos los archivos/recursos' hinting at destDir and courseId, but does not explain destDir path requirements, permissions, or that courseId is required. It adds little value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads all files/resources of a course in bulk to a local directory and returns a list with file sizes. The verb 'descarga en bloque' and resource 'todos los archivos/recursos de un curso' are specific and distinguishable from siblings like dutic_download_file (single file) and dutic_list_course_files (listing only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. However, the description implies bulk download, and siblings such as dutic_download_file for single files and dutic_list_course_files for listing suggest contrasting use cases. The lack of direct 'when to use' or 'when not to use' statements limits the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_read_resourceLeer un recurso como texto/MarkdownA
Descarga un recurso del aula (PDF, texto…) y devuelve su CONTENIDO como Markdown listo para analizar, SIN gastar tokens en el binario. Convierte PDFs a texto automáticamente. Úsalo cuando el usuario quiera que analices, resumas o extraigas algo de un material del curso (sílabo, informe, guía, lectura). Para binarios no soportados (docx, imágenes) avisa y sugiere descargar. Acepta la URL de vista del módulo o de pluginfile.php.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| maxChars | No | Máximo de caracteres a devolver (trunca lo demás). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behaviors: downloads, returns Markdown, converts PDFs, avoids token spend on binary, warns for unsupported types, and accepts specific URL formats. It lacks mention of authentication or rate limits but is generally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—three sentences that front-load the core purpose (download, Markdown, no token waste) and add detail without redundancy. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no output schema), the description covers essential aspects: what it does, supported file types, limitations, and URL formats. It could mention the maxChars truncation behavior explicitly, but the parameter description provides that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (only maxChars has a description). The description adds value by clarifying the 'url' parameter accepts module view URLs or pluginfile.php paths, which is not in the schema. This context helps the agent understand valid inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads a course resource and returns its content as Markdown, specifying that it converts PDFs automatically and avoids token waste. It distinguishes itself from siblings by mentioning unsupported binaries and suggesting an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to use this tool when the user wants analysis, summarization, or extraction from course materials. It also notes limitations for unsupported binaries. However, it does not explicitly contrast with sibling tools like 'dutic_download_file' or 'dutic_pdf_to_markdown', leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_refresh_sessionRenovar sesión DUTICA
Intenta renovar la sesión sin interacción (si el SSO de Google sigue vivo). Si falla, hay que ejecutar dutic login en una terminal.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the refresh relies on Google SSO being alive and that failure requires manual login. No annotations, so description carries full burden; it does so adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with key action, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with no output schema or annotations, the description fully explains purpose, behavior, and error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Description offers no parameter info, but baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renews a session without interaction, distinguishing it from sibling tools like dutic_session_status (status check) and dutic_login (interactive login).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to use ('sin interacción') and provides fallback action if it fails. Does not explicitly state when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_session_statusEstado de sesión DUTICA
Indica si hay una sesión válida, el semestre y cuándo caduca.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It describes the tool as read-only and specifies the outputs: session validity, semester, and expiration date. While it does not mention side effects or rate limits, for a simple status check this is adequate and does not contradict any annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no redundant information. Every word adds value, making it concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description fully covers its functionality and expected output. It tells the agent exactly what information the tool returns (session validity, semester, expiration), making it complete for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description needs no parameter explanation. Baseline score of 4 applies as per guidelines, as the description adds no parameter semantics beyond what is inherent to a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool indicates session validity, the current semester, and expiration date. It uses a specific verb ('Indica') and identifies distinct resources (session, semester, expiration), distinguishing it from sibling tools that deal with grades, courses, or other data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to check session status, likely before performing other operations, but it does not explicitly state when to use it or when not to. No alternatives are provided, but the purpose is clear enough for an agent to infer its role as a prerequisite check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_study_coursePreparar materiales de un curso para estudiarA
Descarga todos los materiales de un curso a un directorio y CONVIERTE los PDFs a Markdown (.md) organizados por carpeta, para estudiar/analizar offline sin gastar tokens en binarios. Devuelve el manifiesto de lo guardado. Úsalo cuando el usuario quiera 'preparar/bajar el material para estudiar' de un curso. Con section bajas sólo esa unidad — útil para no descargar todo de golpe cuando el usuario quiere estudiar una unidad concreta.
| Name | Required | Description | Default |
|---|---|---|---|
| destDir | Yes | Directorio local de destino. | |
| section | No | Sólo materiales de esta unidad/sección (subcadena). | |
| courseId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses key behaviors: downloading, converting PDFs, organizing in folders, and returning a manifest. However, it does not mention permissions, overwrite behavior, or handling of non-PDF files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and is concise (two sentences). Every sentence adds value, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool of moderate complexity (multi-step, no output schema, no annotations), the description covers the main purpose, usage scenario, and key feature (section filtering). Gaps include error handling and prerequisites, but overall it provides sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (two of three parameters have descriptions). The description does not add extra parameter information beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads all course materials, converts PDFs to Markdown, and returns a manifest. It distinguishes itself from sibling tools like dutic_download_file and dutic_pdf_to_markdown by combining these actions and adding organization by folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool when the user wants to 'preparar/bajar el material para estudiar' and explains the section parameter for partial downloads. It does not list alternatives or exclusions, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dutic_whoamiMi propio perfilA
Devuelve el perfil del propio usuario: nombre, correo institucional e id.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must inform about behavior. It mentions returning profile but omits details like authentication requirements, error cases, or that it is a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, concise sentence that front-loads the purpose and output fields. No superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description lists three return fields (name, email, id). Missing details on error handling or format, but sufficient for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; schema coverage is trivially 100%. According to guidelines, 0 parameters warrants baseline 4. No additional semantics needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool returns the user's own profile with specific fields (name, email, id). Distinguishes from siblings like dutic_get_person_profile which likely fetches others' profiles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage when the agent needs the current user's profile. Does not explicitly exclude other tools, but contextually clear given the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
24 tool updates
v0.1.3- First observed
dutic_check_changes - First observed
dutic_compare_grades - First observed
dutic_download_file - First observed
dutic_fetch_page - First observed
dutic_find_person - First observed
dutic_get_assignment_detail - First observed
dutic_get_course_contents - First observed
dutic_get_course_tasks - First observed
dutic_get_course_teachers - First observed
dutic_get_grades - First observed
dutic_get_person_profile - First observed
dutic_get_sisacad_grades - First observed
dutic_list_course_files - First observed
dutic_list_course_materials - First observed
dutic_list_courses - First observed
dutic_list_participants - First observed
dutic_list_tasks - First observed
dutic_pdf_to_markdown - First observed
dutic_pull_course_files - First observed
dutic_read_resource - First observed
dutic_refresh_session - First observed
dutic_session_status - First observed
dutic_study_course - First observed
dutic_whoami
TDQS
Most tools have clearly distinct purposes, but there is some overlap: dutic_list_tasks and dutic_get_course_tasks, dutic_list_course_files and dutic_list_course_materials, and dutic_read_resource vs dutic_pdf_to_markdown. Descriptions help clarify, but a few similar operations could cause confusion.
All tools use a consistent 'dutic_' prefix and generally follow a verb_noun snake_case pattern. A few exceptions like 'dutic_session_status' (noun_noun) and 'dutic_whoami' (non-standard) break the pattern, but overall the naming is predictable.
With 24 tools, the set is on the higher side but still reasonable for a comprehensive academic assistant covering grades, tasks, courses, files, and user information. Each tool serves a specific function, and the number aligns with the breadth of features.
The tool set covers most common student needs: grade retrieval, task management, course exploration, file download, user lookup, and session handling. Minor gaps exist (e.g., no assignment submission or forum interaction), but the core workflows are well-supported.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for the Inistate platform: module discovery, entry management, and activity submission.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that turns UPB Virtual (Moodle) into a structured knowledge source, enabling AI assistants to query courses, assignments, deadlines, announcements, and sync materials via REST API.MIT
- AlicenseAqualityAmaintenanceUnofficial CLI to access UPC Aula Virtual (Blackboard) from the terminal, with an MCP server for Claude to manage courses, assignments, and downloads.194309ISC
- AlicenseNot gradedqualityDmaintenanceA powerful Model Context Protocol (MCP) server that seamlessly integrates AI assistants with Moodle Learning Management System. Enable your AI assistant to access courses, retrieve educational content, download resources, and search through your learning materials.18MIT
- FlicenseAqualityBmaintenanceMCP server for the Moodle-based Campus Virtual FCEIA UNR, providing tools to read courses, assignments, forums, and grades, plus write operations (posting, grading, messaging, events) with dry-run safety.201-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/JOSETRA44/DUTIC-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server