UTN-MCP
Allows interacting with a Moodle-based UTN virtual classroom (videojuegos campus), providing tools to list courses, browse modules, forums, discussions, and assignments, read course files, check submission status and grades, and perform write actions such as posting/editing/deleting forum posts, submitting assignments, answering choices, sending private messages, and adding calendar events.
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., "@UTN-MCP ¿Qué tareas tengo pendientes y qué notas me pusieron?"
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.
UTN-MCP · Tecnicatura en Desarrollo y Producción de Videojuegos
Servidor MCP (Model Context Protocol) que deja a un agente de IA —Claude, ChatGPT, Cursor, o el bot de Discord de este repo— consultar el aula virtual de la Tecnicatura en Desarrollo y Producción de Videojuegos de la UTN (vj.sied.utn.edu.ar): materias, foros, tareas con su nota y archivos. Las tools que escriben (publicar en foros, entregar tareas, mandar mensajes) también están disponibles en el MCP.
Es un proyecto personal, no oficial y no afiliado a la UTN. Úsalo bajo tu responsabilidad y con tu propia cuenta.
Origen: este repo parte de
utn-mcp, de Joaquín Peñalva (licencia ISC), que da soporte al aula de FRBA, FRT y FRRE. Acá se agregó el campus de videojuegos, su login por navegador, el bot de Discord y esta documentación.
Qué hace
Lista tus materias del cuatrimestre actual y anteriores (
ultimoAccesote ayuda a priorizar).Entra a un curso, un módulo, un foro o una discusión, y muestra lo que hay adentro.
Muestra cada tarea con su estado de entrega, su vencimiento y la devolución del docente con la nota.
Lee archivos del aula: PDF (también escaneados), Word, PowerPoint, Excel, imágenes y texto.
Puede escribir en el aula: publicar y editar en foros, entregar tareas, responder elecciones, mandar mensajes y agendar en el calendario.
Qué no hace
No lee videos, archivos
.doc,.pptni comprimidos. En esos casos devuelve el link para que lo bajes.No tiene memoria propia: la conversación la guarda el cliente (o el bot, en su memoria de RAM).
No funciona desde un servidor remoto para otros alumnos todavía (ver Limitaciones).
Related MCP server: Canvas MCP
Tools
Tool | Tipo | Qué hace |
| lectura | Datos de tu usuario en el aula virtual. |
| lectura | Lista tus cursos. Es el punto de partida. |
| lectura | Entra a un curso, módulo, foro, discusión o tarea. Cada respuesta trae las direcciones de lo que hay adentro y del nivel de arriba. |
| lectura | Lee un archivo del aula, por partes cuando es largo. |
| escritura | Abre un hilo en un foro o responde en una discusión. |
| escritura | Edita una publicación tuya. |
| escritura | Borra una publicación tuya. |
| escritura | Entrega una tarea: archivos de tu computadora, texto en línea o ambos. |
| escritura | Solo en modo HTTP: un link para subir los archivos de una entrega desde el navegador. |
| escritura | Responde una elección o te anota en un grupo. |
| escritura | Manda un mensaje privado a un docente o compañero. |
| escritura | Agrega un evento a tu calendario del aula. |
Las tools de escritura tienen en su descripción que el agente tiene que mostrarte qué va a hacer y esperar tu confirmación. Esa confirmación la pide el modelo; el MCP no la impone por sí solo. El bot de Discord, en cambio, hoy expone solo las tools de lectura (ver Bot de Discord).
Requisitos
Node.js 22.13 o superior.
Chrome o Edge instalado en la computadora. El login del campus de videojuegos se hace en una ventana de navegador.
Probado en Windows. En macOS y Linux debería funcionar, pero no lo probamos.
Instalación
git clone <url-de-este-repo>
cd utn-mcp
npm install
npm run buildIniciar sesión
Definí la regional y corré el login (una vez por sesión del campus):
# Windows PowerShell
$env:UTN_REGIONAL = "vj"; npm run login
# Git Bash, macOS, Linux
UTN_REGIONAL=vj npm run loginSe abre una ventana de Chrome o Edge con la página del campus. Entrá con tu email, Google o LinkedIn como lo harías normalmente. Cuando el MCP detecta la sesión, cierra la ventana y guarda lo necesario. La contraseña nunca pasa por el MCP.
Si preferís no escribir la variable cada vez, creá un archivo .env en la raíz del repo con esta línea:
UTN_REGIONAL=vjConectarlo a un cliente MCP
Usá la ruta absoluta a build/index.js de tu copia del repo.
Claude Desktop, Cursor o cualquier cliente con mcpServers:
{
"mcpServers": {
"utn-vj": {
"command": "node",
"args": ["C:/ruta/a/utn-mcp/build/index.js"],
"env": { "UTN_REGIONAL": "vj" }
}
}
}Claude Code:
claude mcp add utn-vj --env UTN_REGIONAL=vj -- node "C:/ruta/a/utn-mcp/build/index.js"Después de agregarlo, reiniciá el cliente y preguntá, por ejemplo: "¿Qué materias tengo este cuatrimestre?"
Probarlo sin cliente
El MCP Inspector te deja llamar cada tool a mano:
UTN_REGIONAL=vj npx @modelcontextprotocol/inspector node build/index.jsBot de Discord (UTNBot)
En bot/ hay un bot de Discord que usa este MCP y un modelo de lenguaje (endpoint compatible con OpenAI). Responde mensajes directos y menciones con los datos del aula. Corre en tu computadora, con tu sesión. Configuración paso a paso en bot/README.md.
Dos cosas que conviene saber antes de usarlo:
Lo que pregunta el bot viaja al proveedor del modelo. Gemini y Groq reciben tu pregunta y lo que devuelven las tools (materias, notas, texto de las tareas). Revisá sus políticas antes de usarlo con datos que no quieras compartir.
Todo el que le escriba al bot ve datos de tu cuenta. Usalo solo en un servidor de Discord propio.
Limitaciones
Login del campus de videojuegos: necesita Chrome o Edge y una ventana visible. Cuando la sesión del campus vence, hay que volver a correr
npm run login.Login con email y contraseña directamente (sin navegador): el código existe, pero no lo verificamos de punta a punta en este campus. El login por navegador es el que funciona.
Modo HTTP (para que otros usen el servidor a distancia): el código viene del repo original y no funciona para este campus en remoto, porque el login necesita un navegador en la computadora del alumno.
Modelo gratuito: tiene cuota diaria. Cuando se agota, el bot contesta con error hasta el día siguiente, o usa el respaldo si lo configuraste.
Dónde se guardan tus datos
Todo queda en tu computadora:
Sesión del aula:
%APPDATA%\utn-mcp\session.json(Windows) o~/.config/utn-mcp/session.json(Linux y macOS). Tiene el token de Moodle y las cookies de sesión.Perfil del navegador (login de videojuegos):
%APPDATA%\utn-mcp\browser-profileo~/.config/utn-mcp/browser-profile. Tiene la sesión del campus. Borrar esa carpeta cierra la sesión.Claves del bot: en
bot/.env, que está en.gitignore.
No se guarda tu contraseña del campus de videojuegos. En otros campus, npm run login pide la contraseña y la guarda en el gestor de credenciales del sistema.
Desarrollo
npm install
npm run build # compila a build/
npx tsc --noEmit # chequeo de tipos (no hay tests automatizados)
npm run dev # servidor por STDIO desde src/, con tsxPara trabajar con el bot: cd bot, npm install, npm run dev (ver bot/README.md).
Para otra regional, la tabla de campus está en src/aula-virtual/client/constants.ts. Cada regional declara su tipo de SSO (keycloak-form, moodle-form u oidc-api).
Aviso
Este proyecto no está afiliado ni avalado por la UTN. Es un proyecto personal de un alumno de la Tecnicatura, con código abierto bajo la licencia ISC.
Available Tools
11 toolsaula_assign_submitADestructive
Entrega una tarea (assign) del aula virtual: sube archivos, escribe el texto en línea o las dos cosas, según lo que acepte la tarea. Antes, abrila con aula_open: entrega dice qué acepta (acepta, con tipos, cantidad y tamaño), si puedeEditar y lo que ya está subido.
Los archivos nuevos se pasan en archivos con su ruta absoluta en la compu del usuario. archivos es la lista final y reemplaza lo anterior: para sumar uno sin perder los otros, incluí la url de cada archivo que ya está en la entrega. Si no pasás archivos, quedan los que estaban; lo mismo con texto.
Si la tarea no usa borradores, guardar ya es entregar. Si los usa (requiereConfirmarEnvio), la tool además confirma el envío, salvo con enviar: false; una vez enviada, en general no se puede cambiar. Con declaracion, el usuario tiene que aceptarla (aceptoDeclaracion). Devuelve cómo quedó la entrega.
Antes de llamarla, mostrale al usuario exactamente lo que se va a hacer y esperá que confirme. Incluí la tarea, los nombres de los archivos y si se confirma el envío.
Inputs: direccion (required), texto, enviar, archivos, +1 more.
aula_calendar_add_eventA
Agrega un evento personal al calendario del aula virtual, que solo ve el usuario: por ejemplo un recordatorio de un parcial o una entrega. El aula avisa según la configuración de notificaciones del usuario. La fecha va con zona horaria; en Argentina es -03:00.
Inputs: inicio (required), nombre (required), descripcion, duracionMinutos.
aula_choice_answerADestructiveIdempotent
Responde una elección (choice: encuestas rápidas como "¿venís al parcial?") o una selección de grupos (choicegroup: anotarse en un grupo o comisión). Deja elegidas exactamente las opciones pasadas y reemplaza la respuesta anterior; con una lista vacía la borra.
Las opciones salen de eleccion al abrir el módulo con aula_open. Muchas no dejan cambiar la respuesta una vez dada (puedeCambiar: false), y las opciones deshabilitada están completas. Devuelve cómo quedó la elección.
Antes de llamarla, mostrale al usuario exactamente lo que se va a hacer y esperá que confirme.
Inputs: opciones (required), direccion (required).
aula_forum_delete_postADestructiveIdempotent
Borra una publicación propia de un foro. No se puede deshacer. Solo se puede si tiene "borrar" en acciones. Si es la primera publicación de la discusión, se borra la discusión entera.
Antes de llamarla, mostrale al usuario exactamente lo que se va a hacer y esperá que confirme.
Inputs: id (required), direccion (required).
aula_forum_edit_postADestructiveIdempotent
Edita una publicación propia de un foro y reemplaza el mensaje completo. Solo se puede si la publicación tiene "editar" en acciones: Moodle deja editar por un rato después de publicar.
Antes de llamarla, mostrale al usuario exactamente lo que se va a hacer y esperá que confirme.
Inputs: id (required), mensaje (required), direccion (required), asunto.
aula_forum_postA
Publica en un foro del aula virtual. Con la direccion de un foro abre un hilo nuevo (hace falta asunto); con la de una discusión responde en ella, a la publicación respuestaA o, si no se indica, a la primera.
Lo que se publica lo ven docentes y compañeros, y a muchos les llega por mail. Antes de abrir un hilo, mirá puedeAbrirHilo del foro; antes de responder, que la publicación tenga "responder" en acciones.
Antes de llamarla, mostrale al usuario exactamente lo que se va a hacer y esperá que confirme.
Inputs: mensaje (required), direccion (required), asunto, respuestaA.
aula_get_site_infoBRead-only
Datos del usuario logueado en el aula virtual de la UTN FRBA y del sitio Moodle.
Inputs: no named parameters.
aula_list_coursesARead-only
Lista los cursos (materias) en los que está inscripto el usuario. Es el punto de entrada: cada curso viene con su direccion, que se le pasa a aula_open para entrar.
Inputs: no named parameters.
aula_openARead-only
Entra a una dirección del aula virtual y devuelve lo que hay ahí: un curso con sus secciones y módulos, un módulo con sus archivos y fechas, un foro con el índice de sus discusiones, o una discusión con sus mensajes completos.
Según el tipo de módulo trae además: en una tarea (assign), entrega con el estado, el vencimiento, lo que se subió y la devolución con la nota; en una elección (choice) o selección de grupos (choicegroup), eleccion con las opciones y sus ids; en un foro, puedeAbrirHilo; en una discusión, el id, el autorId y las acciones permitidas de cada publicación. Es lo que piden las tools que escriben en el aula.
No hace falta armar la dirección: cada respuesta trae las direcciones de lo que hay adentro (direccion) y la de un nivel más arriba (padre), así que se navega pasando de vuelta una de esas. Para empezar, usar aula_list_courses o la dirección "/".
Buscar algo que puede estar en cualquier parte (una fecha de parcial, un aviso) se hace entrando al curso y abriendo lo que corresponda: el índice de un foro muestra los asuntos sin volcar los mensajes enteros, y archivos como un cronograma se leen con aula_read_file.
Los archivos vienen con una url, que sirve para leerlos con aula_read_file y también para dársela al usuario si quiere bajarlo: se abre con su sesión del aula.
Inputs: direccion (required), pagina.
aula_read_fileARead-only
Lee un archivo del aula virtual: PDF, Word (docx), PowerPoint (pptx), Excel (xlsx), imágenes y texto. Los PDF escaneados se devuelven como imagen de cada página.
Devuelve el archivo por partes (páginas, diapositivas o fragmentos), tantas como entren en una respuesta. Si quedan más, siguiente dice desde cuál pedir; también se puede saltar directo a una parte con desde.
Formatos que no sabe leer (.doc, .ppt viejos, .zip, .rar, videos): devuelve un error con la URL para que el usuario lo baje.
Inputs: url (required), desde.
aula_send_messageA
Manda un mensaje privado por la mensajería del aula virtual a otro usuario, docente o compañero. El usuarioId sale del autorId de un foro o una discusión abiertos con aula_open: no lo inventes ni lo deduzcas del nombre. La respuesta trae el nombre del destinatario.
Antes de llamarla, mostrale al usuario exactamente lo que se va a hacer y esperá que confirme. Incluí a quién va dirigido.
Inputs: mensaje (required), usuarioId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Each tool targets a fairly distinct action (info, list, navigate, read file, forum post/edit/delete, answer choice, message, submit, calendar), and the descriptions explicitly explain boundaries (e.g. aula_open returns URLs that aula_read_file consumes). The main soft spot is aula_open, a broad multi-resource navigation tool that slightly overlaps with aula_list_courses and partially with aula_read_file, though the docs clarify the intended flow.
All names share the aula_ prefix and snake_case, which is readable. However the convention splits into two patterns: verb_noun (aula_get_site_info, aula_list_courses, aula_read_file, aula_send_message) and resource_action (aula_forum_post, aula_choice_answer, aula_assign_submit, aula_calendar_add_event), so there is no single predictable scheme.
11 tools is well within the healthy range and each one maps to a concrete student workflow (browse, read, forum write, assignment submit, choices, messaging, calendar). No filler or redundant tools are present.
Core read/write workflows are covered, including full forum CRUD, file reading, and assignment submission. But several operations are create-only: messaging has send but no inbox/read, and the calendar only supports adding events with no list/edit/delete, which will create dead ends for common requests.
Maintenance
Related MCP Connectors
Read-only access to Epivo's live course catalogue for AI agents.
Create, edit and publish Educaplay educational games and quizzes from any AI assistant.
Run the Geduk LMS from an AI assistant: courses, sessions, enrolments, users and catalogue.
Run a Uniplay Space from your AI assistant: courses, games, members, groups and analytics.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Canvas LMS through 25 comprehensive tools. Supports course management, assignments, grades, messaging, calendar events, and file access through natural language.3,290 npm14MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Canvas LMS and Gradescope, allowing users to query courses, assignments, modules, calendar events, and find relevant resources using natural language.13 npmISC
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to interact with a student's Canvas LMS account, supporting course viewing, grade checks, assignment submissions, announcements, discussions, calendar events, inbox messages, and more via specialized tools.1-
- AlicenseNot gradedqualityBmaintenanceConnects AI agents to Argentine universities' Moodle virtual classrooms and SIU Guaraní self-service portals, enabling them to read course materials, announcements, grades, and enrollment data. With user confirmation it can also post to forums, submit assignments, answer choices, and send private messages.311 npm1MIT