Librus Read-only MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Librus Read-only MCPshow my children's recent grades and attendance"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Librus Read-only MCP
Connector MCP do odczytu danych z Konta LIBRUS, działający lokalnie przez
stdio albo zdalnie przez Streamable HTTP. Obsługuje wiele dzieci
powiązanych z jednym kontem rodzica i nigdy nie udostępnia narzędzi do
wysyłania, usuwania ani modyfikowania danych.
Dlaczego librus-sdk, a nie stary scraper librus-api
Projekt pierwotnie miał bazować bezpośrednio na pakiecie librus-api. Ten
pakiet loguje się jednak do jednej sesji Synergii i nie implementuje Multikonta
Konta LIBRUS. Connector używa więc nowszego librus-sdk, który wyrósł z tego
samego ekosystemu, ale obsługuje oficjalny przepływ portalu:
logowanie do
portal.librus.pl;odczyt wszystkich pozycji
SynergiaAccounts;osobny token i osobny klient dla każdego dziecka;
odczyt danych JSON z API Librusa zamiast kruchego parsowania HTML.
Każde narzędzie dotyczące danych wymaga student_id. Dzięki temu dane dzieci
nie są wybierane na podstawie „ostatnio aktywnego” konta.
Related MCP server: canvas-parent-mcp
Dostępne narzędzia
list_studentsget_student_profileget_gradesget_attendanceget_timetableget_calendarget_homeworkget_announcementslist_messagesget_messagedownload_message_attachment
Wiadomości i ogłoszenia są osobnymi funkcjami. Connector nie zawiera
send_message, kasowania wiadomości, usprawiedliwiania ani innych operacji
zapisujących.
Wymagania
Node.js 22 lub nowszy;
Konto LIBRUS rodzica z powiązanymi kontami dzieci;
klient obsługujący lokalne serwery MCP przez
stdio.
Instalacja
npm install
cp .env.example .envNie wpisuj danych logowania w plikach konfiguracyjnych przekazywanych innym
osobom ani w repozytorium. Connector sam nie odczytuje .env; najbezpieczniej
wstrzyknąć sekrety przez menedżer sekretów klienta MCP albo zmienne środowiska.
Minimalne zmienne:
LIBRUS_PORTAL_EMAIL=rodzic@example.com
LIBRUS_PORTAL_PASSWORD=hasloTest uruchomienia:
npm test
npm run check
LIBRUS_PORTAL_EMAIL='...' LIBRUS_PORTAL_PASSWORD='...' npm startOstatnia komenda będzie czekała na protokół MCP na stdin; to prawidłowe.
Przykładowa konfiguracja klienta MCP
Użyj bezwzględnej ścieżki do src/server.js:
{
"mcpServers": {
"librus": {
"command": "node",
"args": ["/ABSOLUTNA/SCIEZKA/librus-readonly-mcp/src/server.js"],
"env": {
"LIBRUS_PORTAL_EMAIL": "rodzic@example.com",
"LIBRUS_PORTAL_PASSWORD": "UZUPELNIJ_LOKALNIE",
"LIBRUS_ATTACHMENT_DIR": "/ABSOLUTNA/PRYWATNA/SCIEZKA/librus-attachments"
}
}
}
}Najpierw wywołaj list_students, a potem przekazuj zwrócone id lub login
jako student_id.
Wersja zdalna
Zdalny serwer korzysta ze standardowego transportu Streamable HTTP na ścieżce
/mcp. Endpoint /health służy wyłącznie do kontroli dostępności i nie łączy
się z Librusem.
Wymagane sekrety środowiskowe:
LIBRUS_PORTAL_EMAIL=rodzic@example.com
LIBRUS_PORTAL_PASSWORD=haslo-do-konta-librus
MCP_ACCESS_TOKEN=co-najmniej-32-znakowy-losowy-sekretUruchomienie bez Dockera:
npm ci
npm run start:httpUruchomienie kontenera:
docker build -t librus-readonly-mcp .
docker run --rm -p 3000:3000 \
-e LIBRUS_PORTAL_EMAIL \
-e LIBRUS_PORTAL_PASSWORD \
-e MCP_ACCESS_TOKEN \
librus-readonly-mcpAdres MCP po wdrożeniu to https://TWOJA-DOMENA/mcp. W kliencie należy
przekazywać MCP_ACCESS_TOKEN jako nagłówek:
Authorization: Bearer <MCP_ACCESS_TOKEN>Serwer odmawia uruchomienia, jeśli token ma mniej niż 32 znaki. Tryb
ALLOW_INSECURE_HTTP=true służy wyłącznie do lokalnych testów i nie może być
używany w publicznym wdrożeniu.
Wersja zdalna nie zapisuje załączników na dysku serwera. Zwraca je zakodowane
Base64 wraz z nazwą, typem MIME, rozmiarem i SHA-256. Domyślny limit wynosi
10 MiB i można go obniżyć przez LIBRUS_MAX_ATTACHMENT_BYTES.
Ważne ograniczenie uwierzytelniania
Bearer token chroni prywatny, jednoosobowy serwer i działa z klientami MCP,
które pozwalają skonfigurować własny nagłówek. Jeżeli konkretny host wymaga
pełnego OAuth 2.1 zamiast statycznego nagłówka, postaw przed serwerem bramę
OAuth/reverse proxy. Nie publikuj endpointu /mcp bez uwierzytelniania.
Załączniki
download_message_attachment wymaga jednocześnie message_id i
attachment_id. Przed pobraniem connector odczytuje wiadomość i sprawdza, czy
identyfikator załącznika faktycznie w niej występuje. Pliki:
są zapisywane tylko w
LIBRUS_ATTACHMENT_DIR;otrzymują bezpieczną nazwę bez sekwencji traversal;
mają limit domyślnie 10 MiB i uprawnienia
0600;nie nadpisują istniejących plików;
w odpowiedzi zwracają rozmiar, typ MIME i SHA-256.
Ograniczenia bezpieczeństwa
brak narzędzi zapisujących;
tokeny dzieci nigdy nie trafiają do odpowiedzi MCP;
zakres planu lekcji: maksymalnie 31 dni;
pozostałe zakresy dat: maksymalnie 62 dni;
domyślny limit wyników: 100;
logi trafiają wyłącznie na stderr i są dodatkowo redagowane;
wersje zależności są przypięte, a
package-lock.jsonpowstaje przy instalacji.zdalny endpoint wymaga stałoczasowo porównywanego Bearer tokenu i ma limit żądań;
obraz Dockera działa jako nieuprzywilejowany użytkownik.
To nadal nieoficjalna integracja. Librus może zmienić endpointy lub regulamin. Nie konfiguruj agresywnego odpytywania cyklicznego; używaj jej do prywatnego, umiarkowanego odczytu własnego konta.
ChatGPT/Codex na macOS
Najbezpieczniejszym zastosowaniem na osobistym koncie jest lokalny serwer MCP
stdio. Nie wymaga publicznego hostingu, domeny ani tokenu API OpenAI.
Zainstaluj Node.js 22 i wykonaj
npm ciw katalogu projektu.Zapisz dane Librusa w pęku kluczy:
./scripts/macos-save-credentials.shW aplikacji ChatGPT otwórz Settings → MCP servers → Add server.
Wybierz STDIO i ustaw:
Name: librus Command: /bin/zsh Arguments: /ABSOLUTNA/SCIEZKA/librus-readonly-mcp/scripts/macos-keychain-run.shZapisz, zrestartuj aplikację i wpisz
/mcpw polu rozmowy.
Skrypt pobiera login i hasło z macOS Keychain dopiero podczas startu. Hasło nie
trafia do repozytorium ani ~/.codex/config.toml. Załączniki są zapisywane w
~/Documents/LibrusAttachments; katalog można zmienić zmienną
LIBRUS_ATTACHMENT_DIR w konfiguracji MCP.
Wszystkie narzędzia deklarują adnotacje MCP readOnlyHint: true i
destructiveHint: false. Instrukcje serwera nakazują najpierw pobrać listę
dzieci, jawnie używać właściwego student_id i oddzielać wiadomości od
ogłoszeń.
Codzienne podsumowania i e-mail
Lokalny MCP działa tylko w środowisku mającym dostęp do tego Maca i jego pęku
kluczy. Zadanie chmurowe ChatGPT nie powinno zakładać dostępu do lokalnego MCP.
Niezawodną wysyłkę cykliczną należy zrealizować jako osobny lokalny proces
uruchamiany przez macOS launchd albo jako usługę zdalną.
Proces wysyłający e-mail nie jest częścią MCP i nie powinien być udostępniany modelowi jako narzędzie Librusa. Dzięki temu sam connector pozostaje ściśle tylko do odczytu, a lista odbiorców, godzina oraz konfiguracja poczty są jawne i kontrolowane poza rozmową.
Available Tools
11 toolsdownload_message_attachmentBRead-onlyIdempotent
Pobiera załącznik należący do wskazanej wiadomości do prywatnego katalogu lokalnego.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | ||
| student_id | Yes | Id lub login dziecka zwrócony przez list_students. | |
| attachment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false) already declare the safety profile; the description adds only the detail that the file is placed in a 'private local directory', which is marginally useful. It does not describe behavior on missing attachments, overwrites, or exact local path conventions. This does not contradict the annotations (read-only on the server is compatible with saving a local copy).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that correctly places the core action first. No filler, no redundancy, and the most important fact (download + target location) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is present, and the description does not say what the result is (e.g., a local file path, success status, or the downloaded file itself). It also does not give any hint about how to obtain the required IDs from the sibling tools, leaving the caller to infer the entire workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only student_id has a schema description, and the description adds nothing about message_id or attachment_id – where they come from, how they are formatted, or how they relate to the message. At 33% schema description coverage, the description must compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a concrete action (
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when to use or when-not guidance exists. The tool relies on the caller having a student_id, message_id, and attachment_id, but the description never references the sibling tools (list_messages, get_message, list_students) for obtaining those IDs, nor does it explain why one would use this downloader rather than just reading the message directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_announcementsBRead-onlyIdempotent
Ogłoszenia szkolne (oddzielne od wiadomości).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maksymalna liczba rekordów. | |
| date_to | Yes | Koniec zakresu, YYYY-MM-DD. | |
| date_from | Yes | Początek zakresu, YYYY-MM-DD. | |
| student_id | Yes | Id lub login dziecka zwrócony przez list_students. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds no additional behavioral context such as pagination, ordering, or return shape, but it does not contradict the annotations either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, one short phrase that conveys the resource and its distinction from messages. No wasted words, though it could arguably include more action-oriented phrasing; still, it is efficiently sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with full schema coverage and safety annotations, the description is minimally adequate. It lacks any mention of return values or filtering semantics beyond what the schema offers, but given the low complexity and strong annotations, this gap is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (student_id, date_from, date_to, limit) having a description. The tool description adds no parameter-specific meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'school announcements' and explicitly distinguishes them from messages, which helps differentiate from list_messages. Although it is a noun phrase rather than a verb phrase, the tool name 'get_announcements' supplies the action, so the overall purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes that announcements are separate from messages, implying when to choose this tool over list_messages. However, it does not give explicit conditions or detailed guidance on when to use this versus other sibling tools, leaving usage context mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attendanceBRead-onlyIdempotent
Frekwencja dziecka w podanym zakresie dat.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maksymalna liczba rekordów. | |
| date_to | Yes | Koniec zakresu, YYYY-MM-DD. | |
| date_from | Yes | Początek zakresu, YYYY-MM-DD. | |
| student_id | Yes | Id lub login dziecka zwrócony przez list_students. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds no extra behavioral context, such as pagination behavior or whether absence reasons are included. With annotations covering the core traits, a 3 is appropriate because the description doesn't contradict but also doesn't enhance beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted words. It is front-loaded with the core purpose, though it lacks any structured breakdown of behavior or parameters. Still, it earns a 4 for efficiency and clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with complete parameter schema, the description is mostly adequate but misses return value expectations. Since there is no output schema, the agent is left unaware of what the response will contain (e.g., list of per-day statuses). The absence of any note about pagination or limit behavior also leaves a gap. Overall, it is minimally complete but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so all parameters (student_id, date_from, date_to, limit) are already documented with types and explanations. The description adds minimal semantic value beyond the schema, only implying a date range. Baseline 3 is correct since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool retrieves a child's attendance for a date range, which clearly identifies the verb (frekwencja as fetch attendance) and resource (child's attendance). It is distinguishable from sibling tools like get_grades or get_timetable because attendance is a distinct concept. However, it is a noun phrase rather than an explicit action verb, so it could be slightly more directive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description simply states what it does, with no mention of conditions, exclusions, or related tools. An agent would need to infer from the name and sibling list, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendarBRead-onlyIdempotent
Terminarz i dni wolne dziecka w podanym zakresie dat.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maksymalna liczba rekordów. | |
| date_to | Yes | Koniec zakresu, YYYY-MM-DD. | |
| date_from | Yes | Początek zakresu, YYYY-MM-DD. | |
| student_id | Yes | Id lub login dziecka zwrócony przez list_students. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only and safe nature is covered. The description adds that it returns calendar and days-off in a date range, which gives some context, but it does not disclose return format, pagination behavior, or the definition of 'dni wolne.' This matches the calibration where annotations cover the safety profile, yielding a moderate score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence with no filler or redundant words. It efficiently communicates the core resource and scope. Because every word earns its place and it is simple to parse, it merits a high conciseness score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema and annotations cover parameters and safety, but there is no output schema. The description only gives a high-level 'calendar and days off' without specifying what fields or event types are returned, nor does it clarify how this differs from get_timetable. For a tool that might return a mix of schedule and holiday data, this is a noticeable gap. Overall, it is minimally complete but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already described in the input schema. The description only repeats the concepts of child and date range, adding no new meaning about parameter values or formats. Per the rubric, a high-coverage schema sets a baseline of 3, and no extra parameter detail is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the resource (calendar and free days) and scope (child, date range), matching the get_calendar name. It goes beyond a vague label and does not contradict the name. However, it is phrased as a noun phrase rather than an explicit action, and it could still be confused with sibling get_timetable without more differentiation, so it does not earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this tool over siblings such as get_timetable or list_students. There are no stated alternatives, prerequisites, or context that would help an agent decide between similar calendar/schedule tools. Usage has to be inferred entirely from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gradesARead-onlyIdempotent
Oceny dziecka w podanym zakresie dat.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maksymalna liczba rekordów. | |
| date_to | Yes | Koniec zakresu, YYYY-MM-DD. | |
| date_from | Yes | Początek zakresu, YYYY-MM-DD. | |
| student_id | Yes | Id lub login dziecka zwrócony przez list_students. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no extra behavioral context such as pagination limits or data freshness; it only states the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, direct sentence that conveys the essential function without extraneous words. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the schema plus annotations cover most needs. However, the description lacks guidance on typical usage context or how it fits into a workflow (e.g., that student_id comes from list_students, though mentioned in the schema). Overall adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with descriptions for all parameters, including formats and source of student_id. The description adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a child's grades within a given date range, with a specific verb and resource. It distinguishes from sibling tools like get_attendance or get_homework by focusing on grades.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description implies usage by stating the function, but there is no mention of prerequisites, exclusions, or scenarios where another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_homeworkCRead-onlyIdempotent
Zadania domowe i przypisane prace dziecka.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maksymalna liczba rekordów. | |
| date_to | Yes | Koniec zakresu, YYYY-MM-DD. | |
| date_from | Yes | Początek zakresu, YYYY-MM-DD. | |
| student_id | Yes | Id lub login dziecka zwrócony przez list_students. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context beyond the basic purpose—nothing about date range semantics, pagination (limit parameter), or what happens if no homework exists. Given the presence of annotations, the description should at least mention relevant constraints, but it does not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short—a single noun phrase. While it is concise, it is under-specified and does not front-load key information such as the operation type (get) or the necessary scope (date range, student). It reads more like a title than a functional description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with detailed schema and annotations, the description is minimally adequate. It identifies the resource and subject, and the schema covers parameter meaning. However, it does not mention return format, pagination behavior, or anything about how results are ordered or filtered, which an agent might need to know. The lack of an output schema makes this gap more noticeable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, with descriptive comments for all parameters (student_id, date_from, date_to, limit). The description itself adds no additional parameter documentation, so it does not improve beyond the schema's existing clarity. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Zadania domowe i przypisane prace dziecka' clearly identifies the resource (homework and assigned tasks for a child) and implies retrieval, though it lacks an explicit verb like 'get' or 'list'. It is distinguishable from sibling tools like get_grades or get_timetable based on the domain, so the purpose is reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, typical scenarios, or why one would choose get_homework over other tools. The context signals show sibling tools, but the description gives no comparative information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageCRead-onlyIdempotent
Treść pojedynczej wiadomości, wyłącznie odczyt.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | Id wiadomości. | |
| student_id | Yes | Id lub login dziecka zwrócony przez list_students. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'read-only', which merely repeats the readOnlyHint=true annotation. It adds no extra behavioral context such as return format, error behavior, or that message_id must belong to the student. Given the annotations already cover safety, this is redundant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and without repetition, but it omits essential usage context. It earns no penalty for verbosity, but minimalism here comes at the cost of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description lacks any note about when to invoke it, what the response looks like, or why it differs from list_messages. With no output schema, more detail would be needed for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the input schema. The description does not add any meaning beyond the schema, which meets the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear resource ('single message') and operation ('content', read-only), distinguishing it from list_messages or download_message_attachment. It is concise and specific, though it does not explicitly name alternatives or contrast with siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like list_messages or download_message_attachment. The description does not mention conditions, prerequisites, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_student_profileBRead-onlyIdempotent
Profil jednego dziecka.
| Name | Required | Description | Default |
|---|---|---|---|
| student_id | Yes | Id lub login dziecka zwrócony przez list_students. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so safety is covered. The description adds no extra behavioral context (e.g., what happens if the ID is invalid), but it does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no clutter; it is appropriately minimal for a simple lookup. The brevity is efficient, though it does not attempt to convey extra context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter and rich annotations, the description is minimally sufficient. However, there is no output schema, and the description does not indicate what fields or data the profile contains, leaving some ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter description clearly states that student_id comes from list_students. The tool description itself adds no new semantic meaning beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states the resource (a single child's profile) and is distinct from list_students and other siblings. However, it uses a noun phrase without a clear verb, leaving the exact action implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as list_students or get_grades. The intended context is implicit from the name, but the description offers no explicit selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timetableARead-onlyIdempotent
Plan lekcji dziecka; zakres maksymalnie 31 dni, z zastępstwami zwracanymi przez Librus.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | Koniec zakresu, YYYY-MM-DD. | |
| date_from | Yes | Początek zakresu, YYYY-MM-DD. | |
| student_id | Yes | Id lub login dziecka zwrócony przez list_students. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description does not contradict these and adds useful context about substitutions being returned and the 31-day maximum range. However, it does not disclose other behaviors such as pagination or error conditions, which are minor given the safety profile already declared.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, brief sentence in Polish that covers the core purpose, the key constraint, and an output behavior. No filler or redundancy. It is well-structured with the main subject first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with all parameters described and safety covered by annotations, the description is sufficient. It mentions the relevant output (timetable with substitutions) and the 31-day limit. Without an explicit output schema, this level of context is adequate, though it could mention that the result is per-student and no pagination is involved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters with 100% coverage, so the description does not need to repeat them. It adds a non-obvious constraint not present in the schema: the overall date range must not exceed 31 days. This gives the agent important cross-parameter semantics that would otherwise be missed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (get) and resource (child's timetable). It adds a specific constraint (range max 31 days) and notes that substitutions are included, which helps distinguish it from generic calendar tools. However, it does not explicitly name any sibling tool to compare against, so it lacks a clear differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for retrieving a child's schedule and includes a range limit, but it does not explicitly state when to use this tool versus alternatives like get_calendar or get_grades. There are no exclusion criteria or 'when not to use' hints, making it adequate but not strongly guiding.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_messagesBRead-onlyIdempotent
Lista wiadomości dziecka, wyłącznie odczyt.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| student_id | Yes | Id lub login dziecka zwrócony przez list_students. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description redundantly states 'read-only'. It adds no further behavioral context such as pagination behavior, ordering, or completeness of results. It is consistent with annotations, so no contradiction, but adds little beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, front-loaded, and has no obvious filler. However, the phrase 'read-only' duplicates an annotation, so not every part adds new value. It is concise but slightly under-informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation, the minimal purpose is clear, and annotations cover the safety profile. But with no output schema, an empty list response, pagination behavior, and the relationship to sibling tools like get_message are not described. This leaves an agent uncertain about the exact result format and pagination handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%: only student_id has a schema description, and that description already says it comes from list_students. The tool description does not clarify page or limit parameters, their defaults, or how pagination works. Since coverage is low, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the operation clearly: listing a child's messages, and identifies the resource ('child's messages'). It does not explicitly name sibling alternatives, so it doesn't fully distinguish itself from 'get_message', but the 'list' vs 'get' contrast is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_message or list_students. It does not state any prerequisites or exclusions. The only hint is the schema description for student_id, which is not part of the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_studentsARead-onlyIdempotent
Lista wszystkich dzieci powiązanych z Kontem LIBRUS. Nie zwraca tokenów.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context by emphasizing that the result is the full set of children and that it explicitly does not return tokens, which clarifies a likely invalidation concern. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two short sentences—with the primary action first and an important limitation second. There is no redundant or extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's trivial input complexity, the rich annotations, and the clarifying 'no tokens' statement, the description fully covers the calling context. No return schema exists, but the tool name and description convey sufficient expectations for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the description need not explain any. Schema coverage is effectively 100% and baseline for 0 params is 4; the description's statement of returning all children without filters is consistent but adds no parameter-specific semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and object: 'Lista wszystkich dzieci' (list all children) associated with the LIBRUS account. It distinguishes itself from sibling tools by performing an unfiltered list operation, not a data-specific retrieval. The function name and description align clearly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the get_* siblings or when it should precede other calls. It does not mention alternatives or prerequisites. The only hint (does not return tokens) is a behavioral note, not a usage policy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a clear and distinct aspect: list_students for all children, get_timetable for schedule, get_grades, get_attendance, etc. No overlaps exist between listing messages and announcements or between fetching a single message and downloading its attachment.
The naming follows a predictable pattern: list_ for multiple items (students, messages) and get_ for single items or specific resources (timetable, profile, grades). The download_message_attachment is also clear and consistent with the rest.
With 11 tools, the server covers all standard read-only facets of a student management system without being excessive. Each tool has a clear and non-redundant purpose, making the count well-scoped.
Given the persistent read-only nature, the tool surface covers all necessary areas: attendance, timetable, grades, homework, calendar, announcements, messages, and attachments. There are no critical missing operations that would prevent typical workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
MCP adapter for the Paxaver school community platform. Streamable HTTP, OAuth 2.1, capability auth.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for Infinite Campus parent portal with multi-district support, enabling parents to query student data like grades, assignments, attendance, and send messages across multiple school districts from a single interface.15612MIT
- AlicenseAqualityAmaintenanceMCP server for Canvas LMS enabling parent observers and students to access courses, assignments, grades, and more. Supports multiple authentication methods including token, OAuth, and a convenient fetchproxy fallback.19564MIT
- AlicenseNot gradedqualityBmaintenanceEnables guardians to securely query read-only Vklass data such as children, news, calendar entries, assignments, grades, meals, and notifications through MCP, with per-user BankID and OAuth 2.1 authentication.MIT
- FlicenseAqualityCmaintenanceEnables read-only access to a Librus Portal account, letting users list linked Synergia accounts and retrieve grades, attendance, timetable, homework, notices, and school information.3
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nalancuchu/librus-readonly-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server