Skip to main content
Glama
CAU eclass MCP (중앙대 이클래스)

CAU eclass MCP (중앙대 이클래스)

CAU e-Class MCP — 같은 자료를, 더 적은 요청으로

강의 6개의 자료 목록 조회를 13.061초에서 2.815초로. HTTP 요청은 514회에서 24회로 줄이고, 반환된 자료 54개는 동일하게 유지했습니다.

중앙대학교 e-Class를 Claude·Codex 등 MCP 클라이언트에서 사용할 수 있게 연결하는 비공식 프로젝트입니다. 이 저장소는 프로젝트의 배포 안내와 아키텍처·성능 분석을 공개하는 쇼케이스입니다. 구현체와 인증 프로토콜 분석 자료는 별도 Private 저장소에서 관리합니다.

학생에게 필요한 것은 화면을 대신 클릭하는 과정이 아니라, 마감 과제와 강의 자료를 빠르게 확인하는 결과입니다. 이를 위해 조회 경로를 브라우저 화면 로딩에서 HTTP 기반 수집으로 전환하고, 같은 결과를 반환하는지와 실행 비용이 얼마나 줄었는지를 함께 측정했습니다.

배포 안내

Releases에서 사전 빌드 배포 상태를 확인할 수 있습니다. 현재 네이티브 바이너리는 배포 준비 중이며, 다운로드 가능한 바이너리 릴리스는 없습니다. 소스 설치 방식의 이전 릴리스는 비공개 구현체 저장소에 보존했습니다.

프로젝트는 강의·과제·성적·공지 조회, 강의 자료 수집, 시험 시간표·강의계획서 조회와 과제 제출 도구를 제공합니다. 기능 범위와 실행 환경은 향후 각 바이너리 릴리스에서 안내합니다. 학교의 공식 서비스가 아니며, 본인 계정의 학습 데이터를 다루는 개인 학습 도구입니다.

Related MCP server: Campus

벤치마크: 결과를 유지하면서 실행 비용 줄이기

2026년 10월 8일 KST, 같은 학기의 강의 6개를 순차 조회했습니다. 브라우저 기반 구현과 HTTP 기반 구현을 각각 새 프로세스로 5회 실행하고, 실행 순서를 번갈아 배치했습니다. 아래 값은 각 조건의 중앙값입니다.

지표

브라우저 기반 조회

HTTP 기반 조회

감소율

전체 실행시간

13.061초

2.815초

78.4%

최대 관측 RSS, 프로세스 트리 합산

785.0 MiB

180.1 MiB

77.1%

CPU 시간, user + system

6.98초

0.28초

96.0%

관측 HTTP 요청 수

514회

24회

95.3%

반환 자료

54개

54개

동일

전체 실행시간 기준 약 4.64배 빨라졌습니다. 감소율은 두 조건의 중앙값 차이를 브라우저 기반 조건의 중앙값으로 나눈 값입니다.

결과가 같다는 것을 어떻게 확인했나

강의별 자료 개수는 두 구현 모두 5·0·35·7·6·1개였습니다. 강의 식별자와 자료 식별자·제목·유형·URL을 정렬해 SHA-256 해시로 비교했고, 10회 실행 모두 같은 해시를 반환했습니다. 빈 자료 목록도 성공 응답으로 확인했습니다.

이 검증은 두 구현의 반환 결과가 같음을 뜻합니다. 독립적인 원본 목록과 대조한 것은 아니므로, 모든 자료를 빠짐없이 수집한다는 절대 정확도 주장은 하지 않습니다. 원시 결과에는 내부 정보를 포함할 수 있어 공개하지 않습니다.

아키텍처: 화면 대신 필요한 데이터를 수집하기

flowchart TD
    U[학생의 자연어 요청] --> C[MCP 클라이언트]
    C --> S[로컬 MCP 서버]
    S --> T[도구 실행 및 결과 구조화]
    T --> K[로컬 스냅샷·파일 캐시]
    T --> H[HTTP 조회·자료 수집]
    H --> A[인증·세션 관리]
    A <--> V[OS 자격증명 저장소 또는 암호화 저장소]
    A --> L[학교 LMS·학사 서비스]
    T --> W[과제 제출 검증 및 실행]
    W --> L
    W --> B[필요 시 브라우저 UI 보조]
    B --> L
    L --> R[응답 정규화·부분 실패 처리]
    K --> R
    R --> C

