关于 Librus Synergia
Librus Synergia MCP 服务让 AI 助手读取学校成绩册中的学生与课程信息,适用于需要查看学业和校务数据的家庭。支持多个账号,并可通过本地或自托管 HTTP 模式运行。
主要功能
- 01查询成绩与考勤记录
- 02查看课表、作业和日历
- 03读取公告与消息
- 04查看学年档案和学生信息
- 05支持多个登录账号
适用场景
- 01查看学生的成绩与出勤情况
- 02检查课程安排和未完成作业
- 03查看学校公告及收件消息
- 04管理多个学生账号的数据
MCP 相关
向 MCP 客户端提供 Librus Synergia 的学生、成绩、考勤、课表、作业和通信工具。支持 stdio 本地连接,也可通过带令牌的 HTTP 连接远程客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
31收录的工具列表 · 更新于 今天
此工具无需参数。
详细介绍
Librus MCP Server
一个 MCP 服务,可让 AI 助手访问 Librus Synergia 学校成绩簿:成绩、出勤、课程表、作业、日历、公告、消息、形成性评估、学年历史、无课日和学生信息。它基于独立的
librus-python-api,支持同时登录多个账号。
2.0 版替换了此前所有版本使用的 librus-apix 后端。要从 1.x 升级?请参阅从 1.x 升级。
快速开始
以下命令固定使用 2.4.1,对应原生 API 1.7.1。你需要 Librus Synergia 的登录名和密码。不支持需要交互式双重身份验证的账号。
选择一种运行方式:
| 方式 | 适用场景 | 凭据 |
|---|---|---|
| 在你的电脑上 | 在同一台机器上使用 Claude Code、Claude Desktop、Gemini CLI、Codex、OpenCode、Hermes | 私有 config.json,可配置任意数量的登录账号 |
| 桌面应用包 | 在支持 MCP Bundles 的应用中一键安装 | 应用的设置表单,一个登录账号 |
| 使用 Docker 可自托管 | 你另一台机器上的 Agent 通过 HTTP 连接 | 私有 config.json 或环境变量,可配置任意数量的登录账号 |
| MCP Registry | 从官方注册表安装服务的客户端 | 客户端的设置表单,一个登录账号 |
所有方式都会在你控制的机器上运行服务。它只会连接到 Librus;请参阅隐私。
在你的电脑上
你无需克隆此仓库,也无需自行安装 Python。 uv 会自动下载 Python 3.14 和此服务。
1. 安装 uv。 在 macOS 或 Linux 上,打开终端并运行:
curl -LsSf https://astral.sh/uv/install.sh | sh
在 Windows 上,打开 PowerShell 并运行:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
之后关闭并重新打开 AI 助手。
2. 创建私有配置文件。 在用户账号下的私有文件夹中将以下内容保存为 config.json,确保该文件夹不在项目目录或同步文件夹内,并填写登录名和密码:
{
"accounts": [
{"alias": "daughter", "username": "12345", "password": "YOUR_PASSWORD"}
]
}
alias 是你询问此登录账号相关信息时使用的简短名称。要添加更多登录账号,请在 accounts 中添加更多对象,并为每个对象指定自己的别名:
{
"accounts": [
{"alias": "anna", "username": "12345", "password": "FIRST_PASSWORD"},
{"alias": "jan", "username": "67890", "password": "SECOND_PASSWORD"}
]
}
建议的路径:
- macOS:
/Users/YOUR_NAME/.config/librus-mcp/config.json - Linux:
/home/YOUR_NAME/.config/librus-mcp/config.json - Windows:
C:\Users\YOUR_NAME\.config\librus-mcp\config.json
首次启动时,服务会限制文件的访问权限,仅允许当前用户访问(macOS/Linux),创建私有状态目录(~/.librus-mcp),并在其中生成持久密钥。无需进行其他设置。通知和附件下载默认开启;发送消息默认关闭。要更改设置,例如添加:
"features": {"notifications": true, "attachments": false, "send_message": true}
如果只有一个登录账号,你可以跳过此文件,改用环境变量:LIBRUS_USERNAME、LIBRUS_PASSWORD,以及可选的 LIBRUS_ALIAS(默认为 librus)。通过表单收集设置的安装程序会使用这些变量。
3. 连接你的助手。 将路径替换为文件的绝对路径。
Claude Code:
claude mcp add --scope user --transport stdio librus \
-- uvx --python 3.14 librus-mcp==2.4.1 --config /absolute/path/to/config.json
Claude Desktop(Settings > Developer > Edit Config):
{
"mcpServers": {
"librus": {
"command": "uvx",
"args": ["--python", "3.14", "librus-mcp==2.4.1", "--config", "/absolute/path/to/config.json"]
}
}
}
Gemini CLI:
gemini mcp add --scope user --transport stdio \
librus uvx --python 3.14 librus-mcp==2.4.1 --config /absolute/path/to/config.json
OpenAI Codex CLI:
codex mcp add librus \
-- uvx --python 3.14 librus-mcp==2.4.1 --config /absolute/path/to/config.json
OpenCode:
opencode mcp add librus --global -- \
uvx --python 3.14 librus-mcp==2.4.1 --config /absolute/path/to/config.json
Hermes Agent(~/.hermes/config.yaml):
mcp_servers:
librus:
command: "uvx"
args: ["--python", "3.14", "librus-mcp==2.4.1", "--config", "/absolute/path/to/config.json"]
无需连接 Librus 即可检查设置:
uvx --python 3.14 librus-mcp==2.4.1 --config /absolute/path/to/config.json --check-config
如果图形界面的助手找不到 uvx,请使用其绝对路径(which uvx 或 where uvx)。更改文件后,重启或重新连接助手。
桌面捆绑包(预览版)
每个版本都会在其 GitHub 发布页附上 librus-mcp-2.4.1.mcpb。使用支持 MCP Bundles 的应用打开它,例如 Claude Desktop。应用会要求输入 Librus 登录名和密码,将其保存在设置中,并安装 Python 3.14 以及此版本经过测试的确切依赖版本。该捆绑包支持一个登录账号;如需使用多个账号,请参阅在你的计算机上。
使用 Docker 自托管
在自己的 Docker 主机上运行服务,并通过 HTTP 连接其他计算机上的 Agent。每个请求都需要 Bearer 令牌。服务本身不提供 TLS,因此只能通过带 TLS 的反向代理或 Tailscale、WireGuard 等专用网络公开访问。切勿在公共或共享网络上公开此端口。
1. 准备私有文件夹,在 Docker 主机上存放配置和令牌。文件必须归运行容器的用户所有,且只能由该用户读取:
mkdir -p ~/librus-mcp/data && cd ~/librus-mcp
# config.json: the same format as above, any number of logins
docker run --rm ghcr.io/krzysztofbury/librus-mcp:2.4.1 --generate-token > token
chmod 600 config.json token
2. 使用此 compose.yaml 启动,将 1000:1000 替换为 id -u 和 id -g 的输出:
services:
librus-mcp:
image: ghcr.io/krzysztofbury/librus-mcp:2.4.1
command: ["--transport", "http", "--allowed-host", "librus-mcp.example.lan:*"]
user: "1000:1000"
environment:
LIBRUS_CONFIG: /config/config.json
LIBRUS_MCP_TOKEN_FILE: /config/token
volumes:
- ./config.json:/config/config.json:ro
- ./token:/config/token:ro
- ./data:/data
ports:
# Loopback for a reverse proxy on this host, or your VPN address instead.
- "127.0.0.1:8000:8000"
restart: unless-stopped
docker compose up -d
docker compose logs librus-mcp
端点是代理 HTTPS 地址下的 /mcp,或 VPN 地址的 8000 端口。--allowed-host 列出客户端使用的主机名;NAME:* 表示接受任意端口或不带端口的 NAME。反向代理必须转发原始 Host 标头:Caddy 和 Traefik 默认会这样做,nginx 则需要 proxy_set_header Host $host;。如果未设置 --allowed-host,服务会记录 Host 标头检查已关闭,并仅依赖令牌进行验证。镜像中的服务会监听所有容器网络接口;由 ports: 行决定哪些设备可以访问它。./data 用于保存私有状态、持久化密钥和下载内容,请做好备份。
3. 使用令牌作为 Bearer 标头连接 Agent。Hermes Agent 的配置如下:
mcp_servers:
librus:
url: "https://librus-mcp.example.lan/mcp"
headers:
Authorization: "Bearer YOUR_TOKEN"
其他支持可流式 HTTP 的客户端也使用相同的 URL 和标头。
HTTP 模式须知:
- 一个令牌可授权访问所有已配置的登录账号。每位受信任的用户应使用单独的部署;如果令牌泄露,请更换令牌。
- 每个登录账号只让一个 Agent 轮询通知:通知的投递和确认机制是为单个使用者设计的。
download_attachment会将文件保存到 Docker 主机上的./data/downloads。远程 Agent 无法读取该路径;小文件(最大 256 KiB)也会作为短时有效的 MCP 资源提供。- 如果启用
send_message,任何持有令牌的人都可以确认发送预览。服务会在启动时对此发出警告。 - 如果没有
user:行,容器将以 uid 10001 运行;此时命名卷可直接使用,但配置文件和令牌文件必须归 uid 10001 所有。 - 除了使用文件,也可以通过环境变量传入
LIBRUS_ACCOUNTS(账号的 JSON 列表),或通过LIBRUS_USERNAME和LIBRUS_PASSWORD传入一个登录账号,并传入LIBRUS_MCP_TOKEN。
同一个镜像也可通过 stdio 为 Docker 主机上的客户端运行:
docker run -i --rm -v librus-mcp-data:/data -e LIBRUS_USERNAME -e LIBRUS_PASSWORD ghcr.io/krzysztofbury/librus-mcp:2.4.1。
MCP Registry
该服务已列入官方 MCP Registry,名称为 io.github.krzysztofbury/librus-mcp,并提供 PyPI 包、容器镜像和桌面捆绑包。通过 Registry 安装的客户端会要求输入 LIBRUS_USERNAME 和 LIBRUS_PASSWORD,并可选择输入 LIBRUS_ALIAS。
从 1.x 升级
将助手配置中的版本改为 librus-mcp==2.4.1,在其前添加
--python 3.14,并保留现有的 --config 文件。首次启动时,
2.0 会自动调整旧设置:创建密钥,将共享的 1.x 文件夹限制为仅供你的用户访问,
忽略已移除的行为备注设置,并在首次检查时采用 1.x 通知历史记录。切换之前,
请停止使用相同文件夹的 1.x 服务进程。
通知和附件默认保持启用,与 1.x 一样。工具名称和结果有意进行了更改(例如,
list_students 现在是 list_accounts,而 student_alias 是 account_alias)。
助手会自动读取新的工具列表;自定义脚本必须遵循迁移指南。
工具与安全
默认目录包含 31 个类型化工具:
- 账户/个人资料:
list_accounts、get_student_information。 - 成绩:
get_grades、get_final_grades、get_grades_window。 - 出勤:
get_attendance、get_attendance_window、get_attendance_detail、get_attendance_frequency、get_subject_frequency。 - 学校:
get_timetable、get_announcements、get_agenda、get_agenda_detail、get_homework、get_homework_detail、get_completed_lessons、get_school_year_archive、get_class_free_days。 - 通信:
get_messages、get_message_content、get_recipient_types、get_recipient_choices、get_recipients、get_message_correspondents、get_teacher_subjects、get_message_unread_counts。 - 通知:
get_new_notifications、get_notification_status、acknowledge_notifications(功能notifications)。 - 文件:
download_attachment和仅限运行时的附件资源(功能attachments)。
启用 send_message 功能后,会增加 preview_message、send_message、
get_send_outcome 和 get_send_history,共 35 个工具。禁用通知和附件后,
会剩下 27 个工具。
集合通过 limit 和 cursor 分页。每次登录彼此独立,包括同一学生的多个登录。
现代消息系统为默认设置;在账户上设置 "messaging_backend": "legacy" 即可使用旧版邮箱。
行为备注仍不可用。支持将观察卡作为形成性成绩。
分数和百分比成绩(“Oceny punktowe”)是 point 记录,其原始值是按其类别所命名量表计分的分数。
2.1 版本新增内容
保留现有的 2.0 配置、上下文键和持久状态;重新连接助手以刷新工具目录。服务固定使用 API 1.7.1。
- 使用
get_grades或get_grades_window请求形成性评估或观察卡。items现在可以包含带有assessment对象的record_type="formative"。数值型/描述型记录会新增formative_id;匹配的assessment.detail_id用于标识镜像条目,而非额外的成绩。自定义使用方必须处理这个新变体,以及从 2.4 开始支持的point。重启旧成绩游标。 - 使用
get_school_year_archive读取往年学年(默认限制为 10)。条目按类型排列,先是学年,再是成就;分数和原始行为单元格保留学校提供的含义。 - 使用
get_class_free_days读取日期和可选的课时范围。不透明的类型 ID 不是假期名称,缺失的课时边界不代表全天活动。 - 在现代账户上,使用
get_message_correspondents获取绑定的筛选器引用,然后将其作为correspondent传给get_messages。也支持使用unread_only=true获取当前收件箱摘要。使用游标时重复传入查询值。 - 使用
get_messages(archived=true)获取往年邮件摘要。不支持归档筛选和打开归档邮件正文;archiving_in_progress仅供参考,不会阻止列出邮件。 get_teacher_subjects会将现代教师 ID 与科目配对;这些 ID 不能作为收件人引用使用。get_message_unread_counts会返回当前/归档文件夹的计数,不打开邮件,也不更改 MCP 通知的传递方式。
所有新增集合读取都有上限。完整响应上限仍为 512 KiB;超出上限的结果会报错 LIMIT,不会静默截断文本。未知的形成性评估标记会导致整个成绩读取失败。形成性评估行可能不在所选周/上次登录视图的范围内;支持显式按日期窗口筛选。
打开收到的邮件需要设置 allow_mark_read=true,因为 Librus 会将其标记为已读。发送邮件需要精确预览、单独的人为批准以及 confirm=true;绝不要重试状态为 CLAIMED 或 UNKNOWN 的发送操作。获取新的日历通知需要设置 allow_consume_events=true,每批通知在送达后都必须确认。学校内容是不可信数据,绝不是指令。
默认情况下,状态、持久键和下载文件都保存在 ~/.librus-mcp 下(配置中的 state_dir 和 download_dir)。备份状态目录,以便在重新安装后保留引用和通知历史。下载的文件会保存在运行服务的机器上。
对于 download_attachment,将邮件返回的 reference 作为 attachment_ref.message 传入,并将 get_message_content 中附件的 identifier 和 archived 值分别作为 attachment_ref.identifier 和 attachment_ref.archived 传入。archived 指定文件所属的命名空间:当前邮件的文件也可能位于归档中。省略时,它会沿用邮件引用的值。下载不会打开邮件正文。
隐私
服务运行在你控制的机器上,可以是你的电脑或你自己的 Docker 主机,并且只连接到 Librus。服务不会收集遥测数据,也不会向作者或其他第三方发送任何内容。工具结果会发送给请求这些结果的 AI 助手。请参阅 PRIVACY.md。
开发
uv sync --locked
uv run pytest -q
uv run ruff check src/librus_mcp tests_native release_verification scripts
uv run ruff format --check src/librus_mcp tests_native release_verification scripts
uv run mypy
uv run bandit -r src/librus_mcp -c pyproject.toml -q
请参阅 MIGRATION_2_0.md 了解配置优先级和运维命令,参阅 MCP_CONTRACT.md 了解协议规则,参阅 NATIVE_TEST_PLAN.md 了解验证证据,并参阅 SPEC.md 了解所有权。
许可证与限制
2.x 采用 MIT 许可证。LICENSE_REVIEW.md 记录了源代码和依赖项的审查情况;依赖项仍遵循各自的条款。legacy_reference/ 中未发布的 1.x 参考资料仍仅采用 GPL-3.0 许可证,早期版本则保留其原有许可证。
这是一个非官方集成,与 Librus 无关联。上游更改可能会导致受支持的功能无法正常运行。请按照 SECURITY.md 中的说明,私下报告安全问题。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。