内容
# edstem-mcp
Ed Discussion 的 MCP 服务器 — 向 Claude 和其他 MCP 客户端公开 Ed 的完整 API。
## 设置
```bash
npm install
npm run build
```
设置您的 API 令牌(在 https://edstem.org/us/settings/api-tokens 获取):
```bash
export ED_API_TOKEN=your_token
export ED_REGION=us # 可选:us(默认),au 等
```
## Claude 代码
添加到 `~/.claude.json`:
```json
{
"mcpServers": {
"edstem": {
"command": "node",
"args": ["/path/to/edstem-mcp/dist/index.js"],
"env": {
"ED_API_TOKEN": "your_token"
}
}
}
}
```
## 工具(22)
| 工具 | 描述 |
|------|-------------|
| `get_user` | 获取身份验证的用户信息和已注册课程 |
| `list_threads` | 列出课程中的讨论主题(可排序,分页) |
| `get_thread` | 通过全局 ID 获取讨论主题及其评论 |
| `get_course_thread` | 通过课程本地编号(UI 中的 #)获取讨论主题 |
| `search_threads` | 按标题、内容或类别搜索讨论主题 |
| `post_thread` | 创建新的讨论主题(支持 Markdown 输入) |
| `edit_thread` | 编辑现有的讨论主题 |
| `lock_thread` | 锁定讨论主题 |
| `unlock_thread` | 解锁讨论主题 |
| `pin_thread` | 置顶讨论主题 |
| `unpin_thread` | 取消置顶讨论主题 |
| `endorse_thread` | 推荐讨论主题 |
| `unendorse_thread` | 取消推荐讨论主题 |
| `star_thread` | 星标/书签讨论主题 |
| `unstar_thread` | 取消星标 |
| `post_comment` | 在讨论主题上发布评论或答案 |
| `reply_to_comment` | 回复现有的评论 |
| `endorse_comment` | 推荐评论 |
| `unendorse_comment` | 取消评论推荐 |
| `accept_answer` | 接受评论作为答案 |
| `list_users` | 列出课程人员名单(教职员/管理员) |
| `list_user_activity` | 列出用户的讨论主题和评论 |
| `upload_file_from_url` | 从 URL 上传文件到 Ed |
| `format_content` | 预览 Markdown 到 Ed XML 转换 |
## 资源(2)
| 资源 | URI | 描述 |
|----------|-----|-------------|
| 用户信息 | `edstem://user` | 身份验证用户详情 |
| 课程 | `edstem://courses` | 已注册课程列表 |
## 提示(3)
| 提示 | 描述 |
|--------|-------------|
| `check_assignment` | 查询作业详情、要求和教职员说明 |
| `unanswered_questions` | 列出课程中未解决的问题 |
| `my_activity` | 显示您在课程中的最近帖子和评论 |
## 内容格式
讨论主题和评论内容使用 Ed 的 XML 文档格式。该服务器 **自动将 Markdown 转换为 Ed XML**,因此您可以自然地编写内容:
```markdown
# 标题
**粗体** 和 *斜体* 文本,带有 `内联代码`
- 项目符号
- 条目
1. 编号
2. 列表
> [!info] 这会变成 Ed 的提示框
```
传递原始 Ed XML(以 `<document` 开头)以绕过转换。
## 测试
```bash
npm test
```
使用 Node.js 内置的测试运行器(`node:test`)。测试涵盖了 Markdown 到 XML 内容转换器和 API 客户端(URL 构造、头部、错误处理)。