mcpField
L
Librus Synergia

Librus Synergia

本地服务
github.com/krzysztofbury科研与教育13今天更新

关于 Librus Synergia

Librus Synergia MCP 服务让 AI 助手读取学校成绩册中的学生与课程信息,适用于需要查看学业和校务数据的家庭。支持多个账号,并可通过本地或自托管 HTTP 模式运行。

主要功能

  1. 01查询成绩与考勤记录
  2. 02查看课表、作业和日历
  3. 03读取公告与消息
  4. 04查看学年档案和学生信息
  5. 05支持多个登录账号

适用场景

  1. 01查看学生的成绩与出勤情况
  2. 02检查课程安排和未完成作业
  3. 03查看学校公告及收件消息
  4. 04管理多个学生账号的数据

MCP 相关

向 MCP 客户端提供 Librus Synergia 的学生、成绩、考勤、课表、作业和通信工具。支持 stdio 本地连接,也可通过带令牌的 HTTP 连接远程客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
pypilibrus-mcp2.5.0
ocighcr.io/krzysztofbury/librus-mcp:2.5.0
mcpblibrus-mcp-2.5.0.mcpb

工具

31

收录的工具列表 · 更新于 今天

此工具无需参数。

详细介绍

Librus MCP Server

License: MIT PyPI

一个 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 中的说明,私下报告安全问题。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。