Skip to main content
Glama

moodle-mcp

Moodle LMS용 Model Context Protocol 서버 — Hermes, Claude Code, OpenCode를 Moodle에 연결하세요. 과제, 성적, 마감일을 가져오고 Obsidian에 동기화하며 WhatsApp 알림을 받을 수 있습니다.

Python MCP License: MIT

개요기능빠른 시작설정에이전트 설정도구Obsidian 동기화


개요

moodle-mcp는 Moodle Web Services API를 Model Context Protocol과 연결하여 AI 에이전트가 학업 비서 역할을 할 수 있게 해줍니다. Polibatam(다중 클래스 필터링)용으로 제작되었지만 Web Services가 활성화된 모든 Moodle 인스턴스에서 작동합니다.

loyaniu/moodle-mcp의 포크 — 22개에서 40개 도구로 확장되었으며 Obsidian 동기화, 자료 다운로드, 제출 도구, 캘린더 통합, 동시 가져오기, 학기 자동 아카이브를 포함합니다.

[!TIP] 모든 Moodle LMS에서 작동합니다 — MOODLE_URL을 인스턴스로 지정하기만 하면 됩니다. Polibatam 클래스 필터(MOODLE_MY_CLASS)는 선택 사항입니다.


Related MCP server: mcp-moodle

기능

  • 과제 및 마감일 — 클래스 슬롯별 필터링, 긴급도별 정렬, 실행 가능한 작업 목록 포함

  • 성적 및 진행 상황 — 강좌 상태 점검, 학업량, 완료 추적

  • 강좌 콘텐츠 및 검색 — 섹션, 모듈, 자료, 공지, 최근 활동

  • Obsidian 동기화 — 대시보드, 마감일, 강좌 노트를 한 번의 명령으로 내보내기(학기 자동 아카이브 포함)

  • 자료 다운로드 — 강좌 파일 및 과제 첨부 파일 목록 조회 및 다운로드

  • 제출 — 텍스트 제출, 상태 확인, 피드백 읽기

  • 캘린더 — 예정된 이벤트, 알림 만들기(H-2), 활동 완료 표시

  • 에이전트 준비 완료 — Hermes, Claude Code, OpenCode용 단일 install-mcp.sh


빠른 시작

한 줄 설치

curl -fsSL https://raw.githubusercontent.com/zuckdorsey/moodle-mcp/main/scripts/install-mcp.sh | bash

설치된 에이전트를 자동 감지하여 각각을 구성합니다. 테스트 실행을 하려면:

bash scripts/install-mcp.sh --dry-run

확인

# Hermes (profile: akademik)
hermes --profile akademik mcp test moodle
# → ✓ Connected  ✓ Tools discovered: 40

# Claude Code
claude mcp list

# Run tests
PYTHONPATH=src .venv/bin/python -m unittest discover -s tests -v

[!NOTE] 개발 시 PyPI보다 로컬 소스를 선호하세요 — 런처가 PYTHONPATHsrc/로 자동 설정합니다.


설정

1. Moodle 토큰 가져오기

  1. https://<your-moodle>/user/managetoken.php를 엽니다.

  2. Service 열에서 Moodle mobile web service 행을 찾습니다.

  3. 토큰을 복사합니다.

2. .env 만들기

cp .env.example .env
MOODLE_URL=https://your-moodle.example.com/webservice/rest/server.php
MOODLE_TOKEN=your_token_here

# Optional — Polibatam class-slot filter (e.g. Pagi C, Siang A)
MOODLE_MY_CLASS=Pagi C

# Optional — custom vault path
OBSIDIAN_VAULT_PATH=/home/you/Obsidian Vault

변수

필수

설명

MOODLE_URL

Moodle REST 엔드포인트 (.../webservice/rest/server.php)

MOODLE_TOKEN

모바일 웹 서비스 토큰

MOODLE_MY_CLASS

아니요

다중 클래스 과제 제목용 정규식 필터

OBSIDIAN_VAULT_PATH

아니요

볼트 루트 (기본값: ~/Obsidian Vault)

3. 패키지 설치

# with uv (recommended)
uv pip install -e .

# or pip
pip install -e .

[!WARNING] .env를 커밋하지 마세요 — 전체 API 액세스 권한이 있는 토큰이 포함되어 있습니다. 이미 .gitignore에 등록되어 있습니다.


에이전트 설정

에이전트를 선택하세요 — 모두 scripts/moodle_mcp_local_launch.py의 동일한 로컬 런처를 사용합니다.

Hermes 에이전트 (권장)

bash scripts/install-mcp.sh --agent hermes --profile akademik

수동 설정 (~/.hermes/profiles/akademik/config.yaml):

mcp_servers:
  moodle:
    command: /home/you/Programming/Python/moodle-mcp/.venv/bin/python
    args: [/home/you/Programming/Python/moodle-mcp/scripts/moodle_mcp_local_launch.py]
    env:
      MOODLE_URL: ${MOODLE_URL}
      MOODLE_TOKEN: ${MOODLE_TOKEN}
      MOODLE_MY_CLASS: "Pagi C"
      OBSIDIAN_VAULT_PATH: "/home/you/Obsidian Vault"

Claude Code

bash scripts/install-mcp.sh --agent claude-code
# or manually
claude mcp add -s user moodle-mcp -- python3 /path/to/moodle-mcp/scripts/moodle_mcp_local_launch.py

글로벌 JSON (~/.claude/settings.json):

