tapflow
팀 전체가 사용할 수 있는 자체 호스팅 iOS·Android 시뮬레이터 스트리밍
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Servidor MCP para el campus virtual de la UTN Facultad Regional La Plata (https://frlp.cvg.utn.edu.ar, Moodle). Permite que un agente (Claude Code, Claude Desktop, Cursor, etc.) entre al campus con la cuenta del usuario y traiga apuntes, fechas, tareas, notas, novedades y mensajes, y con confirmación explícita, entregue tareas o publique en foros.
Usa la API REST oficial de Moodle con un token por usuario, igual que la app Moodle Mobile. No scrapea HTML.
git clone https://github.com/PedroCarassale/utn-mcp.git
cd utn-mcp
npm install
npm run build
node dist/cli.js login
Pide usuario y contraseña, obtiene un token de web services y lo guarda en ~/.utn-mcp/credentials.json. La contraseña no se guarda. El token se puede revocar en cualquier momento desde el campus: Preferencias → Claves de seguridad.
Alternativas:
node dist/cli.js login --token <token-generado-en-el-campus>
# o por variables de entorno
UTN_MOODLE_TOKEN=... UTN_MOODLE_SITE=https://frlp.cvg.utn.edu.ar node dist/cli.js serve
Comprobar que funciona y ver qué funciones de la API habilitó la facultad:
node dist/cli.js whoami
node dist/cli.js discover # genera docs/functions.json
Claude Code (desde cualquier carpeta):
claude mcp add utn-mcp -- node "C:/ruta/a/utn-mcp/dist/cli.js" serve
Dentro de este repo ya está configurado en .mcp.json.
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"utn-mcp": {
"command": "node",
"args": ["C:/ruta/a/utn-mcp/dist/cli.js", "serve"]
}
}
}
| Tool | Qué hace |
|---|---|
campus_login / campus_logout / campus_whoami / campus_functions | Sesión y diagnóstico |
campus_list_courses | Materias en las que está inscripto el usuario |
campus_course_contents | Unidades y módulos de una materia (apuntes, tareas, foros, cuestionarios) |
campus_module | Detalle de un módulo: texto de una página, consigna y estado de una tarea, archivos, hilos de un foro |
campus_get_file | Descarga un apunte y devuelve su texto (PDF, DOCX, PPTX, XLSX, TXT, HTML), paginado |
campus_search_files | Busca archivos por nombre en todas las materias |
campus_index_course / campus_search_content / campus_indexed_files | Indexa todos los apuntes de una materia y busca dentro del contenido |
campus_upcoming | Próximas fechas: entregas, cuestionarios, parciales, eventos |
campus_assignments | Tareas con fechas, estado de entrega y nota |
campus_grades | Notas por materia o detalle de ítems |
campus_announcements / campus_forum_discussion | Novedades de la cátedra y lectura de hilos |
campus_messages / campus_conversation / campus_notifications / campus_search_users | Mensajería y notificaciones |
campus_quizzes | Cuestionarios, fechas, intentos y mejor nota |
campus_scheduler | Turnos de consulta (si la API los expone; si no, los links) |
campus_draft_add / campus_draft_show / campus_draft_remove | Armar una entrega localmente: copiar archivos a un borrador por tarea, validados contra la configuración de la tarea |
campus_draft_submit ⚠ | Subir al campus una entrega armada con campus_draft_add |
campus_submit_assignment ⚠ |
⚠ Las acciones de escritura requieren confirm: true. Sin él devuelven una vista previa y no ejecutan nada; el agente debe mostrársela al usuario y pedir confirmación.
Además del modo local por stdio, el servidor puede correr como servicio HTTP para que cualquiera lo agregue como conector remoto (claude.ai, Claude Code, Cursor) sin instalar nada.
/mcp./authorize; el servidor pide un token a Moodle y lo entrega cifrado (AES-256-GCM) como access token. No hay base de datos: client_id, códigos y tokens son blobs sellados con UTN_MCP_SECRET. La contraseña no se guarda.campus_login, campus_logout, campus_submit_assignment, campus_send_message, campus_forum_post ni campus_mark_notifications_read, ni las de borradores de entrega (campus_draft_*), que leen archivos del disco del usuario.UTN_MCP_DATA_DIR, default /tmp/utn-mcp). En serverless se pierden cuando se recicla la instancia.campus_get_file devuelve un downloadUrl (/files/<link sellado>/<nombre>) que vence en una hora. Ese link baja del campus solo ese archivo y lo sirve como adjunto; el token de Moodle va cifrado adentro.Variables de entorno:
| Variable | Obligatoria | Qué es |
|---|---|---|
UTN_MCP_SECRET | sí | Clave para sellar tokens, ≥ 32 caracteres (openssl rand -base64 48). Cambiarla cierra todas las sesiones. |
PUBLIC_URL | no | URL pública (issuer OAuth). En Vercel se toma de VERCEL_PROJECT_PRODUCTION_URL. |
UTN_MOODLE_SITE | no | Campus a usar. Default https://frlp.cvg.utn.edu.ar |
UTN_MCP_DATA_DIR | no | Directorio de caché por usuario |
Probarlo local:
UTN_MCP_SECRET=$(openssl rand -base64 48) node dist/cli.js serve-http --port 3000
claude mcp add --transport http utn-remoto http://localhost:3000/mcp
Todo vive en ~/.utn-mcp/ (configurable con UTN_MCP_HOME):
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗
| Entregar una tarea en un solo paso (archivos y/o texto) |
campus_send_message ⚠ | Enviar un mensaje |
campus_forum_post ⚠ | Responder o abrir una discusión en un foro |
campus_mark_notifications_read ⚠ | Marcar notificaciones como leídas |