LearnUpon MCP服务器
通过MCP将LearnUpon LMS与Claude集成,让您能够以自然语言访问您的 Partner Academy用于配置、证书跟踪和组管理。
存储库结构
learnupon-mcp-server/
├── learnupon_server.py # MCP server — all tools and API logic
├── run_server.py # Entry point for Claude Desktop (uv, handles .env loading)
├── .env.example # Credential template — copy to .env and fill in
├── .gitignore
├── README.md
├── .claude-plugin/
│ └── plugin.json # Cowork plugin metadata (name, version, description)
└── skills/
└── learnupon/
└── SKILL.md # Prompt instructions for Claude when using this plugin______________________________________________________________________
运作原理
克劳德桌面生成 run_server.py 作为子进程(stdio传输)。凭据是 从a加载 .env 服务器旁边的文件——没有单独的进程要运行,也没有启动脚本。
依赖关系是使用内联声明的 第723页 和 由自动管理 uv --不需要virtualenv设置。
设置
1.安装uv
如果你没有 uv 安装:
curl -LsSf https://astral.sh/uv/install.sh | sh验证: which uv --记下完整路径(例如。 /Users/yourname/.local/bin/uv).
2.放置服务器文件
将这些文件保存到本地目录(例如。 ~/mcp/learnupon/):
learnupon_server.pyrun_server.py.env.example
3.创建.env文件
cp .env.example .env编辑 .env 并填写您的凭据:
LU_SUBDOMAIN=yoursubdomain
LU_API_KEY=your_api_key_here
LU_API_SECRET=your_api_secret_hereAPI凭据位于LearnPon管理员中: 设置→ 集成→ API.
4.添加到Claude桌面配置
打开 ~/Library/Application Support/Claude/claude_desktop_config.json 并添加:
{
"mcpServers": {
"learnupon": {
"command": "/Users/YOUR_USERNAME/.local/bin/uv",
"args": ["run", "/Users/YOUR_USERNAME/mcp/learnupon/run_server.py"]
}
}
}使用 仅限绝对路径 --没有 ~,没有相对路径。 替换 command 随着输出 which uv. 替换 args 路径的实际位置 run_server.py 在你的机器上。
在第一次运行时, uv 将自动安装中声明的所有依赖项 run_server.py. 无手册 pip install 需要。
5.重新启动克劳德桌面
完全退出(Cmd+Q),重新打开,然后 开始新的对话.
______________________________________________________________________
工具
| 工具 | 说明 |
|---|---|
lu_list_groups | 列出所有有成员计数的组 |
lu_list_courses | 列出所有课程,包括注册和完成统计数据 |
lu_lookup_user | 通过电子邮件查找用户 |
lu_enrollment_status | 检查用户的课程注册、完成状态和证书到期情况 |
lu_course_progress | 课程的总通过/完成统计数据;组的每个用户详细信息 |
lu_provision_users | 批量邀请用户加入群组并注册课程 |
______________________________________________________________________
示例提示
“列出合作伙伴学院中的所有组。”
“将这12位Infosys联系人添加到‘Infosys Sentara’组中,并将他们注册到Fivetran技术基础认证中。”
“检查neha.kale@infosys.com已完成Fivetran技术基础证书。”
“有多少人通过了Fivetran技术基础认证?”
“显示凯捷集团在Fivetran基础课程中的完成状态。”
“谁在2026年3月通过了技术基础证书?”
______________________________________________________________________
故障排除
工具未显示:
- 确认中的两条路径
claude_desktop_config.json是绝对存在的 - 验证JSON:
python3 -m json.tool ~/Library/Application\ Support/Claude/claude_desktop_config.json - 检查日志:
tail -f ~/Library/Logs/Claude/mcp*.log - 完全退出Claude Desktop(Cmd+Q),重新打开,开始新的对话
uv 未找到:
- 使用uv的完整路径
claude_desktop_config.json(例如。/Users/yourname/.local/bin/uv) - Claude Desktop有一个受限的PATH,可能不包括shell的PATH
身份验证错误:
- 确认
.env与位于同一目录中run_server.py - 在LearnUpon:设置中验证凭据→ 集成→ API
______________________________________________________________________
邀请流程说明
新用户会收到一封邀请电子邮件。在他们接受之前,他们不会出现在用户查找中 无法注册。接受后重新运行配置完成注册 自动--没有重复项。
______________________________________________________________________
更新日志
v1.2.0-2026-04-01
Bug修复-注册报告现在功能齐全
- 已修复:注册搜索端点 --已更正
GET /api/v1/enrollments到
GET /api/v1/enrollments/search 穿过 lu_course_progress 和 lu_enrollment_status. 对于所有读取操作,前一个端点路径返回401。所有用户和 组范围的注册查询现在可以正常工作了。
- 修复:课程统计数据返回零 --更正的字段名来自
enrolled/passed/
completed 等等到API的实际字段名称: num_enrolled, num_passed, num_completed, num_in_progress, num_not_started, num_failed, num_pending_review. lu_list_courses 和 lu_course_progress 现在返回真实的聚合数据。
- 改进:分页 —
_paginate现在使用LU-Has-Next-Page响应头
(LearnUpon的规范分页信号)而不是项目计数启发式。页面大小 从100增加到500,以匹配注册搜索端点的最大值。
- 改进:分页参数 —
_paginate现在接受一个可选params字典
启用经过筛选的分页查询(例如,通过 course_id + group_id).
新油田浮出水面
lu_list_courses/lu_course_progress--现在包括version和failed计数
每门课程
lu_course_progress(组作用域)--现在返回cert_expires_at每次注册lu_enrollment_status--现在回来了cert_expires_at,更正score源自
percentage 字段,已更正 enrolled_at 从 date_enrolled
v1.1.0-2026年3月26日
- 迁移到
uv+PEP 723内联依赖关系——不需要virtualenv设置 - 添加
_paginate多页API响应的帮助程序 - 固定要使用的组查找
title字段(LearnPon API)而不是name - 修复了要使用的组创建负载
{"Group": {"title": ...}} - 固定的
_find_user_by_email重新引发非404 HTTP错误,而不是吞下它们 - 添加
.gitignore,.env.example,扁平回购结构
v1.0.0-2026-03-20
- 初始版本:
lu_list_groups,lu_list_courses,lu_lookup_user,
lu_enrollment_status, lu_course_progress, lu_provision_users