조회·자료 수집은 HTTP로 처리합니다. 브라우저 UI 보조는 과제 제출의 일부 경로에 남아 있으며, 프로젝트 전체가 브라우저 없이 동작한다는 의미는 아닙니다.

인증은 유효한 캐시를 먼저 사용하고 필요할 때 갱신합니다. 비밀번호와 세션은 OS 자격증명 저장소 또는 암호화 저장소에서 관리합니다. 캐시와 다운로드 파일은 로컬에 저장하고, 도구 결과는 연결된 MCP 클라이언트에 전달합니다. 과제 제출은 기본적으로 사전 검증하며, 실제 제출과 재제출에 확인 절차를 둡니다.

공개 다이어그램은 구성요소의 책임과 데이터 흐름을 설명합니다. 내부 엔드포인트, 인증 메시지 형식, 세션 핸드셰이크 순서는 포함하지 않습니다.

네트워크 프로파일링: 490회 차이는 어디서 나왔나

같은 강의 6개를 각 구현으로 1회씩 추가 조회해 요청 유형을 집계했습니다. 추가 실행에서도 반환 결과의 해시는 앞선 비교와 같았습니다.

브라우저 요청 유형

관측 요청 수

JavaScript

168

CSS

66

이미지

36

폰트

154

HTML 문서

12

fetch·XHR

72

ping

6

합계

514

JavaScript·CSS·이미지·폰트만 424회로, 전체의 약 82.5%였습니다. 브라우저 기반 구현은 강의마다 새 컨텍스트에서 화면을 로딩한 뒤 자료 목록 응답을 수집했습니다. 컨텍스트 간 일반적인 브라우저 HTTP 캐시를 재사용하지 않아 화면 리소스 로딩이 반복됐습니다.

HTTP 기반 구현은 화면 리소스를 실행하지 않고 필요한 인증·데이터 요청만 수행해 총 24회를 기록했습니다. 브라우저 기반 조건에서는 Chromium이 실행마다 7회 시작됐고, HTTP 조건에서는 0회였습니다. 화면 로딩을 생략한 것이 요청 감소의 주된 원인이며, 자식 브라우저 프로세스를 실행하지 않은 점도 메모리·CPU 비용 차이를 설명합니다.

요청 수는 HTTP 클라이언트와 브라우저의 요청 이벤트를 계수한 값입니다. 패킷 캡처로 검증한 네트워크 계층 전송 횟수는 아닙니다.

추가 실험: 동시 처리 수와 실행 환경

HTTP 조회 함수의 작업 풀에서 동시에 처리하는 강의 수를 1·2·3·6개로 제한했습니다. 모든 조건에서 같은 강의 6개를 전체 조회했고, 조건별 5회, 총 20회 실행했습니다. 실행 순서는 회차마다 순환했습니다.

동시 처리 강의 수

전체 실행시간 중앙값

최대 관측 RSS 중앙값

반환 결과

1

2.902초

180.5 MiB

54개, 동일 해시

2

1.599초

180.4 MiB

54개, 동일 해시

3

1.256초

180.7 MiB

54개, 동일 해시

6

0.902초

181.4 MiB

54개, 동일 해시

동시 6개 조건은 이번 실험의 순차 조건보다 약 3.22배 빨랐으며, 모든 실행의 요청 수는 24회였습니다. 앞선 순차 비교의 2.815초와 이번 2.902초는 서로 다른 시점의 측정값입니다.

이 작업 풀은 벤치마크에만 추가했으며, 제품의 동시 처리 정책을 변경한 결과가 아닙니다. 더 많은 동시 요청의 안정성이나 학교 서버의 허용 한도를 검증하지 않았으므로, 이 수치를 요청량 확대의 근거로 사용하지 않습니다.

