You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

357 lines
9.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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="你的头歌密码"
```
**WindowsPowerShell**
```
$env:EDUCODER_LOGIN="你的头歌账号"
$env:EDUCODER_PASSWORD="你的头歌密码"
```
**WindowsCMD**
```
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"}'
```