Claude 같은 AI 어시스턴트가 여러분을 대신해 PLATO(Moodle 기반 LMS)에 로그인하지 않고도, 여러분이 이미 접근 권한을 가진 강좌 자료·공지·과제·성적·Q&A를 조회·작성·다운로드할 수 있게 해주는 MCP 서버입니다.
공식 Moodle webservice API로 동작하는 도구와, ubboard(공지/Q&A) 게시판을
본인 로그인 세션으로 스크레이핑하는 도구로 나뉩니다. ✏️ 쓰기
도구는 실행 전 dry_run 미리보기 확인을 거쳐야만 실제로 전송됩니다.
일반 사용자는 Smithery를 통해 설치하고, 코드를 직접 수정/실행하려는 개발자는 로컬 클론 경로를 따라가세요.
Claude Desktop, Claude Code, Claude.ai 커넥터 등에서 바로 추가할 수 있습니다.
pnu_id)과 비밀번호(pnu_password)를 입력합니다 — 이 값은 세션 동안만 사용되고 서버 디스크에 저장되지 않습니다.list_courses 같은 도구를 호출해 정상 동작하는지 확인합니다.코드를 수정하거나 로컬에서 직접 돌려보고 싶을 때. 실제 PLATO 계정 없이도 테스트는 가능합니다(mock 기반).
git clone https://github.com/jin-1119/plato-mcp.git
cd plato-mcp
pip install -e ".[dev]"
# 단위 테스트 (실계정 불필요)
pytest
# 린트
ruff check .
# 로컬 MCP 서버 실행 (stdio, Claude Desktop/Code 연동용)
python -m plato_mcp.server
이슈 하나 = 작업 단위 하나. 모든 변경은 이슈에서 시작해서 PR로 끝납니다.
main에서 분기해 feature/issue-<번호>-<짧은-설명> 형식의 브랜치를 만듭니다 (버그 수정은 fix/issue-<번호>-...).pytest와 ruff check .가 모두 통과해야 합니다. 이 저장소는 실제 PLATO 계정을 다루므로, 자격증명이 로그·에러 메시지에 노출되지 않는지 특히 신경써 주세요 (SECURITY.md 참고).Closes #N), 무엇을 바꿨는지, 어떻게 검증했는지를 PR 설명에 적습니다.이 저장소가 실제로 따르는 운영 규칙입니다. PR을 보내기 전에 한 번 훑어보시면 리뷰가 빨라집니다.
| 작업 상태의 기준 | GitHub Project 보드의 Status 필드가 유일한 기준입니다. 라벨이나 코멘트가 아니라 보드 상태를 봅니다. |
|---|---|
| 브랜치 네이밍 | feature/issue-<N>-<slug>, fix/issue-<N>-<slug>, docs/issue-<N>-<slug> 등 <type>/issue-<번호>-<설명> 형식. |
| 기준 브랜치 | main에서만 분기합니다. main에는 직접 커밋하지 않고 항상 PR을 통해서만 반영됩니다. |
| 이슈 구조 | 큰 작업(Phase)은 부모 이슈로 묶고, 실제 작업은 하위 이슈로 쪼갭니다. 부모 이슈는 하위 이슈가 전부 닫히면 자동으로 닫힙니다 — 자세한 예시는 PLAN.md 참고. |
| 커밋 | 작고 원자적인 커밋을 선호합니다. 머지는 기본적으로 squash 방식을 사용합니다. |
| CI 게이트 | 모든 PR은 머지 전에 pytest tests/unit과 ruff check .를 통과해야 합니다 (GitHub Actions로 자동 실행). |