campus-unr-mcp

campus-unr-mcp

MCP server for the Moodle-based Campus Virtual FCEIA UNR, providing tools to read courses, assignments, forums, and grades, plus write operations (posting, grading, messaging, events) with dry-run safety.

Category
访问服务器

README

campus-unr-mcp

Servidor MCP + CLI para el Campus Virtual FCEIA UNR (Moodle).

Confirmado: el campus virtual https://campusv.fceia.unr.edu.ar/ está basado en Moodle (cookie MoodleSession, login via login/token.php, Web Services REST con 435 funciones disponibles).

Agente Plugins spec 1.0.0 compliant (plugin.json + mcp.json en la raíz).

Estructura

src/campus_unr_mcp/
├── __init__.py
├── client.py      # CampusClient: login token + Moodle Web Services (read + write)
├── cli.py         # CLI con click + rich (20 subcomandos)
└── mcp_server.py  # Servidor MCP stdio (20 tools)
bin/campus-server  # Launcher portable para Agent Plugins
plugin.json        # Manifest Agent Plugins 1.0.0
mcp.json           # Config MCP stdio

Instalación

cd campus-unr-mcp
uv sync

Configuración

Crear .env (ya existe):

CAMPUS_USER=tu_usuario
CAMPUS_PASS=tu_password
CAMPUS_BASE_URL=https://campusv.fceia.unr.edu.ar/

Uso CLI — Lectura

# Info del sitio y usuario
uv run campus site-info

# Listar cursadas
uv run campus courses
uv run campus courses --json

# Categorías (períodos lectivos / carreras / áreas)
uv run campus categories

# Contenido de un curso (secciones y actividades)
uv run campus contents 442

# Usuarios enrolados (estudiantes)
uv run campus users 442 --role student

# Grupos (comisiones)
uv run campus groups 442

# Miembros de grupos con lista de estudiantes
uv run campus group-members 442

# Actividades agrupadas por tipo
uv run campus activities 442

# Entregas (assignments) con conteo de envíos y calificaciones
uv run campus assignments 442

# Foros de un curso
uv run campus forums 503

# Discusiones (temas) de un foro
uv run campus discussions 7119

# Calificaciones del curso (quizzes + assignments)
uv run campus course-grades 442

# Intentos de quiz (parcial/examen)
uv run campus quiz-attempts 9417

# Iniciar servidor MCP
uv run campus serve

Uso CLI — Escritura

Todas las operaciones de escritura tienen --dry-run por defecto. Pasar --no-dry-run para ejecutar.

# Crear tema en foro (dry-run por defecto, valida permisos)
uv run campus post-discussion 7119 "Aviso importante" "<p>Mensaje HTML</p>"
uv run campus post-discussion 7119 "Aviso" "Mensaje" --no-dry-run   # ejecutar

# Responder a un post
uv run campus reply-post 113371 "Re: Aviso" "Respuesta" --no-dry-run

# Cargar nota de TP (0-10, con feedback opcional)
uv run campus save-grade 16255 13341 8.5 --feedback "Buen trabajo"
uv run campus save-grade 16255 13341 8.5 --feedback "Buen trabajo" --no-dry-run

# Enviar mensaje a un usuario
uv run campus send-message 13341 "Recordatorio entrega TP"

# Crear evento de calendario (fecha de examen, entrega, etc.)
uv run campus create-event "Parcial" 503 "2026-12-15T10:00:00" --description "Aula 3"

Uso como servidor MCP en Hermes

Las credenciales viven en el .env del repo (no en config.yaml). Con uv --directory <ruta-del-repo>, el cwd del proceso es el repo y se lee ese .env.

En ~/.hermes/config.yaml (ajustá la ruta al clone local):

mcp_servers:
  campus_unr:
    command: uv
    args:
      - --directory
      - /path/to/campus-unr-mcp
      - run
      - campus
      - serve
    connect_timeout: 90.0
    enabled: true
    timeout: 120

O por CLI (sin pasar flags de Hermes como --connect-timeout en --args; si no, caen como argumentos de campus serve y el server falla):

uv sync
printf 'Y\n' | hermes mcp add campus_unr --command uv \
  --args --directory /path/to/campus-unr-mcp run campus serve
hermes config set mcp_servers.campus_unr.timeout 120
hermes config set mcp_servers.campus_unr.connect_timeout 90
hermes config set mcp_servers.campus_unr.enabled true
# Si args quedó como string JSON, dejalo como lista YAML real (como arriba).
hermes mcp test campus_unr

Reiniciá la sesión CLI / el gateway de Hermes para descubrir las tools (en Telegram hace falta reiniciar el gateway).

Tools MCP disponibles (20 total)

Lectura (15)

Tool Descripción
get_site_info Info del sitio y usuario actual
list_courses Cursos donde el usuario está enrolado
list_categories Categorías (jerarquía académica)
get_course_contents Secciones y actividades de un curso
list_enrolled_users Usuarios enrolados con filtro por rol
list_groups Grupos (comisiones) de un curso
list_group_members Grupos con lista de miembros y roles
list_activities Actividades agrupadas por tipo
list_assignments Entregas con stats de envíos/calificaciones
get_grades_report Reporte de calificaciones
get_assignment_submissions Detalle de entregas de un TP
list_forums Foros de un curso con conteo de discusiones
list_forum_discussions Temas de un foro con contenido
get_course_grades Todos los items de calificación del curso
list_quiz_attempts Intentos de un quiz (parcial/examen)

Escritura (5) — dry_run=True por defecto

Tool Descripción
create_forum_discussion Crear tema en foro (valida permisos en dry-run)
reply_forum_post Responder a un post existente
save_assignment_grade Cargar nota de TP (0-10) con feedback opcional
send_message_to_user Enviar mensaje instantáneo a un usuario
create_calendar_event Crear evento (examen, entrega, etc.)

Cada tool de escritura acepta dry_run: bool = True. En modo dry-run valida permisos y parámetros sin ejecutar la operación. Pasar dry_run=False para ejecutar realmente.

Notas

  • El cliente usa Web Services de Moodle (REST + token), no scraping HTML. Es más rápido y estable.
  • Autenticación: login/token.php con servicio moodle_mobile_app obtiene un token de WS automáticamente.
  • SSL auto-firmado: verify_ssl=False por defecto (común en deployments universitarios).
  • El cliente httpx se cachea y persiste toda la sesión MCP, reutilizando conexiones.
  • Todos los datos de estudiantes son PII: no commitear exports ni dumps.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选