研究同步
StudySync是AI原生学术基础设施层——一个强大的MCP服务器,使Claude、GPT和Cursor等代理能够自主地与您的学术世界进行交互。
它连接Canvas、谷歌日历和谷歌云端硬盘,将零散的课程数据转化为一个单一的智能上下文层。\ 从编写学习指南到将截止日期同步到Drive,StudySync将您的代理转变为真正的学术助理,可以实时获取、总结和行动。
______________________________________________________________________
概述
StudySync使您的代理和学术工具之间能够无缝协作。\ 它不仅可以获取任务,还可以理解它们的上下文,组织它们,并代表您行事,比如生成文档、将它们同步到Drive或安排提醒。
它专为多功能性、效率和清晰度而设计:
- 一个统一多个数据源的系统。
- 一个界面,用于所有课程、日历和文件。
- 一个知道何时使用哪个功能的代理——即时。
______________________________________________________________________
主要功能和使用案例
核心功能
- Canvas集成 –通过专门的服务功能准确检索课程、作业和成绩。
- 谷歌日历同步 –根据任务截止日期自动生成事件。
- Google Drive编写器 –将任何文件类型(文档、表格、幻灯片、PDF和Markdown摘要)直接写入Drive。
- 上下文引擎 -有效地聚合和汇总多个数据源,以进行自然语言交互。
- 故障快速指令逻辑 -如果访问或数据丢失,它会提前停止,而不是产生幻觉或浪费代币。
- 优化数据获取 –确切地知道要查询什么,最大限度地减少噪音和成本。
______________________________________________________________________
用例
- AI研究助理: “为我本周所有到期作业制定一份学习指南。”
- 学术规划师: “将下周的所有截止日期添加到我的谷歌日历中。”
- 知识合成器: “总结一下我的CSCE 312和PHYS 218课程的内容。”
- 文档生成器: “用我学期的所有作业元数据写一个谷歌文档。”
- 智能上下文提供程序: “获取我的成绩、截止日期和活动,并将其作为状态报告写入Drive。”
StudySync智能地适应——它根据您的提示决定是查询一门课程、多门课程还是所有作业,动态调用正确的辅助函数。
______________________________________________________________________
建筑
______________________________________________________________________
设计效率
StudySync是围绕快速、令牌高效的推理而设计的:
- 每个API调用都通过专用的帮助器函数(例如。,
mcp_list_courses,mcp_find_assignments,mcp_grade_snapshot)预过滤和标准化数据。 - MCP服务器调用层(在
mcp_server.py)抽象掉所有的复杂性——代理接收干净、结构化的JSON。 - 当API访问丢失时,每个服务都会提前中断,从而防止递归调用或代理幻觉。
- 这大大减少了令牌的使用,使代理的工作流具有确定性、可预测性和成本效益。
______________________________________________________________________
独特的数据源
StudySync集成了多个学术API和数据表面:
| 来源 | 描述 | 示例数据 |
|---|---|---|
| Canvas LMS | 课程、作业和成绩 | course_name, due_date, status |
| 谷歌日历 | 活动和截止日期 | event_title, time, location |
| Google 云端硬盘 | 直接写入任何文件类型 | 文档、表格、幻灯片、Markdown或JSON |
您的AI代理可以查询、汇总和导出每个数据源,使其能够自主生成有意义的输出。
______________________________________________________________________
辅助功能(发动机罩下)
内部 services.py,StudySync包括数十个内部实用程序函数,用于解析和清理外部API中的数据。\ 这些处理:
- 分页和API响应规范化。
- 错误安全日期解析和筛选。
- 合并重复的课程条目或逾期项目。
所有这些复杂性都隐藏在代理之外——它只与通过以下方式公开的清晰原子函数交互 mcp_server.py.
例子:
@app.tool
def list_assignments(course_id: int, due_within_days: int = 7):
\"\"\"Return assignments for a SINGLE course id due in the next N days.\"\"\"
return mcp_list_assignments(course_id, due_within_days)最终的MCP接口是最小的——可读、高效和一致。
______________________________________________________________________
提示示例
| 提示 | 发生了什么 |
|---|---|
| “列出我未来3天内到期的作业。” | 从Canvas获取和筛选 |
| “为我即将进行的CSCE 1040测试创建一个谷歌文档审查指南。” | 将结构化指南直接写入Drive |
| “汇总我所有课程的成绩。” | 使用辅助函数合并和计算平均值 |
| “将即将到来的截止日期添加到我的日历中。” | 将Canvas数据与事件链接同步到Google日历 |
______________________________________________________________________
快速入门TL;博士
1.安装并运行StudySync
先决条件
- Python 3.10+
- Next.js 16.0.1+
- Canvas、Google Calendar和Google Drive的API密钥
2.启动您的AI代理和MCP服务器
在您的终端中,从项目的根目录运行这些命令。
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt确保后端文件夹中有.env文件。它的结构应该是这样的:
环境变量
|变量|描述|示例| |-----------|-------------|----------| | CANVAS_BASE |Canvas LMS基本URL(您所在机构的Canvas域)| https://unt.instructure.com | | CANVAS_TOKEN |Canvas API访问令牌(根据 *账户→ 设置→ 新访问令牌*) | 9082~abc123xyz... | | OPENAI_API_KEY |用于语言模型编排的OpenAI API键| sk-abc123... | | OPENAI_MODEL |用于完井的型号名称| gpt-5 | | GCAL_CREDENTIALS_PATH |谷歌OAuth凭据的路径(来自谷歌云控制台)| ./credentials.json | | GCAL_TOKEN_PATH |用户生成的Google OAuth令牌的路径| ./token.json | | GCAL_CALENDAR_ID |要使用的Google日历ID(默认值: primary) | primary |
现在,您应该能够通过运行以下命令启动MCP服务器和代理
python runner.py______________________________________________________________________
注意:要使此服务器工作,端口8000应打开
3.启动Next.js前端
在项目的根目录中,只需运行
npm run dev注意:为了使这个前端工作,端口3000应该是打开的。
______________________________________________________________________
4.探索命令
| 功能 | 说明 |
|---|---|
list_courses() | 列出所有已注册的Canvas课程 |
list_assignments(course_id, days) | 获取课程作业 |
list_assignments_all(days) | 获取所有课程的作业 |
mcp_gcal_add_canvas_assignments() | 将Canvas截止日期同步到Google日历 |
make_study_guide_to_docs() | 生成学习指南并将其写入Drive |
______________________________________________________________________
输出示例
______________________________________________________________________
联系
联系sriramsattiraju07@gmail.com如果你有什么建议!
