内容
# edstem-cli
用于人与脚本、代理访问Ed Discussion的CLI和MCP。
[](https://www.npmjs.com/package/edstem-cli)
[](https://www.npmjs.com/package/edstem-cli)
[](https://github.com/bunizao/edstem-cli/actions/workflows/ci.yml)
[](https://nodejs.org/)
[](https://bun.sh/)
[](https://modelcontextprotocol.io/)
[](#测验回答-beta)
[](LICENSE)
一个软件包提供了一个人性化且适合代理的CLI,以及本地和托管的MCP服务器:
| 界面 | 功能 | 运行环境 | 身份验证 |
| ---------------- | ------------------------------------------------------------------------------------------------- | ------------------ | ----------------------------------------------------------------- |
| `edstem` **CLI** | 查询课程、课程、线程和活动,支持JSON或Markdown格式;支持测验回答(测试中) | Node.js 20+ 或 Bun | 本地Ed API令牌 |
| **本地MCP** | 通过stdio向本地MCP客户端公开相同的Ed操作 | Node.js 20+ 或 Bun | 本地Ed API令牌 |
| **托管MCP** | 为共享部署和远程MCP客户端提供远程Streamable HTTP访问 | Bun | 在[`edstem.tuuhub.com/mcp`](https://edstem.tuuhub.com/mcp)处进行OAuth |
Node.js 20+ 是支持的npm基准。CLI和本地MCP捆绑包也与Bun兼容;托管服务器需要Bun才能使用`Bun.serve`和`bun:sqlite`。
## 安装
```bash
npm i -g edstem-cli
bun add -g edstem-cli # 如果您喜欢Bun
```
在 [edstem.org/settings/api-tokens](https://edstem.org/settings/api-tokens) 处创建令牌。CLI还会读取 `~/.config/edstem-cli/token`。
```bash
export ED_API_TOKEN="您的令牌"
edstem courses
```
终端中的课程表格表示您已设置!
## CLI
`edstem` 设计为 **AI-native** CLI,因此JSON是默认格式。列表命令返回紧凑的摘要;详细命令获取完整的记录,可以导出Markdown。以下示例使用全局安装的命令;如果未安装,请在命令前加上 `npx edstem-cli` 或 `bunx edstem-cli`。
用例:
```bash
edstem courses
edstem threads 12345 --max 20 --fields id,number,title,flags
edstem thread 12345#42
edstem lessons 12345 --module "第2周"
edstem thread 67890 --md --output thread.md
```
测验和课程进度命令会修改您的Ed状态。只有在您有意这样做时才运行它们:
```bash
edstem lessons read 12345 预读
```
### 测验回答(测试中)
`edstem` 可以检查测验问题和已保存的答案,回答单选或多选问题,修改答案,并提交已完成的幻灯片。
```bash
# 检查测验幻灯片及其已保存的答案。
edstem lessons quiz 4401
edstem lessons quiz 4401 --responses
# 保存答案。对于多选问题,请重复使用 --choice。
edstem lessons quiz 4401 --answer 991 --choice 2
edstem lessons quiz 4401 --answer 991 --choice 2 --choice 4 --amend
# 提交幻灯片的所有已保存答案。
edstem lessons quiz 4401 --submit
```
此功能处于测试阶段,因为Ed的测验端点不是稳定的公共API的一部分。在写入之前,请检查所选问题和选项,并将 `--submit` 视为最终操作,除非课程允许另一次尝试。
使用 `edstem --help` 获取完整的命令参考。原始Ed XML不会出现在线程JSON中,除非您传递 `--include-html`。
## MCP
### 本地
配置MCP客户端以启动stdio服务器:
```json
{
"mcpServers": {
"edstem": {
"command": "edstem-mcp",
"env": {
"ED_API_TOKEN": "您的令牌"
}
}
}
}
```
### 托管
将 `https://edstem.tuuhub.com/mcp` 添加为Streamable HTTP MCP服务器。您的客户端打开OAuth流程,您在其中提供Ed API令牌并批准请求的访问。
本地适配器直接接收您的Ed令牌。托管服务器在静止时加密令牌,将它们映射到OAuth身份,并需要用于测验和课程进度修改的单独写入范围。
## 代理技能
```bash
npx skills add https://github.com/bunizao/edstem-cli
# 检查元数据或重新生成跟踪的引用。
edstem skills
edstem skills generate
```
[SKILL.md](https://github.com/bunizao/edstem-cli/blob/main/SKILL.md) 是规范的代理引用。其CLI表格和MCP工具列表从实现中生成,CI拒绝漂移。
## 自托管
托管适配器使用Bun、Streamable HTTP、OAuth、加密的Ed令牌和SQLite。
```bash
cp .env.example .env
# 设置MASTER_KEY和PUBLIC_BASE_URL。
docker compose up -d
```
镜像暴露 `/healthz`、`/readyz` 和 `/mcp`。SQLite数据存储在 `app_data` 卷中。
## 开发
```bash
npm install
npm run check
npm test
npm run build
npm run pack:check
npm run pack:smoke
```
`npm test` 为 Node.js CLI 和本地 MCP 服务器运行 Vitest,然后为远程 OAuth、安全、SQLite 和重新连接行为运行 Bun 测试。
## 许可证
[MIT](LICENSE)。请参阅 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) 以获取迁移的远程 MCP 属性。