UNED Campus MCP Server
Integrates with UNED's Moodle campus (agora.uned.es) through the official mobile REST API. Provides tools to authenticate via SSO, list courses, retrieve assignments, events, classes, announcements, grades, and course content; download and index materials; search and read extracted text; generate subject sheets, study plans, progress tracking, and calendar .ics exports.
Click on "Deploy 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., "@UNED Campus MCP Serversincroniza mis asignaturas y muéstrame las entregas de esta semana"
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.
UNED Campus MCP Server
Servidor MCP que conecta tu asistente (Copilot en VS Code, Claude, Cursor…) con
el campus virtual de la UNED (agora.uned.es, Moodle) y lo convierte en un
apoyo de estudio: descarga los materiales por asignatura, extrae e indexa su
texto, genera fichas (profesorado, contacto, evaluación, fechas, clases, temario),
sigue tu progreso por tema, planifica la semana y exporta las fechas a .ics.
Incluye un agente de Copilot (uned-tutor), prompts /uned-* y una skill.
Proyecto personal, no oficial y sin relación con la UNED. Usa la misma API REST que la app móvil oficial de Moodle, con tu propia sesión.
Cómo funciona
El campus de la UNED autentica por SSO (login.uned.es), así que el servidor no puede pedir tu contraseña directamente. En su lugar usa el mismo flujo que la app móvil oficial de Moodle:
La herramienta
uned_loginabre una ventana de Chromium.Tú haces login vía SSO (tu contraseña nunca pasa por el código ni se guarda).
El servidor captura automáticamente el token de web service que la app móvil recibiría (endpoint
admin/tool/mobile/launch.php).Todas las demás herramientas consultan la REST API de Moodle con ese token.
El token se guarda en ~/.uned-mcp/token.json (solo en tu máquina, permisos
600). Es revocable cambiando tu contraseña o borrando el archivo.
Related MCP server: s21-canvas-mcp
Requisitos
Python 3.10+ y uv.
Chromium de Playwright (solo para el login SSO).
Opcional, para buscar en PDF escaneados:
ocrmypdfytesseract-ocr-spa.
Instalación (una vez)
git clone https://github.com/kta41/mcp-uned.git
cd mcp-uned
uv sync
uv run playwright install chromium
# opcional (Debian/Ubuntu): OCR de PDF escaneados
sudo apt install ocrmypdf tesseract-ocr-spaInstalación en VS Code (como mcp-bruno)
uv run python scripts/install_vscode.py --with-copilot-customizationsRegistra el servidor
uneden elmcp.jsondel perfil de VS Code (en WSL, víawsl.exeen el perfil de Windows y directo en~/.vscode-server), copiando las variables de entorno de la tabla de abajo si están definidas. El resto de servidores demcp.jsonno se tocan.Copia el agente
uned-tutory los prompts/uned-hoy,/uned-ficha,/uned-resumen,/uned-test,/uned-plan,/uned-trabajoaUser/prompts.Copia la skill
estudio-uneda~/.copilot/skills.
Recarga VS Code, elige el agente uned-tutor en el chat o lanza /uned-hoy.
Configuración manual del cliente MCP
mcp.json:
{
"servers": {
"uned": {
"command": "uv",
"args": ["run", "--directory", "/ruta/completa/a/mcp-uned", "uned-mcp"]
}
}
}Variables de entorno
Variable | Por defecto | Uso |
|
| Carpeta de estudio |
|
| Token y sesión SSO (permisos 600) |
|
| Tamaño máximo de archivo a descargar |
|
| Pausa (s) entre descargas |
| autodetectada | Página de la titulación en uned.es (para localizar guías docentes) |
| — | Bundle de CA para redes con proxy TLS |
| — | Organización(es) de la CA del proxy (ver abajo) |
Red con proxy TLS (corporativa)
Si tu red re-firma el TLS, define UNED_MCP_CA_BUNDLE (o REQUESTS_CA_BUNDLE) con
el bundle de CA: lo usa httpx para la API. Chromium no usa ese bundle, así que el
login confía explícitamente en la CA del proxy (--ignore-certificate-errors-spki-list):
si
UNED_MCP_CA_BUNDLEcontiene solo la CA del proxy, no hace falta nada más;si el bundle tiene muchas CA, indica la organización de la del proxy con
UNED_MCP_PROXY_CA_ORG="MiEmpresa"(varias separadas por comas).
Define estas variables antes de ejecutar scripts/install_vscode.py para que se
copien al mcp.json.
Primer uso
Dile a tu asistente: «haz login en la UNED». Se abrirá el navegador, inicia sesión con tu cuenta UNED (DNI/NIE/usuario + contraseña en la página oficial del SSO) y el token se capturará solo. Solo hay que hacerlo una vez; si el token caduca algún día, repite el login.
Puedes verificar el estado sin abrir el asistente:
uv run uned-mcp check # estado del token
uv run uned-mcp login # login desde terminal (reutiliza la sesión guardada si sigue válida)
uv run uned-mcp sync # primera descarga completa (recomendado desde terminal: tarda varios minutos)
uv run uned-mcp sync "microeconomía" --forzar # una asignatura, re-procesando todo
uv run uned-mcp plan --horas 12 --semanas 4
uv run uned-mcp resumen --notify # sync + notificación de escritorio si hay cambios (para cron)Carpeta de estudio (~/UNED)
~/UNED/
README.md índice: asignaturas, próximas clases y entregas, avance
plan-semanal.md plan generado (uned_plan)
calendario.ics entregas, fechas y clases, con aviso 2 días antes (importable en Outlook/Google)
novedades.md cambios de la última sincronización
_General/ espacios que no son asignaturas (acogida, coordinación de la titulación)
<Asignatura>/
ficha.md profesorado y contacto, evaluación/ponderación, clases, entregas y estado,
temario con progreso, metodología, materiales, bibliografía, anuncios
guia-docente.pdf/.md guía oficial (uned.es), localizada por el código de la asignatura
materiales/ archivos del aula, por sección (y Tareas/ con los enunciados)
texto/ texto extraído en markdown con marcas «## [p. N]» para citar
apuntes/ resúmenes/tests guardados por el agente
progreso.json estado de cada tema (pendiente → leyendo → visto → repasado → dominado)
enlaces.md enlaces externos del aulaCambia la ubicación con UNED_STUDY_DIR. La sincronización es incremental: solo
descarga lo modificado y detecta materiales, plazos y anuncios nuevos. No descarga
vídeo/audio ni archivos de más de 80 MB.
PDF escaneados: si un PDF no tiene capa de texto y ocrmypdf está instalado, la
sincronización genera <nombre>.ocr.pdf y lo indexa (también los que quedaron
pendientes de sincronizaciones anteriores). Sin ocrmypdf se marcan «pendiente OCR».
Qué puedes preguntar después
Pregunta de ejemplo | Herramienta que usa |
«¿Qué tengo pendiente esta semana?» |
|
«Lista mis cursos» |
|
«¿Entregas en los próximos 15 días?» |
|
«¿Hay anuncios nuevos de los profesores?» |
|
«¿Se han publicado notas?» |
|
«¿Eventos del calendario este mes?» |
|
«¿Cuándo son las próximas clases?» |
|
«Dame el contenido del curso X» |
|
«Descarga/actualiza todo el campus» |
|
«Ficha de Derecho Constitucional» |
|
«¿Qué dicen los materiales sobre la ventaja comparativa?» |
|
«Resúmeme el tema 3 de Psicología del Desarrollo» |
|
«Hazme un test de Historia del Arte» |
|
«Plan para 12 h/semana» |
|
«He terminado el tema 2 de Microeconomía» |
|
Herramientas expuestas
uned_login— login SSO + captura de token (abre navegador).uned_logout— borra token y sesión locales.uned_cursos— cursos matriculados con progreso.uned_entregas(dias)— tareas con fecha límite próximos N días.uned_eventos(dias)— eventos de calendario próximos N días.uned_clases(asignatura, incluir_pasadas)— clases/jornadas (día, hora, profesor, online/presencial y acceso) leídas de los horarios publicados en el campus.uned_anuncios(dias)— últimos avisos de los foros de noticias por curso.uned_notas— calificaciones publicadas por curso.uned_novedades(dias)— resumen combinado de todo lo anterior.uned_curso_contenido(courseid)— secciones y recursos de un curso.uned_sincronizar(asignatura, forzar)— descarga materiales, guía docente, plazos y anuncios; regenera fichas, índice y.ics.uned_ficha(asignatura)— ficha completa de la asignatura.uned_materiales(asignatura)— materiales descargados con páginas y ruta del texto.uned_buscar(consulta, asignatura, limite)— búsqueda de texto completo (sin acentos) con archivo y página.uned_leer(archivo, desde_pagina, hasta_pagina)— texto extraído de un material.uned_foros(asignatura, dias)— debates recientes de todos los foros.uned_progreso(asignatura)/uned_progreso_marcar(asignatura, tema, estado, nota)— seguimiento por tema.uned_plan(horas_semana, semanas)— plan semanal (ECTS, temas pendientes, entregas).uned_calendario_ics()— regenera~/UNED/calendario.ics.uned_guardar_apunte(asignatura, nombre, contenido)— guarda un apunte enapuntes/.
Seguridad y buen uso
Todo se ejecuta en tu máquina; no envíes nunca tus credenciales UNED a servicios de terceros.
El token otorga acceso de solo lectura a tu cuenta desde apps móviles; guárdalo con el mismo cuidado que tu contraseña.
La sincronización espacia las descargas y solo baja lo que ha cambiado; no la lances en bucle (una vez al día es suficiente).
Los materiales descargados están protegidos por derechos de autor: son para tu estudio personal. No subas
~/UNEDa repositorios ni lo compartas.
Solución de problemas
Síntoma | Solución |
«Falta Playwright» al hacer login |
|
«Token no válido» / error | Vuelve a hacer |
«No se pudo capturar el token» | El servicio móvil podría estar capado en agora; reporta el mensaje |
El asistente no ve las herramientas | Vuelve a ejecutar |
Errores de certificado en red corporativa | Define |
«pendiente OCR» en el informe | Instala |
Error de certificado al hacer login tras un proxy | Define |
Desarrollo
uv sync
uv run ruff check src tests scripts
uv run pytestEstructura: src/uned_mcp/ (servidor, cliente Moodle, sincronización, extracción,
índice, guías, fichas, planificador), copilot/ (agente, prompts y skill),
scripts/install_vscode.py, tests/ (sin red). Más detalle en
.github/copilot-instructions.md.
Licencia
MIT. Los materiales del campus que descargues no están cubiertos por esta licencia: pertenecen a sus autores y son solo para tu estudio personal.
Available Tools
21 toolsuned_anunciosC
Últimos anuncios publicados por los profesores en los foros de avisos de cada curso.
| Name | Required | Description | Default |
|---|---|---|---|
| dias | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 disclosure burden. It implies a read-only retrieval, but says nothing about authentication requirements, ordering, pagination, or how many announcements are returned, which matters for a listing 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?
A single sentence with no filler that front-loads the resource and its scope. It is efficient, though it is terse to the point of omitting guidance rather than being optimally structured for a tool with a filter parameter.
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?
Because an output schema exists, return-value explanation is not required, and for a simple listing tool the description is minimally sufficient. However, the undocumented 'dias' parameter and the absence of any routing guidance against sibling tools leave real 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?
The single parameter 'dias' has 0% schema description coverage and a default of 7, so its meaning must come from the description — but the text only says 'Últimos' without explaining that the window is expressed in days. The link between the parameter and the recency scope is left to inference.
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 names a specific resource (announcements from teachers in each course's notice forum) and a scope (most recent), so an agent understands what it retrieves. It does not explicitly contrast itself with the nearby siblings uned_foros or uned_novedades, which is the main gap.
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?
There is no statement of when to call this versus alternatives, even though uned_foros and uned_novedades appear to cover adjacent ground. The only implied guidance is the word 'Últimos', which hints at recency but sets no condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_buscarA
Búsqueda de texto completo en tus materiales descargados. Devuelve fragmentos con archivo y página para citar la fuente. Úsala antes de explicar o resumir algo del temario.
| Name | Required | Description | Default |
|---|---|---|---|
| limite | No | ||
| consulta | Yes | ||
| asignatura | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It discloses the useful constraint that it searches 'materiales descargados' (downloaded content only) and describes the return format, but says nothing about permissions, scope limits, or whether it is read-only.
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 tight sentences with zero filler. The core purpose is front-loaded and the usage cue follows immediately, with nothing redundant.
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?
An output schema exists, so return values need not be detailed further, and the description covers purpose and usage adequately. However, with three undocumented parameters and no annotations, the definition leaves real gaps an agent must guess at.
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 none of the three parameters (consulta, limite, asignatura) are explained in prose. The description does not compensate for the gap: the agent cannot tell what 'asignatura' filters on or what 'limite' controls beyond the default value of 8.
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?
States a specific verb+resource ('Búsqueda de texto completo en tus materiales descargados') and even describes the return shape (fragments with file and page for citation). It is clearly a search tool, distinct from read-oriented siblings like uned_leer or uned_materiales, though it does not explicitly name those alternatives.
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?
Gives explicit usage context: 'Úsala antes de explicar o resumir algo del temario', which tells the agent when this tool is the right choice. It lacks any when-not condition or named alternative tool, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_calendario_icsA
Exporta entregas, eventos y clases/jornadas a ~/UNED/calendario.ics (importable en Google/Outlook).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load. It usefully discloses the destination path and the .ics format with its interoperability target, but says nothing about overwrite behavior, whether the file is created or appended, auth requirements, or refresh semantics for a file-writing 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?
A single front-loaded sentence with the verb first, the sources enumerated, and the output location appended. Every clause earns its place with no filler.
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 zero-parameter tool with an output schema present, the description supplies enough: what is exported and where. The only gap is the write/overwrite behavior of the target file, which the output schema cannot cover.
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 takes zero parameters, so the baseline is 4. Nothing in the description needs to compensate for undocumented inputs, and the schema is fully self-describing by virtue of being empty.
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?
States a specific verb ('Exporta') and enumerates the resources it aggregates (entregas, eventos, clases/jornadas), placing the output at a concrete path. It's clearly distinguishable from sibling source tools, though it doesn't explicitly name them as alternatives or data sources.
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 parenthetical ('importable en Google/Outlook') implies the use case — feeding a calendar app — but there is no explicit when-to-use vs alternatives guidance, no prerequisites, and no note on when this should be preferred over reading the individual sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_clasesB
Clases, jornadas y sesiones (online o presenciales) con día, hora y profesor, según los horarios publicados en el campus. Requiere haber sincronizado. Incluye los datos de acceso si el horario los trae.
| Name | Required | Description | Default |
|---|---|---|---|
| asignatura | No | ||
| incluir_pasadas | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose useful traits: classes may be online or in-person, and access credentials/details are included only if the schedule provides them. It omits error behavior, what happens if sync was never run, and any limits, so disclosure is partial rather than rich.
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 with the resource front-loaded, no filler, and the sync prerequisite placed after the main purpose. Efficient and well-ordered, though not maximally tight.
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?
An output schema exists, so return-format detail is unnecessary, and the sync requirement is covered. However, with two entirely undocumented parameters and no annotation support, the definition stops short of what an agent needs to invoke it with correct arguments.
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 neither parameter is mentioned. The description never explains that 'asignatura' filters by subject/course or that 'incluir_pasadas' toggles inclusion of past sessions, so it does not compensate for the total absence of parameter documentation.
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?
States a specific resource (clases, jornadas, sesiones) with the fields it returns (day, time, teacher, online/in-person), which is concrete and concrete enough to distinguish from generic event tools. It does not, however, name or differentiate itself from close siblings like uned_eventos or uned_calendario_ics, leaving the agent to infer which schedule tool applies.
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?
Gives one genuine precondition – 'Requiere haber sincronizado' (must have synced first), implicitly pointing at uned_sincronizar. It offers no when-to-use/when-not guidance and no routing to alternatives among the many schedule-adjacent siblings, so the usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_curso_contenidoB
Secciones y recursos de un curso concreto (usa el id de uned_cursos).
| Name | Required | Description | Default |
|---|---|---|---|
| courseid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 behavioral burden, and it discloses almost nothing: no read-only confirmation, no auth/enrollment prerequisites, no pagination or size behavior for course content. One short noun phrase is inadequate for a data-retrieval tool with zero annotation coverage.
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 front-loaded sentence with no filler, and the cross-reference to uned_cursos is placed where it is immediately useful. It is efficient, though so terse that it borders on under-specification rather than true conciseness.
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?
An output schema exists, so return-value description is unnecessary, and there is only one required parameter. Still, the description leaves the read-only/mutation character and any access prerequisites unstated, which for a zero-annotation tool is a real gap an agent must guess around.
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%, so the description must compensate for the sole parameter. It does add value by stating the courseid must come from uned_cursos, but it never clarifies the expected type, format, or that the value is an integer course identifier as opposed to a name or slug.
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 names the exact resource and scope: the sections and resources belonging to one specific course. It does not give an explicit verb (get/list), but the noun phrase clearly identifies what an agent would retrieve and distinguishes it from sibling course-level tools like uned_cursos.
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 parenthetical '(usa el id de uned_cursos)' points the agent at the sibling tool that supplies the required courseid, which is useful routing. However, it gives no condition for when this tool is the right choice versus siblings like uned_materiales or uned_ficha, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_cursosB
Lista tus cursos matriculados (nombre, id y progreso si existe).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 implicitly scopes to the user's own data ("tus cursos") but says nothing about authentication requirements, whether the call is read-only, rate limits, or behavior when no courses are enrolled.
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 front-loaded sentence with no filler; the optional-output caveat ("si existe") is compact. Nothing is wasted, though it is arguably under-specified rather than genuinely 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?
For a zero-parameter listing tool with an output schema, the description covers purpose and roughly what is returned, so return-format detail is not required. However it omits any routing guidance against the many sibling tools and any auth/read behavior 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?
The tool takes zero parameters, so the baseline is 4. The parenthetical field list adds marginal value but there are no parameters whose semantics could be 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 states a specific verb ("Lista") and resource ("cursos matriculados"), plus the fields returned (nombre, id, progreso). It is clearly distinct from siblings like uned_plan or uned_curso_contenido, though it never names an alternative explicitly.
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?
There is no guidance on when to use this tool versus siblings such as uned_curso_contenido or uned_plan. Usage is left entirely to inference from the tool name and the word "matriculados".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_entregasA
Tareas con fecha de entrega en los próximos N días, de todos tus cursos.
| Name | Required | Description | Default |
|---|---|---|---|
| dias | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It conveys useful scope (all courses, forward-looking window) but never states that this is a read-only query, nor anything about authentication, rate limits, or ordering of results.
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 front-loaded sentence that states scope and time window with no filler. Nothing is repeated from the schema and every clause 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?
For a one-parameter, read-only query tool with an output schema that defines return values, the description covers what the tool returns and the time window. Only the read-only nature and any ordering/pagination behavior are left unstated.
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 'dias' has 0% schema description coverage and only a default of 30. The description supplies its meaning by tying it to 'próximos N días', which is the key semantic the schema omits, though it does not state units explicitly (days are inferable from context).
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 names the resource (entregas/tareas) and the scope (next N days, all courses), so an agent can tell it returns upcoming assignment deadlines rather than calendar events or grades. It does not explicitly distinguish itself from similar siblings like uned_calendario_ics or uned_eventos.
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?
There is no explicit when-to-use or when-not-to-use guidance, and no alternative sibling is named for overlapping queries such as deadlines vs. events or the ICS calendar. The intended usage is only implied by the phrase 'próximos N días'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_eventosB
Eventos del calendario (entregas, exámenes, tutorías…) de los próximos N días.
| Name | Required | Description | Default |
|---|---|---|---|
| dias | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 disclose one behavioral fact — results are forward-looking, limited to the next N days — but says nothing about read-only nature, authentication requirements, timezone/date handling, or whether past or canceled events appear.
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?
One sentence, front-loaded with the resource and the constraint, and the parenthetical examples add disambiguation without bloat. Nothing is wasted.
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?
An output schema exists, so return values need not be explained, and the tool is simple (one optional parameter). Still, the description omits the parameter default and gives no sibling routing, which matters in a 21-tool namespace where it overlaps uned_entregas and uned_clases.
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%, so the description must compensate for the single 'dias' parameter. 'Próximos N días' does map the parameter to a window length, but it omits the default of 30 days and any bounds or format constraints.
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?
Names a specific resource (eventos del calendario) and scope (próximos N días), with parenthetical examples (entregas, exámenes, tutorías) that make the content concrete. However, it does not differentiate itself from closely overlapping siblings such as uned_entregas, uned_clases, or uned_calendario_ics, so an agent must infer which one to pick.
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 only states what the tool returns; it never says when to use this versus uned_calendario_ics, uned_entregas, uned_clases, or uned_plan. With 21 sibling tools in the namespace, the absence of any routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_fichaB
Ficha de una asignatura: equipo docente y contacto, fechas/entregas y su estado, evaluación, enunciados, temario con progreso, materiales, bibliografía y anuncios. También se guarda en ficha.md.
| Name | Required | Description | Default |
|---|---|---|---|
| asignatura | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 behavioral burden. It does disclose one meaningful side effect ('También se guarda en ficha.md'), but says nothing about auth/login requirements, whether the operation is read-only or mutating beyond the file write, or rate/aggregation behavior.
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 dense sentence lists the covered content, followed by a short side-effect note about ficha.md. It is front-loaded and free of filler, though the enumeration is long and could be grouped more cleanly.
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?
An output schema exists, so return-value explanation is not required, yet the description restates the payload contents while omitting the parameter format and any routing guidance among many similar siblings. It is adequate but leaves clear gaps for a 1-param tool in a crowded toolset.
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% and the single 'asignatura' parameter has no description in the schema. The description only repeats the word 'asignatura' without clarifying expected format (course code, name, ID) or constraints, so it does not compensate for the coverage gap.
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 enumerates the concrete contents of the 'ficha' (teaching team/contact, dates and submissions with status, evaluation, statements, syllabus with progress, materials, bibliography, announcements), so an agent knows what resource is being fetched. The verb is only implied (a noun phrase, not 'fetch/aggregate'), and it never distinguishes itself from overlapping siblings like uned_entregas, uned_materiales, or uned_anuncios.
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?
There is no statement of when to use this tool versus alternatives such as uned_curso_contenido or the specialized uned_entregas/uned_anuncios tools, and no prerequisites or triggers. The agent must infer usage purely from the content list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_forosB
Debates recientes de todos los foros de una asignatura (avisos, dudas por tema, estudiantes).
| Name | Required | Description | Default |
|---|---|---|---|
| dias | No | ||
| asignatura | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a read-only listing scoped to 'recent' debates across all forums, which conveys basic behavior, but says nothing about pagination, result limits, or authentication requirements. The 'recientes' framing is the only scope signal given.
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 front-loaded sentence with no filler; the scope (all forums of a subject) leads immediately. It is perhaps overly terse, but nothing is wasted.
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?
An output schema exists, so return values need not be explained. However, for a tool with 2 parameters at 0% schema coverage, the description leaves the 'dias' window and the exact meaning of 'asignatura' identifier unresolved, which is a meaningful 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 0%, so the description must compensate for both parameters. 'Asignatura' is implied by 'de una asignatura', but the 'dias' parameter (default 30) is never explained — 'recientes' only vaguely gestures at it, leaving the time window undocumented.
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 states a specific resource (recent debates across all forums of a subject) and enumerates the content types included (avisos, dudas por tema, estudiantes). It is clear and distinct enough from siblings like uned_anuncios, though it never explicitly names or contrasts 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?
There is no statement of when to use this tool versus alternatives such as uned_anuncios or uned_novedades, which likely overlap in content. The agent must infer the appropriate context entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_guardar_apunteB
Guarda un resumen, esquema, test o apunte en Markdown en /apuntes/ y lo enlaza en la ficha.
| Name | Required | Description | Default |
|---|---|---|---|
| nombre | Yes | ||
| contenido | Yes | ||
| asignatura | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a meaningful side effect beyond writing a file: the note is also linked into 'la ficha' (i.e., it mutates another resource). However, it says nothing about overwrite behavior, permissions, or failure modes, leaving significant behavioral gaps.
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 well-formed sentence that front-loads the action and packs in format, location, and the linking side effect 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?
An output schema exists, so return values needn't be explained. Still, for a mutation tool with no annotations and zero parameter documentation, the description omits overwrite/error behavior and leaves one of three parameters undefined, which is only marginally sufficient.
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%, so the description must compensate. It partially does: 'asignatura' is revealed as a directory segment in the path and 'contenido' is framed as Markdown study content. But 'nombre' is never explained (filename vs. title) and no formats or constraints 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?
States a specific verb (Guarda) plus the resource (resumen, esquema, test o apunte en Markdown) and even the storage path convention (<asignatura>/apuntes/). It is clear what the tool does, though it doesn't explicitly distinguish itself from adjacent siblings like uned_materiales or uned_leer.
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?
There is no when-to-use or when-not-to-use guidance and no named alternative. The agent must infer from context that this is for persisting study notes rather than reading or fetching existing materials.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_leerA
Lee el texto extraído de un material (ruta relativa devuelta por uned_buscar/uned_materiales), opcionalmente un rango de páginas. Cita siempre archivo y página al usarlo.
| Name | Required | Description | Default |
|---|---|---|---|
| archivo | Yes | ||
| desde_pagina | No | ||
| hasta_pagina | No | ||
| max_caracteres | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 behavioural burden. It discloses that the tool reads previously extracted text and accepts an optional page range, but says nothing about truncation behaviour despite max_caracteres defaulting to 30000, nor about what happens when the requested range exceeds the material. Read-only safety is only implied by 'Lee'.
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 compact sentences, front-loaded with the action and the input contract, with the citation instruction appended as a single clause. No filler or repetition; slightly terse given the amount of undocumented surface it is the sole source for.
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?
An output schema exists, so return-shape explanation is not required, and the page-range plus input-provenance statements are useful. However, with no annotations and 0% schema coverage, the unexplained max_caracteres parameter leaves a real gap for a tool an agent will call with variable-length results.
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%, so the description must compensate for all four parameters. It explains 'archivo' (relative path from uned_buscar/uned_materiales) and the page range ('opcionalmente un rango de páginas'), covering three of four, but leaves max_caracteres entirely undefined — its truncation semantics are absent from both description and 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?
States a specific verb+resource ('Lee el texto extraído de un material') and immediately anchors it among siblings by naming the source of its input ('ruta relativa devuelta por uned_buscar/uned_materiales'). An agent can tell this apart from the search/listing tools without opening any schema.
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?
Gives clear context for invocation: the 'archivo' argument must come from uned_buscar/uned_materiales, and usage is optionally narrowed by page range. It also prescribes a downstream behaviour ('Cita siempre archivo y página'). No explicit when-not-use or exclusion is stated, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_loginA
Abre un navegador para que hagas login vía SSO de la UNED y guarda el token.
Ejecútalo una vez (o cuando caduque el token). Tu contraseña nunca pasa por este código.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the browser side effect, that a token is persisted, and that the user's password never passes through the code (a meaningful security guarantee). It omits token lifetime details and behavior if a session already exists, so not a perfect 5.
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 short sentences, front-loaded with the action and followed by the trigger condition and the security reassurance. No filler.
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 parameterless login tool with an output schema, the description covers purpose, invocation timing, and key side effects adequately. Only minor gaps remain around token persistence details, which the output schema likely covers.
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 takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify 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 states a specific verb and resource: it opens a browser to perform SSO login and saves the token. This is unambiguous and clearly distinct from the sibling uned_logout and the other read/write UNED 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?
It gives explicit when-to-use guidance: run it once, or again when the token expires. It does not name alternative tools or state when-not to run it, but for a login entrypoint the trigger condition is fully covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_logoutA
Borra el token y la sesión guardados en este ordenador.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the token and session are destroyed and that they are local to this machine, but says nothing about whether a server-side session is invalidated, whether the user must be logged in first, or whether the action is reversible.
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 front-loaded sentence with no filler; every element (what is deleted, and where it lives) 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?
For a zero-parameter tool with an output schema, the description covers the essential action and its local scope. The only missing piece is the relationship to uned_login and any post-logout state, which keeps it short of complete.
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 takes zero parameters, so the baseline of 4 applies; the description cannot add parameter meaning and none is needed. Schema coverage is 100%.
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?
States a specific verb (borra) and specific resources (el token y la sesión) with a scope qualifier (guardados en este ordenador). It is unambiguous about what it does, though it never names its natural counterpart uned_login to sharpen the distinction.
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 when-to-use or when-not-to-use guidance and no alternative named (e.g., 'usa uned_login para volver a iniciar sesión'). Usage is only implied by the self-evident semantics of logout.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_materialesA
Lista los materiales descargados de una asignatura con nº de páginas y la ruta de su texto extraído.
| Name | Required | Description | Default |
|---|---|---|---|
| asignatura | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose that materials are 'descargados' (previously downloaded) and that results include page counts and an extracted-text path, implying a read-only listing. However, it does not state side effects, permissions, or whether it triggers downloads.
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 front-loaded sentence with no filler; the resource and the returned fields are stated efficiently.
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?
An output schema exists, so return values need not be explained, and the description still names the key fields. For a simple single-parameter query tool the definition is nearly sufficient, missing only parameter format and usage alternatives.
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%, so the description must compensate. It does identify that the subject (asignatura) scopes the query, but gives no format guidance (course code vs. name, casing) for a string parameter that has no schema description.
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?
States a specific verb (listar) and resource (materiales descargados de una asignatura), plus hints at returned fields (nº de páginas, ruta del texto extraído). It does not differentiate itself from nearby siblings like uned_curso_contenido or uned_leer, but the purpose is unambiguous.
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?
Usage is only implied: an agent can infer it is used to enumerate materials for a given subject. There is no explicit when-to-use vs. when-not, and no mention of alternatives such as uned_curso_contenido or uned_leer for accessing content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_notasC
Calificaciones publicadas, curso por curso.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Publicadas' is the only real disclosure – it implies unpublished grades are excluded – but nothing is said about authentication needs, scope, ordering, or whether this is a read operation. For a tool with zero annotations this is thin.
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?
Five words with no filler, and the key qualifier ('publicadas') is front-loaded. It loses a point for being a bare noun phrase rather than a sentence, which leaves the action itself unstated.
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?
The tool takes no arguments and has an output schema, so the description needn't explain return values. What remains missing is the minimal framing an agent needs – that this retrieves the user's published grades and how it relates to the sibling progress/assignment tools – leaving it merely 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?
The schema defines zero parameters, so the baseline of 4 applies. There is nothing parameter-wise for the description to clarify or compensate for.
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 fragment identifies the resource ('calificaciones publicadas') but supplies no verb, so it never states what the tool does with it – fetch, list, summarize? It is only loosely distinguishable from siblings like uned_progreso or uned_entregas, which also deal with academic results.
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?
There is no when-to-use guidance at all: no indication of prerequisites (login state), no exclusion of the many overlapping siblings, and no hint of when this tool is preferable to uned_progreso or uned_entregas. The 'curso por curso' phrasing hints at a per-course grouping but not at when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_novedadesB
Resumen: próximas entregas + eventos + anuncios nuevos. Ideal para '¿qué tengo pendiente?'.
| Name | Required | Description | Default |
|---|---|---|---|
| dias | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 behavioral burden. It discloses the content categories returned (entregas, eventos, anuncios), but says nothing about the look-ahead window that governs the output, the read-only nature of the operation, or any auth requirement — the temporal behavior is the most important undisclosed trait.
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 short sentences with the content scope front-loaded and the use-case trigger second; no filler. It is terse enough that it sacrifices needed detail, but nothing in it is wasted.
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?
An output schema exists, so return values needn't be explained. However, for an aggregator that overlaps three sibling tools, the absence of any routing guidance and the undocumented "dias" parameter leave meaningful gaps 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 "dias" has 0% schema description coverage, so the description is the only place its meaning could be explained. "Próximas entregas" hints at a forward-looking window but never states that "dias" controls the number of days ahead, nor mentions the default of 7.
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 states a specific resource agregado: "próximas entregas + eventos + anuncios nuevos", which tells an agent exactly what content the tool returns. It implies aggregation via "Resumen", distinguishing it implicitly from the single-purpose siblings (uned_entregas, uned_eventos, uned_anuncios), though it never names them or confirms it supersedes them.
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?
"Ideal para '¿qué tengo pendiente?'" gives a concrete trigger scenario, which is better than nothing. But it offers no exclusion or alternative guidance — an agent can't tell from the description whether to call this or the three sibling tools individually, nor whether it requires an authenticated session first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_planB
Genera un plan de estudio semanal repartiendo tus horas según créditos, temario pendiente y cercanía de entregas. Se guarda en ~/UNED/plan-semanal.md.
| Name | Required | Description | Default |
|---|---|---|---|
| semanas | No | ||
| horas_semana | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full burden, and it does disclose one important side effect: the plan is written to ~/UNED/plan-semanal.md. However it omits whether an existing file is overwritten, whether login is required, and any rate or cost behavior, so the disclosure is partial.
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 short sentences, front-loaded with the action and followed by the persistence detail. Nothing is redundant and nothing needs trimming.
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?
An output schema exists, so return values need no explanation, and the destination file is given. Still missing for a generation tool with two undocumented numeric inputs is any note on overwrite semantics, authentication expectations, or how weeks interact with the hourly budget.
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% for both parameters, so the description must compensate and largely does not: 'repartiendo tus horas' hints at horas_semana but never explains semanas, the default values (4 / 10), or whether hours are a weekly total. An agent must guess the units and effect of each 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?
States a specific verb and resource ('Genera un plan de estudio semanal') plus the inputs it weighs: credits, pending syllabus and deadline proximity. No sibling offers plan generation, so no differentiation is needed, but it stops short of the 5-level by not clarifying scope such as which courses are included.
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?
There is no statement of when to reach for this tool versus the many uned_* siblings (e.g., uned_entregas, uned_progreso), nor any prerequisite such as being logged in. Usage is only inferable from the purpose sentence, which is the definition of 'no guidance'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_progresoB
Estado de estudio por tema (pendiente/leyendo/visto/repasado/dominado) de una o todas las asignaturas.
| Name | Required | Description | Default |
|---|---|---|---|
| asignatura | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 behavioral burden, yet it never states that this is a read-only query, whether authentication is required (uned_login/uned_logout exist as siblings), or what happens when no asignatura is given. It adds no behavioral context beyond the topic of the data.
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 front-loaded sentence with no filler; the scope statement ('una o todas') comes after the resource definition. It is appropriately sized for the tool's simplicity.
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?
An output schema exists, so return-value explanation is not needed, and the enum of states plus the all-or-one scope covers the essentials. However, with no annotations and a login sibling in the toolset, silence on read-only behavior and auth is a real gap for an agent deciding whether it can call this safely.
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%, but the description compensates by explaining 'de una o todas las asignaturas', which tells the agent that omitting the asignatura parameter returns all subjects. That is meaningful semantics the bare string/default schema does not convey.
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?
Names the resource (study status per topic) and enumerates the five possible states (pendiente/leyendo/visto/repasado/dominado), and scopes it to one or all subjects. It does not explicitly name the sibling uned_progreso_marcar or contrast reading versus writing progress, so sibling differentiation is only implicit from the noun-phrase framing.
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?
There is no explicit statement of when to call this tool versus uned_progreso_marcar, nor any prerequisites or exclusions. Usage must be inferred from the name and the word 'Estado', which is weak given a near-identical sibling exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_progreso_marcarB
Actualiza el estado de un tema: pendiente, leyendo, visto, repasado o dominado. tema: nombre o número (p. ej. '3' o 'Tema 3'). nota: comentario opcional (dudas, puntuación de test…).
| Name | Required | Description | Default |
|---|---|---|---|
| nota | No | ||
| tema | Yes | ||
| estado | Yes | ||
| asignatura | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the allowed estado values (pendiente, leyendo, visto, repasado, dominado), which the schema lacks, but it says nothing about permissions, whether the update is reversible, or what happens to a previously set state. Genuine but partial behavioral disclosure.
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 tight sentences: purpose first, then per-parameter hints. No filler. Slightly terse rather than padded, which is the right trade-off here.
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?
An output schema exists, so return values need not be described, and the estado enumeration is helpful. However, the missing semantics for asignatura and the absence of any usage/routing guidance leave real gaps for a 4-parameter mutation tool with no annotations.
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%, so the description must compensate. It explains tema (name or number, with an example) and nota (optional comment, with examples), and lists estado's possible values, but the required asignatura parameter is left entirely unexplained. Partial compensation only.
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?
Estates a specific verb (Actualiza) plus resource (estado de un tema) and enumerates the valid states, so an agent immediately understands the operation. It is distinguishable from the sibling uned_progreso (which reads progress), though it does not name that sibling explicitly.
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 says what the tool does but offers no when-to-use / when-not-to-use guidance and does not name alternatives such as uned_progreso. Usage is only implied by the verb, and no prerequisites (e.g. login) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uned_sincronizarA
Descarga/actualiza materiales, guía docente, plazos y anuncios en la carpeta de estudio (~/UNED).
Extrae el texto de PDFs/DOCX/PPTX, lo indexa para búsqueda, regenera fichas, índice y calendario .ics y devuelve un informe de cambios (materiales nuevos, plazos movidos, anuncios nuevos). asignatura: nombre parcial o id (vacío = todas). forzar: re-descarga todo.
| Name | Required | Description | Default |
|---|---|---|---|
| forzar | No | ||
| asignatura | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it does disclose the significant side effects well: it writes into ~/UNED, extracts text from files, indexes for search, regenerates fichas/index/calendar, and returns a change report. It still omits auth requirements and whether the operation is reversible or how expensive it is, but the behavioral profile is substantially conveyed.
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?
Front-loads the high-level action, then lists the pipeline steps, then tucks the parameter semantics at the end. Dense but no filler; the trailing parameter notes are slightly list-like but each 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?
An output schema exists, so the return format need not be fully described, and the description still summarizes the change report. For a complex, side-effecting sync orchestration with no annotations, coverage is solid, with auth prerequisites being the main missing piece.
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 there are no enums, so the description must compensate — and it does: asignatura is explained as partial name or id (empty = all), and forzar as re-download everything. Both parameters gain meaning unavailable in the bare schema, though the forzar explanation is terse.
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?
Names a specific verb+resource and enumerates the full scope: downloads/updates materials, teaching guide, deadlines and announcements, then extracts, indexes, regenerates and reports. An agent can distinguish this sync/orchestration tool from read-oriented siblings like uned_materiales, uned_anuncios or uned_eventos without opening any schema.
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?
Usage is implied by the sync semantics and the note that asignatura empty means 'all', which is useful scoping guidance. But it never states when to prefer this over alternatives such as uned_materiales or uned_anuncios, nor any prerequisites (e.g. needing login first), so the agent must infer the routing itself.
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.
21 tool updates
v0.1.0- First observed
uned_anuncios - First observed
uned_buscar - First observed
uned_calendario_ics - First observed
uned_clases - First observed
uned_curso_contenido - First observed
uned_cursos - First observed
uned_entregas - First observed
uned_eventos - First observed
uned_ficha - First observed
uned_foros - First observed
uned_guardar_apunte - First observed
uned_leer - First observed
uned_login - First observed
uned_logout - First observed
uned_materiales - First observed
uned_notas - First observed
uned_novedades - First observed
uned_plan - First observed
uned_progreso - First observed
uned_progreso_marcar - First observed
uned_sincronizar
TDQS
Scored across 21 tools
La mayoría de herramientas tiene una acción/recurso claro, pero uned_sincronizar solapa con varias herramientas de descarga/regeneración y uned_ficha agrega datos que también ofrecen uned_curso_contenido, uned_materiales o uned_progreso. Aun así, las descripciones permiten distinguir la mayoría de usos.
Todas usan prefijo uned_ y snake_case en español, lo cual es consistente. Sin embargo, mezclan nombres de recurso (uned_cursos, uned_eventos) con verbos (uned_buscar, uned_leer, uned_sincronizar) y un híbrido (uned_progreso_marcar), sin un patrón verbo_sustantivo uniforme.
21 herramientas es un número alto para un asistente personal de campus; aunque el dominio es amplio, entra en la franja de 'pesado' (16-25). Cada herramienta parece cubrir una operación, pero algunas podrían consolidarse o ser más específicas.
La superficie cubre login, sincronización, cursos, materiales, búsqueda/lectura, progreso, planificación, calendario, entregas, eventos, anuncios, foros, notas y resumen. Faltan operaciones menores como editar/borrar apuntes o gestionar/confirmar entregas, pero los flujos principales están cubiertos.
Maintenance
Related MCP Connectors
Academic literature search, retrieval, and private library management on top of OpenAlex.
Governed memory and workspace for any AI: tasks, calendar, mail and pages, with per-action consent.
Your saved videos, articles and notes as one knowledge base for Claude, ChatGPT and any MCP client.
Lets Claude, ChatGPT, and Muse read and update your beckett tasks, notes, calendar, and lists.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to read your Moodle courses, list materials, quizzes, and search content to plan exam preparation through natural language.1-
- AlicenseAqualityAmaintenanceIntegrates AI assistants with the Universidad Siglo 21 Canvas LMS, enabling consultation of courses, grades, assignments, schedules, readings, and PDF content, plus interactive exam simulations and academic status analysis.218 npm2MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to query the UEx virtual campus (CVUEx/AVUEx) in natural language, including deadlines, grades, announcements, forums, and course materials, using the user's own account with read-only access.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to browse your own university courses by downloading files, slides, announcements, deadlines, grades and lecture transcripts to your machine, then answering questions and searching across them through MCP tools. It logs in with your own account and refreshes only what changed.MIT