동시 6개 조건을 컴파일된 JavaScript와 Node로 추가 5회 실행한 결과, 전체 실행시간 중앙값은 0.833초, 최대 관측 RSS 중앙값은 119.2 MiB였습니다. 개발 실행기인 tsx를 포함한 앞선 조건은 0.902초·181.4 MiB였습니다. 두 측정은 다른 시점에 진행했으며 네트워크 변동도 포함하므로, 실행시간 차이 전체를 실행기 비용으로 단정할 수 없습니다. 이 역시 자료 조회 하네스의 결과이며 전체 MCP 서버 메모리 측정은 아닙니다.

측정 조건과 해석 범위

  • Apple M4 arm64, Node.js 24.20.0. 브라우저 조건은 Playwright 1.60.0을 사용했습니다.

  • 각 실행은 새 프로세스와 기존 로그인·API 토큰 캐시를 사용했습니다. 신규 로그인, 토큰 발급, 영상 재생, 과제 제출, 파일 다운로드는 포함하지 않았습니다.

  • 기존 구현의 소스를 별도 디렉터리에 추출하고 현재 구현과 설치된 의존성을 공유했습니다. 각 버전을 독립 설치한 배포 패키지 비교는 아닙니다.

  • 전체 실행시간은 프로세스 시작부터 종료 관측까지로, 모듈 로딩과 종료 확인의 짧은 지연을 포함합니다. 실제 조회 구간의 중앙값은 브라우저 조건 12.710초, HTTP 순차 조건 2.609초였습니다.

  • RSS는 약 50ms 대기 간격으로 프로세스와 자식들의 값을 합산한 최대 관측값입니다. 관측 자체의 실행 시간이 추가되며, 짧은 피크를 놓치거나 공유 메모리를 중복 합산할 수 있습니다. CPU 시간은 운영체제의 user + system 값으로 자식 프로세스 비용을 포함합니다.

  • 첫 비교에서 브라우저 요청 수는 514–517회, HTTP 요청 수는 매번 24회였습니다. 요청 유형 표는 추가 1회 관측값입니다.

  • 학사 포털 조회는 두 구현 모두 실패해 공통 성공 작업 비교에서 제외했습니다. 이 결과를 포털 조회 성능 개선으로 해석할 수 없습니다.

  • 동시 처리 실험의 RSS 범위는 순차 180.4–212.3 MiB, 동시 2개 180.2–180.7 MiB, 3개 180.4–181.3 MiB, 6개 181.3–181.8 MiB였습니다.

  • 이 수치는 특정 시점의 강의 6개 자료 목록 조회에 대한 것입니다. 다른 API, 콜드 로그인, 다운로드, 장시간 운영의 성능이나 안정성으로 일반화하지 않습니다.

🔒 Security & Source Code Policy

본 프로젝트는 학교 LMS 서버의 보호와 무분별한 스크래핑 어뷰징(Rate-limit 유발) 방지를 위해, 내부 LTI 인증 역공학 및 세션 핸드셰이크 관련 코어 소스코드를 Private으로 전환하여 관리하고 있습니다. 일반 사용자용 사전 빌드된 네이티브 바이너리는 Releases 탭을 통해 배포할 예정이며, 현재는 배포 준비 중입니다. 아키텍처 설계 및 성능 최적화 과정은 본 문서의 벤치마크 리포트를 참고해 주시기 바랍니다.

소스 비공개화만으로 요청량 제한이나 안전한 사용이 보장되는 것은 아닙니다. 실제 사용 시 본인 계정의 학습 데이터만 다루고, 학교 서비스 정책과 서버 부하를 고려해야 합니다.

Available Tools

26 tools
eclass_doctorDoctorA
Read-onlyIdempotent

[로컬] 진단 도구. Playwright Chromium 실행 가능 여부를 빠르게 확인합니다. 다른 도구가 인증/브라우저 오류로 실패할 때 원인 파악용으로 사용하세요.

Inputs: no named parameters. Returns: checks, checked_at

eclass_download_fileDownload FileA

