PluginWorld
Fc

fcefyn-mcp

MCP

Enables an MCP-compatible assistant to log in with UNC single sign-on and explore the FCEFyN virtual classroom, listing enrolled courses, retrieving course indexes and materials, and reading or searching pages, activities, and PDFs. It works read-only with the user's own credentials, without tokens, admin permissions, or downloading entire courses.

@bernoulli2005 · MIT License · updated today

SECURITY

B

SCORE

60

STARS

▲ 0

PLUG IN

git clone https://github.com/bernoulli2005/fcefyn-mcp.git

See the README to configure this MCP server

README

FCEFyN MCP

Servidor Model Context Protocol para consultar tus cursos del aula virtual de FCEFyN, Universidad Nacional de Córdoba desde un asistente compatible con MCP. Implementado con el SDK oficial de Python.

Inicia sesión con Login UNC (SAML/CAS), incluyendo el formulario de usuario y el de contraseña. También admite el formulario local de Moodle si no hay un acceso SAML. No necesita un token ni permisos de administrador.

Instalación

Requisitos: Python 3.11 o superior y uv.

git clone https://github.com/bernoulli2005/fcefyn-mcp.git
cd fcefyn-mcp
uv sync --locked
cp .env.example .env
chmod 600 .env

Completá .env localmente:

MOODLE_URL=https://fcefyn.aulavirtual.unc.edu.ar
MOODLE_USERNAME=tu_usuario@mi.unc.edu.ar
MOODLE_PASSWORD=tu_contraseña

En la copia local preparada durante el desarrollo, .env ya está configurado. Las variables de entorno del proceso tienen prioridad sobre el archivo.

Conectar un cliente MCP

Agregá esta entrada a la configuración de un cliente que admita servidores locales por stdio (por ejemplo, Claude Desktop). Sustituí la ruta por la ubicación de tu clon y uv por su ruta absoluta si el cliente no lo encuentra:

{
  "mcpServers": {
    "fcefyn": {
      "command": "uv",
      "args": [
        "--directory", "/ruta/absoluta/fcefyn-mcp",
        "run", "--frozen", "fcefyn-mcp"
      ]
    }
  }
}

No hace falta copiar la contraseña a la configuración del cliente. Reiniciá el cliente después de agregar el servidor.

Para ejecutarlo manualmente:

uv run fcefyn-mcp

El proceso espera mensajes MCP por stdin. No es un chat ni un servidor web; stdout está reservado al protocolo.

Herramientas

Herramienta Uso
list_courses() Lista todos tus cursos matriculados, con sus IDs y enlaces.
get_course_contents(course_id) Recorre las secciones visibles, pestañas y subsecciones del curso; devuelve actividades, textos en línea y descripciones, sin duplicados.
read_content(url, max_chars=30000, offset=0) Lee páginas, actividades y PDFs con texto. Devuelve enlaces a archivos y capítulos; usá next_offset para continuar un texto largo.
search_course_contents(course_id, query) Busca en nombres y descripciones del índice del curso; no busca dentro de los archivos.

Ejemplos de pedidos al asistente:

  • “Listá mis cursos del aula virtual”.
  • “Mostrame todas las unidades y los materiales de este curso”.
  • “Buscá las guías de prácticos y resumí el PDF de la primera unidad”.
  • “Abrí esta carpeta y mostrame sus archivos”.

El flujo habitual es listar cursos → obtener el índice de uno → leer los enlaces de las actividades. El índice puede ser grande; el asistente debe recorrer los materiales que necesite para responder. No se descargan todos los archivos automáticamente.

Alcance y privacidad

  • Solo consulta información disponible para tu cuenta. No entrega tareas, inicia intentos de examen ni publica mensajes. Moodle puede registrar las visitas como cualquier navegación normal.
  • Los PDFs escaneados necesitan OCR, que este proyecto no incluye. Archivos como ZIP, videos y documentos de Office se identifican por su formato y se devuelven con un enlace para abrir desde el aula.
  • Los enlaces a servicios externos permanecen en el índice, pero el servidor no los descarga ni les envía credenciales. Puede ser necesario abrirlos en el navegador.
  • Límite de 30 MB por respuesta descargada y de 100.000 caracteres por fragmento. No guarda cookies ni contenidos del aula en disco.
  • .env, cookies, descargas, cachés y entornos virtuales están excluidos de Git. El repositorio público no debe contener credenciales ni material privado de cursos.
  • Si UNC cambia el formulario, exige MFA o Moodle cambia su HTML, puede ser necesario adaptar el cliente. Una sesión vencida se señala para volver a iniciar sesión en la siguiente llamada.

Proyecto independiente, sin afiliación oficial con la UNC. Usa tus propios permisos de acceso.

Desarrollo y verificación

uv sync --locked
uv run ruff check src tests scripts
uv run ruff format --check src tests scripts
uv run pytest -q

Las pruebas automatizadas usan respuestas simuladas para verificar acceso SAML, paginación de cursos, pestañas, subsecciones, textos en línea, URLs permitidas y redirecciones. También inician un proceso MCP real para verificar el protocolo stdio y las herramientas.

Con credenciales locales, ejecutá la comprobación real de lectura de cursos y una muestra de materiales, a través del protocolo MCP:

uv run python scripts/verify_live.py

Este comando requiere acceso a internet y solo imprime conteos y formatos. No se ejecuta en CI, donde no se necesitan credenciales del aula.

SIMILAR PLUGINS