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 Server sincroniza 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: canvas-session-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.
Inputs: dias. Returns: result
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.
Inputs: consulta (required), limite, asignatura. Returns: result
uned_calendario_icsA
Exporta entregas, eventos y clases/jornadas a ~/UNED/calendario.ics (importable en Google/Outlook).
Inputs: no named parameters. Returns: result
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.
Inputs: asignatura, incluir_pasadas. Returns: result
uned_curso_contenidoB
Secciones y recursos de un curso concreto (usa el id de uned_cursos).
Inputs: courseid (required). Returns: result
uned_cursosB
Lista tus cursos matriculados (nombre, id y progreso si existe).
Inputs: no named parameters. Returns: result
uned_entregasA
Tareas con fecha de entrega en los próximos N días, de todos tus cursos.
Inputs: dias. Returns: result
uned_eventosB
Eventos del calendario (entregas, exámenes, tutorías…) de los próximos N días.
Inputs: dias. Returns: result
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.
Inputs: asignatura (required). Returns: result
uned_forosB
Debates recientes de todos los foros de una asignatura (avisos, dudas por tema, estudiantes).
Inputs: asignatura (required), dias. Returns: result
uned_guardar_apunteB
Guarda un resumen, esquema, test o apunte en Markdown en /apuntes/ y lo enlaza en la ficha.
Inputs: nombre (required), contenido (required), asignatura (required). Returns: result
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.
Inputs: archivo (required), desde_pagina, hasta_pagina, max_caracteres. Returns: result
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.
Inputs: no named parameters. Returns: result
uned_logoutA
Borra el token y la sesión guardados en este ordenador.
Inputs: no named parameters. Returns: result
uned_materialesA
Lista los materiales descargados de una asignatura con nº de páginas y la ruta de su texto extraído.
Inputs: asignatura (required). Returns: result
uned_notasC
Calificaciones publicadas, curso por curso.
Inputs: no named parameters. Returns: result
uned_novedadesB
Resumen: próximas entregas + eventos + anuncios nuevos. Ideal para '¿qué tengo pendiente?'.
Inputs: dias. Returns: result
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.
Inputs: semanas, horas_semana. Returns: result
uned_progresoB
Estado de estudio por tema (pendiente/leyendo/visto/repasado/dominado) de una o todas las asignaturas.
Inputs: asignatura. Returns: result
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…).
Inputs: tema (required), estado (required), asignatura (required), nota. Returns: result
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.
Inputs: forzar, asignatura. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
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
Your planner in every AI chat: tasks, calendar, docs, habits, goals and memory, over MCP.
Connects an AI assistant to your Lingard account (lingard.app), an app for learning languages with books, news and flashcards. Create topic word collections and add complete cards: translation, part of speech, pronunciation, synonyms, example sentences with translations, and images. Fill in missing fields on existing cards, rewrite example translations, and pause or resume collections, books and news in your daily study sessions. Every change can be previewed before it is saved, and saved words appear in the Lingard apps on iOS, Android and the web. Requires a Lingard account; sign-in uses OAuth.
Connect AI assistants to Edusign attendance, courses, learners, documents, and API docs via OAuth.
YouTube playlists to AI flashcards, spaced repetition and guided learning missions.
Related MCP Servers
- 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 gradedqualityCmaintenanceLets AI assistants read a student's Canvas LMS/Moodle courses, deadlines, announcements, grades and course files using their normal browser login instead of an access token. It is read-only and keeps all session data and downloads on the user's own machine.22 npm1MIT
- 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
- AlicenseNot gradedqualityBmaintenanceConnects AI agents to Argentine university systems so they can browse Moodle virtual classrooms, read course materials and forum discussions, search across courses, and consult SIU Guaraní academic records such as grades, enrollments, and exam boards. With user confirmation it can also post in forums, submit assignments, answer choices, and send messages.MIT