[네트워크] 강의 파일을 MCP 서버 로컬 디스크/캐시에 다운로드합니다. 이 도구는 ChatGPT에 파일 본문을 전달하지 않고 local_path/file_id 같은 서버 측 기록만 반환합니다. ChatGPT가 파일을 읽어야 하면 반환된 file_id로 eclass_file_handoff를 호출해 공개 /files/ URL을 발급하고, 그 URL을 브라우징으로 직접 열어야 합니다. 과목과 원본 ID가 일치하는 캐시 파일은 건너뜁니다. acquisition_policy/downloadable을 함께 전달하세요. 동영상/interactive/미확인/잠김은 정상 제외 상태로 반환하며 실제 실패만 isError=true와 JSON error_code/retryable을 반환합니다. 동영상은 eclass_download_video를 사용하세요.

Inputs: url (required), file_id (required), course_id (required), display_name (required), +12 more. Returns: ok, status, file_id, message, +10 more

eclass_download_materials_batchDownload Materials BatchA

[네트워크] 여러 파일 자료를 MCP 서버 로컬 디스크/캐시에 한 번에 다운로드합니다 (부분 성공 지원). 이 도구는 ChatGPT에 파일 본문을 전달하지 않고 file_id/local_path 같은 서버 측 기록만 반환합니다. ChatGPT가 파일을 읽어야 하면 각 file_id로 eclass_file_handoff를 호출해 공개 /files/ URL을 발급하고, 그 URL을 브라우징으로 직접 열어야 합니다. eclass_get_materials의 id/title을 file_id/display_name으로 매핑하고 분류·source·잠금 필드를 함께 전달하세요. 동영상 자료는 eclass_download_video로 별도 처리합니다.

Inputs: course_id (required), materials (required), continue_on_error. Returns: ok, results, summary, course_id, +1 more

eclass_download_videoDownload VideoA

[네트워크] OCS 메타데이터에서 확인한 직접 MP4 동영상을 검증 후 MCP 서버 로컬 디스크/캐시에 다운로드합니다 (제한시간 30분). 이 도구는 재생·진도·출석 API를 호출하지 않고 동영상 바이트도 ChatGPT에 전달하지 않습니다. 외부에서 받아야 하면 file_id="video:<video_id>"로 eclass_file_handoff를 호출해 공개 /files/ URL을 별도 발급해야 합니다. 캐시에는 file_id="video:<video_id>"로 기록되므로 재다운로드 시 eclass_remove_download에 이 형식을 사용하세요.

Inputs: url (required), video_id (required), course_id (required), display_name (required), +2 more. Returns: ok, message, skipped, strategy, +7 more

eclass_export_course_snapshotExport Course SnapshotA
Destructive

[네트워크] 한 강의의 현재 상태(강의 정보, 과제, 공지, 자료, 다운로드 현황, 선택적 성적)를 한 번에 JSON 또는 Markdown으로 내보냅니다. 강의 전반을 훑을 때는 개별 조회 여러 번 대신 이 도구 1회를 사용하세요. output_path 지정 시 파일로 저장(기존 파일은 overwrite=true 없이는 거부).

Inputs: course_id (required), format, overwrite, output_path, +1 more. Returns: ok, format, content, snapshot, +3 more

eclass_file_handoffFile HandoffA
Read-onlyIdempotent

[로컬/URL] 다운로드된 파일 본문을 tool 응답에 첨부하지 않고 /files/ URL만 발급합니다. ChatGPT가 직접 파일을 읽으려면 반환 URL이 공개 인터넷에서 접근 가능해야 하며, localhost/127.0.0.1 URL은 같은 머신의 사용자 브라우저 전용입니다. 공개 handoff가 필요하면 ECLASS_HANDOFF_BASE_URL을 공개 HTTPS reverse proxy/터널 주소로 설정한 뒤 다시 호출하세요. file_id는 eclass_search_downloads/eclass_list_downloads에서 얻습니다. 25MB 초과 파일은 거절됩니다(ECLASS_HANDOFF_MAX_BYTES로 조정).

Inputs: file_id (required). Returns: file_id, delivered, mime_type, size_bytes, +2 more

eclass_get_announcementsGet AnnouncementsB
Read-onlyIdempotent

[네트워크] 강의 공지사항을 가져옵니다

