fdu-cli 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,726 @@
1
+ # fdu 命令参考
2
+
3
+ > 由 `npm run docs` 根据代码里的操作表生成,不要手改。
4
+
5
+ 所有命令输出 JSON:成功是 `{"ok":true,"op":...,"data":...}`,失败是 `{"ok":false,"error":{"code","message","hint"}}`。
6
+ 退出码:0 成功,2 参数错误,3 需要登录或配置(`NEED_LOGIN` / `NEED_HOLE_LOGIN` / `NEED_MAIL_SETUP`),1 其他错误。
7
+ MCP 工具名是把命令里的点换成下划线,如 `jw.grades` → `jw_grades`。
8
+ 简写:`fdu login` / `logout` / `status` / `doctor` / `today` / `week` / `todo`。
9
+ 只读查询的结果会缓存在本机:加 `--cached` 不联网直接返回上次的结果(带 `cachedAt`);联网失败时,错误里附上上次的结果 `cached: {at, data}`。
10
+
11
+ ## 汇总
12
+
13
+ 今天 / 这周的课、要交的作业、考试(简写 fdu today、fdu week)
14
+
15
+ ### `fdu overview today`
16
+
17
+ 今天的概况:今天的课(按教学周和放假安排筛好)、3 天内要交还没交的作业、7 天内的考试、过了截止还没交的作业。某一类读不到时其他照常返回,读不到的写在 errors 里。
18
+
19
+ 登录:复旦账号 · 只读 · MCP:`overview_today`
20
+
21
+ | 参数 | 类型 | 必填 | 说明 |
22
+ |---|---|---|---|
23
+ | `--date` | string | | 日期 YYYY-MM-DD,默认今天 |
24
+
25
+ ```bash
26
+ fdu today
27
+ fdu today --date 2026-11-09
28
+ ```
29
+
30
+ ### `fdu overview week`
31
+
32
+ 这一周(按校历从周日到周六)每天的课、本周要交的作业、本周的考试,以及第几教学周。
33
+
34
+ 登录:复旦账号 · 只读 · MCP:`overview_week`
35
+
36
+ | 参数 | 类型 | 必填 | 说明 |
37
+ |---|---|---|---|
38
+ | `--date` | string | | 这一周里的任意一天,默认今天 |
39
+
40
+ ```bash
41
+ fdu week
42
+ fdu week --date 2026-11-16
43
+ ```
44
+
45
+ ## 账号与环境
46
+
47
+ 登录复旦统一身份认证、查看登录状态、检查环境(简写 fdu login、fdu status、fdu doctor)
48
+
49
+ ### `fdu auth login`
50
+
51
+ 登录复旦统一身份认证:打开浏览器,你自己输入账号密码、完成二次验证;之后 eLearning、教务、校园卡等共用这个登录。
52
+
53
+ 登录:不用 · 登录 / 退出 · MCP:`auth_login`
54
+
55
+ | 参数 | 类型 | 必填 | 说明 |
56
+ |---|---|---|---|
57
+ | `--webvpn` | boolean | | 顺便建立 WebVPN 会话(校外访问树洞需要) |
58
+ | `--force` | boolean | | 丢弃已有登录状态,重新登录 |
59
+
60
+ ```bash
61
+ fdu login
62
+ fdu login --webvpn
63
+ ```
64
+
65
+ ### `fdu auth status`
66
+
67
+ 各系统的登录状态(复旦账号、WebVPN、树洞、学生邮箱)。
68
+
69
+ 登录:不用 · 只读 · MCP:`auth_status`
70
+
71
+ ### `fdu auth logout`
72
+
73
+ 删除本机保存的复旦账号登录状态(树洞、邮箱分别用 fdu hole logout、fdu mail forget)。
74
+
75
+ 登录:不用 · 登录 / 退出 · 仅命令行
76
+
77
+ ### `fdu auth doctor`
78
+
79
+ 检查运行环境:Node.js、浏览器、配置目录、能不能连上各个学校系统、各账号的登录状态,每项给出修复建议(结果里没有账号和 Cookie,可以直接发给别人帮忙看)。
80
+
81
+ 登录:不用 · 只读 · MCP:`auth_doctor`
82
+
83
+ ```bash
84
+ fdu doctor
85
+ ```
86
+
87
+ ## eLearning
88
+
89
+ 课程、作业和截止时间、公告、课件下载(简写 fdu todo)
90
+
91
+ ### `fdu elearning courses`
92
+
93
+ 本学期的 eLearning 课程(id、名称、课程代码、教师)。
94
+
95
+ 登录:复旦账号 · 只读 · MCP:`elearning_courses`
96
+
97
+ ### `fdu elearning assignments`
98
+
99
+ 作业列表:截止时间(含上海时间)、是否已提交。不传课程时列出全部课程。
100
+
101
+ 登录:复旦账号 · 只读 · MCP:`elearning_assignments`
102
+
103
+ | 参数 | 类型 | 必填 | 说明 |
104
+ |---|---|---|---|
105
+ | `--course` | string | | 课程 id 或名称关键词 |
106
+ | `--pending` | boolean | | 只看还没交的 |
107
+
108
+ ```bash
109
+ fdu elearning assignments --course 数据结构
110
+ fdu elearning assignments --pending
111
+ ```
112
+
113
+ ### `fdu elearning todo`
114
+
115
+ 接下来几天要交、还没交的作业(跨全部课程,按截止时间排序),以及已经过了截止时间还没交的。
116
+
117
+ 登录:复旦账号 · 只读 · MCP:`elearning_todo`
118
+
119
+ | 参数 | 类型 | 必填 | 说明 |
120
+ |---|---|---|---|
121
+ | `--days` | integer | | 往后看几天,默认 14 |
122
+
123
+ ### `fdu elearning announcements`
124
+
125
+ 课程公告(默认最近 14 天)。
126
+
127
+ 登录:复旦账号 · 只读 · MCP:`elearning_announcements`
128
+
129
+ | 参数 | 类型 | 必填 | 说明 |
130
+ |---|---|---|---|
131
+ | `--course` | string | | 课程 id 或名称关键词 |
132
+ | `--days` | integer | | 最近几天,默认 14 |
133
+
134
+ ### `fdu elearning files`
135
+
136
+ 某门课的课件和文件(id、文件名、大小、所在文件夹)。
137
+
138
+ 登录:复旦账号 · 只读 · MCP:`elearning_files`
139
+
140
+ | 参数 | 类型 | 必填 | 说明 |
141
+ |---|---|---|---|
142
+ | `--course` | string | 是 | 课程 id 或名称关键词 |
143
+ | `--search` | string | | 文件名关键词 |
144
+
145
+ ```bash
146
+ fdu elearning files --course 线性代数 --search 第5讲
147
+ ```
148
+
149
+ ### `fdu elearning download`
150
+
151
+ 下载一个课程文件到本机(默认当前目录;同名文件不覆盖,自动加序号;单个最大 200 MB)。
152
+
153
+ 登录:复旦账号 · 会写本机文件 · MCP:`elearning_download`
154
+
155
+ | 参数 | 类型 | 必填 | 说明 |
156
+ |---|---|---|---|
157
+ | `--file` | string | 是 | 文件 id(来自 elearning files) |
158
+ | `--out` | string | | 保存到哪个文件夹,默认当前目录 |
159
+
160
+ ## 教务系统
161
+
162
+ 课表、考试、成绩绩点、培养方案、选课结果、全校开课查询、教学大纲、教学周
163
+
164
+ ### `fdu jw semesters`
165
+
166
+ 教务系统里的学期列表(id、名称)和当前学期。
167
+
168
+ 登录:复旦账号 · 只读 · MCP:`jw_semesters`
169
+
170
+ ### `fdu jw week`
171
+
172
+ 某天是第几教学周、星期几、是否放假(按学校校历;校历没覆盖到的学期按教务系统的学期开始日期推算)。
173
+
174
+ 登录:不用 · 只读 · MCP:`jw_week`
175
+
176
+ | 参数 | 类型 | 必填 | 说明 |
177
+ |---|---|---|---|
178
+ | `--date` | string | | 日期 YYYY-MM-DD,默认今天 |
179
+
180
+ ### `fdu jw timetable`
181
+
182
+ 课表:每门课的上课时间(星期、节次、起止时间)、地点、教学周、教师。
183
+
184
+ 登录:复旦账号 · 只读 · MCP:`jw_timetable`
185
+
186
+ | 参数 | 类型 | 必填 | 说明 |
187
+ |---|---|---|---|
188
+ | `--semester` | string | | 学期 id 或名称关键词,默认当前学期 |
189
+ | `--postgraduate` | boolean | | 研究生课表(读研究生选课系统) |
190
+
191
+ ```bash
192
+ fdu jw timetable
193
+ fdu jw timetable --semester 2026-2027学年1学期
194
+ ```
195
+
196
+ ### `fdu jw exams`
197
+
198
+ 考试安排(课程、时间、考场),按时间排序。
199
+
200
+ 登录:复旦账号 · 只读 · MCP:`jw_exams`
201
+
202
+ | 参数 | 类型 | 必填 | 说明 |
203
+ |---|---|---|---|
204
+ | `--all` | boolean | | 也列出一个月以前考完的 |
205
+
206
+ ### `fdu jw grades`
207
+
208
+ 已出的成绩(按学期)和按学分加权的绩点(P/NP 不计)。
209
+
210
+ 登录:复旦账号 · 只读 · **隐私数据** · MCP:`jw_grades`
211
+
212
+ | 参数 | 类型 | 必填 | 说明 |
213
+ |---|---|---|---|
214
+ | `--semester` | string | | 只看某个学期(id 或名称关键词) |
215
+
216
+ ### `fdu jw gpa`
217
+
218
+ 教务系统里的绩点和本年级本院系排名(只返回你自己的一行和总人数)。
219
+
220
+ 登录:复旦账号 · 只读 · **隐私数据** · MCP:`jw_gpa`
221
+
222
+ | 参数 | 类型 | 必填 | 说明 |
223
+ |---|---|---|---|
224
+ | `--student-number` | string | | 学号,用来在排名表里找到你;不传时尝试从 eLearning 读取 |
225
+
226
+ ### `fdu jw program`
227
+
228
+ 培养方案完成情况:各类别要求学分、已获学分、还差多少。
229
+
230
+ 登录:复旦账号 · 只读 · **隐私数据** · MCP:`jw_program`
231
+
232
+ ### `fdu jw lessons`
233
+
234
+ 全校开课查询:按课程名搜某学期开的课(教学班代码、学分、任课老师、上课时间地点、限选和已选人数、考试方式),选课时用。
235
+
236
+ 登录:复旦账号 · 只读 · MCP:`jw_lessons`
237
+
238
+ | 参数 | 类型 | 必填 | 说明 |
239
+ |---|---|---|---|
240
+ | `--keyword` | string | 是 | 课程名(包含即可),如「数据结构」 |
241
+ | `--semester` | string | | 学期 id 或名称关键词,默认当前学期 |
242
+ | `--page` | integer | | 第几页,默认 1 |
243
+ | `--size` | integer | | 每页几条,默认 20 |
244
+ | `--syllabus` | boolean | | 同时读每个教学班的教学大纲(最多前 5 个,较慢) |
245
+
246
+ ```bash
247
+ fdu jw lessons --keyword 数据结构
248
+ fdu jw lessons --keyword 线性代数 --semester 2026-2027学年2学期
249
+ fdu jw lessons --keyword 数据结构 --syllabus
250
+ ```
251
+
252
+ ### `fdu jw syllabus`
253
+
254
+ 某个教学班的教学大纲:课程信息、简介、教学目标、每周内容安排、考核方式和权重、教材、教学团队。教学班 id 来自 fdu jw lessons。
255
+
256
+ 登录:复旦账号 · 只读 · MCP:`jw_syllabus`
257
+
258
+ | 参数 | 类型 | 必填 | 说明 |
259
+ |---|---|---|---|
260
+ | `--lesson` | string | 是 | 教学班 id(fdu jw lessons 结果里的 id) |
261
+ | `--max-chars` | integer | | 最多返回多少字,默认 30000 |
262
+
263
+ ```bash
264
+ fdu jw syllabus --lesson 1037803
265
+ ```
266
+
267
+ ### `fdu jw selected`
268
+
269
+ 选课结果:某学期已选上的课、学分和上课时间。
270
+
271
+ 登录:复旦账号 · 只读 · MCP:`jw_selected`
272
+
273
+ | 参数 | 类型 | 必填 | 说明 |
274
+ |---|---|---|---|
275
+ | `--which` | string | | current 当前学期(默认)、next 下学期,或学期名关键词 |
276
+
277
+ ## iCourse 课程回放
278
+
279
+ 找课程、讲次列表、课堂文字稿
280
+
281
+ ### `fdu icourse search`
282
+
283
+ 在 iCourse(课程回放)里按课程名或老师找课程,返回课程号。默认找最新学期。
284
+
285
+ 登录:复旦账号 · 只读 · MCP:`icourse_search`
286
+
287
+ | 参数 | 类型 | 必填 | 说明 |
288
+ |---|---|---|---|
289
+ | `--keyword` | string | 是 | 课程名或老师名 |
290
+ | `--term` | string | | iCourse 的学期编号(来自 icourse terms),默认最新学期 |
291
+ | `--limit` | integer | | 最多几条,默认 20 |
292
+
293
+ ```bash
294
+ fdu icourse search --keyword 数据结构
295
+ ```
296
+
297
+ ### `fdu icourse terms`
298
+
299
+ iCourse 上有课程的学期和对应的学期编号(新的在前)。
300
+
301
+ 登录:复旦账号 · 只读 · MCP:`icourse_terms`
302
+
303
+ ### `fdu icourse lectures`
304
+
305
+ 一门课在 iCourse 上的全部讲次:日期、节次、主讲人、有没有回放,按日期排序。
306
+
307
+ 登录:复旦账号 · 只读 · MCP:`icourse_lectures`
308
+
309
+ | 参数 | 类型 | 必填 | 说明 |
310
+ |---|---|---|---|
311
+ | `--course` | string | 是 | 课程号(来自 icourse search) |
312
+ | `--playback` | boolean | | 只看有回放的 |
313
+
314
+ ```bash
315
+ fdu icourse lectures --course 12345 --playback
316
+ ```
317
+
318
+ ### `fdu icourse transcript`
319
+
320
+ 某一讲的课堂文字稿(平台自动转写,带时间),可以用来总结这节课讲了什么。学校审核期内还没开放的回放会如实说明,不绕过。文字稿较长时分段返回。
321
+
322
+ 登录:复旦账号 · 只读 · MCP:`icourse_transcript`
323
+
324
+ | 参数 | 类型 | 必填 | 说明 |
325
+ |---|---|---|---|
326
+ | `--course` | string | 是 | 课程号 |
327
+ | `--lecture` | string | 是 | 讲次号(来自 icourse lectures 的 lectureId) |
328
+ | `--format` | text / segments | | text 按分钟合成段落(默认);segments 原始分段(开始、结束秒数) |
329
+ | `--offset` | integer | | 从第几个字开始(分段读取长文字稿用,默认 0) |
330
+ | `--max-chars` | integer | | 最多返回多少字,默认 30000 |
331
+
332
+ ```bash
333
+ fdu icourse transcript --course 12345 --lecture 67890
334
+ fdu icourse transcript --course 12345 --lecture 67890 --offset 30000
335
+ ```
336
+
337
+ ## 教室
338
+
339
+ 各教学楼每间教室的安排、空闲时段、现在的状态(经 WebVPN)
340
+
341
+ ### `fdu rooms login`
342
+
343
+ 登录空教室系统(学校多媒体教室的「在线课表」,校外经 WebVPN):打开窗口,按提示登录,看到课表后窗口自动关闭。
344
+
345
+ 登录:不用 · 登录 / 退出 · 仅命令行
346
+
347
+ ### `fdu rooms free`
348
+
349
+ 空教室:某栋楼某天某几节都空着的教室(按座位从多到少),以及空到什么时候。默认今天、从现在这节起两节。数据来自学校多媒体教室系统的在线课表。
350
+
351
+ 登录:复旦账号 · 只读 · MCP:`rooms_free`
352
+
353
+ | 参数 | 类型 | 必填 | 说明 |
354
+ |---|---|---|---|
355
+ | `--building` | string | 是 | 教学楼代码,多个用逗号分开:H2、H3、H4、H5、H6、HGX、HQ、JA、JB、F1、F2、Z2(H2 = 二教,HGX = 光华楼) |
356
+ | `--date` | string | | 日期 YYYY-MM-DD,默认今天 |
357
+ | `--from` | integer | | 从第几节(1–14),默认现在这一节 |
358
+ | `--to` | integer | | 到第几节(含),默认 from 的下一节 |
359
+ | `--min-seats` | integer | | 至少多少座位 |
360
+
361
+ ```bash
362
+ fdu rooms free --building H2
363
+ fdu rooms free --building H3,H4 --date 2026-11-10 --from 6 --to 8
364
+ ```
365
+
366
+ ### `fdu rooms day`
367
+
368
+ 教室的完整信息(给 AI 判断用):每栋楼的汇总(按楼层的教室数、座位,查今天时还有现在空着 / 在用几间),每间教室的楼层、座位、全天每段安排(节次、时间、课程代码、课名、老师、人数、临借活动等)、空闲时段;查今天时附上现在的状态(空到几点,或在上什么、到几点)。不指定楼时查全部教学楼(数据较多)。
369
+
370
+ 登录:复旦账号 · 只读 · MCP:`rooms_day`
371
+
372
+ | 参数 | 类型 | 必填 | 说明 |
373
+ |---|---|---|---|
374
+ | `--building` | string | | 教学楼代码,多个用逗号分开:H2、H3、H4、H5、H6、HGX、HQ、JA、JB、F1、F2、Z2(H2 = 二教,HGX = 光华楼);不填查全部 |
375
+ | `--date` | string | | 日期 YYYY-MM-DD,默认今天 |
376
+ | `--room` | string | | 只看某间教室,如 H2101 |
377
+ | `--brief` | boolean | | 简要:不列每节的课程,只给汇总、座位、现在的状态和空闲时段(查很多楼时用) |
378
+
379
+ ```bash
380
+ fdu rooms day --building H2
381
+ fdu rooms day --building H3,HGX --date 2026-11-10
382
+ fdu rooms day --brief
383
+ ```
384
+
385
+ ## 校园卡
386
+
387
+ 余额、消费记录和统计
388
+
389
+ ### `fdu card balance`
390
+
391
+ 校园卡余额。
392
+
393
+ 登录:复旦账号 · 只读 · MCP:`card_balance`
394
+
395
+ ### `fdu card transactions`
396
+
397
+ 校园卡消费记录(时间、类型、商户、金额;支出为负)和统计:总支出、充值、日均、按商户和餐次。默认最近 7 天。
398
+
399
+ 登录:复旦账号 · 只读 · **隐私数据** · MCP:`card_transactions`
400
+
401
+ | 参数 | 类型 | 必填 | 说明 |
402
+ |---|---|---|---|
403
+ | `--days` | integer | | 最近几天(含今天),默认 7 |
404
+ | `--from` | string | | 开始日期 YYYY-MM-DD(和 --days 二选一) |
405
+ | `--to` | string | | 结束日期,默认今天 |
406
+ | `--limit` | integer | | 最多返回几条明细,默认 100(统计按全部记录算) |
407
+ | `--merchant` | string | | 只看商户名包含这个词的,如「食堂」「北区」 |
408
+
409
+ ```bash
410
+ fdu card transactions
411
+ fdu card transactions --days 30 --limit 0
412
+ fdu card transactions --from 2026-10-01 --to 2026-10-31
413
+ ```
414
+
415
+ ## 图书馆
416
+
417
+ 在馆人数、文献检索、在借的书和借阅历史
418
+
419
+ ### `fdu library seats`
420
+
421
+ 各图书馆在馆人数和还能进多少人(公开接口,不用登录)。
422
+
423
+ 登录:不用 · 只读 · MCP:`library_seats`
424
+
425
+ ### `fdu library login`
426
+
427
+ 登录图书馆「我的借阅」:打开图书馆页面,点「登录」(走统一身份认证,已登录复旦账号时一般不用再输密码),看到借阅信息后窗口会自动关闭。
428
+
429
+ 登录:不用 · 登录 / 退出 · 仅命令行
430
+
431
+ ### `fdu library loans`
432
+
433
+ 图书馆在借的书:书名、作者、索书号、馆藏地、借阅日期、应还日期、还剩几天、续借次数;以及还能借几本、逾期几本、欠费。只看,不续借。
434
+
435
+ 登录:复旦账号 · 只读 · **隐私数据** · MCP:`library_loans`
436
+
437
+ ```bash
438
+ fdu library loans
439
+ ```
440
+
441
+ ### `fdu library history`
442
+
443
+ 图书馆借阅历史(书名、作者、借阅和归还日期),按页读取。
444
+
445
+ 登录:复旦账号 · 只读 · **隐私数据** · MCP:`library_history`
446
+
447
+ | 参数 | 类型 | 必填 | 说明 |
448
+ |---|---|---|---|
449
+ | `--page` | integer | | 第几页,默认 1 |
450
+ | `--size` | integer | | 每页几条,默认 20 |
451
+
452
+ ### `fdu library search`
453
+
454
+ 复旦图书馆文献检索(论文、图书;返回标题、作者、年份、摘要、DOI、详情页链接)。
455
+
456
+ 登录:不用 · 只读 · MCP:`library_search`
457
+
458
+ | 参数 | 类型 | 必填 | 说明 |
459
+ |---|---|---|---|
460
+ | `--query` | string | 是 | 检索词 |
461
+ | `--scope` | articles / all / books | | articles 文章(默认)、books 图书期刊、all 全部 |
462
+ | `--field` | all / title / author / subject / fulltext | | |
463
+ | `--limit` | integer | | 返回几条,默认 10 |
464
+ | `--year-from` | integer | | |
465
+ | `--year-to` | integer | | |
466
+ | `--sort` | relevance / newest | | |
467
+ | `--peer-reviewed-only` | boolean | | 只看同行评审 |
468
+ | `--full-text-only` | boolean | | 只看有全文的 |
469
+
470
+ ```bash
471
+ fdu library search --query "graph neural network molecule" --year-from 2022
472
+ ```
473
+
474
+ ## 学校通知
475
+
476
+ 教务处、研究生院、各院系官网的通知
477
+
478
+ ### `fdu notices sources`
479
+
480
+ 内置的学校部门和院系官网通知来源(id、名称、网址)。
481
+
482
+ 登录:不用 · 只读 · MCP:`notices_sources`
483
+
484
+ ### `fdu notices list`
485
+
486
+ 某个部门 / 院系官网最新的通知列表(标题、日期、链接)。
487
+
488
+ 登录:不用 · 只读 · MCP:`notices_list`
489
+
490
+ | 参数 | 类型 | 必填 | 说明 |
491
+ |---|---|---|---|
492
+ | `--source` | string | 是 | 来源 id 或名称,如 jwc、教务处、计算机学院 |
493
+ | `--limit` | integer | | 返回几条,默认 20 |
494
+
495
+ ```bash
496
+ fdu notices list --source 教务处
497
+ ```
498
+
499
+ ### `fdu notices read`
500
+
501
+ 读一条通知的正文、发布日期和附件链接。
502
+
503
+ 登录:不用 · 只读 · MCP:`notices_read`
504
+
505
+ | 参数 | 类型 | 必填 | 说明 |
506
+ |---|---|---|---|
507
+ | `--url` | string | 是 | 通知链接(来自 notices list) |
508
+
509
+ ## 体育场馆
510
+
511
+ 各场馆每个时段还有哪些场地空着(只看,不预约)
512
+
513
+ ### `fdu venue list`
514
+
515
+ 可以预约的体育场馆(id、名称),如「北区体育馆-羽毛球」。
516
+
517
+ 登录:复旦账号 · 只读 · MCP:`venue_list`
518
+
519
+ ### `fdu venue free`
520
+
521
+ 体育场馆的空闲时段:每个时段还有哪些场地空着(只看,不预约)。场馆可以写 id 或名称关键词(如「北区 羽毛球」)。
522
+
523
+ 登录:复旦账号 · 只读 · MCP:`venue_free`
524
+
525
+ | 参数 | 类型 | 必填 | 说明 |
526
+ |---|---|---|---|
527
+ | `--venue` | string | 是 | 场馆 id 或名称关键词,多个词用空格分开 |
528
+ | `--date` | string | | 日期 YYYY-MM-DD,默认今天 |
529
+ | `--days` | integer | | 连看几天,默认 1 |
530
+ | `--all` | boolean | | 也列出已经约满的时段 |
531
+
532
+ ```bash
533
+ fdu venue free --venue "北区 羽毛球"
534
+ fdu venue free --venue 正大 --date 2026-11-10 --days 3
535
+ ```
536
+
537
+ ## 宿舍
538
+
539
+ 剩余电量
540
+
541
+ ### `fdu dorm electricity`
542
+
543
+ 宿舍剩余电量(度)。
544
+
545
+ 登录:复旦账号 · 只读 · MCP:`dorm_electricity`
546
+
547
+ ## 树洞
548
+
549
+ 搜索和阅读树洞帖子(需要树洞账号)
550
+
551
+ ### `fdu hole login`
552
+
553
+ 登录树洞(旦挞)账号:密码只用来换取令牌,不保存。校外会自动走 WebVPN(需要先 fdu login)。
554
+
555
+ 登录:不用 · 登录 / 退出 · 仅命令行
556
+
557
+ | 参数 | 类型 | 必填 | 说明 |
558
+ |---|---|---|---|
559
+ | `--email` | string | 是 | 树洞账号邮箱,通常是 学号@m.fudan.edu.cn |
560
+
561
+ ### `fdu hole logout`
562
+
563
+ 删除本机保存的树洞令牌。
564
+
565
+ 登录:不用 · 登录 / 退出 · 仅命令行
566
+
567
+ ### `fdu hole search`
568
+
569
+ 在树洞里搜索帖子楼层(匿名同学的个人看法,不是事实)。
570
+
571
+ 登录:树洞账号 · 只读 · MCP:`hole_search`
572
+
573
+ | 参数 | 类型 | 必填 | 说明 |
574
+ |---|---|---|---|
575
+ | `--keyword` | string | 是 | |
576
+ | `--limit` | integer | | 返回几条,默认 10 |
577
+ | `--days` | integer | | 只看最近几天 |
578
+ | `--accurate` | boolean | | 精确匹配 |
579
+
580
+ ### `fdu hole read`
581
+
582
+ 读一个树洞帖子(洞号)及其楼层。
583
+
584
+ 登录:树洞账号 · 只读 · MCP:`hole_read`
585
+
586
+ | 参数 | 类型 | 必填 | 说明 |
587
+ |---|---|---|---|
588
+ | `--id` | integer | 是 | 洞号 |
589
+ | `--start` | integer | | 从第几楼开始 |
590
+ | `--length` | integer | | 读几楼,默认 30 |
591
+
592
+ ### `fdu hole latest`
593
+
594
+ 树洞最新的帖子。
595
+
596
+ 登录:树洞账号 · 只读 · MCP:`hole_latest`
597
+
598
+ | 参数 | 类型 | 必填 | 说明 |
599
+ |---|---|---|---|
600
+ | `--length` | integer | | 几条,默认 10 |
601
+ | `--tag` | string | | 标签 |
602
+
603
+ ## 蛋壳课评
604
+
605
+ 课程评价(需要树洞账号)
606
+
607
+ ### `fdu danke search`
608
+
609
+ 在蛋壳课评(danke.fduhole.com,旦挞的课程评价)里搜索课程。
610
+
611
+ 登录:树洞账号 · 只读 · MCP:`danke_search`
612
+
613
+ | 参数 | 类型 | 必填 | 说明 |
614
+ |---|---|---|---|
615
+ | `--keyword` | string | 是 | 课程名或课程代码 |
616
+ | `--limit` | integer | | 几条,默认 10 |
617
+
618
+ ### `fdu danke reviews`
619
+
620
+ 某门课在蛋壳课评上的评价(评分、作业量、给分、各老师的评价)。
621
+
622
+ 登录:树洞账号 · 只读 · MCP:`danke_reviews`
623
+
624
+ | 参数 | 类型 | 必填 | 说明 |
625
+ |---|---|---|---|
626
+ | `--id` | integer | 是 | 课程组 id(来自 danke search 的 course_group_id) |
627
+ | `--max` | integer | | 最多几条评价,默认 12 |
628
+
629
+ ## 学生邮箱
630
+
631
+ 收件箱(IMAP 只读,需要客户端专用密码)
632
+
633
+ ### `fdu mail setup`
634
+
635
+ 配置学生邮箱(IMAP,只读):需要网页邮箱里生成的客户端专用密码;密码以明文保存在本机配置目录(权限 600)。
636
+
637
+ 登录:不用 · 登录 / 退出 · 仅命令行
638
+
639
+ | 参数 | 类型 | 必填 | 说明 |
640
+ |---|---|---|---|
641
+ | `--user` | string | 是 | 邮箱地址 |
642
+ | `--host` | string | | IMAP 服务器,默认 imap.exmail.qq.com |
643
+ | `--port` | integer | | 端口,默认 993 |
644
+
645
+ ### `fdu mail forget`
646
+
647
+ 删除本机保存的邮箱配置和密码。
648
+
649
+ 登录:不用 · 登录 / 退出 · 仅命令行
650
+
651
+ ### `fdu mail list`
652
+
653
+ 收件箱里最近的邮件(发件人、主题、时间、摘要);只读,不改变已读状态。
654
+
655
+ 登录:学生邮箱 · 只读 · **隐私数据** · MCP:`mail_list`
656
+
657
+ | 参数 | 类型 | 必填 | 说明 |
658
+ |---|---|---|---|
659
+ | `--days` | integer | | 最近几天,默认 7 |
660
+ | `--limit` | integer | | 最多几封,默认 30 |
661
+ | `--query` | string | | 只看发件人或主题里包含这个词的 |
662
+
663
+ ### `fdu mail read`
664
+
665
+ 读一封邮件的正文(按 uid,来自 mail list)。
666
+
667
+ 登录:学生邮箱 · 只读 · **隐私数据** · MCP:`mail_read`
668
+
669
+ | 参数 | 类型 | 必填 | 说明 |
670
+ |---|---|---|---|
671
+ | `--uid` | string | 是 | |
672
+ | `--days` | integer | | 在最近几天里找,默认 30 |
673
+
674
+ ## 日历
675
+
676
+ 把课表、考试、作业截止导出成 .ics
677
+
678
+ ### `fdu calendar export`
679
+
680
+ 把课表、考试和作业截止时间导出成日历文件(.ics),可以导入苹果日历、Outlook、Google 日历。重复导入同一学期会更新已有日程,不会重复添加。
681
+
682
+ 登录:复旦账号 · 会写本机文件 · MCP:`calendar_export`
683
+
684
+ | 参数 | 类型 | 必填 | 说明 |
685
+ |---|---|---|---|
686
+ | `--out` | string | | 保存到哪里,默认当前目录的 fudan.ics |
687
+ | `--include` | string | | 导出哪些,逗号分隔:timetable,exams,assignments(默认全部) |
688
+ | `--overwrite` | boolean | | 文件已存在时覆盖(默认另存为新文件名) |
689
+ | `--alarms` | boolean | | 考试和作业截止前一天提醒(默认开) |
690
+
691
+ ```bash
692
+ fdu calendar export
693
+ fdu calendar export --include timetable,exams --out ~/Desktop/fudan.ics
694
+ ```
695
+
696
+ ## 缓存
697
+
698
+ 本机缓存的查询结果
699
+
700
+ ### `fdu cache clear`
701
+
702
+ 删除本机缓存的查询结果(退出登录时也会自动删除)。
703
+
704
+ 登录:不用 · 会写本机文件 · 仅命令行
705
+
706
+ ## 开发
707
+
708
+ 录制学校系统页面用到的接口结构(接入新系统时用)
709
+
710
+ ### `fdu dev capture`
711
+
712
+ 开发新功能用:打开浏览器(带着复旦账号登录状态),你在里面操作某个学校系统的页面,关掉窗口后把页面用到的接口结构存成文件——只有地址、参数名、返回的字段名和类型、表格列名,不含姓名、学号、金额等任何具体内容,可以直接发给开发者。
713
+
714
+ 登录:不用 · 会写本机文件 · 仅命令行
715
+
716
+ | 参数 | 类型 | 必填 | 说明 |
717
+ |---|---|---|---|
718
+ | `--url` | string | 是 | 从哪个页面开始,如 https://fdjwgl.fudan.edu.cn/student/home |
719
+ | `--out` | string | | 结果保存到哪里,默认当前目录的 fdu-capture-时间.json |
720
+ | `--minutes` | integer | | 最多录多久(分钟),默认 10 |
721
+ | `--keep-query` | boolean | | 保留查询参数的值(如翻页参数的格式;令牌和长数字会遮掉,发出前请自己看一遍) |
722
+ | `--html` | string | | 另外保存地址里包含这段文字的网页的原始 HTML(如 day.asp),IP、令牌、长数字会遮掉 |
723
+
724
+ ```bash
725
+ fdu dev capture --url https://fdjwgl.fudan.edu.cn/student/home
726
+ ```