Skip to main content
Glama
jseook11

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

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoHTTP transport port (alternative to ECLASS_HTTP_PORT)8787
DEBUGNoWhen 1, enables stderr debug logsfalse
ECLASS_DB_PATHNoDownload/course cache DB path~/.eclass-mcp/files.db
ECLASS_PASSWORDNoPlaintext env password. Only used when ALLOW_PLAINTEXT_ENV_SECRETS=1. Does not replace secure backend for Canvas tokens/sessions.
ECLASS_USERNAMEYeseclass login ID (required)
ECLASS_HTTP_PORTNoHTTP transport port8787
ECLASS_TRANSPORTNoSet to http to run remote MCP HTTP serverstdio
ECLASS_SECRET_KEYNoEncrypted backend master key (32-byte base64). Inject at runtime.
ECLASS_DOWNLOAD_DIRNoDownload storage location~/Downloads/eclass
ECLASS_EXAM_DB_PATHNoExam schedule dedicated DB path~/.eclass-mcp/exams.db
CONTROL_PLANE_API_KEYNoOpenAI tunnel runtime API key (Tunnels Read+Use). Used by pnpm run chatgptui.
ECLASS_ENC_STORE_PATHNoEncrypted password file path~/.eclass-mcp/secrets.enc
ECLASS_SECRET_KEY_FILENoPath to a 0600 master key file outside the repo (raw 32 bytes or base64 text).
CONTROL_PLANE_TUNNEL_IDNoTunnel identifier issued by Platform Tunnels.
ECLASS_HANDOFF_MAX_BYTESNoMaximum file size (bytes) for eclass_file_handoff URL handoff. Default 25MB.26214400
ECLASS_REMOTE_AUTH_TOKENNoWhen set, enforces Bearer or X-Eclass-Auth authentication on /mcp
ECLASS_CREDENTIAL_BACKENDNoForce encrypted / keytar; file is legacy read-only. auto uses encrypted then keytar, fails if neither available.auto
ECLASS_TUNNEL_PROFILE_FILENoOverride tunnel-client profile path${XDG_CONFIG_HOME:-~/.config}/tunnel-client/eclass-mcp.yaml
ALLOW_PLAINTEXT_ENV_SECRETSNoWhen 1, allows ECLASS_PASSWORD env. Keytar/encrypted backend for tokens/sessions is still separately required.false
ECLASS_HTTP_ALLOWED_ORIGINSNoComma-separated CORS origin allowlist for HTTP. When unset, browser requests with Origin header are rejected by default.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
eclass_get_coursesA

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

eclass_get_courses_cachedA

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

eclass_doctorA

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

eclass_get_assignmentsA

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

eclass_get_assignment_detailA

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

eclass_get_gradesA

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

eclass_sync_course_metadataA

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

eclass_sync_exam_schedulesA

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

eclass_get_exam_scheduleA

[로컬] 저장된 중간/기말시험 시간표를 조회합니다. 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을 함께 주면 먼저 네트워크 동기화 후 조회합니다.

eclass_list_exam_sourcesA

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

eclass_search_syllabusA

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

eclass_get_syllabusA

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

eclass_submit_assignmentA

[네트워크] 과제를 제출합니다. 기본 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 폴백은 단일 파일만 지원합니다.

eclass_search_downloadsA

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

eclass_export_course_snapshotA

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

eclass_get_announcementsB

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

eclass_get_materialsA

[네트워크] 강의 자료 목록/메타데이터를 가져옵니다 (모듈, 파일함, 강의자료실, 외부도구). 강의자료는 주차학습(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 실패 시 성공한 자료와 실패 정보를 함께 반환합니다.

eclass_download_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를 사용하세요.

eclass_download_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로 별도 처리합니다.

eclass_download_videoA

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

eclass_list_downloadsA

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

eclass_get_download_statusA

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

eclass_remove_downloadA

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

eclass_file_handoffA

[로컬/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로 조정).

searchA

[표준] eclass 강의, 과제, 공지, 자료, 강의계획서, MCP 서버 로컬 다운로드 기록을 통합 검색합니다. ChatGPT/connector 호환용 read-only search 도구입니다. 다운로드 기록은 파일 본문이 아니라 서버 측 file_id/local_path 메타데이터입니다. ChatGPT가 파일 내용을 보려면 fetch 또는 eclass_file_handoff로 공개 /files/ URL을 받은 뒤 그 URL을 브라우징으로 직접 열어야 합니다. 공지/자료 본문 스캔은 비용 제어를 위해 검색어가 강의명과 일치하는 일부 강의로 제한됩니다.

fetchA

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

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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

ActivityMaintained
ResponsivenessNo issues