Inputs: course_id (required), limit. Returns: result

eclass_get_assignment_detailGet Assignment DetailA
Read-onlyIdempotent

[네트워크] 단일 과제의 상세 정보를 가져옵니다 (제출 유형, 마감/잠금 일시, 배점, 허용 확장자, 제출 여부/일시, 시도 횟수, 점수). 과제 제출 전 확인용.

Inputs: course_id (required), assignment_id (required). Returns: ok, message, retryable, assignment, +1 more

eclass_get_assignmentsGet AssignmentsA
Read-onlyIdempotent

[네트워크] 과제 및 퀴즈 목록을 가져옵니다. course_id 지정 시 submission_types가 포함되며(external_tool=LTI 과제는 API 제출 불가), days_ahead 상한 없이 해당 강의의 미래 마감 과제가 전부 반환됩니다.

Inputs: course_id, days_ahead, include_submitted. Returns: result

eclass_get_coursesGet CoursesA
Read-onlyIdempotent

[네트워크] e-Class 강의 목록을 새로 가져옵니다. 기본 current는 term 이름/ID·날짜로 판별한 이번 학기 일반 교과목만 반환하고 현재 강의 캐시를 교체합니다. all은 Canvas의 available/completed active 수강 이력(이전 학기·교육 포함), training은 보수적으로 분류한 예방/의무교육만 반환합니다. 현재 학기를 판별할 수 없으면 전체를 현재라고 오인하지 않고 실패하므로 scope=all로 원본 범위를 확인하세요.

Inputs: scope. Returns: result

eclass_get_courses_cachedGet Courses CachedA
Read-onlyIdempotent

[로컬] 캐시의 현재 학기 강의 스냅샷을 조회합니다. 네트워크 호출 없이 course_id ↔ 강의명 매핑에 사용합니다. course_id를 지정한 exact lookup은 이전 학기 catalog도 찾습니다. 캐시가 비어 있거나 학기가 바뀐 경우 eclass_get_courses의 기본 current 조회로 갱신하세요.

Inputs: course_id. Returns: result

eclass_get_download_statusGet Download StatusA
Read-onlyIdempotent

[로컬] MCP 서버 로컬 캐시의 다운로드 현황을 강의별로 요약 조회합니다. 이 도구는 파일 본문을 반환하지 않습니다. 파일 내용을 보려면 eclass_search_downloads/eclass_list_downloads로 file_id를 찾고 eclass_file_handoff로 공개 URL을 별도 발급해야 합니다. 강의명은 로컬 course cache를 사용합니다.

Inputs: course_id. Returns: mode, courses, downloads, handoff_note, +2 more

eclass_get_exam_scheduleGet Exam ScheduleA
Read-onlyIdempotent

[로컬] 저장된 중간/기말시험 시간표를 조회합니다. course_id와 query를 생략하면 해당 term/exam_type의 전체 시간표를 반환합니다. course_id 지정 시 SIS 확정 course_code+분반 exact match를 우선하며, 교양대학 과목(course_code가 PDF에 없음)은 강의명+분반 정규화 매칭으로 fallback합니다(matched_by로 구분). 모두 실패하면 reason=EXACT_MATCH_NOT_FOUND와 함께 전체 후보 목록(candidates)을 반환하므로 호출자가 직접 판단하세요. refresh=true와 term을 함께 주면 먼저 네트워크 동기화 후 조회합니다.

Inputs: term, query, refresh, course_id, +1 more. Returns: ok, mode, reason, matches, +4 more

eclass_get_gradesGet GradesA
Read-onlyIdempotent

[네트워크] 성적을 가져옵니다. 강의 단위 점수(current/final)와 과제별 점수/제출여부/채점일시를 포함합니다.

Inputs: course_id, include_assignments. Returns: ok, errors, courses

eclass_get_materialsGet MaterialsA
Read-onlyIdempotent