{
  "mcpServers": {
    "moodle-mcp": {
      "command": "python3",
      "args": ["/path/to/moodle-mcp/scripts/moodle_mcp_local_launch.py"],
      "env": {
        "MOODLE_URL": "https://your-moodle/webservice/rest/server.php",
        "MOODLE_TOKEN": "your_token_here"
      }
    }
  }
}

OpenCode

bash scripts/install-mcp.sh --agent opencode

~/.config/opencode/config.json:

{
  "mcp": {
    "moodle-mcp": {
      "command": "python3",
      "args": ["/path/to/moodle-mcp/scripts/moodle_mcp_local_launch.py"],
      "environment": {
        "MOODLE_URL": "https://your-moodle/webservice/rest/server.php",
        "MOODLE_TOKEN": "your_token_here"
      }
    }
  }
}

Claude Desktop / Cursor

claude_desktop_config.json에 추가하세요:

{
  "mcpServers": {
    "moodle-mcp": {
      "command": "uvx",
      "args": ["moodle-mcp"],
      "env": {
        "MOODLE_URL": "https://your-moodle/webservice/rest/server.php",
        "MOODLE_TOKEN": "your_token_here"
      }
    }
  }
}

데스크톱 앱을 다시 시작하면 도구가 선택기에 표시됩니다.


도구

7개 그룹에 걸친 40개 도구. 연결된 모든 에이전트에서 이름으로 호출하세요 (예: "내 Moodle 강좌 나열"get_my_courses).

도구

설명

get_my_courses

등록된 강좌

get_course_content

강좌의 섹션 및 모듈

search_course_materials

전체 자료에서 검색

get_course_announcements

뉴스 포럼 공지

get_recent_activity

타임스탬프 이후 최근 활동

get_course_updates

새 자료/공지

도구

설명

get_assignments

과제 (클래스 슬롯 필터링됨)

get_assignment_status

제출 및 채점 상태

get_upcoming_deadlines

마감일 기준으로 정렬된 마감 예정 목록

get_overdue_assignments

기한 초과, 미제출

get_actionable_tasks

우선순위 긴급도 목록

analyze_assignment

상태 + 요구사항 + 자료

extract_assignment_requirements

산출물 및 기준

find_relevant_materials

과제와 관련된 콘텐츠

decompose_task

중요 경로가 있는 하위 작업

create_implementation_plan

일정, 리소스, 마일스톤

submit_assignment_text

텍스트 답변 제출

get_assignment_feedback

피드백 및 루브릭 결과

도구

설명

get_grades

개요 또는 강좌별 상세

get_course_progress

완료 진행 상황

get_course_health

상태 점검 (진행 상황 + 성적 + 기한 초과)

get_study_load

주별 과제 분포

get_submission_status_detail

상세 제출 및 피드백

도구

설명

get_upcoming_events

예정된 Moodle 이벤트

create_calendar_event

H-2 알림 만들기

get_activity_completion

완료 상태

mark_activity_complete

활동 완료 표시

도구

설명

semester_dashboard

강좌 + 마감일 + 성적

daily_briefing

기한 초과, 오늘, 최근 성적

weekly_review

제출됨, 채점됨, 기한 초과, 진행 상황

ask_moodle

자연어 라우팅

get_course_updates

강좌 변경 감지

도구

설명

sync_moodle_to_obsidian

전체 볼트 동기화 (학기 전환 시 자동 아카이브)

export_deadlines_to_obsidian

마감일만 내보내기

export_course_outline

강좌 개요를 노트로 내보내기

list_course_material_files

다운로드 가능한 파일 목록

download_course_materials

Materials/에 다운로드

download_assignment_attachments

과제 파일 다운로드

[!TIP] 시도해 보세요: "이번 주에 마감되는 것이 무엇인가요?"get_upcoming_deadlines, "데이터베이스 과제 분석"analyze_assignment, "Obsidian에 동기화"sync_moodle_to_obsidian.


Obsidian 동기화

동기화는 볼트의 Academic/Moodle 아래에 노트를 만듭니다:

Obsidian Vault/Academic/
  Moodle/                    ← current semester (always up-to-date)
    .semester_courses.json   ← hidden state (course IDs)
    Dashboard.md
    Deadlines.md
    Grades.md
    Courses/
  Archive/
    Semester-2026-07/        ← auto-created on rollover
      Dashboard.md
      Courses/
      Archive-README.md

학기 자동 아카이브는 강좌 ID의 50% 이상이 변경되거나(또는 모두 새 강좌인 경우) 실행됩니다. 단일 강좌 교체는 무시됩니다.

PYTHONPATH=src python - <<'PY'
from moodle_mcp import api
print(api.sync_moodle_to_obsidian())
PY

보안 참고 사항

[!CAUTION] Moodle 토큰은 사용자로서의 전체 API 액세스 권한을 부여합니다. 비밀번호처럼 취급하세요.

  • 토큰은 서버 측에서 로드되며 모델에 절대 전송되지 않습니다.

  • CI에서 MOODLE_URL / MOODLE_TOKEN을 환경 시크릿으로 주입하세요.

  • moodle.py는 Cloudflare 호환성을 위해 브라우저 스타일 User-Agent + POST를 사용합니다.


감사의 말

loyaniu/moodle-mcp의 포크 — 모든 원본 기여자에게 감사를 표합니다:

기여자

역할

Zhonglin Niu

F
license - not found
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.

  • Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…

  • Connect any AI agent to 11+ social platforms: schedule, publish & track posts via hosted MCP.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zuckdorsey/moodle-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server