非官方SugarLearning CLI+MCP
非官方 社区构建的CLI工具、变更跟踪器和MCP服务器 SugarLearning. 本项目不隶属于SugarLearning或得到SugarLearning的认可。它使用现有的SugarLearning API和您自己的证书。
SugarLearning是一个学习管理系统,用于跟踪员工培训模块和学习项目。
它做什么
- MCP服务器 --通过以下方式将SugarLearning数据暴露给AI代理(Claude Code、VS Code Copilot、Codex、LM Studio) 模型上下文协议
- 一个命令登录 --通过Playwright登录的浏览器会自动捕获Bearer令牌,无需OAuth重定向URI
- 更改跟踪 --定期对模块、项目和分配进行快照,然后计算差异以检测随时间的变化
- 模块监控 --观察特定模块的任务更改(添加/删除了谁)
- 语义搜索 --可选的Qdrant矢量索引,用于在所有学习内容中进行自然语言搜索
先决条件
快速开始
1.全局安装(推荐)
git clone https://github.com/jernejk/sugarlearning-mcp.git
cd sugarlearning-mcp
uv tool install .这使得 sl 命令available system wide--从任何目录运行它。
在拉取新更改后进行更新:
cd sugarlearning-mcp
git pull
uv tool install --force --reinstall .要卸载,请执行以下操作:
uv tool uninstall sugarlearning-toolsAlternative: Run from project directory without global install
git clone https://github.com/jernejk/sugarlearning-mcp.git
cd sugarlearning-mcp
uv sync然后在所有命令前加上 uv run:
uv run sl login
uv run sl sync
uv run sl search "training"2.身份验证
建议:一个命令浏览器登录。 安装 browser 多一次,然后跑 sl login -一个真正的Chromium窗口打开,您正常登录SugarLearning,CLI从第一个API请求中嗅探Bearer令牌。不需要OAuth重定向URI注册。
uv pip install -e '.[browser]' # or: uv tool install '.[browser]' for global
playwright install chromium
sl login --company YourCompany # company code is saved to config
sl login # subsequent logins捕获令牌后,浏览器窗口会自动关闭。
Alternative login flows
手动粘贴 --打印DevTools说明并自己粘贴一个令牌:
sl login --manual
sl login -t "$(pbpaste)" # after copying the Authorization header刷新令牌 (用于自动续订-比访问令牌寿命更长):
sl login -r YOUR_REFRESH_TOKEN要从浏览器中获取刷新令牌,请执行以下操作:
- 打开Chrome DevTools>应用程序>本地存储>
https://my.sugarlearning.com - 查找
refresh_token键入并复制其值
完整的OAuth PKCE流程 (需要注册的CLI重定向URI):
sl login --oauth您的用户ID将从令牌中自动检测到。凭据存储在 ~/.config/sugarlearning/config.json.
高级: 您还可以通过以下方式进行配置 .env 文件--请参见 配置.3.首次同步
sl sync这将获取所有模块、项目和分配,然后保存快照。稍后再次运行以检测更改。
CLI 参考
| 命令 | 描述 |
|---|---|
sl login | 启动带头浏览器并嗅探Bearer令牌(默认情况下,需要 [browser] 额外) |
sl login --company CODE | 设置公司代码(与任何登录流程结合使用) |
sl login --manual | 打印DevTools粘贴说明 |
sl login -t TOKEN | 直接使用Bearer令牌进行身份验证 |
sl login -r TOKEN | 使用刷新令牌进行身份验证(自动续订) |
sl login --oauth | OAuth PKCE流(需要注册的重定向URI) |
sl --json | 输出为JSON,而不是人类可读的文本 |
sl sync | 获取数据、创建快照、显示自上次同步以来的更改 |
sl diff | 显示最新差异 |
sl watch MODULE_ID | 显示模块的当前任务和更改历史记录 |
sl history | 列出所有已保存的快照 |
sl backlog | 显示你的学习积压 |
sl search QUERY | 搜索模块和项目(Qdrant或文本回退) |
sl leaderboard | 显示公司排行榜排名 |
sl badges [USER] | 显示用户获得的徽章 |
sl profile [USER] | 显示带有排名和统计数据的用户资料 |
sl get ITEM_ID | 获取学习项目的完整细节和内容 |
sl complete ITEM_ID | 将学习项目标记为已完成 |
sl note ITEM_ID CONTENT | 添加或更新学习项目的私人笔记 |
sl index | 构建/重建Qdrant矢量索引 |
sl mcp | 启动MCP服务器(stdio) |
大多数命令支持 --limit N 和 --skip N 对于分页:
sl search "training" --limit 5
sl backlog --limit 10 --skip 5
sl watch 6307 --limit 20
sl history --limit 5状态筛选
按完成状态筛选您的待办事项列表:
sl backlog --status outstanding # Items you still need to do
sl backlog --status completed # Items you've finished
sl backlog --status blocked # Items that are blocked将状态过滤与搜索相结合,在待办事项列表中查找特定项目:
sl search "training" --status completed # Completed training items
sl search "security" --status outstanding # Outstanding security items排行榜、徽章和个人资料
查看您和您的团队如何跟踪:
sl leaderboard # Company rankings (hides 0% users)
sl leaderboard --all # Include users with 0% progress
sl leaderboard --group 5 --limit 10 # Top 10 in a specific group
sl badges # Your earned badges
sl badges jk # Another user's badges
sl profile # Your profile with rank & stats
sl profile jk # Another user's profileJSON输出
添加 --json 对于任何用于机器可读输出的命令:
sl backlog --status outstanding --json
sl search "training" --json
sl watch 6307 --json
sl diff --json
sl leaderboard --json
sl profile --json例子
注意“规格审查”模块上的作业更改:
sl watch 6307搜索与培训相关的内容(包括每个结果的可点击URL):
sl search "training conferences"获取特定项目的完整内容:
sl get 8291
sl get 8291 --json
sl get 8291 --user jk完成学习项目(自动检测是否需要批准):
sl complete 15108
sl complete 15108 --note "Reviewed all 3 rules"
sl complete 15108 --comment "Done" --json向项目添加私人注释:
sl note 15108 "Key takeaway: use back pressure for AI agents"使用URL显示未完成的待办事项:
sl backlog --status outstanding --limit 10MCP服务器
MCP服务器通过stdio传输将SugarLearning数据暴露给AI代理。它提供了以下工具:
| 工具 | 说明 |
|---|---|
list_modules | 列出所有带有元数据的学习模块 |
get_module | 获取特定模块的详细信息 |
get_module_users | 将用户分配到有进度的模块 |
get_module_groups | 将组分配给模块 |
get_module_items | 在模块中获取学习项目 |
get_item | 获取学习项目的完整细节和内容 |
complete_item | 将学习项目标记为已完成 |
save_note | 添加或更新学习项目的私人笔记 |
get_backlog | 获取用户的学习待办事项列表 |
get_recent_changes | 从本地跟踪中获取最近的更改差异 |
search_learning | 跨学习内容的语义搜索 |
get_module_list | 获取模块列表(员工视图) |
get_leaderboard | 获取公司排行榜排名 |
get_user_profile | 获取带有徽章的用户个人资料 |
get_user_badges | 获取用户获得的徽章 |
克劳德代码
添加到您的Claude Code MCP设置中(~/.claude/settings.json):
{
"mcpServers": {
"sugarlearning": {
"command": "sl",
"args": ["mcp"]
}
}
}注: 这需要全局安装(uv tool install .).如果使用uv run相反,使用"command": "uv", "args": ["run", "--directory", "/path/to/sugarlearning-mcp", "sl", "mcp"].
然后问克劳德这样的问题:
- “SugarLearning提供了哪些模块?”
- “谁被分配到规格审查模块?”
- “我的学习积压中有什么?”
- “最近学习模块有什么变化吗?”
- “谁在领导公司排行榜?”
- “jk获得了什么徽章?”
- “显示我的SugarLearning个人资料和排名”
VS代码(复制/继续)
添加到您的VS代码设置(.vscode/settings.json 或用户设置):
{
"mcp": {
"servers": {
"sugarlearning": {
"command": "sl",
"args": ["mcp"]
}
}
}
}Codex(OpenAI CLI)
Codex通过其配置支持MCP服务器。添加到您的Codex配置中:
{
"mcpServers": {
"sugarlearning": {
"command": "sl",
"args": ["mcp"]
}
}
}LM 工作室
LM Studio以代理模式支持MCP服务器。配置新的MCP服务器:
- 名字:SugarLearning
- 命令:
sl - 参数:
mcp - 运输标准: stdio
Qdrant矢量搜索(可选)
对于所有学习内容的语义搜索:
1.启动Qdrant
docker run -p 6333:6333 qdrant/qdrant2.建立指数
sl index这将使用以下命令嵌入所有模块名称、描述和学习项 all-MiniLM-L6-v2 (在本地运行,不需要API密钥)。
3.搜索
sl search "training conferences"MCP服务器的 search_learning 该工具还将在可用时使用Qdrant,否则将回退到文本匹配。
更改跟踪
每 sl sync 在中创建带时间戳的JSON快照 data/snapshots/当存在前一个快照时,它会计算一个差异检测:
- 新建/删除模块
- 更改了模块属性(名称、描述、管理器等)
- 用户分配更改(每个模块中添加/删除了谁)
- 组分配更改
- 学习项目添加/删除/更改
差异保存到 data/diffs/ 并且可以通过以下方式进行审核 sl diff 或通过MCP访问 get_recent_changes 工具。
自动同步
设置要运行的cron作业或计划任务 sl sync 定期地:
# Every hour
0 * * * * cd /path/to/sugarlearning-mcp && sl sync >> /tmp/sl-sync.log 2>&1项目结构
sugarlearning-mcp/
├── src/sugarlearning_tools/
│ ├── auth.py # OAuth PKCE + token management
│ ├── cli.py # Click CLI entry point
│ ├── client.py # SugarLearning API client
│ ├── config.py # Pydantic settings (.env)
│ ├── mcp_server.py # FastMCP server
│ ├── models.py # Pydantic models
│ ├── qdrant_index.py # Qdrant vector indexing
│ └── sync.py # Snapshot + diff engine
├── tests/ # pytest test suite
├── data/
│ ├── snapshots/ # JSON snapshots (gitignored)
│ └── diffs/ # Change diffs (gitignored)
├── .env.example # Configuration template
└── pyproject.toml # Project definition配置
所有设置都使用 SL_ 前缀,可以通过环境变量或 .env 文件:
| 变量 | 默认值 | 描述 |
|---|---|---|
SL_COMPANY_CODE | *(必填)* | 您的SugarLearning公司/租户代码 |
SL_USER_ID | *(自动检测)* | 您的用户标识符(如果未设置,则从登录令牌中提取) |
SL_BASE_URL | https://my.sugarlearning.com | SugarLearning API基础URL |
SL_IDENTITY_AUTHORITY | https://identity.ssw.com.au | OAuth身份服务器 |
SL_CLIENT_ID | ssw-sugarlearning-client | OAuth客户端ID |
SL_QDRANT_URL | http://localhost:6333 | Qdrant服务器URL |
SL_QDRANT_COLLECTION | sugarlearning | Qdrant集合名称 |
运行测试
uv run --extra dev pytest许可证
麻省理工学院
