Skip to main content
Glama
aongzera

MyCourseVille MCP Server

by aongzera

MyCourseVille MCP Server

AI 에이전트가 사용자의 MyCourseVille 계정에 접근할 수 있게 해 주는 MCP 서버입니다. 마감일과 설명이 포함된 새 과제, 강의 자료, 공개된 성적 — 그리고 "지난번 이후 변경된 내용" 피드까지 제공합니다.

자체 계정 데이터를 위한 개인 도구입니다. 폴링 간격은 예의 있게 유지하고, 자격 증명을 절대 커밋하지 마세요.

작동 방식

MCV에는 공식 OAuth2 API(/api/v1/public/get/*)가 있지만, 앱을 등록해야 client_id/client_secret을 받을 수 있고 엔드포인트 이름도 공개 문서화되어 있지 않습니다. 이 서버는 대신 MCV 웹 클라이언트와 똑같은 방식으로 로그인합니다 — 기본적으로 IT Chula SSO 버튼을 통하거나, 일반 MCV 폼을 통해서입니다. 그런 다음 브라우저에 제공되는 것과 동일한 서버 렌더링 강좌 페이지를 읽습니다. 자료는 강좌 홈에서, 마감일은 /assignment에서, 성적은 /portfolio-<student id>에서 가져옵니다. 자세한 내용은 docs/ENDPOINTS.md를 참조하세요.

가져온 데이터는 로컬 SQLite 스냅샷에 유지됩니다. 모든 동기화는 그 스냅샷과 비교(diff)해서 events 로그에 추가합니다. whats_new는 그 로그를 읽으므로, 지난번 확인 이후 나타난 것을 서버가 알려줄 수 있습니다. 백그라운드 폴러가 일정 간격으로 새로고침하기 때문에 채팅이 열려 있지 않아도 새 과제를 감지할 수 있습니다.

"새"에 관해: MCV가 게시 시점 타임스탬프를 신뢰할 수 있게 제공하지 않으므로, first_seen — 이 서버가 항목을 처음 관찰한 시점 — 을 대신 사용합니다. 첫 동기화는 전체 학기가 새로 조용히 채우는 대신, 조용히 전부 백필합니다.

Related MCP server: UofT Student Helper MCP Server

설치

uv sync --extra dev
cp .env.example .env      # then fill in MCV_USERNAME / MCV_PASSWORD
uv run mcv-mcp --selftest

--selftest는 로그인하고, 동기화를 한 번 수행한 다음 발견한 강좌 수, 과제 수, 자료 수, 성적 수를 출력합니다. 에이전트를 연결하기 전에 이 명령이 동작하는지 확인하세요.

Claude Code에 등록:

claude mcp add mcv -- uv --directory C:\Users\velys\Documents\mcp_mcv run mcv-mcp

그리고 상태 좀 물어보세요: "이번 주에 마감인 게 뭐야?", "어제 이후 MCV 갱신된 게 뭘까?", "Comp Prog 최신 슬라이드를 다운로드해 주세요."

도구

도구

설명

whats_new

어느 시점 이후 새롭게 나타났거나 변한 진도곤재, 자료, 성적

list_upcoming_deadlines

다음 N일 이내로 마감인 것, 임박한 순서대로

list_courses

수강 중인 강좌 (옵션으로 특정 학기만)

list_courses

마감일과 설명을 담은 과제 목록

get_assignment

하나의 과308제에 대한 전체 상세

list_materials

강좌에 올라온 파일 (폴더, 이름, URL)

download_material

파일을 로컬에 저장; PDF 텍스트를 추출해 읽을 수 있게 하는 것

list_grades

공개된 성적인

sync_now

강제 새로고침 (full=true를 활용하면 모든 학기)

auth_status

진단 정보: 로그인 상태, 최근 동기화, 행 수

환경설정

변수 / 값

기본값

설명

MCV_USERNAME / MCV_PASSWORD

MCV 로그인 정보

MCV_LOGIN_METHOD

itchula

IT Chula SSO 버튼은 itchula, 일반 폼은 mcv

MCV_POLL_MINUTES

30

폴럼 주기 (하한 10)

MCV_POLL_ENABLED

1

0으로 설정하면 백그라운드 폴링 비활성화

MCV_STATE_DIR

%LOCALAPPDATA%\mcv_mcp

DB, 쿠키, 다운로드 파일이 저장되는 디렉터리

상태 값은 저장소(repo) 외부에 보관됩니다. 쿠키가 영구 저장되므로 재시작해도 로그인을 다시 필요로 하지 않습니다.

폴러를 별도로 실행하려면 (예: Task Scheduler에서) 다음과 같이 합니다:

uv run python -m mcv_mcp.poller

구성

[초호았다] The following code.

src/mcv_mcp/
  config.py    settings, URLs, state paths
  client.py    Chula SSO login, cookie persistence, throttled AJAX transport
  parsers.py   HTML -> dicts (pure functions, fixture-tested)
  store.py     SQLite snapshot + event log
  sync.py      orchestration + background poller
  server.py    MCP tool definitions

MVC의 마크업은 가장 취약한 규격이고, 그 부분은 parsers.py 안에 모아 두었습니다. 어떤 기능이 행을 반환하지 않게 되면 새 fixture를 캡처하고 (문서 링크) 해당 선택자를 수정하세요.

현재 상태

실제 계정으로 검증되었습니다: 로그인, 네 개의 모든 파서, 다운로드, 변경 감지 종단간 동작이 확인되었습니다. 대표 동기화에서 강좌 9개, 과제 20개 (모두 마감일 존재), 자료 112건, 성적 69건을 가져왔습니다. 다음 동기화에서는 변경이 0건으로 보고되어, 실제로 무언가 변하기 전까지 diff 로그는 조용히 유지됩니다.

알려진 제한사항:

  • 성적 공지는 폴링으로 감지되며 푸시되지 않습니다. 성적이 나타나면 한 번의 폴링 간격 (기본값 30분) 이내에 grade_changed 이벤트로 알 수 있습니다.

  • 현재 학기만 동기화됩니다. sync_nowfull=true를 전달하지 않으면 마찬가지로 현재 학기만 동기화됩니다.

  • MCV의 마크업은 취약한 부분입니다. 어떤 파서가 행을0개 반환하기 시작하면 테스트 픽서쳐를 새로 저장하고 파서 셀렉터를 수정하세요 — 자세한 것은 docs/ENDPOINTS.md을 참고하세요.

개발

uv run pytest
Install Server
F
license - not found
A
quality
C
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

  • Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.

  • Brazilian Open Finance MCP — 30+ banks (Itaú, Nubank, etc.) to Claude/Cursor. Read-only.

  • Cross-AI personal memory. Save once in ChatGPT, recall in Claude, Mistral, Grok, or any MCP client.

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/aongzera/mcv-mcp'

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