关于 study-planner-mcp
study-planner-mcp 是供学生规划备考和作业的离线 MCP 服务。它用经过测试的代码计算学习计划与复习日期,学习数据保留在本机。
主要功能
- 01按日制定考试计划
- 02按星期设置学习时长
- 03间隔重复复习日期
- 04带休息的番茄钟安排
- 05带日期的作业里程碑
- 06导出 ICS 日历文件
适用场景
- 01为多场考试分配学习时间
- 02确定每天要学的主题
- 03安排考前复习日期
- 04将学习安排导入日历
MCP 相关
它向 MCP 客户端提供学习计划、间隔重复、番茄钟、作业里程碑、每日复习查询和 ICS 导出工具。服务在本机运行,并支持兼容 MCP 的应用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
4收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| exams | array | 是 | |
| days_off | array | 否 | 不学习的星期几,例如 ["sun"]。 |
| start_date | string | 否 | 学习的第一天。默认为今天。 |
| hours_per_day | number | 否 | 学习日可用于学习的小时数。 |
详细介绍
学习计划 MCP
为你的 AI 制定离线考试计划:无需账号、无需登录、无需联网,也不会存储任何内容。永久免费,开源。
告诉它你的考试日期和每天能学习多少小时(每天相同,或按星期几分别设置),即可获得逐日计划,其中包含间隔重复复习日期、带休息时间的番茄钟学习时段,以及大型作业的定期里程碑。询问复习时间表、考试日程或某个主题的间隔重复日期,它会根据你提供的日期和学习时长计算出来。日期计算由经过测试的代码完成,而非由模型猜测。
可以这样问:
- “我 12 月 12 日有一场网络考试,12 月 15 日有一场脚本考试。除了星期日,我每天能学习 3 小时。帮我制定计划。”
- “我 12 月 12 日有一场网络考试。工作日我学 2 小时,周末学 6 小时。帮我制定计划。”
- “我的网络考试涵盖路由、交换和安全。把学习时长分配到这些主题,并告诉我今天该学什么。”
- “我今天学的内容应该什么时候复习,才能在 11 月 30 日考试时记住?”
- “我今天该学什么?我的网络考试在 12 月 12 日,上周五我学了路由。”
- “把 3 小时的学习安排成带休息时间的番茄钟时段。”
- “把我周五截止的 6 小时论文拆分成若干里程碑。”
- “把这个计划导出为 .ics 文件,让我可以导入 Google Calendar。”
这是一个免费的开源 MCP 服务。它适用于 Claude、ChatGPT、Cursor、VS Code Copilot 以及任何支持 MCP 的其他应用。它在你的计算机上运行,因此学习数据不会离开你的设备。下方的安装步骤提供了各应用对应的准确配置。
安装
该服务通过 npx 在你的计算机上运行,因此需要 Node.js 20 或更高版本。无需账号、密钥,也无需登录。
每个应用都会从自己的文件中读取 MCP 配置,请选择你使用的应用:
它们启动服务的方式都相同,唯一的区别是 JSON 的放置位置。
Claude Desktop
将以下内容添加到 claude_desktop_config.json:
{
"mcpServers": {
"study-planner": {
"command": "npx",
"args": ["-y", "study-planner-mcp"]
}
}
}
保存文件后,重启 Claude Desktop。
Claude Code
在终端中运行:
claude mcp add study-planner -- npx -y study-planner-mcp
ChatGPT
ChatGPT 桌面应用可以启动在你的计算机上运行的服务。打开设置,启用开发者模式,添加连接器并粘贴此 JSON:
{
"mcpServers": {
"study-planner": {
"command": "npx",
"args": ["-y", "study-planner-mcp"]
}
}
}
ChatGPT 网站通过网络与服务通信,因此要使用在计算机上运行的服务,请使用桌面应用。
Cursor
Cursor 会从项目文件夹中的 .cursor/mcp.json 读取 mcp.json,如果希望在所有项目中使用该服务,也可以从主文件夹中的 ~/.cursor/mcp.json 读取。在 Windows 上,主文件夹中的文件路径为 %USERPROFILE%\.cursor\mcp.json。
{
"mcpServers": {
"study-planner": {
"type": "stdio",
"command": "npx",
"args": ["-y", "study-planner-mcp"]
}
}
}
保存文件后,重启 Cursor。服务启动后会显示在侧边栏的 Customize 页面中,你可以在那里将其开启或关闭。
VS Code Copilot
将以下内容放入项目文件夹中的 .vscode/mcp.json,或用户配置文件中的 mcp.json 文件:
{
"servers": {
"study-planner": {
"type": "stdio",
"command": "npx",
"args": ["-y", "study-planner-mcp"]
}
}
}
VS Code 也会读取项目根目录中的可移植 .mcp.json 文件。该文件使用 mcpServers 而非 servers 作为名称:
{
"mcpServers": {
"study-planner": {
"command": "npx",
"args": ["-y", "study-planner-mcp"]
}
}
}
保存文件后,重启 VS Code。
完成上述任一配置后,试着提出本页顶部的问题。
工具
| 工具 | 功能 |
|---|---|
build_study_plan | 为一场或多场考试制定逐日学习计划,根据紧迫程度分配每个工作日的学习时长;如果时间不足,会发出警告;如果考试包含主题,还会列出每天要学习的主题 |
make_spaced_repetition_schedule | 为某个主题安排间隔逐渐延长的复习日期,并将考试当天及之后的日期标记为跳过 |
plan_pomodoro_sessions | 根据总学习时长安排工作和休息时间 |
list_assignment_milestones | 为大型作业安排带日期的里程碑,将其拆分为调研、拟定大纲、撰写草稿、修改和校对 |
next_review_dates | 获取某个主题的下次复习日期,只返回一个日期,而不是完整计划 |
export_study_plan_ics | 将同一份计划导出为 .ics 日历文件,其中每场学习和每场考试各有一个全天事件,可直接打开或导入 Google Calendar 或 Apple Calendar |
what_to_study_today | 查看某一天要学习的内容:当天计划中的学习安排;如果考试包含主题,还会列出每场安排对应的主题;此外还会列出当天到期或逾期的间隔复习 |
原有名称 make_study_plan、spaced_repetition_dates、pomodoro_plan 和 assignment_milestones 执行相同的四项任务,并使用相同参数,因此现有配置和已保存的提示词仍可正常使用。
这些工具接受的日期都可以用自然语言表示,例如 Dec 12 或 in 3 weeks。请参阅用自然语言表示日期。
Study Planner MCP 与 Brightspace 和 Canvas 的比较
Brightspace MCP 和 Canvas MCP 会读取你的学校网站。它们会告诉你有哪些待完成事项、你的成绩如何,以及老师发布了什么公告。使用它们需要账户并登录。
此服务完全不读取任何网站。你只需提供考试日期和可用于学习的时长,它就会安排时间表、复习日期和休息时间。你也可以将它与 LMS 服务同时运行:一个告诉你有哪些任务,另一个告诉你该如何学习。
| Study Planner MCP | Brightspace MCP | Canvas MCP | |
|---|---|---|---|
| 读取的内容 | 无。你提供考试日期和时长 | 你的 Brightspace 课程、截止日期、成绩、文件和公告 | 你的 Canvas 课程、截止日期、成绩和公告 |
| 需要学校账户 | 否 | 是 | 是 |
| 登录方式 | 无需登录 | 使用学校账号通过浏览器登录 | 在 Canvas 中创建 API 令牌 |
| 逐日学习时间表 | 是,使用 build_study_plan | 否,只显示学校发布的带日期事件 | 否,只显示学校发布的带日期事件 |
| 每个工作日设置不同的时长 | 是,在计划工具中使用 hours_per_weekday | 否 | 否 |
| 每天要学习的主题 | 是,提供考试主题即可 | 否 | 否 |
| 间隔复习日期 | 是,使用 make_spaced_repetition_schedule;也可使用 next_review_dates 仅获取下一个日期 | 否 | 否 |
| 带休息时间的番茄钟时间段 | 是,使用 plan_pomodoro_sessions | 否 | 否 |
| 带日期的作业里程碑 | 是,使用 list_assignment_milestones | 否 | 否 |
| 今日待办 | 是,使用 what_to_study_today,并会添加到期的复习 | 是,显示学校布置任务的待办清单 | 是,显示学校布置任务的待办清单 |
| 日历文件 | 是,export_study_plan_ics 会写入学习安排和考试 | 是,包含截止日期 | 否 |
| 无网络也能使用 | 是 | 否 | 否 |
Brightspace 也会将截止日期写入日历文件,而且两者都会显示学校发布的带日期事件。但它们无法根据考试日期和学习时长,制定逐日时间表,也无法安排间隔复习日期和番茄钟休息时间。
关键词
人们会用这些词搜索学习规划工具,所以我们把它们列在这里。列表中包括复习时间表、考试安排和间隔重复日期,以及同类事项的其他叫法。
- 学习规划 MCP
- 学习规划
- study-planner-mcp
- 学习计划 MCP
- 复习时间表
- 复习安排
- 复习计划
- 复习规划工具
- 考试安排
- 考试时间表
- 考试规划工具
- 考试备考
- 考试学习计划
- 学习安排
- 学习时间表
- 学习日历
- 间隔重复
- 间隔重复日期
- 间隔重复安排
- 番茄工作法
- 番茄工作法规划工具
- 作业里程碑
- 作业计划
- 学生规划工具
- 学生
- mcp
- mcp server
- model context protocol
- 离线
npm 列表使用相同的词。如果你搜索的是其中一个词,就安装服务并请求生成计划。
学习计划的运作方式
每天可用的时长取决于当天是星期几;除非设置了 hours_per_weekday,否则使用 hours_per_day。这些时长会分配给仍需复习的考试,并按照剩余所需小时数除以剩余天数进行加权,因此时间更紧、内容更多的考试会分到更多时间。每场考试的复习会在考试前一天停止。如果时间不够,计划会说明还差多少小时,而不会假装时间充足。服务计算出的日期都是普通日历日期,因此时区不会导致日期偏移。
如果考试包含主题,则当天分配给该考试的时长会按各主题尚需的小时数比例分配。这样,计划回答的不只是复习哪场考试,还会告诉你要复习哪个主题。
用日常说法表示日期
工具接受的所有日期都可以按日常说法输入。服务会解析日期本身,因此日期计算由经过测试的代码完成。
2026-12-12表示明确的日期。Dec 12、December 12或12 Dec表示月份和日期。不写年份时,表示下一个尚未过去的该日期。因此,如果在 10 月询问,Dec 12表示当年 12 月 12 日;如果在 12 月询问,则表示次年 12 月 12 日。Dec 12 2026表示你指定年份的日期。today、tomorrow和yesterday。in 3 days、in 2 weeks、in 3 months和in 1 year表示从今天开始计算的日期。也可以使用数字的英文单词,例如in two weeks。3 days ago和2 weeks ago表示过去的日期。Friday表示即将到来的星期五,next Friday表示下周的星期五,last Friday表示上周的星期五。
工具接受的所有日期都支持这种写法:考试日期、start_date、due_date、first_study_date、exam_date、from_date,以及 what_to_study_today 的 date。
带数字月份的日期格式不会被解析,例如 12/12/2026,因为无法确定数字的顺序。请写出月份名称,例如 Dec 12 2026。
工具调用:
{
"exams": [{ "name": "Networking", "date": "Dec 12 2026", "hours_needed": 6 }],
"start_date": "2026-12-07",
"hours_per_day": 2
}
回答:
Exams
- Networking on 2026-12-12 sat, 6h planned
Plan from 2026-12-07
- 2026-12-07 mon Networking 2h (2h total)
- 2026-12-08 tue Networking 2h (2h total)
- 2026-12-09 wed Networking 2h (2h total)
Everything fits.
日期 2026-12-12 会生成相同的计划。
一周中不同日期的学习时长
每天的学习时长并不都相同。hours_per_weekday 用于设置每个工作日的学习时长,因此计划可以安排你周一到周五每天学习 2 小时,周六和周日每天学习 6 小时。未列出的工作日使用 hours_per_day;学习时长设为 0 的工作日就是休息日,与 days_off 中的日期相同。days_off 中列出的日期始终会被排除。同一个列表也适用于 export_study_plan_ics 和 what_to_study_today,因此这三个工具生成的计划一致。
工具调用:
{
"exams": [{ "name": "Networking", "date": "2026-12-12", "hours_needed": 20 }],
"hours_per_day": 3,
"hours_per_weekday": [
{ "day": "mon", "hours": 2 },
{ "day": "tue", "hours": 2 },
{ "day": "wed", "hours": 2 },
{ "day": "thu", "hours": 2 },
{ "day": "fri", "hours": 2 },
{ "day": "sat", "hours": 6 },
{ "day": "sun", "hours": 6 }
],
"start_date": "2026-11-30"
}
回答:
Exams
- Networking on 2026-12-12 sat, 20h planned
Plan from 2026-11-30
- 2026-11-30 mon Networking 2h (2h total)
- 2026-12-01 tue Networking 2h (2h total)
- 2026-12-02 wed Networking 2h (2h total)
- 2026-12-03 thu Networking 2h (2h total)
- 2026-12-04 fri Networking 2h (2h total)
- 2026-12-05 sat Networking 6h (6h total)
- 2026-12-06 sun Networking 4h (4h total)
Everything fits.
周六安排 6 小时,周日则安排剩余的 4 小时。
每个主题的学习时长
为考试填写 topics,计划就会列出每天要学习的主题,而不只是考试。每天的学习时长会按各主题剩余所需时长的比例分配,因此需要投入最多学习时间的主题会分到最多时间。若某个主题没有设置 hours_needed,考试的学习时长就会在未单独设置时长的主题之间平均分配。
工具调用:
{
"exams": [
{
"name": "Networking",
"date": "2026-12-10",
"topics": [
{ "name": "Routing", "hours_needed": 6 },
{ "name": "Switching", "hours_needed": 4 },
{ "name": "Security", "hours_needed": 2 }
]
}
],
"hours_per_day": 4,
"start_date": "2026-12-07"
}
回答:
Exams
- Networking on 2026-12-10 thu, 12h planned
- Routing 6h planned
- Switching 4h planned
- Security 2h planned
Plan from 2026-12-07
- 2026-12-07 mon Networking 4h (4h total)
- Networking: Routing 2h, Switching 1.5h, Security 0.5h
- 2026-12-08 tue Networking 4h (4h total)
- Networking: Routing 2h, Switching 1.5h, Security 0.5h
- 2026-12-09 wed Networking 4h (4h total)
- Networking: Routing 2h, Switching 1h, Security 1h
Everything fits.
what_to_study_today 会给出某一天的相同主题,因此一次调用就能告诉你今天要学习什么,以及它属于考试的哪一部分。
工具调用:
{
"date": "2026-12-08",
"exams": [
{
"name": "Networking",
"date": "2026-12-10",
"topics": [
{ "name": "Routing", "hours_needed": 6 },
{ "name": "Switching", "hours_needed": 4 },
{ "name": "Security", "hours_needed": 2 }
]
}
],
"hours_per_day": 4,
"start_date": "2026-12-07"
}
回答:
Today 2026-12-08 tue
Study sessions, 4h total
- Networking 4h
- Routing 2h, Switching 1.5h, Security 0.5h
Next exam: Networking on 2026-12-10 thu, 2 days left.
计划示例
这是 build_study_plan 返回的真实结果,取自运行本文件夹中代码的一次执行。Networking 需要在 12 月 12 日前学习 20 小时,Scripting 需要在 12 月 15 日前学习 16 小时,每天学习 3 小时,周日不学习。传入 start_date 即可让日期保持一致。
工具调用:
{
"exams": [
{ "name": "Networking", "date": "2026-12-12", "hours_needed": 20 },
{ "name": "Scripting", "date": "2026-12-15", "hours_needed": 16 }
],
"hours_per_day": 3,
"days_off": ["sun"],
"start_date": "2026-11-30"
}
回答:
Exams
- Networking on 2026-12-12 sat, 20h planned
- Scripting on 2026-12-15 tue, 16h planned
Plan from 2026-11-30
- 2026-11-30 mon Networking 2h, Scripting 1h (3h total)
- 2026-12-01 tue Networking 2h, Scripting 1h (3h total)
- 2026-12-02 wed Networking 2h, Scripting 1h (3h total)
- 2026-12-03 thu Networking 2h, Scripting 1h (3h total)
- 2026-12-04 fri Networking 1.5h, Scripting 1.5h (3h total)
- 2026-12-05 sat Networking 2h, Scripting 1h (3h total)
- 2026-12-07 mon Networking 2h, Scripting 1h (3h total)
- 2026-12-08 tue Networking 1.5h, Scripting 1.5h (3h total)
- 2026-12-09 wed Networking 2h, Scripting 1h (3h total)
- 2026-12-10 thu Networking 1.5h, Scripting 1.5h (3h total)
- 2026-12-11 fri Networking 1.5h, Scripting 1.5h (3h total)
- 2026-12-12 sat Scripting 3h (3h total)
Everything fits.
计划会跳过周日;由于学习会在每场考试前一天结束,Networking 会在 12 月 11 日停止,因此 12 月 12 日只安排 Scripting。
日历文件
export_study_plan_ics 接受与 build_study_plan 相同的参数,并返回完整的 .ics 文件,而不是纯文本。将回答保存为 plan.ics 并打开,或将其导入 Google Calendar 或 Apple Calendar。每个学习时段都会变为标记为有空的全天事件,每场考试都会变为标记为忙碌的全天事件;设置 include_exams: false 则只包含学习时段。每个事件都会带有根据日期和考试名称生成的 UID,日期以普通日历日期形式写入,因此时区不会将事件移到其他日期。
工具调用:
{
"exams": [{ "name": "Networking", "date": "2026-12-12", "hours_needed": 6 }],
"start_date": "2026-12-07",
"hours_per_day": 2,
"days_off": ["sun"]
}
以下是运行结果中的文件开头几行。后面还有两个学习事件和一个考试事件,格式相同;DTSTAMP 表示导出时间,因此你的结果会有所不同。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//AnonymousOnyx22//Study Planner MCP//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Study plan
BEGIN:VEVENT
UID:2026-12-07-networking-study@study-planner-mcp
DTSTAMP:20261021T022919Z
DTSTART;VALUE=DATE:20261207
DTEND;VALUE=DATE:20261208
SUMMARY:Study: Networking 2h
DESCRIPTION:Networking\, 2h of study. Day total 2h. Exam on 2026-12-12 sat.
TRANSP:TRANSPARENT
END:VEVENT
今天要学习什么
what_to_study_today 一次调用即可给出某一天的安排。它会合并计划中当天的学习时段,以及当天到期或已逾期的间隔重复复习。传入与 build_study_plan 相同的考试和时长,以及你正在复习的主题和首次学习每个主题的日期。不传入 date 时,会使用今天的日期。如果计划已有第一天,请传入 start_date,这样学习时段就会与之前制定的计划一致。
工具调用:
{
"date": "2026-11-30",
"exams": [{ "name": "Networking", "date": "2026-12-12", "hours_needed": 12 }],
"hours_per_day": 2,
"reviews": [{ "topic": "Routing", "first_study_date": "2026-11-27" }]
}
回答:
Today 2026-11-30 mon
Study sessions, 2h total
- Networking 2h
Reviews due today
- Routing, 2nd review
Reviews to catch up
- Routing, 1st review, 2 days late (due 2026-11-28)
Next reviews
- Routing on 2026-12-04 fri, 3rd review
Next exam: Networking on 2026-12-12 sat, 12 days left.
下次复习日期
next_review_dates 会返回一个日期,即某个主题的下次复习日期,而不是完整日程。它从你首次学习该主题的日期开始计算,并跳过考试当天或之后的复习。回答会统计已经过去的复习次数。传入 from_date 指定计算起始日期,即可让结果保持一致。若要获取所有复习日期,请使用 make_spaced_repetition_schedule。
工具调用:
{
"topic": "Routing",
"first_study_date": "2026-11-27",
"exam_date": "2026-12-12",
"from_date": "2026-11-29"
}
回答:
Next review for "Routing": 2026-11-30 mon, the 2nd review, in 1 day.
1 review has passed.
Routing 于 11 月 27 日首次学习,因此第一次复习安排在 11 月 28 日,且已经过去。下一次复习是 11 月 30 日;12 月 27 日的复习因晚于 12 月 12 日的考试而被排除。
开发
npm install
npm run build
npm test
在工具中传入 start_date,以获得可重复的结果。测试会通过真实的 MCP 客户端调用每个工具,因此无需账户或网络。
更多免费的学生 MCP 服务
这些服务全部免费、开源,在访问你的账户时均为只读。访问 brightspacemcp.com/more-mcps 查看完整列表。
| 服务 | 功能 |
|---|---|
| Brightspace MCP | 面向 AI 的 D2L Brightspace。提供截止日期及真实的提交状态、成绩、目标成绩计算器和课程文件。 |
| Canvas MCP | 面向 AI 的 Canvas LMS,只读。提供截止日期、未完成作业、成绩和公告。 |
| Moodle MCP | 面向 AI 的 Moodle,只读。提供截止日期、逾期作业、成绩和公告。 |
| Google Classroom MCP | 面向 AI 的 Google Classroom,只读。提供待办事项、截止日期、未完成作业和成绩。 |
| GPA Calculator MCP | 面向 AI 提供 GPA、成绩换算,以及期末考试需要达到的成绩。可离线使用,无需账户。 |
| Citations MCP | 根据 DOI、ISBN 或输入的详细信息生成 APA、MLA 和 Chicago 引用。无需账户。 |
| Paper Finder MCP | 通过 OpenAlex 搜索学术论文、查找开放获取版本和相关研究。无需密钥。 |
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。