|
|
---
|
|
|
name: educoder
|
|
|
description: 提供头歌Educoder实践教学平台的查询服务,包括用户登录、课堂管理、作业查询、实训项目查询、考试管理等功能。
|
|
|
---
|
|
|
|
|
|
## MCP 服务地址
|
|
|
|
|
|
- 本地开发:`http://localhost:8000/sse`
|
|
|
- 远程服务:`http://143.64.38.7:37010/sse`
|
|
|
|
|
|
> 使用 SSE 模式连接,客户端配置时填写上述地址之一即可。
|
|
|
|
|
|
## 注意事项
|
|
|
- 不要用 copaw 调 mcp 服务,优先使用 npx mcporter。
|
|
|
- 头歌平台需要登录后才能使用,请确保环境变量配置正确。
|
|
|
|
|
|
## 前置配置(只需一次)
|
|
|
|
|
|
### 第一步:设置环境变量
|
|
|
|
|
|
**macOS / Linux:**
|
|
|
```
|
|
|
export EDUCODER_LOGIN="你的头歌账号"
|
|
|
export EDUCODER_PASSWORD="你的头歌密码"
|
|
|
```
|
|
|
|
|
|
**Windows(PowerShell):**
|
|
|
```
|
|
|
$env:EDUCODER_LOGIN="你的头歌账号"
|
|
|
$env:EDUCODER_PASSWORD="你的头歌密码"
|
|
|
```
|
|
|
|
|
|
**Windows(CMD):**
|
|
|
```
|
|
|
set EDUCODER_LOGIN=你的头歌账号
|
|
|
set EDUCODER_PASSWORD=你的头歌密码
|
|
|
```
|
|
|
|
|
|
> **没有配置账号密码?** 所有工具调用都会返回鉴权失败。请先完成上述步骤。
|
|
|
|
|
|
### 第二步:运行安装脚本
|
|
|
|
|
|
**macOS / Linux:**
|
|
|
```
|
|
|
bash setup.sh
|
|
|
```
|
|
|
|
|
|
**Windows 或任何有 Node.js 的环境:**
|
|
|
```
|
|
|
node setup.js
|
|
|
```
|
|
|
|
|
|
> 具体配置文件路径取决于你使用的客户端(OpenClaw / CodeBuddy / Cursor 等),请参考对应文档。
|
|
|
|
|
|
### 第三步:安装后验证
|
|
|
|
|
|
**安装成功后,必须立刻执行:`educoder_login` 以验证账号配置与服务是否可用。**
|
|
|
|
|
|
- 判断登录失败 -> 提示检查账号密码是否正确
|
|
|
- 判断登录成功 -> 正常返回用户信息,说明配置成功
|
|
|
- 当用户提供账号密码后,需要帮助用户直接更新环境变量,不需要用户自己执行
|
|
|
|
|
|
---
|
|
|
|
|
|
## 触发场景
|
|
|
|
|
|
### 意图 → 工具 速查表
|
|
|
|
|
|
| 用户意图 | 调用工具 |
|
|
|
|----------|---------|
|
|
|
| 登录头歌 / 登录Educoder | `educoder_login` |
|
|
|
| 查询账号 / 我的信息 / 我是谁 | `educoder_current_user` |
|
|
|
| 查询我的课堂 / 我教了哪些课 | `educoder_my_courses` |
|
|
|
| 查询课堂学生 / XX课堂有哪些学生 | `educoder_course_students` |
|
|
|
| 查询课堂信息 / 课堂设置 | `educoder_course_info` |
|
|
|
| 查询课堂分班 | `educoder_course_groups` |
|
|
|
| 查询作业列表 / 课堂有哪些作业 | `educoder_homework_list` |
|
|
|
| 查询作业提交情况 / 学生作业完成情况 | `educoder_homework_detail` |
|
|
|
| 查询考试列表 / 课堂有哪些考试 | `educoder_exercises` |
|
|
|
| 搜索实训 / 查找实训项目 | `educoder_shixun_search` |
|
|
|
| 查询实训详情 / XX实训的信息 | `educoder_shixun_info` |
|
|
|
| 查询我的实训 / 我管理的实训项目 | `educoder_my_shixuns` |
|
|
|
| 查询我的实践课程 | `educoder_my_subjects` |
|
|
|
|
|
|
### 不要触发的情况
|
|
|
|
|
|
- 讨论教学方法(不是在查询数据)
|
|
|
- 纯聊天中提到"课堂"、"作业"
|
|
|
- 与头歌Educoder平台无关的场景
|
|
|
- 要求修改成绩、删除数据等写操作
|
|
|
|
|
|
### 组合调用示例
|
|
|
|
|
|
> 用户说:"帮我看看我是谁,还有我教了哪些课"
|
|
|
|
|
|
依次调用:
|
|
|
1. `educoder_login`(如未登录)
|
|
|
2. `educoder_current_user`
|
|
|
3. `educoder_my_courses`
|
|
|
|
|
|
> 用户说:"查询高等数学课堂的学生和作业情况"
|
|
|
|
|
|
依次调用:
|
|
|
1. `educoder_my_courses`(获取课堂ID)
|
|
|
2. `educoder_course_students`
|
|
|
3. `educoder_homework_list`
|
|
|
|
|
|
---
|
|
|
|
|
|
## 工具详细说明
|
|
|
|
|
|
### 全局规则
|
|
|
|
|
|
- **登录前置**:如果工具调用返回鉴权失败,先调用 `educoder_login` 登录后重试
|
|
|
- **课堂ID获取**:查询课堂相关信息时,如果用户给的是课堂名称,先通过 `educoder_my_courses` 获取课堂列表找到对应ID
|
|
|
- **用户名获取**:需要username参数的工具,先调用 `educoder_current_user` 获取用户名
|
|
|
- **mcp 服务使用注意事项**:
|
|
|
- 推荐使用 npx mcporter 调用 MCP 服务(无需全局安装),不建议直接使用 curl;
|
|
|
- 严禁使用 copaw 调用 MCP,必须改用 mcporter;
|
|
|
- 如果 mcp 服务提示鉴权失败,请引导用户检查 EDUCODER_LOGIN 和 EDUCODER_PASSWORD 环境变量;
|
|
|
- 如果 mcp 服务找不到,注意指定 mcp 配置文件的路径;
|
|
|
- 如果调用失败,可以换一种方式重试,但若多次尝试仍不成功,请停止并检查配置;
|
|
|
- 调用需要参数的 MCP 工具时,必须传入完整的结构化 JSON 参数对象;
|
|
|
- 严禁 mcporter 在调用需要参数的 MCP 工具时,遗漏 `--args`。
|
|
|
|
|
|
---
|
|
|
|
|
|
### 1. `educoder_login`
|
|
|
|
|
|
登录头歌Educoder平台,获取会话凭证。
|
|
|
|
|
|
**典型问法:** "登录头歌" / "帮我登录Educoder" / "进行身份认证"
|
|
|
|
|
|
**参数:** 无(从环境变量 EDUCODER_LOGIN 和 EDUCODER_PASSWORD 读取)
|
|
|
|
|
|
**交互规则:**
|
|
|
- 首次使用或会话过期时必须调用
|
|
|
- 登录成功后才能调用其他工具
|
|
|
|
|
|
---
|
|
|
|
|
|
### 2. `educoder_current_user`
|
|
|
|
|
|
查询当前登录用户的信息。
|
|
|
|
|
|
**典型问法:** "我是谁" / "我的账号信息" / "查询当前用户"
|
|
|
|
|
|
**参数:** 无
|
|
|
|
|
|
**返回内容包括:** 用户名、用户ID、角色信息、所属学校等
|
|
|
|
|
|
---
|
|
|
|
|
|
### 3. `educoder_my_courses`
|
|
|
|
|
|
查询当前用户教授或管理的课堂列表。
|
|
|
|
|
|
**典型问法:** "我教了哪些课" / "我的课堂列表" / "查询我的课程"
|
|
|
|
|
|
**参数:** 无
|
|
|
|
|
|
**返回内容包括:** 课堂名称、课堂ID、课程状态、学生人数等
|
|
|
|
|
|
**注意:** 返回结果中的 emoji 需保留。
|
|
|
|
|
|
---
|
|
|
|
|
|
### 4. `educoder_course_students`
|
|
|
|
|
|
查询指定课堂的学生名单。
|
|
|
|
|
|
**典型问法:** "XX课堂有哪些学生" / "查询课堂学生名单" / "高等数学班的学生"
|
|
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 必填 | 说明 |
|
|
|
|------|------|------|
|
|
|
| `courseId` | 是 | 课堂ID |
|
|
|
|
|
|
**使用逻辑:**
|
|
|
- 用户给课堂名称 → 先调 `educoder_my_courses` 获取课堂列表,找到对应 `courseId`,再调本工具
|
|
|
- 用户直接给 `courseId` → 直接调用
|
|
|
|
|
|
---
|
|
|
|
|
|
### 5. `educoder_course_info`
|
|
|
|
|
|
查询指定课堂的详细信息。
|
|
|
|
|
|
**典型问法:** "查询课堂信息" / "XX课堂的设置" / "课堂详情"
|
|
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 必填 | 说明 |
|
|
|
|------|------|------|
|
|
|
| `courseId` | 是 | 课堂ID |
|
|
|
|
|
|
**使用逻辑:**
|
|
|
- 用户给课堂名称 → 先调 `educoder_my_courses` 获取课堂列表,找到对应 `courseId`,再调本工具
|
|
|
- 用户直接给 `courseId` → 直接调用
|
|
|
|
|
|
---
|
|
|
|
|
|
### 6. `educoder_course_groups`
|
|
|
|
|
|
查询指定课堂的分班情况。
|
|
|
|
|
|
**典型问法:** "查询课堂分班" / "XX课堂有哪些分组" / "课堂分班情况"
|
|
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 必填 | 说明 |
|
|
|
|------|------|------|
|
|
|
| `courseId` | 是 | 课堂ID |
|
|
|
|
|
|
**使用逻辑:**
|
|
|
- 用户给课堂名称 → 先调 `educoder_my_courses` 获取课堂列表,找到对应 `courseId`,再调本工具
|
|
|
- 用户直接给 `courseId` → 直接调用
|
|
|
|
|
|
---
|
|
|
|
|
|
### 7. `educoder_homework_list`
|
|
|
|
|
|
查询指定课堂的作业列表。
|
|
|
|
|
|
**典型问法:** "查询作业列表" / "XX课堂有哪些作业" / "课堂作业"
|
|
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 必填 | 说明 |
|
|
|
|------|------|------|
|
|
|
| `courseId` | 是 | 课堂ID |
|
|
|
|
|
|
**使用逻辑:**
|
|
|
- 用户给课堂名称 → 先调 `educoder_my_courses` 获取课堂列表,找到对应 `courseId`,再调本工具
|
|
|
- 用户直接给 `courseId` → 直接调用
|
|
|
|
|
|
---
|
|
|
|
|
|
### 8. `educoder_homework_detail`
|
|
|
|
|
|
查询指定作业的详细提交情况。
|
|
|
|
|
|
**典型问法:** "查询作业提交情况" / "学生作业完成情况" / "作业详情"
|
|
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 必填 | 说明 |
|
|
|
|------|------|------|
|
|
|
| `homeworkId` | 是 | 作业ID |
|
|
|
| `courseId` | 是 | 课堂ID |
|
|
|
|
|
|
**使用逻辑:**
|
|
|
- 用户给课堂名称 → 先调 `educoder_my_courses` 获取课堂列表,找到对应 `courseId`
|
|
|
- 用户给作业名称 → 先调 `educoder_homework_list` 获取作业列表,找到对应 `homeworkId`
|
|
|
- 再调本工具获取作业详情
|
|
|
|
|
|
---
|
|
|
|
|
|
### 9. `educoder_exercises`
|
|
|
|
|
|
查询指定课堂的考试/练习列表。
|
|
|
|
|
|
**典型问法:** "查询考试列表" / "课堂有哪些考试" / "练习列表"
|
|
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 必填 | 说明 |
|
|
|
|------|------|------|
|
|
|
| `courseId` | 是 | 课堂ID |
|
|
|
|
|
|
**使用逻辑:**
|
|
|
- 用户给课堂名称 → 先调 `educoder_my_courses` 获取课堂列表,找到对应 `courseId`,再调本工具
|
|
|
- 用户直接给 `courseId` → 直接调用
|
|
|
|
|
|
---
|
|
|
|
|
|
### 10. `educoder_shixun_search`
|
|
|
|
|
|
搜索实训项目。
|
|
|
|
|
|
**典型问法:** "搜索实训" / "查找实训项目" / "搜索Python实训"
|
|
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 必填 | 说明 |
|
|
|
|------|------|------|
|
|
|
| `keyword` | 是 | 搜索关键词 |
|
|
|
|
|
|
---
|
|
|
|
|
|
### 11. `educoder_shixun_info`
|
|
|
|
|
|
查询指定实训项目的详细信息。
|
|
|
|
|
|
**典型问法:** "查询实训详情" / "XX实训的信息" / "实训项目详情"
|
|
|
|
|
|
**参数:**
|
|
|
|
|
|
| 参数 | 必填 | 说明 |
|
|
|
|------|------|------|
|
|
|
| `shixunId` | 是 | 实训ID |
|
|
|
|
|
|
---
|
|
|
|
|
|
### 12. `educoder_my_shixuns`
|
|
|
|
|
|
查询当前用户管理或创建的实训项目列表。
|
|
|
|
|
|
**典型问法:** "查询我的实训" / "我管理的实训项目" / "我的实训列表"
|
|
|
|
|
|
**参数:** 无
|
|
|
|
|
|
---
|
|
|
|
|
|
### 13. `educoder_my_subjects`
|
|
|
|
|
|
查询当前用户的实践课程列表。
|
|
|
|
|
|
**典型问法:** "查询我的实践课程" / "我的课程列表" / "实践课程"
|
|
|
|
|
|
**参数:** 无
|
|
|
|
|
|
---
|
|
|
|
|
|
## 输出规范
|
|
|
|
|
|
- 结果结构化展示(列表或表格形式)
|
|
|
- 课堂信息至少包含:课堂名称、课堂ID
|
|
|
- 实训信息包含:实训名称、实训ID、状态
|
|
|
- 学生信息包含:学生姓名、学号、提交状态
|
|
|
- 作业信息包含:作业名称、作业ID、截止时间、提交情况
|
|
|
- 保留工具返回的原始文案,不要自由发挥改写
|
|
|
|
|
|
## 红线
|
|
|
|
|
|
- 不编造任何教学数据,必须依赖工具返回
|
|
|
- 不做权限外操作(如修改成绩、删除数据、添加学生等)
|
|
|
- 不暴露用户密码等敏感信息
|
|
|
- 不执行任何写操作,仅限查询
|
|
|
|
|
|
## 调用方式
|
|
|
|
|
|
```bash
|
|
|
# Mac 或 Linux 示例:登录头歌
|
|
|
npx mcporter call educoder-mcp educoder_login
|
|
|
|
|
|
# 查询我的课堂
|
|
|
npx mcporter call educoder-mcp educoder_my_courses
|
|
|
|
|
|
# 查询指定课堂的学生(需要courseId)
|
|
|
npx mcporter call educoder-mcp educoder_course_students --args '{"courseId": "xxx"}'
|
|
|
|
|
|
# 搜索实训项目
|
|
|
npx mcporter call educoder-mcp educoder_shixun_search --args '{"keyword": "Python"}'
|
|
|
```
|