内容
# vibe-learning-in-zju(zju-mcp)
把「学在浙大 / 智云课堂」的一批能力封装成 **MCP 工具**,供 Claude Code、Cursor、或任意 MCP 客户端按需调用——
用一句自然语言就能查待办、看课表、拉课堂语音转录、甚至提交作业。
- **单文件、零第三方依赖**:只用 Node 内置能力(`fetch` / `FormData` / `crypto` 等),一个 `zju-mcp.mjs` 跑起来即可。
- **本地运行、凭据不上云**:登录逆向与 RSA 加密都在你本机完成,密码不明文上行,`.env` 不进版本库。
> ⚠️ **先读免责声明**:本项目仅供个人学习与自用,逆向自公开的网页登录流程。你需自行对使用行为负责,遵守学校相关规定;请勿用于批量抓取、代刷、扰乱平台等行为。写操作(提交/撤回作业)会**真实改动**你的学在浙大账户,务必谨慎。
---
## 快速开始
```bash
# 1. 克隆到本地
git clone https://github.com/EviterLesRoses2/vibe-learning-in-zju.git
cd vibe-learning-in-zju
# 2. 配置凭据:复制模板并填入你的学号 / 密码
cp .env.example .env
# 然后用编辑器打开 .env,填 ZJU_USER / ZJU_PASS
```
要求 **Node 18+**(用到内置 `fetch`)。用 `node -v` 确认。
在 Claude Code / Cursor 等客户端的 `mcpServers` 配置里加一条(把路径换成你实际 clone 的绝对路径):
```json
{
"mcpServers": {
"zju": {
"command": "node",
"args": ["/path/to/vibe-learning-in-zju/zju-mcp.mjs"],
"env": { "ZJU_USER": "你的学号", "ZJU_PASS": "你的密码" }
}
}
}
```
接好后在对话里直接说「列一下我的浙大待办」「今天课表」「把今天第二节课的转录给我」即可触发。
---
## 工具一览
### 只读工具
| 工具 | 能做什么 | 参数 |
|---|---|---|
| `zju_list_todos` | 列出待办的作业/考试/测验/问卷,含课程名、类型和截止日 | 无 |
| `zju_list_courses` | 列出「我的课程」里的所有课程,含课程 `id`、名称、代码、学期、教师、学习进度 | `keyword?`(按课程名/代码过滤)、`status?`(`ongoing`/`notStarted`/`ended`) |
| `zju_list_course_homework` | 列出某门课下的所有作业,含每个作业的 `activity_id`、状态、成绩和老师评语 | `course_id`(必填)、`include_submission?`(默认带上提交详情/成绩) |
| `zju_get_schedule` | 查智云课堂某天/某段时间的课表,含每节课的 `sub_id`、老师、教室、时间 | `date?`、`end_date?`(`YYYY-MM-DD`,省略=今天) |
| `zju_get_transcript` | 拉取某节课的语音识别转录(逐段中文、带时间戳) | `sub_id`(必填)、`max_segments?`、`with_translation?` |
典型链路:`zju_get_schedule` 拿到某节课的 `sub_id` → 传给 `zju_get_transcript` 取转录。
### 写操作(会真实改动学在浙大,谨慎使用)
| 工具 | 能做什么 | 参数 |
|---|---|---|
| `zju_submit_homework` | 把本地文件作为作业提交 | `activity_id`、`file_path`(本地绝对路径)、`comment?`(附言) |
| `zju_retract_homework` | 撤回已提交的作业,回到草稿态(需老师允许撤回) | `activity_id` |
`activity_id` 来自 `zju_list_todos` 或 `zju_list_course_homework`。提交是真实交付,交错了用 `zju_retract_homework` 撤回。
---
## 典型应用案例
### 案例一:一键消化一节课
课后不想回放两小时录像?让 AI 直接读转录,帮你把这节课嚼碎:
> 「把我今天《智能控制》那节课的转录拉出来,总结这节讲了什么、布置了什么作业,有没有点名或课堂小测。」
AI 会自动 `zju_get_schedule` 找到这节课的 `sub_id` → `zju_get_transcript` 取全程转录,然后替你产出:
- **本节要点**:老师讲的核心内容浓缩成几条。
- **作业提醒**:口头布置的作业 / 截止时间。
- **点名与小测**:转录里出现的点名、随堂小测、加分提问等,别再错过平时分。
### 案例二:全自动完成作业
从「看到作业」到「拿到分数」全程交给 AI:
> 「看看《数字信号处理》这门课有哪些没交的作业,帮我做完并提交,交完把分数也查一下。」
一条链路跑通:
1. **抓作业** — `zju_list_courses` 定位课程 → `zju_list_course_homework` 列出未交作业,读出题目要求。
2. **做作业** — AI 根据要求生成解答,写成文件存到本地。
3. **提交** — `zju_submit_homework` 把文件交上去,返回 `submission_id` 与读回确认。
4. **查分** — 等老师批改后,`zju_list_course_homework`(带 `include_submission`)读回成绩和评语。
> ⚠️ 这一步会真实提交到你的账户。建议先让 AI 把生成的答案给你过目,确认无误再让它提交;交错了可用 `zju_retract_homework` 撤回。
---
## 前置约束
- **必须在国内网络的本机运行**:`courses.zju.edu.cn` 与 `*.cmc.zju.edu.cn` 只对国内 IP 开放,境外(云端 / 远程 agent)抓不到。
- Node **18+**(用到内置 `fetch`)。
- 凭据二选一:填 `.env`,或写进 MCP 客户端配置的 `env` 块。
## 免责声明
- 本项目为个人学习用途,逆向对象为公开可访问的网页登录与接口流程,不含任何绕过鉴权、爬取他人数据的能力。
- 使用者需自行遵守浙江大学及相关平台的使用规定,因使用本工具产生的一切后果由使用者自行承担。
- 提交/撤回作业等写操作会真实改动你的账户数据,请在充分理解语义后使用。
- 如学校或平台方认为不妥,请提 issue,作者会配合下架。