[네트워크] 강의 자료 목록/메타데이터를 가져옵니다 (모듈, 파일함, 강의자료실, 외부도구). 강의자료는 주차학습(modulebuilder), LearningX 강의자료실(courseresource), 공지 첨부(announcements), Canvas 모듈/외부 링크(modules/external)에 분산될 수 있으므로 한 source에서 자료를 찾았어도 다른 source를 생략하지 말고 결과를 합쳐 확인합니다. 같은 자료가 여러 source에서 발견되면 하나로 합치고 대표 source와 모든 출처 sources를 반환합니다. 제목만 같은 서로 다른 항목은 합치지 않습니다. 권장 1차 조회는 modulebuilder, courseresource, announcements, modules, external이며, Canvas 기본 파일함(files)은 Files 탭이 노출되거나 사용자가 명시적으로 요청한 경우에만 마지막으로 조회합니다. 중앙대 학생 계정에서 files 401은 권한 거부일 수 있으므로 토큰 만료로 보고 재로그인하지 않습니다. modulebuilder의 not_open placeholder URL은 제외합니다. Canvas 잠금 항목은 acquisition_policy=not_open으로 반환합니다. 모든 항목에 asset_kind/downloadable/acquisition_policy/resolution_reason/fingerprint를 반환하며 downloadable=true와 acquisition_policy=download인 항목만 파일 도구에 전달합니다. ExternalTool은 모듈명으로 분류하지 않으며 resolve_external=true이면 미확인 래퍼를 LTI로 추가 확인합니다. 이 도구는 파일 본문을 다운로드하거나 ChatGPT에 첨부하지 않습니다. 파일은 eclass_download_file/eclass_download_materials_batch로 MCP 서버 로컬 캐시에 받은 뒤, ChatGPT가 읽어야 하면 eclass_file_handoff로 공개 /files/ URL을 별도 발급해야 합니다. 반환값은 { ok, course_id, sources, materials, errors, warnings } JSON 객체이며, 일부 source 실패 시 성공한 자료와 실패 정보를 함께 반환합니다.

Inputs: course_id (required), sources, resolve_external. Returns: ok, errors, sources, warnings, +2 more

eclass_get_syllabusGet SyllabusA
Read-onlyIdempotent

[mportal] 특정 강의의 강의계획서 본문을 구조화해 반환합니다(교재·평가비율·주차일정·교수정보 등). 입력 키는 eclass_search_syllabus 결과 행을 그대로 넘기세요.

Inputs: term (required), year (required), clssno1 (required), sbjtno1 (required), +2 more. Returns: ok, message, document, retryable, +1 more

eclass_list_downloadsList DownloadsA
Read-onlyIdempotent

[로컬] MCP 서버 로컬 캐시에 저장된 다운로드 기록 전체를 나열합니다. 이 도구는 파일 본문을 반환하지 않습니다. ChatGPT가 파일을 읽어야 하면 file_id로 eclass_file_handoff를 호출해 공개 /files/ URL을 별도 발급해야 합니다. 조건 검색은 eclass_search_downloads, 강의별 요약은 eclass_get_download_status를 사용하세요.

Inputs: course_id. Returns: result

eclass_list_exam_sourcesList Exam SourcesA
Read-onlyIdempotent

[로컬/네트워크] 시험 공지 소스 목록을 조회합니다. refresh=true면 중앙대 대학 목록에서 단과대 후보를 갱신합니다.

Inputs: refresh. Returns: ok, sources, partial_failures

eclass_remove_downloadRemove DownloadA
Destructive

[로컬] 다운로드 기록(DB 레코드)만 삭제합니다 — 디스크의 파일은 남습니다. 삭제 후 재다운로드가 가능합니다. 영상 기록의 file_id는 "video:<video_id>" 형식입니다.

Inputs: file_id, course_id. Returns: file_id, removed, course_id

eclass_search_downloadsSearch DownloadsA
Read-onlyIdempotent

[로컬] MCP 서버 로컬 캐시에 다운로드된 파일 기록만 필터 검색합니다 (파일명/강의명/확장자/source/다운로드 날짜 범위). 이 도구는 파일 본문을 반환하지 않습니다. ChatGPT가 파일을 보려면 검색된 file_id로 eclass_file_handoff를 호출해 공개 /files/ URL을 발급하고, 그 URL을 브라우징으로 직접 열어야 합니다. 전체 나열은 eclass_list_downloads, 강의별 요약은 eclass_get_download_status를 사용하세요.

