Librus MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LIBRUS_ALIAS | No | Optional short name for the single login configured with LIBRUS_USERNAME and LIBRUS_PASSWORD. | librus |
| LIBRUS_CONFIG | No | Path to a private config.json file containing one or more Librus accounts with alias, username and password. | |
| LIBRUS_ACCOUNTS | No | A JSON list of accounts, used instead of a config file. | |
| LIBRUS_PASSWORD | No | Librus Synergia password for a single login, used when no config file or LIBRUS_ACCOUNTS is provided. | |
| LIBRUS_USERNAME | No | Librus Synergia username for a single login, used when no config file or LIBRUS_ACCOUNTS is provided. | |
| LIBRUS_MCP_TOKEN | No | Bearer token for HTTP mode, required for every request when the server is run over HTTP. | |
| LIBRUS_MCP_TOKEN_FILE | No | Path to a file containing the bearer token for HTTP mode. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accountsA | List the configured login aliases. Call this first: every other tool takes one as account_alias. Offline. |
| get_student_informationA | Get the profile of the student a login represents: name, class, register number, tutor, school and lucky number. Each login is an independent parent or student account. |
| get_final_gradesA | Get midterm, predicted and annual grades per subject as the school published them. A column the school does not show is unavailable; an empty or - raw value is not given yet. For individual grades use get_grades or get_grades_window. |
| get_gradesA | List grades with averages: numeric, descriptive and formative assessments, including observation cards. For a date range use get_grades_window. scope also changes the view this login's Librus session remembers and may not apply to formative rows. A grade whose formative_id equals a formative row's assessment.detail_id is one assessment, not two. |
| get_attendanceA | List attendance records. For a date range use get_attendance_window; for totals use get_attendance_frequency. scope also changes the view this login's Librus session remembers. |
| get_grades_windowA | List grades and formative assessments dated within date_from..date_to, without averages (see get_grades). scope also changes the view this login's Librus session remembers and may not apply to formative rows. A grade whose formative_id equals a formative row's assessment.detail_id is one assessment. |
| get_attendance_windowA | List attendance records dated within date_from..date_to. Use this instead of get_attendance for a date range. scope also changes the view this login's Librus session remembers. |
| get_attendance_detailA | Get every field Librus shows for one attendance record, such as date and topic. The id comes from get_attendance, get_attendance_window or get_completed_lessons. |
| get_attendance_frequencyA | Get attendance totals for each semester and the year: attended, total, excluded and unknown lessons, with ratios from 0 to 1 (null when undefined). For a per-subject breakdown use get_subject_frequency. |
| get_subject_frequencyA | Get attendance counts and ratios per subject, optionally within a window of up to 371 days. For overall totals use get_attendance_frequency. |
| get_timetableA | Get the lesson plan for one week, with substitutions and cancellations, in school local time. Selecting the week also changes the week this login's Librus session remembers. |
| get_announcementsA | Get all school announcements with their full text. Does not mark them read in Librus. |
| get_agendaA | List one month of school calendar events such as tests, trips and days off. Pass an event's reference, when present, to get_agenda_detail. Selecting the month also changes the month this login's Librus session remembers. |
| get_agenda_detailA | Get every detail of one calendar event. Use the same account_alias that get_agenda used. |
| get_homeworkA | List homework in a date range; give both dates or neither (today to 14 days ahead, Warsaw time). Pass an item's reference to get_homework_detail. The range also changes what this login's Librus session remembers. |
| get_homework_detailA | Get the full text of one homework assignment. Does not mark it read in Librus. |
| get_completed_lessonsA | List lessons already held between two dates: subject, teacher, topic and attendance mark. Continue with the returned cursor and the same dates. The range also changes what this login's Librus session remembers. |
| get_school_year_archiveA | List earlier school years with their marks and behaviour, then achievements. Cells keep Librus's exact text; a year's year_end mark may differ from that year's annual grade. Each page rereads the archive. |
| get_class_free_daysA | List the class's days and lesson ranges without classes, such as holidays and school free days. type_id is an opaque code, not a name; a day without lesson numbers is not necessarily free all day. |
| get_messagesA | List message summaries (correspondent, subject, date, read state) without opening them; use get_message_content for the text. On legacy accounts the folder choice changes the view Librus remembers. Modern accounts can list the archive or filter current mail by correspondent or unread_only; archives cannot be filtered. Repeat the same filters with cursor. |
| get_message_contentA | Get a message's full text and attachments. Librus marks a received message read when it is opened, so that needs allow_mark_read=true with the user's consent; sent messages do not. Archived messages cannot be opened. |
| get_recipient_typesA | List the recipient groups this login can message and whether each can be looked up. Pass a group's reference to get_recipients, or on legacy accounts to get_recipient_choices. Sends nothing. |
| get_recipient_choicesA | Legacy accounts only: list the sub-choices of a hierarchical recipient group, such as classes. Put the chosen item's reference.selection_id into recipient_type for get_recipients. Modern accounts return UNSUPPORTED_CAPABILITY. |
| get_recipientsA | List the people in one recipient group, to address a message. Modern students and parents groups include virtual accounts only with include_virtual=true in recipient_type. On legacy accounts the lookup changes this login's Librus form state. Nothing is sent. |
| get_message_correspondentsA | Modern accounts: list the people in a mailbox folder, to filter get_messages by correspondent. These references cannot address a new message; use get_recipients for that. |
| get_teacher_subjectsA | Modern accounts: list teachers with the subjects they teach. The IDs are informational and cannot address a message; use get_recipients for that. |
| get_message_unread_countsA | Modern accounts: get unread message counts for the current and archive folders without opening messages. Independent of get_new_notifications. |
| download_attachmentA | Save one message attachment to the server's private download folder and return its local path, size and SHA-256. Never overwrites a file or opens the message. On Linux and macOS, files up to 256 KiB are may also be offered as a 15-minute MCP resource. |
| get_new_notificationsA | Check a login for new grades, attendance, messages, announcements, calendar events or homework. The batch is stored and returned again, for the same categories, until acknowledge_notifications. Librus reports new calendar events only once, so they need allow_consume_events=true. Changes the grade, attendance and homework views Librus remembers; never opens messages. |
| get_notification_statusB | Show whether a login has an unacknowledged notification batch or an uncertain delivery to resolve. Offline: it does not check Librus or acknowledge anything. |
| acknowledge_notificationsA | Confirm that a batch from get_new_notifications reached the user, so it is not returned again. Call only after delivery; this cannot be undone. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 31 tools
Most tools target distinct resource/action combinations, and paired tools such as get_grades/get_grades_window, get_attendance/get_attendance_detail, and get_messages/get_message_content are explicitly differentiated. However, the large surface includes subtle overlaps in notification and message-recipient tools such as get_new_notifications vs get_message_unread_counts and get_recipients vs get_message_correspondents, relying on description text rather than obvious naming.
All tool names use snake_case and start with a clear verb (list_, get_, download_, acknowledge_), producing a predictable verb_noun pattern. The semantic split between get_ for single/aggregate results and list_ for collections is consistent and readable.
At 31 tools, the server is above the rubric's heavy threshold, and the surface is inflated by window/detail/frequency variants plus legacy/modern recipient paths. The broad school-register domain justifies many operations, but several tools could be consolidated into fewer parameterized operations.
The surface broadly covers read access: accounts, grades, attendance, timetable, calendar, homework, archive, messages, attachments and notifications. However, recipient lookup tools are explicitly framed as preparing to address a message, yet no send_message tool exists, leaving a notable lifecycle gap; message and announcement read-state management is also only partially exposed.