tuaulavirtual-unam-mcp
Allows interaction with the Moodle virtual classroom (UNAM), providing tools to list courses, retrieve course contents and assignments, download files from the platform, fetch web pages, and upload or submit assignments.
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., "@tuaulavirtual-unam-mcp@tuaulavirtual-unam-mcp what assignments are due this week?"
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.
tuaulavirtual-unam-mcp
Servidor MCP para el aula virtual Moodle de la UNAM
(tuaulavirtual.educatic.unam.mx). Permite que Claude Code, Claude Desktop, Cursor
o cualquier cliente MCP consulte tus cursos, tareas, fechas de entrega, descargue
materiales y, si se lo pides, entregue tareas por ti.
Usa la API REST oficial de Moodle (servicio moodle_mobile_app) y, como respaldo,
una sesión web para leer páginas que la API no cubre.
Requisitos
uv instalado. En macOS:
brew install uv. En cualquier sistema:curl -LsSf https://astral.sh/uv/install.sh | sh.Tu usuario y contraseña del aula virtual.
Related MCP server: Moodle MCP Server
Instalación en 2 pasos
1. Guarda tus credenciales (se piden de forma interactiva y quedan en
~/.config/tuaulavirtual-unam-mcp/.env con permisos solo para tu usuario):
uvx --from git+https://github.com/AlanMagno1/tuaulavirtual-unam-mcp tuaulavirtual-unam-mcp setup2. Registra el servidor en Claude Code:
claude mcp add tuaulavirtual-unam -s user -- uvx --from git+https://github.com/AlanMagno1/tuaulavirtual-unam-mcp tuaulavirtual-unam-mcpListo. Abre Claude Code y pídele, por ejemplo:
¿Qué tareas tengo pendientes?
Revisa https://tuaulavirtual.educatic.unam.mx/mod/assign/view.php?id=469144 y dime qué piden.
Otros clientes (Claude Desktop, Cursor, etc.)
Agrega esto a la configuración JSON de servidores MCP del cliente:
{
"mcpServers": {
"tuaulavirtual-unam": {
"command": "uvx",
"args": ["--from", "git+https://github.com/AlanMagno1/tuaulavirtual-unam-mcp", "tuaulavirtual-unam-mcp"]
}
}
}Variables de entorno (alternativa al archivo de configuración)
Variable | Descripción |
| URL del Moodle. Default: |
| Usuario del aula virtual |
| Contraseña |
| Carpeta de descargas. Default: |
| Carpeta de configuración. Default: |
Las variables de entorno tienen prioridad sobre el archivo .env. Funciona con
cualquier Moodle que tenga habilitado el servicio móvil, cambiando MOODLE_URL.
Otros Moodle de la UNAM (CUAED, idiomas, etc.)
El mismo servidor sirve para cualquier Moodle con el servicio móvil habilitado. Al
correr setup, escribe la URL del Moodle en la primera pregunta en vez de aceptar
la default. URLs verificadas:
Aula | URL para |
Tu Aula Virtual (default) |
|
Aulas Virtuales CUAED |
|
Ambiente Virtual de Idiomas |
|
Ojo: aulas-virtuales.cuaed.unam.mx (con guion) es solo el portal informativo; el
Moodle de CUAED está en la URL de la tabla. En CUAED el login web está desactivado,
así que la herramienta fetch_page no funciona ahí; las demás sí.
Dos o más aulas a la vez
Cada aula necesita su propia carpeta de configuración y su propio nombre de servidor.
setup avisa si vas a sobrescribir una configuración existente. Ejemplo para agregar
CUAED junto a Tu Aula Virtual:
# 1. Credenciales de CUAED en una carpeta aparte
TUAULAVIRTUAL_MCP_CONFIG_DIR=~/.config/cuaed-mcp \
uvx --from git+https://github.com/AlanMagno1/tuaulavirtual-unam-mcp tuaulavirtual-unam-mcp setup
# 2. Segundo servidor en Claude Code
claude mcp add cuaed-unam -s user -e TUAULAVIRTUAL_MCP_CONFIG_DIR=$HOME/.config/cuaed-mcp -- \
uvx --from git+https://github.com/AlanMagno1/tuaulavirtual-unam-mcp tuaulavirtual-unam-mcpClaude verá las herramientas de ambos servidores con prefijos distintos y elegirá el correcto según el aula o la URL que menciones.
Herramientas
Herramienta | Qué hace |
| Verifica la conexión y devuelve el usuario autenticado. |
| Cursos en los que estás inscrito. |
| Secciones y módulos de un curso, con fechas y archivos. |
| Detalle de una tarea: instrucciones, fechas, adjuntos y estado de tu entrega. Acepta la URL completa |
| Descarga un archivo a |
| Inicia sesión por web y devuelve el texto de cualquier página del aula. |
| Sube un archivo local al área de borradores; devuelve |
| Guarda una entrega (texto en línea y/o archivos) y opcionalmente la envía para calificación. |
Comandos
tuaulavirtual-unam-mcp setup # captura credenciales y prueba la conexión
tuaulavirtual-unam-mcp check # imprime el usuario autenticado
tuaulavirtual-unam-mcp # arranca el servidor MCP por stdio (lo usa el cliente)Seguridad
Tus credenciales nunca salen de tu máquina: solo se envían a la URL del Moodle configurada, para obtener un token del servicio móvil.
El token se guarda en
~/.config/tuaulavirtual-unam-mcp/token.json(permisos 600) y se renueva automáticamente si Moodle lo invalida.submit_assignmententrega tareas en tu nombre. Claude solo debe usarla cuando se lo pidas explícitamente.
Desarrollo
git clone https://github.com/AlanMagno1/tuaulavirtual-unam-mcp
cd tuaulavirtual-unam-mcp
uv sync
uv run tuaulavirtual-unam-mcp checkPara probar cambios locales en Claude Code sin publicar:
claude mcp add tuaulavirtual-unam -s user -- uv --directory /ruta/a/tuaulavirtual-unam-mcp run tuaulavirtual-unam-mcpLicencia
MIT
Available Tools
8 toolsdownload_fileB
Descarga un archivo de Moodle (fileurl devuelto por otras herramientas) al disco y devuelve la ruta local. Usa luego la herramienta Read para leerlo.
| Name | Required | Description | Default |
|---|---|---|---|
| fileurl | Yes | ||
| filename | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No se proveen anotaciones, por lo que la descripción carga con todo el peso. Indica que la herramienta escribe en disco ('al disco') y devuelve la ruta local, lo cual es información útil, pero no revela si sobrescribe archivos existentes, qué convención de nombres usa si no se da filename, si requiere permisos de escritura, o qué ocurre en caso de errores de descarga. Para una herramienta con efectos de escritura en el sistema de archivos, esta transparencia es insuficiente.
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?
La descripción es muy breve y directa: tres cláusulas con información esencial (qué hace, con qué argumento, y qué resultado devuelve). La instrucción de usar Read después está bien ubicada al final. Cada frase aporta valor y no hay relleno, aunque la brevedad sacrifica detalles de comportamiento que otras dimensiones penalizan.
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?
Aunque existe output schema, la descripción no detalla el formato de retorno (la ruta local) más allá de mencionarlo, ni explica la estructura de la respuesta. Con solo 2 parámetros y un output schema, el contexto es simple, pero faltan aspectos esenciales para una herramienta con efectos en disco: política de nombres, sobrescritura, ubicación del archivo descargado y manejo de errores. La descripción deja brechas significativas para un agente que deba invocarla correctamente.
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?
La cobertura del esquema es 0%, así que la descripción debe compensar y no lo hace. Aunque dice que fileurl proviene de otras herramientas, no explica el formato esperado ni que sea una URL de Moodle. El parámetro filename aparece en el esquema sin documentación, y la descripción no aclara para qué sirve (nombre local alternativo). No hay orientación sobre valores válidos o comportamiento si se omite filename.
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?
La descripción indica un verbo específico ('Descarga') y un recurso claro (archivo de Moodle vía fileurl), y además explica el resultado (devuelve la ruta local). Se distingue razonablemente de las herramientas hermanas de lectura (fetch_page, Read) y escritura (upload_file) al especificar que descarga al disco. Sin embargo, no menciona explícitamente cómo se diferencia de fetch_page, que también podría recuperar contenido.
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?
La descripción aclara que se usa para archivos cuyo fileurl fue devuelto por otras herramientas, lo que da contexto sobre cuándo usarla. También sugiere usar luego la herramienta Read para leerlo, lo que orienta sobre el flujo posterior. No obstante, no explica cuándo NO usarla o qué alternativa elegir si el archivo es pequeño y podría obtenerse con fetch_page, y no menciona requisitos previos de autenticación.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_pageA
Inicia sesión por web y devuelve el texto visible de cualquier página del aula virtual (útil para lo que la API no cubre: foros, calificaciones, avisos...).
| Name | Required | Description | Default |
|---|---|---|---|
| url | 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. 'Inicia sesión por web' discloses that the tool authenticates via a web session, and 'devuelve el texto visible' clarifies that it returns rendered visible text, not structured data. It lacks caveats about session state, rate limits, or side effects, preventing a 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?
One sentence that front-loads the action and output, with a parenthetical that efficiently adds use-case context. There is no filler or repetition, and every component contributes to tool selection and invocation.
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 with one required string parameter and an existing output schema, the description covers the core behavior and intended use cases well. It is only slightly incomplete in not mentioning URL format expectations or potential web-login failure modes, but it is sufficient for an agent to call it correctly in most scenarios.
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 input schema provides only a bare string 'url' with 0% description coverage. The description compensates by indicating the URL must target a page in the virtual classroom and gives typical page types (foros, calificaciones, avisos). It does not clarify whether relative or absolute URLs are required, but it meaningfully constrains the 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 names a specific verb and resource ('devuelve el texto visible de cualquier página del aula virtual') and explicitly distinguishes the tool from the API-based siblings by stating it is useful 'para lo que la API no cubre'. This makes its role as a web-scraping fallback clear.
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 strong contextual guidance: use the tool when the API does not cover something, with concrete examples (foros, calificaciones, avisos). However, it does not explicitly name sibling alternatives or state a positive when-not-to-use condition, so a point is held back.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_assignmentA
Detalle de una tarea (mod/assign): descripción, fechas, archivos adjuntos y estado de la entrega del usuario. Acepta el cmid numérico o la URL completa (https://.../mod/assign/view.php?id=NNN).
| Name | Required | Description | Default |
|---|---|---|---|
| cmid_or_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Al no haber anotaciones, la descripción asume toda la carga de divulgación. 'Detalle' sugiere una operación de lectura y los campos enumerados indican lo que recibirá el agente, pero no declara explícitamente que sea no destructiva ni menciona requisitos de permisos o comportamiento ante errores.
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?
Dos oraciones compactas, con la información principal (campos devueltos) al inicio y el formato de entrada a continuación. No hay relleno ni repetición de lo que ya está en el nombre o en el schema.
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?
La herramienta es simple (un parámetro, sin schema de salida ni anotaciones) y la descripción cubre tanto la sintaxis de entrada como el contenido devuelto. Faltan detalles menores sobre condiciones de error y la naturaleza explícitamente de solo lectura, pero son de bajo riesgo para una herramienta de consulta.
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?
Con una cobertura de descripción del schema del 0%, la descripción compensa plenamente al explicar los formatos aceptados: 'Acepta el cmid numérico o la URL completa (https://.../mod/assign/view.php?id=NNN)'. Esto resuelve la ambigüedad de formato del único parámetro.
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?
La descripción identifica claramente el recurso ('tarea (mod/assign)') y enumera el contenido devuelto ('descripción, fechas, archivos adjuntos y estado de la entrega del usuario'), lo que hace evidente la función de la herramienta. No menciona herramientas hermanas ni las diferencia, por lo que no alcanza la puntuación máxima.
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?
Se infiere el contexto de uso: cuándo se necesita el detalle de una tarea mod/assign. Explica cómo identificar la tarea mediante cmid o URL, pero no incluye cuándo no usarla ni alternativas explícitas, por lo que la guía es implícita en lugar de explícita.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_course_contentsA
Devuelve las secciones y módulos (tareas, recursos, foros...) de un curso.
| Name | Required | Description | Default |
|---|---|---|---|
| course_id | 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 burden. It clearly states that the tool returns sections and modules, and the verb 'Devuelve' implies a read-only operation. However, it does not disclose any error behavior, authentication needs, or output format details beyond the general content. This is adequate but not rich for a retrieval 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 a single, focused sentence that starts with the main verb and immediately conveys the tool's purpose. There is no redundant information or fluff, making it efficient 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?
For a simple single-parameter retrieval tool, the description covers the essential purpose and scope. The presence of an output schema means return values do not need to be described in prose. It lacks explicit guidance on when to use it versus siblings, but the core information an agent needs to invoke it correctly is present.
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 does so by linking the tool's scope to 'de un curso', indicating that the course_id parameter identifies the course whose contents are returned. It does not explain where to obtain the course_id or its format, but for a single simple parameter this minimal mapping is acceptable.
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 uses a specific verb ('Devuelve') and a precise resource ('secciones y módulos (tareas, recursos, foros...) de un curso'). This clearly distinguishes it from siblings like list_courses (which lists courses) and get_assignment (which fetches a single assignment). An agent can tell exactly what this tool does.
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 use case: use this tool when you need the sections and modules of a specific course. However, it does not explicitly state when not to use it or mention alternatives such as list_courses for enumerating courses. The usage context is hinted but not directly specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_infoB
Verifica la conexión y devuelve datos del sitio y del usuario autenticado.
| 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 carries the full burden of behavioral disclosure. It indicates a read-like operation by saying it 'verifies connection and returns data', but it does not explicitly state that it is side-effect-free, whether authentication is required, what happens on connection failure, or any rate-limit or session implications. This is minimal transparency for a tool with zero annotation support.
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 filler. It front-loads the primary purpose (connection verification) and then specifies the returned data. Every word contributes meaning, and there is no redundancy with the schema, which is empty.
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 is low-complexity: zero parameters, no nested objects, and no output schema. The description gives a general sense of the return payload ('site data and authenticated user data') but does not enumerate expected fields or explain edge cases. Since there is no output schema, a slightly richer description of what specific data is returned would improve completeness. Still, the description is adequate for an agent to decide to invoke it.
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 there are no parameter semantics to document. The baseline for a parameter-less tool is 4, and the description does not need to compensate for schema gaps. The description's mention of the data returned is enough to orient the agent without any input schema detail.
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 ('Verifica' / 'devuelve') and a concrete resource: site data and authenticated user data. It clearly identifies a distinct purpose from the sibling tools, which all focus on courses, files, or assignments. However, it does not explicitly name a sibling or contrast itself, so it falls just short of a 5.
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 usage: it is appropriate for verifying connectivity and retrieving site/user information. There is no explicit guidance on when to prefer this tool over alternatives, and no exclusions or prerequisites are stated. The context of sibling tools makes the intended use reasonably inferable, but the description itself provides limited routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_coursesA
Lista los cursos en los que está inscrito el usuario.
| 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?
There are no annotations, so the description must carry the transparency burden. The verb 'list' implies a read-only operation and the phrase 'del usuário' conveys the scope, but the description does not explicitly mention authentication, side effects, ordering, or pagination.
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 with no filler. The core action and scope are presented directly and all words contribute meaning.
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 zero parameters, the presence of an output schema, and the low complexity, this description is sufficiently complete. It states what resource is returned and for whom, leaving no critical invocation details missing.
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 and the schema describes nothing, so the baseline for this dimension is 4. There are no parameter semantics for the description to enhance.
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 uses the specific verb 'list' with a clear resource (courses) and adds the scope 'en los que está inscrito el usuario' (courses the user is enrolled in). This distinguishes it from sibling tools like get_course_contents or get_site_info.
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 makes the tool's purpose clear, so when an agent needs the user's enrolled courses the usage is easy to infer. However, it does not explicitly state when to use it over sibling tools, nor does it mention any exclusionary cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_assignmentA
Guarda una entrega en una tarea: texto en línea, archivos (itemid de upload_file) o ambos. Si submit_for_grading=True, además la envía para calificación (acepta la declaración de autoría). Úsala solo cuando el usuario lo pida explícitamente.
| Name | Required | Description | Default |
|---|---|---|---|
| cmid_or_url | Yes | ||
| online_text | No | ||
| files_itemid | No | ||
| submit_for_grading | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Sin anotaciones, la descripción debe cargar con la transparencia. Revela que la herramienta guarda texto/archivos y que con True acepta la declaración de autoría y envía para calificación, pero no menciona si el envío es irreversible ni otras consecuencias. Cubre lo esencial pero deja vacíos sobre efectos secundarios.
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?
Dos frases compactas sin relleno, con la acción principal al inicio y las condiciones y modos a continuación. Es directa y fácil de escanear para el agente.
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?
La definición es útil para una herramienta sin esquema de salida ni anotaciones, pero deja lagunas: no explica cómo identificar la tarea vía cmid_or_url (ni que puede provenir de get_course_contents/get_assignment) y no describe el resultado/confirmación de la operación. Suficiente para un caso simple, incompleta para invocación robusta.
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?
La cobertura del esquema es 0%, por lo que la descripción debe compensar. Explica el significado de online_text, files_itemid (a través de 'itemid de upload_file') y submit_for_grading, pero no documenta el parámetro obligatorio cmid_or_url, que queda sin contexto más allá del nombre.
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?
La descripción usa un verbo específico y recurso claro: 'Guarda una entrega en una tarea' e inmediatamente especifica las modalidades (texto en línea, archivos o ambos) y la condición de envío para calificación. Esto la distingue de hermanas como upload_file, que solo prepara el archivo, al indicar que submit_assignment consume el itemid de upload_file.
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?
Indica explícitamente cuándo usarla: 'Úsala solo cuando el usuario lo pida explícitamente', y aclara cuándo se activa el envío para calificación con submit_for_grading=True. No nombra explícitamente alternativas, pero la referencia a upload_file para obtener el itemid da contexto de flujo.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileA
Sube un archivo local al área de borradores del usuario y devuelve el itemid del borrador, que se usa en submit_assignment(files_itemid=...).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No hay anotaciones, por lo que la descripción asume la carga. Aporta comportamientos clave: el archivo va a borradores y no se envía directamente, y devuelve un itemid para el paso siguiente. No detalla permisos ni manejo de errores, pero lo esencial está cubierto.
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?
Una sola oración directa y bien estructurada: primero la acción, luego el resultado y finalmente la relación con otra herramienta. No hay relleno ni información redundante.
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?
La herramienta es simple: un parámetro, sin output schema. La descripción cubre la entrada, el efecto y la salida con el itemid, además de su integración con submit_assignment. Faltan detalles menores como errores o permisos, pero no bloquean la selección ni invocación correcta.
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?
El schema solo define 'path' como string y la cobertura es 0%. La descripción compensa parcialmente al indicar que es un archivo local, pero no especifica formato de ruta, rutas relativas/absolutas ni extensiones permitidas. Añade significado útil aunque limitado.
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?
La descripción usa un verbo específico ('Sube') y un recurso concreto ('archivo local al área de borradores'), y además aclara el output (itemid) y su uso posterior en submit_assignment. Esto la diferencia claramente de herramientas hermanas como download_file.
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?
Indica que el itemid devuelto se usa en submit_assignment(files_itemid=...), lo que sitúa la herramienta en un flujo concreto. No menciona explícitamente cuándo no usarla ni nombra alternativas como download_file, pero el contexto es suficientemente claro.
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.
8 tool updates
v0.1.0- First observed
download_file - First observed
fetch_page - First observed
get_assignment - First observed
get_course_contents - First observed
get_site_info - First observed
list_courses - First observed
submit_assignment - First observed
upload_file
TDQS
Scored across 8 tools
Cada herramienta tiene un propósito claramente delimitado: listar cursos, obtener contenidos, ver detalle de una tarea, transferir archivos y enviar entregas. Aunque fetch_page podría usarse para ver una tarea, su descripción la limita explícitamente a lo que la API no cubre, evitando solapamientos reales.
Todos los nombres siguen un patrón verb_noun en snake_case (list_courses, get_assignment, upload_file, submit_assignment). Los verbos reflejan claramente la acción y no hay mezcla de estilos ni nombres vagos.
Ocho herramientas es un tamaño adecuado para un cliente de aula virtual centrado en consultar cursos, tareas y gestionar entregas. El conjunto no se siente ni inflado ni demasiado escaso para su propósito.
El flujo principal está bien cubierto: ver cursos y contenidos, consultar tareas, descargar archivos, subir borradores y enviar entregas. La falta de herramientas estructuradas para foros, calificaciones o avisos se mitiga con fetch_page, pero sigue siendo un vacío menor respecto a un acceso totalmente especializado.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect your Moodle to AI assistants: courses, content, grading and reports from the chat.
Manage your Canvas coursework with quick access to courses, assignments, and grades. Track upcomin…
- uNotesOAuthnet.unotes
Search university course materials, your flashcards, quizzes, streak and quota. All tools read-only.
1 Create, edit, translate, and export SCORM eLearning modules from a connected AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Moodle learning management systems through the Moodle REST API. Supports course management, user enrollment, assignments, forums, quizzes, and file operations through natural language.13MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Moodle learning management systems through the REST API. Supports course management, user enrollment, assignment handling, and forum operations through natural language.13MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to interact with Moodle via web services, allowing tasks like listing courses, assignments, events, and downloading files.104MIT
- FlicenseAqualityCmaintenanceEnables AI assistants to query the UTN distance learning Moodle campus, providing tools to list courses, view content, check deadlines, see grades, and more.7-