moodle-utn-mcp
Enables browser-based login to approved UTN Moodle sites and read-only access to the user's profile, course list, and course activities via local Chromium automation.
README
moodle-utn-mcp
Servidor MCP local por stdio para los orígenes aprobados de Moodle UTN https://tup.sied.utn.edu.ar y https://utnsannicolas.quinttos.com.
Ofrece dos modos de acceso:
- Modo navegador: login visible en Quinttos y lectura de lo que Moodle renderiza para el usuario autenticado.
- Modo REST (opcional): token personal en
.envpara listar materias, notas, contenidos y vencimientos sin abrir el navegador en cada consulta.
Alcance y seguridad
- Los únicos destinos permitidos son
https://tup.sied.utn.edu.aryhttps://utnsannicolas.quinttos.com. El navegador bloquea cualquier otro origen. moodle_browser_loginabre Chromium visible en Quinttos. Las credenciales se ingresan solo en ese sitio; ninguna herramienta MCP acepta usuario ni contraseña.- La sesión del navegador vive solo en memoria del proceso. No se guardan cookies, tokens, capturas ni credenciales en disco, logs, stdout ni en el repositorio.
- El token REST se envía únicamente en el cuerpo POST a
/webservice/rest/server.php. Nunca se expone en URLs ni en las respuestas de las herramientas. - Las lecturas son de solo lectura. La única operación que cambia estado local es
moodle_browser_logout(cierra el navegador y descarta la sesión en memoria). - El archivo
.envestá en.gitignore. Nunca subas tu token a Git.
Reiniciar el MCP siempre exige un nuevo login manual en modo navegador. El modo REST reutiliza el token configurado en .env.
Requisitos
- Node.js 20 o superior
- Playwright Chromium:
npx playwright install chromium
Instalación y verificación
npm install
npx playwright install chromium
npm test
npm run smoke
npm run smoke ejecuta la sonda pública sin autenticación e imprime un reporte JSON.
Modo REST (recomendado)
Configurá un .env en la raíz del proyecto (copiá desde .env.example):
MOODLE_REST_ORIGIN=https://tup.sied.utn.edu.ar
MOODLE_REST_TOKEN=tu_token_aqui
También se aceptan los nombres de MCP-TUPAD: MOODLE_URL y MOODLE_TOKEN.
Cómo obtener el token
No abras https://tup.sied.utn.edu.ar/login/token.php en el navegador: es una API, no una página.
En PowerShell, con tu DNI (no el email de Quinttos) y tu contraseña de Moodle:
$body = @{
username = "TU_DNI"
password = "TU_CONTRASENA_MOODLE"
service = "moodle_mobile_app"
}
Invoke-RestMethod -Uri "https://tup.sied.utn.edu.ar/login/token.php" -Method Post -Body $body
La respuesta { "token": "..." } va en .env como MOODLE_REST_TOKEN.
Verificá la conexión:
npm run probar-token
Deberías ver tu listado de materias con sus IDs.
Ejecutar como servidor MCP
npm start
El servidor usa stdio. Configurá tu cliente MCP con:
{
"mcpServers": {
"moodle-utn": {
"command": "node",
"args": ["C:\\ruta\\absoluta\\a\\moodle-utn-mcp\\dist\\index.js"],
"cwd": "C:\\ruta\\absoluta\\a\\moodle-utn-mcp",
"type": "stdio"
}
}
}
Después de cambiar .env, reiniciá el servidor MCP en Cursor u otro cliente.
Herramientas
Públicas
moodle_probe_capabilities
Sin parámetros. Informa identidad pública de Moodle, reachability de /login/index.php y recuerda usar el flujo de login local.
Modo REST (requiere .env)
moodle_rest_status
Sin parámetros. Indica si el modo REST está configurado (sin exponer el token).
moodle_rest_my_courses
Sin parámetros. Lista materias del token con id, name y shortName.
moodle_rest_upcoming_deadlines
Sin parámetros. Eventos del calendario en los próximos 90 días.
moodle_rest_course_content
Parámetro: { "courseId": <número> } (ID devuelto por moodle_rest_my_courses). Secciones y metadatos de recursos. No descarga archivos.
moodle_rest_course_grades
Parámetro: { "courseId": <número> }. Notas y devoluciones visibles del usuario del token.
moodle_rest_course_forums
Parámetro: { "courseId": <número> }. Metadatos de foros y avisos cuando el campus los expone.
Modo navegador
moodle_browser_login
Sin parámetros. Abre el login de Quinttos en Chromium visible.
moodle_browser_status
Sin parámetros. Devuelve not_started, awaiting_login, sso_ready, authenticated o closed.
moodle_read_my_profile
Sin parámetros. Lee campos visibles del perfil Moodle del usuario autenticado.
moodle_read_my_courses
Sin parámetros. Lista materias visibles con nombre y URL exacta /course/view.php.
moodle_read_course_activities
Parámetro: { "course": "<título exacto o URL exacta>" }. Actividades visibles con título, tipo, URL, estado de entrega y fecha límite si Moodle la muestra.
moodle_browser_logout
Sin parámetros. Cierra sesión en Moodle si es posible, cierra el navegador y descarta la sesión local.
Flujo típico con REST
moodle_rest_my_courses→ obtener elidde la materia (ej. Base de Datos 2 =45).moodle_rest_course_gradescon esecourseId→ ver notas.moodle_rest_course_content→ ver unidades y recursos.moodle_rest_upcoming_deadlines→ ver vencimientos.
Dependencias
@modelcontextprotocol/sdk1.29.0 — SDK oficial MCP para TypeScript.playwright1.58.2 — automatización del navegador Chromium.zod3.24.2 — validación de esquemas del SDK.typescript5.8.3 y@types/node22.15.3 — compilación.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。