Gradscope MCP服务器
一 MCP(模型上下文协议) 服务器 等级范围 这暴露了课程管理, MCP的评分、重新评分审查、统计和人工智能辅助评分工作流程 客户。
该服务器专为希望使用AI代理的讲师和助教而设计 真实的Gradescope数据,同时将写操作控制在显式后面 确认。
此存储库还包括可重用的本地技能 skills/gradescope-assisted-grading/SKILL.md 用于人类认可的分级 工作流程。
当前状态
- 34个MCP工具
- 3 MCP资源
- 7个MCP提示
- 30个自动化测试
- Python 3.10+
- 包管理器:
uv
项目提供什么
面向阅读的工作流程
- 课程发现和作业列表
- 在线和扫描PDF作业的作业大纲解析
- 使用自定义HTML解析器进行名册检查
- 多种任务类型的提交列表
- 评分进度、量规背景、答案组、重新评分和统计数据
- 缓存分级工件并回答关键快照的工作流助手
/tmp/gradescope-mcp
面向编写的工作流
- 上传提交内容
- 设置学生扩展名
- 修改分配日期
- 重命名作业
- 申请成绩
- 创建、更新和删除评价项目
- 对答案组进行批量评分
所有支持写入的工具都是先预览的,需要 confirm_write=True 在执行任何突变之前。
工具清单
核心
| 工具 | 描述 | 访问 |
|---|---|---|
tool_list_courses | 列出按角色分组的所有课程 | 全部 |
tool_get_assignments | 列出课程作业 | 全部 |
tool_get_assignment_details | 获取一项作业的详细信息 | 全部 |
tool_upload_submission | 将文件上传到作业 | 全部 |
讲师/TA管理
| 工具 | 说明 |
|---|---|
tool_get_course_roster | 按角色分组的完整名册 |
tool_get_extensions | 查看作业扩展 |
tool_set_extension | 添加或更新一个学生的分机号 |
tool_modify_assignment_dates | 更改发布/到期/延迟到期日期 |
tool_rename_assignment | 重命名作业 |
tool_get_assignment_submissions | 列出作业提交 |
tool_get_student_submission | 阅读一名学生的提交内容 |
tool_get_assignment_graders | 查看问题的评分者 |
评分阅读
| 工具 | 说明 |
|---|---|
tool_get_assignment_outline | 问题层次结构、ID、权重、提示文本 |
tool_export_assignment_scores | 作业分数导出和汇总 |
tool_get_grading_progress | 按问题评分仪表板 |
tool_get_submission_grading_context | 问题提交的完整评分背景 |
tool_get_question_rubric | 无提交ID的量规检查 |
tool_list_question_submissions | 列出问题提交ID,可按年级状态筛选 |
tool_get_next_ungraded | 导航到下一个未评分的问题提交 |
评分写作
| 工具 | 说明 |
|---|---|
tool_apply_grade | 应用评分项目、评论和分数调整 |
tool_create_rubric_item | 创建一个量规项 |
tool_update_rubric_item | 更新评分项目 |
tool_delete_rubric_item | 删除评分项目 |
人工智能辅助/工作流助手
| 工具 | 说明 |
|---|---|
tool_prepare_grading_artifact | 将特定于问题的评分工件保存到 /tmp/gradescope-mcp |
tool_assess_submission_readiness | 评估自动分级是否足够安全,可以尝试 |
tool_cache_relevant_pages | 将裁剪和附近的页面下载到 /tmp/gradescope-mcp |
tool_prepare_answer_key | 将作业范围内的答案注释保存到 /tmp/gradescope-mcp |
tool_smart_read_submission | 返回作物首读计划 |
答案组
| 工具 | 说明 |
|---|---|
tool_get_answer_groups | 列出AI集群答案组 |
tool_get_answer_group_detail | 检查一个答案组 |
tool_grade_answer_group | 批量一级答案组 |
雷格拉德斯
| 工具 | 说明 |
|---|---|
tool_get_regrade_requests | 列出重新分级请求 |
tool_get_regrade_detail | 检查一个重新研磨请求 |
统计
| 工具 | 说明 |
|---|---|
tool_get_assignment_statistics | 作业级别和每个问题的统计数据 |
资源
| URI | 描述 |
|---|---|
gradescope://courses | 当前课程列表 |
gradescope://courses/{course_id}/assignments | 课程作业列表 |
gradescope://courses/{course_id}/roster | 课程名册 |
提示
| 提示 | 描述 |
|---|---|
summarize_course_progress | 总结课程中的作业状态 |
manage_extensions_workflow | 指导延伸管理工作 |
check_submission_stats | 总结作业提交状态 |
generate_rubric_from_outline | 根据作业结构起草一个量规 |
grade_submission_with_rubric | 对一名学生的作业进行评分 |
review_regrade_requests | 审查待处理的重新分级请求 |
auto_grade_question | 对一个问题运行信心门控评分工作流程 |
建筑
入口点
src/gradescope_mcp/__main__.py:负载.env,配置日志记录,运行
FastMCP服务器
src/gradescope_mcp/server.py:注册所有工具、资源和提示
认证
src/gradescope_mcp/auth.py:维护单例GSConnection- 凭据来自
GRADESCOPE_EMAIL和GRADESCOPE_PASSWORD .env启动时会自动加载python -m gradescope_mcp
工具模块
tools/courses.py:课程列表和名册解析tools/assignments.py:作业列表和作业写入操作tools/submissions.py:上传、提交列表、评分者发现tools/extensions.py:扩展读写tools/grading.py:大纲解析、分数导出、评分进度tools/grading_ops.py:评分上下文、写作、量规CRUD、导航tools/grading_workflow.py:/tmp/gradescope-mcp工件、答案键、准备就绪、页面
缓存、智能阅读
tools/answer_groups.py:人工智能辅助答案组检查和批量写入tools/regrades.py:重新分级列表和详细检查tools/statistics.py:分配统计tools/safety.py:预览突变的第一个确认助手
重要行为和约束
写安全
- 修改工具在以下情况下返回预览
confirm_write=False - 实际的变化只发生在
confirm_write=True - 评分标准的编辑和删除可以级联到现有的成绩
tool_grade_answer_group可以同时影响多个提交,需要额外的
关心
提交ID
tool_get_assignment_submissions返回分配级别的全局提交
鉴定
- 评分工具需要问题提交ID
- 使用
tool_list_question_submissions,tool_get_next_ungraded,或分级
获取正确ID的上下文工具
评分方向
- 成绩范围问题可能是
positive或negative评分 - 在这两种模式下,评估权重都以正数存储
- 评分模式决定了已检查的评分项目是增加还是减少
点
扫描/手写作业
- 结构化参考答案通常不可用
- 这是意料之中的,不一定是解析失败
- 工作流助手被构建为使用裁剪区域、完整页面、相邻页面、,
量规文本和用户提供的参考注释
快速开始
1.先决条件
- Python 3.10+
- 紫外线
2.安装
git clone https://github.com/Yuanpeng-Li/gradescope-mcp.git
cd gradescope-mcp
cp .env.example .env然后编辑 .env 使用您的Gradescope证书。
3.在本地运行
uv run python -m gradescope_mcp4.配置MCP客户端
客户端配置示例:
{
"mcpServers": {
"gradescope": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/gradescope-mcp",
"python",
"-m",
"gradescope_mcp"
],
"env": {
"GRADESCOPE_EMAIL": "your_email@example.com",
"GRADESCOPE_PASSWORD": "your_password"
}
}
}
}5.使用MCP检查器进行调试
npx @modelcontextprotocol/inspector uv run python -m gradescope_mcp6.运行测试
uv run pytest -q辅助评分技能
该存储库包括一个项目本地技能:
gradescope-assisted-grading
其目的是:
- 预览第一评分
- 突变前的量规审查
- 扫描式考试评分
- 应答组分诊
- 在写任何成绩之前,都要经过明确的人工批准
在本地安装技能
mkdir -p /tmp/gradescope-mcp/skills
ln -s "$(pwd)/skills/gradescope-assisted-grading" /tmp/gradescope-mcp/skills/gradescope-assisted-grading如果您喜欢复制:
mkdir -p /tmp/gradescope-mcp/skills
cp -R skills/gradescope-assisted-grading /tmp/gradescope-mcp/skills/验证安装
ls /tmp/gradescope-mcp/skills/gradescope-assisted-grading
cat /tmp/gradescope-mcp/skills/gradescope-assisted-grading/SKILL.md使用以下命令从客户端调用它:
Use the gradescope-assisted-grading skill$gradescope-assisted-grading
项目结构
gradescope-mcp/
├── .env.example
├── AGENT.md
├── DEVLOG.md
├── OPERATIONS_LOGS/
│ └── RECORDS.md
├── README.md
├── pyproject.toml
├── skills/
│ └── gradescope-assisted-grading/
│ └── SKILL.md
├── src/
│ └── gradescope_mcp/
│ ├── __init__.py
│ ├── __main__.py
│ ├── auth.py
│ ├── server.py
│ └── tools/
│ ├── __init__.py
│ ├── answer_groups.py
│ ├── assignments.py
│ ├── courses.py
│ ├── extensions.py
│ ├── grading.py
│ ├── grading_ops.py
│ ├── grading_workflow.py
│ ├── regrades.py
│ ├── safety.py
│ ├── statistics.py
│ └── submissions.py
└── tests/
├── test_answer_groups.py
├── test_assignments_and_grading_ops.py
├── test_extensions_and_answer_key.py
├── test_grading_workflow.py
└── test_write_safety.py开发说明
AGENT.md总结了当前的架构和维护期望DEVLOG.md记录实施历史OPERATIONS_LOGS/RECORDS.md是真实账户的突变日志模板
测试
已知警告
- 成绩范围行为因作业类型而异;几个工具依赖于
HTML解析或反向工程端点。
- 名册解析使用自定义解析器,因为上游库解析器
存在部分时不可靠。
- 某些分配类型不支持扩展API,即使对于员工用户也是如此。
- 扫描作业通常不提供结构化的答案。
- 问题评分需要问题提交ID,而不是分配级别全局
提交ID。
