Content
Tool List
Put a batch of capabilities of "Zhejiang University Learning Platform / Zhi Yun Classroom" into **MCP tools**, which can be called on demand by Claude Code, Cursor, or any MCP client -
use a natural language to check to-do lists, view course schedules, pull classroom voice transcripts, and even submit assignments.
- **Single file, zero third-party dependencies**: only use Node built-in capabilities (`fetch` / `FormData` / `crypto` etc.), a single `zju-mcp.mjs` file can be run.
- **Run locally, credentials do not go to the cloud**: login reverse and RSA encryption are completed on your, passwords are not sent in plaintext, and `.env` is not version library.
> ⚠️ **Read disclaimer first**: This project is for personal learning and self-use only, reverse from publicly accessible web login process are responsible for your own use, comply with school regulations; please do for batch crawling, brushingrupting platforms, etc. Write operations / retract assignments) will change** your account on Zhejiang University Learning Platform, please be cautious.
---
## Quick Start
```bash 1. Clone to local
git clone https://github.com/EvRoses2/vibe-zju.git
cd-in-zju
# 2. Configure credentials: copy template and fill in your student ID / password
cp .env.example .env
# Then open .env with an editor, fill ZJU_USER / ZJU_PASS
```
Requires **Node 18+** (uses built-in `fetch`). Confirm with `node -v`.
In Claude Code / Cursor and other clients' `mcpServers` configuration, add a line ( path with your actual clone path):
```json
{
"m": {
"zju": {
"command": " "args": ["/path/to/vibe-learning-in-zju-mcp.mjs"],
"env": { "ZJU_USER": "your student ID", "ZJU_PASS": "your password }
}
}
```
, directly say "list my to-do list" "today's schedule" "give me today's second lesson transcript" in the conversation to trigger.
---
## Tool List
-only Tools
| Tool | What can it do | Parameters |
|---|---|---|
| `zju_list_todos` | List to-do assignments/quizzes/surveys, including course name, type, and None |
| `zju_list_courses` | List all "My Courses", including course `id`, name, code, teacher, learning progress | `` (filter by course name `status?` (`ongoing`/`notStarted`/`ended`) |
| `zju_list_course_homework` | List all a course, including each assignment's `activity_id`, status, and teacher's comments | `course_id` (required), `mission?` (default with submission details/score) |
| `zju_get_schedule` | Check the schedule of a certain day/period of Zhi Yun Classroom, including each lesson's `sub_id`, teacher, classroom, time | `date?`, `end_date?` (`YYYY-MM-DD`, omit = today) |
| `zju_get_transcript` | Pull the voice recognition transcript of a lesson (segmented Chinese, with timestamps) | `sub_id` (required), `max_segments `with_translation?` |
Typical link: `zju` gets a lesson's `sub_id` → pass to `_transcript` to.
### Write Operations (will Zhejiang University Learning Platform, use with caution)
| Tool | What can it do | Parameters |
|---|---|---|
| `zju_submit` | Submit a local file assignment | `activity_id`, `file_path` (local absolute `comment?` ( |
| `zju_retract_homework` | Retract assignment, back to draftrequires teacher's permission) | `activity_id` |
`activity comes from `zju_list_todos` or `zju_list_course_homework`. Submission is real delivery, if wrong, useju_retract_homework` to retract.
---
## Typical Application Cases
### Case 1: One-click to digest a lesson
No need to replay a 2-hour video after class? Let AI read the transcript directly and help you digest the lesson:
> "Pull out today's 'Intelligent Control' lesson transcript, summarize what was taught, what assignments were given, and if there or a quiz."
AI will automatically `zju_get to find the lessonsub_id` → `zju_get_transcript` to get the full transcript, then produce for you:
- **Lesson highlights**: the core content of the teacher's lecture condensed into a few points.
- **Assignment reminders**: orally assigned homework / deadlines.
- **Attendance and quizzes**: attendance, quizzes, bonus questions, etc. mentioned in the transcript, don't miss your usual points.
### Case 2: completion of assignments
From "seeing assignments" to "getting let AI handle it all:
> "Check what unsubmitted assignments in the 'Digital Signal Processing' course, help me do them and, and check the score after submission."
A link runs1. **Grab assignments** — `zju_list_courses the course → `zju_list_course_homework` list assignments, read out the requirements.
2. **Do assignments** generates answers based on requirements, writes them into a file, it locally.
3. **Submit** — `zju_submit_home submit the file, return `submission_id` and read.
4. **Check score** — after the teacher's markingzju_list_course_homework` (with `include_sub read back the score and comments.
> ⚠️ This step will really submit to your account. It is recommended to let AI review the generated answers, confirm they are correct, and then let it submit;, use `zju_retract_homework` to retract## Pre-constraints
- **Must run on a local machine network**: `courses.zju.edu.cn` and `*..zju.edu.cn` are only open to domestic IPs, be accessed from abroad (cloud / remote agent).
- Node **18+** (uses built-in`).
- Credentials: fill `.env` or write into MCP client's configuration `env` block.
## Disclaimer
- This project is for personal learning purposes, reverse from publicly accessible web login and interface processes, without any bypass authentication or crawling of others' data.
- Users must comply with Zhejiang University and related platform usage regulations, and are responsible for all consequences arising from the use of this tool.
- Submission / of assignments and other write operations will really change your account data, please use them with full understanding of their semantics.
- If the school or platform considers it inappropriate, please issue, and the author will cooperate with the removal.