使用说明
非官方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-tools
Alternative: 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 <command> --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 profile
JSON输出
添加 --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 10
MCP服务器
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/qdrant
2.建立指数
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
许可证
麻省理工学院