Inputs: limit, query, source, course_id, +3 more. Returns: limit, matches, handoff_note, total_matched

eclass_search_syllabusSearch SyllabusA
Read-onlyIdempotent

[mportal] 강의계획서를 검색합니다. year/term 미지정 시 현재 학기. 후보 목록(학수번호·분반·강의명·교수·단과대·강의시간)을 반환하니 호출자가 판단해 eclass_get_syllabus로 상세를 받으세요.

Inputs: query (required), by, term, year. Returns: ok, items, message, retryable, +1 more

eclass_submit_assignmentSubmit AssignmentA
Destructive

[네트워크] 과제를 제출합니다. 기본 dry_run=true로 실제 제출하지 않고 검증만 수행하며, 재제출은 confirm_resubmit=true가 필요합니다. online_upload(file_paths)/online_text_entry(body)만 지원 — submission_types가 external_tool(LTI)인 과제는 제출 불가하므로 eclass_get_assignment_detail로 먼저 확인하세요. API 실패 시 UI 폴백은 단일 파일만 지원합니다.

Inputs: course_id (required), assignment_id (required), body, comment, +3 more. Returns: ok, mode, attempt, message, +8 more

eclass_sync_course_metadataSync Course MetadataA

[네트워크] 시험 시간표 매칭용 강의 메타데이터를 동기화합니다. LearningX SIS(개설강좌 정보)에서 개설대학/학과/교수/과목코드/분반 확정값을 받아 저장하고(source=learningx_sis), SIS 조회 실패 시 Canvas 기본 정보만 보존합니다(source=canvas_only, sis_error 포함).

Inputs: force, course_id. Returns: ok, errors, synced

eclass_sync_exam_schedulesSync Exam SchedulesA

[네트워크] 지정한 학기의 중간/기말시험 공지를 탐색하고 PDF 시간표를 다운로드/정규화해 별도 시험 DB에 저장합니다. pdftotext가 없으면 문서만 저장하고 파싱 실패를 partial_failures에 남깁니다.

Inputs: term (required), force, course_id, exam_type, +1 more. Returns: ok, term, documents, exam_type, +2 more

fetchFetch eclass documentA
Read-onlyIdempotent

[표준] search 결과의 id를 받아 원문/상세 텍스트를 반환합니다. ChatGPT/connector 호환용 read-only fetch 도구입니다. 다운로드 항목(eclass://download/<file_id>)은 파일 본문을 반환하지 않습니다. HTTP transport에서는 공개 설정된 /files/ URL만 반환하며, ChatGPT가 파일을 읽으려면 MCP tool이 아니라 브라우징으로 그 URL을 직접 열어야 합니다. 공개 URL이 아닌 localhost URL이면 MCP 서버 운영자가 ECLASS_HANDOFF_BASE_URL을 공개 HTTPS 주소로 설정해 URL을 다시 발급해야 합니다.

Inputs: id (required). Returns: id, url, text, title, +1 more

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 26 tools

    Disambiguation3/5

    Several tools overlap in purpose: search/fetch duplicate aspects of specific eclass_* retrieval tools, export_course_snapshot overlaps with individual get_* calls, and download query tools split across status/list/search. Descriptions help clarify boundaries, but an agent must read carefully to avoid misselection.

    Naming Consistency4/5

    Most tools use a consistent eclass_ prefix with snake_case verb_noun naming, such as eclass_get_courses and eclass_submit_assignment. The only deviations are the generic standard tools search and fetch, which are readable and intentionally different.

    Tool Count2/5

    With 26 tools, the server is heavy for an LMS client surface and exceeds the typical 3-15 well-scoped range. Several adjacent tools, especially download/query and retrieval variants, could likely be consolidated.

    Completeness4/5

    Coverage is strong across courses, assignments, grades, announcements, materials, downloads, videos, syllabus, exam schedules, submission, export, and handoff. Minor gaps remain for richer interactive LMS features, but core student workflows are well represented.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers