Skip to main content
Glama

POSTECH PLMS MCP

POSTECH PLMS를 자연어로 조회하는 개인용 읽기 전용 MCP 서버입니다. Python 3.11+ / stdio / OAuth Streamable HTTP를 지원합니다. POSTECH 공식 서비스가 아니며, 학생마다 자기 계정으로 설치·운영합니다.

할 수 있는 일

  • 현재/지난 수강 과목, 주별 강의자료, 예정·제한된 활동 조회

  • 과제 지시사항, 마감, 제출·채점 상태, 첨부파일 읽기

  • 온라인 강의의 정상 출석 마감 / 지각 인정 마감 / 강사 본문 지시 구분

  • 온라인 학습 진도와 오프라인 전자출결 조회 — 미래·공란·미처리는 출결로 단정하지 않음

  • 공지사항 목록·본문·페이지 이동, 과목 내 검색

  • 공식 실라버스·추가 계획서 후보, 평가비율·시험·출석·표절 규칙의 원문 근거 추출 및 비교

  • 성적부 조회, 주간 할 일, 기한 지난 미제출 과제, ICS 일정 내보내기

  • 명시적 조회 간 변경사항 비교(로컬 암호화 기준점)

  • PDF, DOCX, PPTX, XLSX, HWP, HWPX, HTML, 텍스트 첨부파일과 페이지/슬라이드/셀 위치

  • ZIP 첨부의 안전한 목록과 선택한 내부 문서·소스 파일 읽기

과제 제출, 퀴즈 응시, 쪽지 전송, 영상 재생/시청기록 조작, 출석 변경은 제공하지 않습니다. 스캔 이미지 OCR, 외부 사이트 자동 탐색, 음성/영상 전사는 포함하지 않습니다. 첨부파일의 수식·그림·표 해석이 텍스트만으로 불완전할 수 있으며 추출 경고를 반환합니다.

Related MCP server: ufora-mcp

빠른 시작: 내 컴퓨터에 연결

Python 3.11 이상과 Git이 필요합니다. 다음은 macOS/Linux 셸 기준이며, 마지막 두 명령은 Codex CLI가 설치된 경우 사용합니다.

git clone https://github.com/junnnnnw00/postech-plms-mcp.git
cd postech-plms-mcp
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade 'pip>=26.2.1' 'setuptools>=83.0.0'
python -m pip install -e .
plms-mcp login --method sso
plms-mcp doctor
codex mcp add postech-plms -- "$PWD/.venv/bin/plms-mcp" serve --transport stdio
codex mcp list

새 Codex 대화에서 “PLMS 연결 상태를 확인하고 이번 학기 내 과목을 보여 줘”라고 질문합니다. CLI가 없으면 앱 설정의 MCP 등록 절차를 사용합니다. 다른 MCP 클라이언트에서는 설치된 plms-mcp의 절대 경로와 인자 serve --transport stdio를 등록합니다. Windows에서는 py -3 -m venv .venv로 환경을 만들고 .\.venv\Scripts\Activate.ps1로 활성화한 뒤 plms-mcp.exe의 절대 경로를 사용합니다.

아이디와 비밀번호는 실행 중 입력하며 비밀번호는 표시하지 않습니다. 기본은 세션 쿠키만 저장합니다. 자동 재인증이 필요하면 plms-mcp login --method sso --save-password로 로그인하여 비밀번호의 로컬 암호화 저장을 선택할 수 있습니다. 실패한 자동 로그인은 명시적 재로그인 전까지 중단됩니다. PLMS_DATA_DIR로 저장 위치를 지정할 수 있습니다. 키와 암호문을 함께 읽을 수 있는 컴퓨터 관리자는 복호화할 수 있으므로 상태 폴더를 공유하지 마세요.

SSO가 StonePASS나 개인정보 선택을 요구하면 브라우저에서 완료하고 plms-mcp import-cookies /private/path/cookies.json으로 PLMS 도메인 쿠키만 가져옵니다. 학교 인증 절차를 우회하지 않습니다. plms-mcp logout은 이 인스턴스의 로컬 연결 정보를 삭제합니다.

데스크톱 / 모바일

  • 로컬 데스크톱: MCP 클라이언트에 .venv/bin/plms-mcp serve --transport stdio 등록.

  • 모바일 및 웹: HTTPS 도메인에 서버를 운영하고 OAuth MCP를 개인 plugin으로 등록합니다. 연결 비밀은 PLMS 비밀번호와 다른 임의의 20자 이상 값입니다.

  • 모바일 Remote: 연결된 내 컴퓨터에서 로컬 MCP를 실행하는 경로입니다. 최초 기기 연결과 컴퓨터의 전원·네트워크 유지가 필요합니다.

  • 다른 학생: 코드를 설치해 자기 인스턴스·자기 계정을 연결합니다. 운영자의 연결 비밀이나 승인된 토큰을 공유하면 운영자의 학업 자료에 접근하게 되므로 공유하지 않습니다.

export PLMS_ISSUER_URL=https://your-personal-host.example
# PLMS_CONNECT_PASSWORD는 비밀 관리자/보호된 환경 파일에 설정
plms-mcp serve --transport http --host 127.0.0.1 --port 8765

연결 주소는 https://your-personal-host.example/mcp. Docker Compose와 HTTPS 터널 예제는 배포 문서, ChatGPT/Codex/모바일 연결은 클라이언트 문서를 참고하세요. 공개 GitHub 저장소만으로 실행 서버나 모바일 연결이 생기지는 않습니다.

HTTP 서비스와 OAuth 동작은 검증 기록의 범위에서 확인했습니다. ChatGPT UI의 최종 승인과 휴대전화 실제 호출은 별도의 확인 단계입니다.

질문 예시

  • “이번 주 미제출 과제와 안 들은 온라인 강의 마감을 알려줘.”

  • “과제 PDF를 읽고 제출물과 제약조건을 정리해줘. 파일 어디에 나오는지도 알려줘.”

  • “온라인 강의 정상 출석 마감과 지각 인정 마감이 달라?”

  • “이 과목 출결을 실라버스 규칙과 비교해줘. 미처리 항목도 구분해줘.”

  • “최근 공지에서 휴강이나 시험 변경이 있었어?”

  • “실라버스 평가비율과 성적부의 현재 점수를 비교해줘.”

응답의 근거와 한계

성공한 조회 결과는 출처 URL, 결과 구성 시각, 시간대, 경고를 포함합니다. 페이지 캐시는 최대 90초 재사용할 수 있습니다. 한국시간 기준이며 날짜만 명시된 항목에 임의로 23:59를 붙이지 않습니다. 원문에서 확정할 수 없는 출석 환산, 예외, 최종 성적은 unknown으로 남깁니다. 검색은 범위가 정해져 있으므로 공지 본문·다음 페이지·첨부파일은 추가 조회가 필요합니다. 실라버스보다 나중에 나온 공지가 있을 수 있어 자동 비교를 공식 판정으로 사용하지 않습니다.

세션·저장 비밀번호·변경 기준점은 Fernet 암호문이며 파일은 0600, 상태 디렉터리는 0700입니다. HTTP는 OAuth 2.1 흐름(S256 PKCE, 짧은 단회 코드, 토큰 회전/폐기, resource 검증)을 적용합니다. 단일 사용자·단일 프로세스 운영을 전제로 하며 다중 학생 공용 서비스는 구현하지 않았습니다.

개발 및 검증

python -m pip install -e '.[dev]'
pytest -q
ruff check src tests
python -m build
pip-audit

테스트는 합성 데이터만 사용합니다. 실제 로그인 및 학교 자료는 Git에 넣지 않습니다. 라이브 검증 범위와 미완료 연결 항목은 검증 기록에 구분하여 기록합니다. 보안 모델과 운영상 주의점은 SECURITY.md를 참고하세요.

라이선스

MIT. 학교 강의자료와 타인의 저작권은 이 코드 라이선스에 포함되지 않습니다.

Available Tools

19 tools
plms_check_changesB

Compare course materials, assignments and notices with previous check; writes only an encrypted local baseline. No scheduled alerts.

Inputs: course_id (required). Returns: object

plms_compare_syllabusA
Read-onlyIdempotent

Compare exact syllabus rules with LMS deadlines and attendance evidence. Optional observations are hypothetical input, never authoritative records.

Inputs: course_id (required), observations. Returns: object

plms_course_outlineB
Read-onlyIdempotent

Read weekly activities, materials, restricted/upcoming items, description and course navigation.

Inputs: course_id (required). Returns: object

plms_export_calendarB
Read-onlyIdempotent

Return an ICS calendar of known upcoming deadlines; no calendar account is modified.

Inputs: days, course_id. Returns: object

plms_get_assignmentA
Read-onlyIdempotent

Read assignment instructions, submission/grading status, deadline and attachment links. Never submits.

Inputs: assignment_id (required). Returns: object

plms_get_attendanceB
Read-onlyIdempotent

Read online learning progress and/or offline attendance ('online', 'offline', 'both'). Future/unprocessed is unknown.

Inputs: course_id (required), kind. Returns: object

plms_get_gradesB
Read-onlyIdempotent

Read this user's visible grades and feedback. Running total must not be treated as the final course grade.

Inputs: course_id (required). Returns: object

plms_get_noticeA
Read-onlyIdempotent

Read an announcement's full body and attachments using IDs returned by list_notices.

Inputs: board_id (required), article_id (required). Returns: object

plms_get_syllabusB
Read-onlyIdempotent

Read official syllabus, grading rules, contacts, office hours and candidate uploaded syllabus files with evidence.

Inputs: course_id (required). Returns: object

plms_list_assignmentsB
Read-onlyIdempotent

List assignments with stated closing times, submission confirmation and raw grade columns.

Inputs: course_id (required). Returns: object

plms_list_coursesB
Read-onlyIdempotent

List the current user's enrolled course cards. Use returned course IDs for other tools.

Inputs: include_past. Returns: object

plms_list_noticesA
Read-onlyIdempotent

List course announcement titles with pagination; omit course_id for site-wide notices. Read notice bodies separately.

Inputs: page, course_id. Returns: object

plms_list_online_lecturesB
Read-onlyIdempotent

Read video descriptions, regular attendance and late deadlines without playing videos or recording progress.

Inputs: course_id (required). Returns: object

plms_read_attachmentA
Read-onlyIdempotent

Read PDF, DOCX, PPTX, XLSX, HWP/HWPX, HTML/text attachment linked on source_url. ZIP lists members; set archive_member to read one without executing it. Return source locators and next_offset. No OCR.

Inputs: source_url (required), attachment_url (required), limit, offset, +1 more. Returns: object

plms_read_pageB
Read-onlyIdempotent

Read a linked PLMS resource/folder/page/quiz metadata/board/calendar. Strict read routes only; no video playback/quiz attempts.

Inputs: url (required), limit, offset. Returns: object

plms_statusA
Read-onlyIdempotent

Check authentication and available read-only capabilities, without exposing account secrets.

Inputs: no named parameters. Returns: object

plms_upcoming_deadlinesA
Read-onlyIdempotent

Aggregate assignment and video deadlines, excluding confirmed submitted work by default. Preserve unknown-date items and partial failures.

Inputs: days, course_id, include_overdue, include_submitted. Returns: object

plms_weekly_briefB
Read-onlyIdempotent

Get enrolled courses and near-term deadlines together for a school-life briefing. Include notices separately for affected courses.

Inputs: days. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 19 tools

    Disambiguation4/5

    Most tools target clearly distinct resources and actions, and descriptions spell out boundaries (e.g., list_assignments vs upcoming_deadlines vs weekly_brief). Some overlap remains among deadline-oriented tools and between attendance-related tools, but the descriptions generally guide correct selection.

    Naming Consistency4/5

    All names use consistent snake_case with a plms_ prefix, and most follow a verb_noun pattern (get_assignment, list_notices, read_page). A few are noun phrases (status, course_outline, weekly_brief, upcoming_deadlines), which is a minor deviation from the dominant convention.

    Tool Count4/5

    19 tools is slightly heavy for a read-only LMS surface but each tool covers a distinct read path (courses, notices, assignments, lectures, attendance, syllabus, grades, pages, attachments, search, deadlines, calendar, changes, compare). No tool appears clearly redundant, though composite tools like weekly_brief and upcoming_deadlines partially overlap with simpler listings.

    Completeness4/5

    The read-only surface is broad and covers core LMS resources with monitoring, comparison, and export capabilities. Gaps are limited to intentionally excluded write operations and a few edge reads such as quiz attempt details or submission content.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Read-only MCP server that lets Jeonbuk National University students query their LMS in natural language, covering daily briefings, deadlines, announcements, assignments, and course materials while keeping credentials local.
      25
      40 npm
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      Enables AI clients to read a student's own UGent Ufora (D2L Brightspace) data, including courses, announcements, deadlines, grades, course materials, and PDF text, over stdio or local Streamable HTTP. All operations are read-only and run locally against the student's authenticated session.
      19
      2
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables natural-language queries across multiple schools' Canvas and Blackboard accounts for courses, notifications, assignments, grades, feedback, and schedules, with read-only access and local todo/calendar export.
      9
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Enables a tutor or assistant to read a student's Brightspace courses, deadlines, announcements, assignment instructions, course outlines, quiz metadata and released grades, plus search explicitly imported school notes and read course documents. Runs locally over stdio with read-only access and configurable tenant settings.
      18
      1
      MIT