Skip to main content
Glama

hse-mcp

Локальный MCP-сервер (stdio) для инфраструктуры НИУ ВШЭ: SmartLMS (edu.hse.ru) и Единый личный кабинет (lk.hse.ru). Расписание RUZ (ruz.hse.ru) вынесено в отдельный сервер hse-ruz-mcp (claude mcp add hse-ruz-mcp -- npx -y hse-ruz-mcp).

Дисклеймер

  • Неофициальный проект: не связан с НИУ ВШЭ и не одобрен ею.

  • Правила ВШЭ об автоматизированном доступе к SmartLMS и ЕЛК не проверялись; за их соблюдение отвечает пользователь.

  • Использование на свой риск, без гарантий (см. лицензию).

  • Тулы записи отправляют данные от вашего имени и необратимы: сдача может уйти на оценку сразу, заказ справки отменить нельзя. По умолчанию они выключены (HSE_ENABLE_WRITES).

  • Авторы не хранят и не получают ничьих учётных данных: пароль, сессия и журнал остаются на вашей машине (подробности ниже и в SECURITY.md).

Related MCP server: upv-mcp

Установка и запуск

Нужен аккаунт ВШЭ. Каждый пользователь ставит сервер у себя со своими данными.

Claude Desktop — без терминала

  1. Скачайте hse-mcp-<версия>.mcpb из последнего релиза.

  2. Откройте файл двойным щелчком (или перетащите в окно Claude Desktop, или Настройки → Расширения → Дополнительно → Установить расширение…).

  3. Введите email и пароль ВШЭ и нажмите «Установить». Пароль Claude Desktop хранит в системной связке ключей и передаёт серверу при запуске.

Node.js ставить не нужно: он входит в Claude Desktop для Windows и macOS. Для входа нужен браузер: сервер берёт Microsoft Edge (есть на любой Windows) или Google Chrome, а если их нет, при первом запросе сам скачивает Chromium (около 100 МБ, один раз) — тогда первый запрос попросит повторить его через пару минут. Галочка «Разрешить отправку данных» включает тулы записи (см. «Тулы записи»); по умолчанию она выключена. Файлы для сдачи заданий кладутся в папку из настроек расширения (по умолчанию Документы/hse-mcp-outbox, создаётся сама).

Через npx (нужен Node.js 22+)

npx -y hse-mcp credentials set   # email и пароль ВШЭ → системное хранилище
claude mcp add hse-mcp -e HSE_EMAIL=login@edu.hse.ru -- npx -y hse-mcp

Для Claude Desktop, Cursor и других клиентов — в их конфигурацию MCP:

{
  "mcpServers": {
    "hse-mcp": {
      "command": "npx",
      "args": ["-y", "hse-mcp"],
      "env": { "HSE_EMAIL": "login@edu.hse.ru" }
    }
  }
}

Пароль в этот файл не пишите: он хранится открытым текстом. npx -y hse-mcp install-browser скачивает Chromium заранее (иначе — как выше: Edge, Chrome или скачивание при первом запросе).

Из исходников (для разработки)

Нужен Node.js 22 или новее.

npm ci
npx playwright install chromium
cp .env.example .env      # заполнить HSE_EMAIL
npm run credentials:set   # пароль в системное хранилище (рекомендуется)
npm run build
claude mcp add hse-mcp -- node <путь-к-проекту>/dist/index.js

HSE_PASSWORD в .env необязателен: это запасной путь, если системное хранилище недоступно (см. «Учётные данные»). .env и storage/ в .gitignore — не коммитятся, локальны для установки и никуда не отправляются, кроме как в сами сервисы ВШЭ при логине.

Каталог данных

Сессия браузера, ключ и журнал записей, снимки hse_changes и папка «исходящих» по умолчанию лежат в каталоге данных:

  • в клоне репозитория (есть .git) или если storage/ уже есть — storage/ в корне проекта;

  • иначе (.mcpb, npx) — %LOCALAPPDATA%\hse-mcp на Windows, ~/Library/Application Support/hse-mcp на macOS, ~/.local/share/hse-mcp на Linux: папку установки хост может пересоздать при обновлении;

  • HSE_DATA_DIR задаёт каталог явно (абсолютный путь или относительно корня проекта).

Необязательные переменные (.env или окружение): HSE_ENABLE_WRITES=true включает тулы записи (по умолчанию выключены; см. «Тулы записи»), HSE_OUTBOX_DIR задаёт папку «исходящих», HSE_BROWSER_CHANNEL — браузер: auto (по умолчанию: скачанный Chromium, затем Edge и Chrome, затем скачивание), chromium, chrome или msedge. Проверка, что защита записи цела: npm test (ожидается fail 0; тесты не ходят в сеть и не читают учётные данные).

Учётные данные

Пароль ищется по порядку, берётся первый найденный:

  1. переменная окружения процесса HSE_PASSWORD (в том числе заданная клиентом MCP);

  2. системное хранилище: Windows Credential Manager, macOS Keychain, Linux Secret Service (служба hse-mcp, учётная запись — значение HSE_EMAIL), через необязательную зависимость @napi-rs/keyring;

  3. HSE_PASSWORD в .env — запасной путь.

HSE_EMAIL не секрет и берётся из окружения или .env.

Команды:

  • npm run credentials:set (или npx hse-mcp credentials set) — спрашивает пароль без вывода на экран и пишет в системное хранилище;

  • npm run credentials:status (npx hse-mcp credentials status) — печатает только источник пароля (env, keychain, dotenv, none), без значений и без email;

  • npm run credentials:clear (npx hse-mcp credentials clear) — удаляет запись из хранилища.

В пакете .mcpb пароль приходит из настроек расширения через окружение (HSE_PASSWORD), системное хранилище hse-mcp там не используется.

Если пароль взят из .env, сервер один раз пишет в stderr предупреждение (без значения); на Linux и macOS он же предупреждает, если права .env допускают чтение группой или другими (исправление: chmod 600 .env). На Windows права .env сервер не проверяет; ограничьте их вручную, подставив своё имя пользователя:

icacls .env /inheritance:r /grant:r "$($env:USERNAME):(F)"

Каталог данных (storage/ в клоне) и его writes/ сервер ограничивает владельцем (0o700 на POSIX, icacls с наследованием на Windows, чтобы новые файлы сразу создавались с ограниченными правами), а файлы hse-session.json и writes/key — 0o600 / icacls (ошибки при этом не выводятся).

Системное хранилище можно отключить целиком: HSE_DISABLE_KEYCHAIN=true (в окружении или .env) — для CI, серверов без графической сессии и Linux без Secret Service. npm test задаёт её сам, поэтому тесты не трогают настоящее хранилище.

Оговорки:

  • Если @napi-rs/keyring не установился (npm ci --omit=optional, нет бинарника под платформу) или хранилище недоступно, проект молча работает дальше с .env, установка не падает.

  • На Linux нужен запущенный Secret Service (GNOME Keyring, KWallet и т.п.; в сессии без графики часто его нет). Без него пакет ушёл бы в хранилище ядра keyutils, которое не переживает перезагрузку, поэтому в таком случае хранилище считается недоступным и остаётся .env. Эта проверка — синхронный вызов при старте; при заблокированной связке ключей или без D-Bus он может надолго задержать запуск, тогда задайте HSE_DISABLE_KEYCHAIN=true. Таймаута у вызова нет. Работа на Linux не проверялась.

  • Защита рассчитана на случайную утечку и на чтение файлов другим пользователем системы, но не на вредоносную программу под вашим пользователем.

Если пароль или файлы каталога данных могли утечь: смените пароль ВШЭ (в .mcpb — и в настройках расширения), удалите hse-session.json и writes/key в каталоге данных (папка outbox/ и журнал записей — ваши данные), выполните npm run credentials:clear. Подробности и контакт для сообщений об уязвимостях — в SECURITY.md. Для публичного репозитория включите на GitHub secret scanning и push protection (по желанию — gitleaks в pre-commit; в зависимости проекта он не входит).

Тулы

21 тул чтения и 3 тула записи (только при HSE_ENABLE_WRITES=true). Что из этого покрыто тестами и проверено вживую — в docs/status.md.

Модуль

Тул

Описание

SmartLMS

lms_list_courses

Список курсов

SmartLMS

lms_get_course_materials

Элементы курса (файлы, задания, тесты и т.п.)

SmartLMS

lms_list_assignments

Задания курса со сроками

SmartLMS

lms_get_grades

Оценки по курсу: строки журнала с названием, путём категорий и оценкой; ошибка, если вёрстка журнала курса не распознана

SmartLMS

lms_list_messages

Входящие внутренней почты SmartLMS (переписка с преподавателями в курсах)

SmartLMS

lms_get_message

Полный текст письма внутренней почты SmartLMS с вложениями

SmartLMS

lms_open_page

Открыть произвольную страницу edu.hse.ru

ЕЛК

elk_get_schedule

Расписание через API ЕЛК — работает из любой сети

ЕЛК

elk_get_user_info

Данные аккаунта: ФИО, email, роли

ЕЛК

elk_get_academic_data

Академическая карточка: рейтинг, GPA, кредиты, программа, группа

ЕЛК

elk_search_services

Поиск по каталогу из 254+ сервисов ЕЛК (справки, заявки и т.п.)

ЕЛК

elk_list_requests

История поданных заявок (/claim) со статусами

ЕЛК

elk_get_notifications

Уведомления (колокольчик в шапке)

ЕЛК

elk_get_section

Раздел ЕЛК по имени: profile (страница профиля), login_history (история входов), tasks (задачи), dpo_programs (программы ДПО), antiplagiat, course_evaluation (СОП), thesis (ВКР/КР), portfolio, internships (практики), scholarship_history (повышенная стипендия)

ЕЛК

elk_open_page

Открыть произвольную страницу lk.hse.ru

Сводки

my_today

Что сегодня: занятия, дедлайны, непрочитанные письма LMS и уведомления ЕЛК, активные заявки

Сводки

my_week

План на 7 дней: расписание, дедлайны, экзамены, просроченные несданные работы

Сводки

my_deadlines

Что горит: несданные задания и тесты (в т.ч. просроченные), окна ЕЛК, экзамены за days дней

Изменения

hse_changes

Что изменилось с прошлого раза: дедлайны, расписание, входящее, заявки (и оценки LMS по явной просьбе); ack подтверждает полученное

Изменения

hse_changes_reset

Стереть локальные базы и журнал событий (confirm: true)

Служебное

hse_clear_cache

Сбросить кэш в памяти, чтобы следующий вызов взял свежие данные

SmartLMS (запись)

lms_submit_assignment

Сдать или поправить ответ на задание файлами из папки «исходящих». Только при HSE_ENABLE_WRITES=true

SmartLMS (запись)

lms_delete_submission

Удалить представленный ответ на задание. Только при HSE_ENABLE_WRITES=true

ЕЛК (запись)

elk_order_certificate

Заказать справку через форму сервиса ЕЛК (необратимо). Только при HSE_ENABLE_WRITES=true

Тулы записи — что нужно знать

Три тула записи (lms_submit_assignment, lms_delete_submission, elk_order_certificate) отправляют данные в SmartLMS и ЕЛК, заказ справки в ЕЛК необратим, поэтому по умолчанию тулов записи у сервера нет вообще. Чтобы включить, добавьте в .env строку HSE_ENABLE_WRITES=true (в Claude Desktop — галочка «Разрешить отправку данных» в настройках расширения; значение читается при старте процесса, после правки перезапустите сервер). Остальные тулы только читают.

  • lms_submit_assignment — cmid (id модуля задания из lms_get_course_materials), files (имена файлов, не пути), mode: draft (по умолчанию) или submit. Файлы берутся только из папки «исходящих»: outbox/ в каталоге данных или папка из HSE_OUTBOX_DIR (абсолютный путь или относительно корня проекта); если папки нет, а её родитель есть, она создаётся. Не больше 10 файлов, только обычные непустые файлы; папка не может быть корнем проекта или каталогом данных (кроме его outbox/). Файлы не удаляются и не перемещаются. Одноимённый файл ответа перезаписывается, остальные файлы ответа остаются. Онлайн-текст не поддерживается: параметр text отклоняется.

  • lms_delete_submission — cmid. Удаляет ответ из системы; файлы в папке «исходящих» остаются.

  • elk_order_certificate — serviceId (число components из url результата elk_search_services, не поле id) и fields (подпись поля формы → точный текст варианта выпадающего списка). Сухой прогон с пустым fields откроет форму и вернёт отказ со списком обязательных полей и вариантов (неподдерживаемые варианты помечены) — так узнают, что выбирать; превью и previewToken выдаются, когда все обязательные поля заданы. Значения, которые форма подставила сама из личных данных ЕЛК, показываются только в ответе сухого прогона и уйдут в заявку как есть. Заказ необратим: отмены заявки в ЕЛК нет. Заполняются только выпадающие списки; обязательное поле другого типа, которое форма не заполнила сама, и варианты вида «…в дополнительном поле» отклоняются. За раз выполняется один заказ. Исход проверяется по заявкам «Сервиса Студент» со страницы «Заявки» (в elk_list_requests их нет): confirmed — после заказа появилась ровно одна новая заявка, её номер в ответе; иначе unknown, и newClaims: 0 не означает, что заказ не прошёл. При unknown сверяйте вручную на странице «Заявки» в lk.hse.ru и не повторяйте заказ без этой проверки. Новый источник проверки вживую с заказом ещё не проверялся.

Как пользоваться:

  1. Сначала сухой прогон. Вызов без confirm ничего не отправляет: он читает страницу задания (для справки — форму) и показывает, что будет добавлено и заменено, предупреждения и previewToken.

  2. Запись — тот же вызов с confirm: true и previewToken из сухого прогона. Токен действует 15 минут, одноразовый и привязан к заданию, режиму, файлам (по содержимому) и состоянию ответа: если что-то изменилось, нужен новый сухой прогон.

  3. Не добавляйте тулы записи в автоматические разрешения клиента (в Claude Desktop — не выбирайте для них «Разрешать всегда»). Защита от случайной отправки держится на запросе разрешения клиента MCP перед каждым вызовом: сервер не может проверить, что человек на месте.

  4. Исход проверяется чтением и бывает трёх видов: confirmed (подтверждено), rejected (система отказала, состояние не изменилось), unknown (проверить не удалось). После unknown не повторяйте отправку: откройте задание на сайте (для справки — страницу «Заявки» в lk.hse.ru) и посмотрите, что там на самом деле. Повторный вызов с тем же previewToken ничего не отправляет: для заданий он перепроверит результат чтением, а для справки не перепроверяет, а возвращает unknown с подсказкой сверить вручную. Новая запись по этой цели потребует acknowledgeUnknown: true. Для заказа справки rejected не выносится никогда.

  5. Сохранение может сразу отправить работу на оценку: у заданий без отдельного шага «Отправить на оценку» draft этого не исключает. Шаг «Отправить на оценку» тул сам не выполняет. Просроченные и закрытые задания тул отклоняет.

Журнал записей лежит в writes/journal.json каталога данных (90 дней, не более 200 записей) и содержит только технические поля: без содержимого, имён файлов, названий и id курсов и заданий.

Как это устроено

  • SmartLMS и ЕЛК — общий Playwright-браузер (src/auth/browser-session.ts), который проходит единый SSO ВШЭ (Keycloak, saml.hse.ru, realm hse) и переиспользует сессию между вызовами (сохраняется в hse-session.json каталога данных). Браузер — скачанный Playwright Chromium, системный Edge или Chrome (src/auth/browser-launch.ts). ЕЛК даёт и JSON API с Authorization: Bearer <access_token> из localStorage (elk_get_schedule, elk_get_user_info, elk_search_services, elk_list_requests).

  • istudy.hse.ru (зачётка) не поддерживается: тулы istudy_* удалены 2026-10-23. Вход проходит без MAX, но данные закрыты двухфакторным подтверждением через MAX (HTTP 412 на GET /api/auth/two-factor/required после клика по «Зачетная книжка»), а эндпоинты после 2FA неизвестны; обход 2FA не предусмотрен. Оценки по курсам — lms_get_grades.

  • Сводки (my_today/my_week/my_deadlines) — агрегируют расписание ЕЛК, календарь Moodle, окна и уведомления ЕЛК в один JSON; статус каждого источника — в sources, отказ одного не роняет сводку. Холодный вызов после запуска сервера занимает ≈ 17 с (логин и открытие страниц), затем 3–4 с, повтор из кэша — мгновенно (замеры на одном аккаунте, 2026-10-14).

  • Изменения (hse_changes) — «что изменилось», а не «что есть»: тул снимает дедлайны, расписание на 14 дней, входящее (письма LMS, уведомления ЕЛК) и заявки ЕЛК, сравнивает с прошлым снимком и возвращает только события (новое, изменено, пропало, перенесено, просрочено). Базы по источникам и журнал событий лежат в локальном changes/state.json каталога данных; сброс — hse_changes_reset (полный сброс удаляет и копии state.json.corrupt-*). Первый вызов по источнику только создаёт базу, без событий. Курсор двигается не сам, а параметром ack: передайте ackSeq из ответа в следующий вызов, иначе те же события вернутся снова (событие не теряется, даже если ответ не дошёл). Параметры: scopes (по умолчанию без оценок), courses (фильтр курсов для оценок: id или часть названия), fresh (перечитать источники, иначе принимаются данные не старше 60 с), since (журнал за период, например "7d", вместо неподтверждённого; since сам курсор не двигает, ack в том же вызове двигает). Оценки (scopes: ["grades"]) берутся только из журнала LMS и дорогие: страница на курс, десятки секунд. Тул только читает системы ВШЭ. Проверено вживую на одном аккаунте (спека §18); события added/changed/moved — только имитацией правки базы.

Границы применимости

  • Селекторы и тексты Moodle (SmartLMS) и ЕЛК проверены на одном аккаунте и одном семестре; у других факультетов и курсов разметка может отличаться.

  • Онлайн-текст в ответе на задание не поддерживается.

  • Заданий с отдельным шагом «Отправить на оценку» и с классом статуса submissiondraft не наблюдалось: в таких случаях тулы записи отказывают, а не угадывают.

  • Заказ справки проверен на форме одной справки.

  • Правила ВШЭ об автоматизированном доступе к SmartLMS и ЕЛК не проверялись, пользователь отвечает за их соблюдение сам.

Известные ограничения

  • Расписание в сводках — только из ЕЛК: если ЕЛК не ответил, в my_* будет ошибка источника elk_schedule без занятий (запасного пути через RUZ больше нет, RUZ — в hse-ruz-mcp и только из сети ВШЭ).

  • ЕЛК частично разведан вживую (2026-09-15): известны разделы /task, /claim (теперь структурированно доступен через elk_list_requests), /service (поиск — elk_search_services), /schedule, /student-services, /faq. /student-services?section=documents содержит каталог заказа справок (зачётка, подтверждение обучения и т.п.) — форма разведана (Formily-конструктор поверх Element Plus); заказ идёт тулом elk_order_certificate (при HSE_ENABLE_WRITES=true). elk_open_page возвращает сырой текст + ссылки для остальных случаев. Подробные заметки разведки хранятся у автора локально и в репозиторий не входят.

  • hse_changes: в ответе не более 200 событий (остаток — omitted: подтвердите ackSeq и вызовите снова); журнал хранит не более 500 событий, при переполнении невыданные теряются — счётчик gap.lostEvents. События считаются только в пересечении старого и нового окон (календарь −180…+60 дней, расписание 14 дней); при усечении календаря «пропало» не вычисляется. Виды событий по областям: дедлайны — новое, изменено, пропало, просрочено; расписание — новое, изменено, пропало, перенесено; входящее — только новое; заявки и оценки — новое и изменено (без «пропало»). «Пропало из календаря» не значит «сдано». «Итого за курс» — обычный элемент оценок: смена итога видна рядом с событием самого элемента.

  • ЕЛК: запись только заказом справки (elk_order_certificate, HSE_ENABLE_WRITES=true); подача заявок (практика, стипендия, мобильность и т.п.) не реализована, остальные тулы ЕЛК только читают. Заказ справки выполнен вживую один раз на одном аккаунте: заказ дошёл, но исход тула — unknown (newClaims: 0), история заявок этих справок не видит; ручная проверка на странице «Заявки» подтвердила ровно одну новую заявку. Заказ необратим; свободный текст, даты, файлы и варианты «…в дополнительном поле» не поддерживаются (тул отказывает). Поля, которые форма дорисовывает после выбора варианта, сухой прогон не видит.

  • Запись в SmartLMS (HSE_ENABLE_WRITES=true): только файлами, онлайн-текст не поддерживается. У заданий без отдельного шага «Отправить на оценку» сохранение сразу отправляет работу на оценку; сам шаг «Отправить на оценку» тул не выполняет. Просроченные и закрытые задания отклоняются, даже если поздняя сдача, возможно, ещё открыта. Задания с нераспознанным классом статуса сдачи отклоняются (статус «черновик» вживую не наблюдался). Существующий файл ответа и отправляемый файл крупнее 64 МиБ не принимаются: результат нельзя проверить. Проверено на одном аккаунте за один семестр.

  • lms_open_page и elk_open_page отклоняют URL с параметром sesskey и страницы /mod/assign/ с параметром action: они читают, но не выполняют действий.

Разработка

  • npm run build собирает проект в dist/, npm run dev — в режиме watch.

  • npm run lint проверяет код линтером и форматтером Biome, npm run format исправляет то, что можно исправить автоматически.

  • npm run pack:mcpb собирает пакет Claude Desktop в build/hse-mcp-<версия>.mcpb (CI делает то же и прикрепляет пакет к релизу).

  • npm test собирает проект и запускает тесты node:test (test/*.test.mjs): сеть, браузер и учётные данные им не нужны. Среди них архитектурный тест: импорты должны соблюдать слои.

Как устроен код и куда добавлять новое — docs/architecture.md, правила участия — CONTRIBUTING.md.

Лицензия

MIT

Available Tools

21 tools
elk_get_academic_dataАкадемическая карточка ЕЛКA
Read-onlyIdempotent

Структурированная академическая карточка студента (lk.hse.ru/api/get-academic-data): рейтинг, GPA, кредиты, КУД, программа обучения, факультет, курс, группа, форма и уровень обучения, статус. Структурированная замена разделу profile в elk_get_section.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the safety profile is covered. The description adds the underlying endpoint and the substitution relationship to elk_get_section, which is useful context, but says nothing about freshness, latency, error modes, or what happens when the student has no card.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first front-loads the resource with its endpoint and a dense field enumeration, the second delivers the sibling-routing instruction. No filler and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry the return-value burden, and the field enumeration does that well. Minor gap: terms like 'КУД' and the shape of nested data (per-semester vs aggregate GPA/credits) are not clarified, but for a zero-parameter read tool this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The description cannot be faulted for parameter semantics here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (академическая карточка студента) and enumerates exactly what it contains — рейтинг, GPA, кредиты, программа, факультет, курс, группа, статус — so an agent knows precisely what it gets. It also explicitly distinguishes itself from the sibling elk_get_section by positioning itself as the structured replacement for its profile section.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'Структурированная замена разделу profile в elk_get_section' tells the agent to prefer this tool over elk_get_section for profile data, which is a genuine routing signal. It stops short of any explicit when-not condition or other alternatives, but the sibling relationship is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elk_get_notificationsУведомления ЕЛКC
Read-onlyIdempotent

Уведомления ЕЛК (колокольчик в шапке, lk.hse.ru/notification): заголовок, текст, дата, важность, прочитано ли.

NameRequiredDescriptionDefault
limitNoМаксимум уведомлений

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so safety is covered. The description adds little beyond a field list: it does not say whether results are ordered by date, whether only unread are returned, how `limit` truncates, or whether reading affects the read flag — all real questions for a notification feed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler; the parenthetical locating the feature in the UI is genuinely informative rather than padding. Slightly terse for a tool description, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does useful work by enumerating return fields (title, text, date, importance, read status). However it omits ordering, freshness, and whether unread status is filterable — gaps an agent would hit in practice.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully documented in the schema ('Максимум уведомлений', default 20, max 100), so the baseline of 3 applies. The description adds nothing about limit semantics (ordering, truncation, paging).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('Уведомления ЕЛК') and pins it to a concrete UI element ('колокольчик в шапке, lk.hse.ru/notification'), which makes the object unambiguous. But there is no verb — it never says it fetches/lists them — and it does not distinguish this from look-alike siblings such as lms_list_messages or elk_list_requests.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this versus lms_list_messages, elk_list_requests, or my_today, and no exclusions or prerequisites. The agent must infer usage purely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elk_get_scheduleРасписание через ЕЛКA
Read-onlyIdempotent

Расписание занятий студента через API Единого личного кабинета (lk.hse.ru/api/get-myschedule) — включая ссылки на онлайн-пары. Работает из ЛЮБОЙ сети (в отличие от RUZ, который доступен только из внутренней сети ВШЭ) — основной источник расписания.

NameRequiredDescriptionDefault
daysAheadNoНа сколько дней вперёд от сегодня

Output Schema

NameRequiredDescription
daysYesДни с занятиями по порядку

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds real behavioral value beyond them: it works from any network (unlike RUZ) and returns online-class links, which tells the agent about reachability and payload. Auth requirements and rate limits are still unmentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with an em-dash elaboration; the core promise (schedule via ELK, with online links) is front-loaded and the network-availability note follows. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, annotations rich, and a single fully-described optional parameter, the description covers everything needed to call it correctly. The only soft spot is the unstated relationship to sibling schedule tools (my_today, my_week), though 'основной источник расписания' mostly resolves that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single optional parameter daysAhead is fully documented with default and bounds, so the schema does the heavy lifting. The description adds nothing about the parameter (e.g. what the default window means for results), so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource: fetching a student's class schedule via the ELK API, including the exact endpoint (lk.hse.ru/api/get-myschedule). It also positions the tool against alternatives ('в отличие от RUZ... основной источник расписания'), so an agent can tell what it is and that it is the preferred schedule source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear selection rule: use this when not on the HSE internal network, because RUZ is unreachable from outside, and names it the primary schedule source. It does not explicitly say when to prefer the sibling tools my_today/my_week over this one, leaving a small inference gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elk_get_sectionРаздел ЕЛКA
Read-onlyIdempotent

Один из разделов Единого личного кабинета (lk.hse.ru и его порталы) по имени section. profile — страница профиля /profile текстом и ссылками (ФИО, контакты); для рейтинга, GPA и группы есть elk_get_academic_data. login_history — история входов: дата, действие, IP, местоположение, устройство (проверка безопасности аккаунта; offset — пагинация). tasks — задачи пользователя (/task); поля задачи вживую не подтверждены, ответ как есть (limit — максимум задач). dpo_programs — программы ДПО, на которые подана заявка, со statusLabels; у остальных студентов пусто. antiplagiat — сколько проверок в Антиплагиате обрабатывается, завершено и подано. course_evaluation — периоды СОП («Оцени свои курсы») и заполнена ли анкета. thesis — статус ВКР/КР: тема, заимствования, оценка, рецензия; пусто, если тема не зарегистрирована. portfolio — электронное портфолио (достижения, влияют на повышенную стипендию), текстом. internships — заявки на практику. scholarship_history — история заявок на повышенную стипендию; пусто, если заявок не было. Все разделы только читаются: подача заявок не реализована.

NameRequiredDescriptionDefault
limitNoТолько для tasks: максимум задач (по умолчанию 500)
offsetNoТолько для login_history: смещение для пагинации (по умолчанию 0)
sectionYesКакой раздел прочитать

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the bar is lower; the description adds real value by stating all sections are read-only and that application submission is not implemented, plus which sections may return empty. It does not describe response shape beyond section content, which is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core scope, then one clause per section. Dense but every clause earns its place given a 10-value enum; the only deduction is that it is a single unstructured paragraph rather than a scannable list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must carry return-value meaning, and it does per section (fields, empty conditions, pagination notes). For a complex multi-section reader this is complete enough for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, giving baseline 3. The description goes beyond the schema's bare enum list by explaining what each section value actually returns, and reiterates that limit applies only to tasks and offset only to login_history (matching schema). Adds genuine meaning over the enum names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (one section of the HSE personal cabinet by name) and enumerates all ten section values with what each returns. It also explicitly distinguishes itself from the sibling elk_get_academic_data for rating/GPA/group. An agent can select it without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is routed per section: login_history is for account security checking, portfolio ties to increased scholarship, empty-result conditions are noted for thesis, dpo_programs, scholarship_history. It also names the alternative (elk_get_academic_data) and states write actions are not implemented. Very clear context; the only minor gap is no explicit 'use this when' framing for sections like tasks/internships.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elk_get_user_infoДанные аккаунта ЕЛКA
Read-onlyIdempotent

Базовая структурированная информация об аккаунте в ЕЛК (lk.hse.ru/api/get-user): ФИО, email, роли (студент/ДПО и т.п.). Не содержит академическую карточку (рейтинг, группа, факультет) — за ней используйте elk_get_academic_data.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds value by naming the underlying endpoint and by scoping out academic data, but says nothing about nullability/empty fields or how role values look in practice.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: capability and returned fields first, scope exclusion and alternative second. Every clause carries information; no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must sketch the return value — it does so by listing the main fields and the endpoint. Slightly incomplete because only example fields are given ('т.п.') and the response envelope structure is unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies no input is needed to identify the account.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: retrieves basic structured account info from the ELK service, and enumerates the returned fields (name, email, roles). It explicitly distinguishes itself from the sibling elk_get_academic_data by naming what it does NOT return.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: for academic card data (rating, group, faculty) use elk_get_academic_data. This gives both the exclusion condition and the named alternative, leaving nothing to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elk_list_requestsИстория заявок в ЕЛКA
Read-onlyIdempotent

Список всех поданных пользователем заявок в ЕЛК (lk.hse.ru/claim): номер, содержание, сервис, статус (например «Выполнено», «На проверке»), даты создания/обновления, исполнитель и ссылка на форму заявки (если есть). Полезно проверить статус ранее поданных обращений (справки, стипендии, воинский учёт и т.п.) без захода в веб-интерфейс.

NameRequiredDescriptionDefault
limitNoМаксимум заявок

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds scope (only the current user's own requests) and the returned field set, but says nothing about ordering, page size behavior, or the fact that results are capped at 500 despite claiming 'всех' requests.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what the tool returns and followed by the practical reason to call it. The field enumeration is dense but each item is informative; no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must convey return shape, and it does so thoroughly via the field list plus status examples. Remaining gaps — ordering, truncation at limit 500, pagination — are modest for a read-only list tool whose annotations cover safety.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one optional parameter (limit) with 100% schema coverage and its own description, so the schema does the work. The description's 'Список всех' arguably works against the limit parameter without clarifying its effect, adding no positive semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (list) plus resource (ELK requests) with an initial enumeration of returned fields: number, content, service, status, dates, executor, link. The purpose is unambiguous, but nothing in the text distinguishes it from neighbor tools such as elk_search_services or elk_get_notifications, which an agent must infer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete usage scenario — checking the status of previously submitted appeals (certificates, scholarships, military registration) without opening the web UI. There are no explicit exclusions or named alternatives, but the intended context is clear enough to select the tool confidently.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elk_open_pageОткрыть произвольную страницу ЕЛКA
Read-onlyIdempotent

Открыть любую страницу lk.hse.ru по относительному пути под авторизованной SSO-сессией и вернуть видимый текст и список ссылок на странице. Известные разделы (разведаны 2026-09-15): /task (задачи), /claim (заявления/обращения), /service (сервисы), /student-services (Центр сервиса «Студент» — заказ справок, изменение персональных данных, финансовые вопросы; разделы через ?section=documents&subsection=certificates и т.п.), /faq. Хелпдеск-тикеты создаются на отдельном домене pmo.hse.ru/servicedesk/customer/portal/81/create/ (ссылки на конкретные формы есть на странице профиля и student-services).

NameRequiredDescriptionDefault
pathYesОтносительный путь на lk.hse.ru, напр. /claim или /student-services?section=documents

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. Beyond that, the description adds real context: requests run under an authorized SSO session, the result is visible text plus extracted links, and helpdesk ticketing is out of scope on another host.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and return value, then supporting detail. The known-section list and the helpdesk-domain note are dense but each carries navigational value; the helpdesk parenthesis is the most tangential element.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must say what comes back — and it does (visible text and link list). Combined with annotations covering safety and the section inventory covering valid inputs, an agent has nearly everything needed, with only the sibling-routing rule missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already gives a path example, so the baseline is 3. The description earns an extra point by enumerating concrete valid paths and showing that query strings such as ?section=documents&subsection=certificates are acceptable, which meaningfully constrains what to pass.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — open an arbitrary lk.hse.ru page by relative path — and adds what is returned (visible text plus link list), which distinguishes it from data-returning siblings like elk_get_academic_data. It does not explicitly contrast itself with the closest sibling, elk_get_section, so an agent must infer which one to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The enumeration of known sections and the note that helpdesk tickets live on a different domain (pmo.hse.ru) implicitly tell the agent what this tool can and cannot reach. However, there is no explicit statement of when to use this rather than elk_get_section or elk_search_services, so the routing decision is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elk_search_servicesПоиск сервисов в каталоге ЕЛКA
Read-onlyIdempotent

Полнотекстовый поиск по каталогу сервисов ЕЛК (lk.hse.ru/api/search/search-all, категория services — 254 сервиса на 2026-09-15): справки, заявки на практику/мобильность/стипендии, запись к психологу, антиплагиат и т.п. Возвращает id, название, описание, прямую ссылку на сервис и релевантность (score). Поле categories в ответе — счётчики совпадений по ВСЕМ категориям поиска (сотрудники/студенты/сервисы/подразделения), даже если сами результаты отданы только по сервисам — так можно понять, есть ли смысл поискать ещё и людей/подразделения по этому запросу.

NameRequiredDescriptionDefault
limitNoМаксимум результатов
queryYesПоисковый запрос, напр. 'справка' или 'стипендия'

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, so the description wisely spends its space on non-obvious behavior: results are constrained to the services category (254 services, snapshot dated 2026-09-15), while categories in the response carries match counters across ALL categories — a genuine trap-avoiding detail. No rate limits or truncation behavior beyond the schema's limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the high-value content (scope, endpoint, return fields, categories caveat) is front-loaded. Density is high but every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully compensates by naming the returned fields (id, название, описание, ссылка, score) and flagging the misleading categories field. Combined with annotations and full parameter coverage, an agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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, including limit's 1–50 bounds. The description reinforces that query is full-text against the services catalog and gives example queries, but adds no syntax, matching rules, or ranking details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource (полнотекстовый поиск по каталогу сервисов ЕЛК), gives the backing endpoint and category scope, and enumerates concrete example targets (справки, антиплагиат, психолог). No sibling tool does catalog search, and the description makes that unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the note about categories counters hints you might follow up with people/department searches, but no alternative tool is named and there is no explicit when-to-use / when-not-to-use statement. An agent can infer the intent, but nothing routes it decisively.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hse_changesЧто изменилось с прошлого разаA
Read-onlyIdempotent

Снимает текущее состояние дедлайнов, расписания, входящего и заявок (по явной просьбе — оценок) и возвращает ТОЛЬКО изменения с прошлого снимка: новое, изменено, пропало, перенесено, просрочено. Для «что есть сейчас» используйте my_today/my_week/my_deadlines. Первый вызов по источнику создаёт базу без событий (status: baseline). События не теряются, если ответ не дошёл: курсор двигается только явным подтверждением — передайте ackSeq из ответа в параметр ack следующего вызова; без ack те же события вернутся снова. Если persisted: false (запись на диск не удалась), у ответа нет ackSeq (null), у событий нет seq, и события повторятся в следующем вызове — подтверждать нечего. В ответе не более 200 событий: если omitted > 0, ответ усечён — передайте ackSeq ответа в ack и вызовите тул снова, чтобы получить остальное; усечённый ответ не считайте полным. Тул только ЧИТАЕТ системы ВШЭ и пишет лишь локальную базу снимков. «Пропало из календаря» не означает «сдано». Область grades дорогая (страница на курс, десятки секунд) и берёт оценки только из журнала LMS. Возвращает JSON: changes, scopes (статус по областям), sources (статус каждого источника; отказ одного не роняет вызов), ackSeq, omitted, gap, persisted, warnings.

NameRequiredDescriptionDefault
ackNoПередавайте ТОЛЬКО ackSeq из последнего ответа hse_changes (число; null не нужен — просто опустите параметр, если ackSeq был null). seq отдельного события подтверждением НЕ является. События до ackSeq считаются полученными и больше не возвращаются.
freshNotrue — игнорировать кэш (иначе принимаются данные не старше 60 с).
sinceNoЖурнал за период ("7d", "12h" или дата ISO) вместо неподтверждённого; since сам курсор не двигает (ack в том же вызове двигает).
scopesNoОбласти; по умолчанию deadlines, schedule, inbox, claims (без grades).
coursesNoФильтр курсов для grades: число — id курса, строка — часть названия.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Well beyond the annotations: baseline-on-first-call with no events, the cursor moving only on explicit ack, unchanged event replay without ack, the persisted:false degradation path with null ackSeq/seq, a hard 200-event cap where omitted > 0 means truncation, per-source failure isolation, and the caveat that 'gone from the calendar' is not 'submitted'. The readOnlyHint is also correctly qualified: it reads HSE systems and writes only a local snapshot DB.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but information-dense: the ack / persisted / truncation rules each matter and the purpose plus the alternatives come first. The dense dash-separated clauses and the operations-critical ack rules buried mid-paragraph keep it from being a 5 on structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description enumerates the return fields (changes, scopes, sources, ackSeq, omitted, gap, persisted, warnings), defines the semantics of each state (baseline, truncated, failed persistence, source refusal), and leaves nothing an agent needs in order to interpret or re-call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it reinforces that ack must be ackSeq from the last response (not an event seq), explains the baseline/persisted:false cases in which ackSeq is absent, and conveys that grades is the expensive scope and only spans the LMS journal. It does not revisit since, fresh or courses, which the schema carries adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: it snapshots deadlines, schedule, inbox and claims and returns only deltas (new/changed/disappeared/moved/overdue). The delta framing, plus the explicit contrast with my_today/my_week/my_deadlines, makes it unmistakable next to its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternatives for the 'what is there now' case and the condition that selects them, marks grades as an opt-in scope with an explicit cost warning (a page per course, tens of seconds), and prescribes the ack loop after truncation or a failed write. When-to-use, when-not-to-use and alternatives are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hse_changes_resetСбросить накопленные измененияA
DestructiveIdempotent

Стирает локальные базы снимков и журнал событий области (или всех областей), после чего следующий hse_changes создаёт базу заново. Полный сброс (без scope) удаляет и копии повреждённого файла (state.json.corrupt-*) и оставшиеся временные файлы. Меняет только локальные файлы. Требует confirm: true.

NameRequiredDescriptionDefault
scopeNoОбласть; без неё — все.
confirmYesДолжно быть true: подтверждение стирания.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations by enumerating exactly what gets destroyed (snapshot DBs, event log, and on full reset the state.json.corrupt-* copies and temp files), stating that only local files are touched, and that confirm:true is required. It leaves open the behavior with confirm=false and whether it fails when no database exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the destruction action and its scope, then the side effects and the confirm requirement. No redundant or filler text, though slightly denser than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-open-world mutation with no output schema, the description covers destruction scope, side effects, locality, and the confirm gate. It omits failure/return behavior, which would be useful but is not strictly required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns an extra point by explaining the semantic difference that omitting scope triggers a broader wipe (corrupt-file copies and leftover temp files), not merely 'all areas' as the schema enum note says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (стирает) and resources (локальные базы снимков, журнал событий), plus the consequence (next hse_changes recreates the base), which distinguishes it from the sibling hse_changes. It does not, however, contrast itself with hse_clear_cache, the other reset-like sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: a full reset happens when scope is omitted, and confirm:true is mandatory. There is no explicit 'use this when…' guidance or statement of when hse_clear_cache would be the right alternative instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hse_clear_cacheСбросить кэш данных ВШЭA
Idempotent

Результаты тулов lms_*/elk_* и сводок my_today/my_week/my_deadlines (они собираются из тех же ресурсов) кэшируются в памяти на 2–30 минут, чтобы не открывать браузер заново ради неизменившихся данных. Если нужно гарантированно свежее значение — например, сразу после подачи работы или заявки, — вызовите этот тул, затем повторите нужный запрос. scope сужает сброс до одного сервиса.

NameRequiredDescriptionDefault
scopeNoЧто сбросить: all (по умолчанию) или один сервис

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotent, non-destructive, not-open-world, so safety is covered; the description adds genuinely new behavior facts: a 2–30 minute TTL, which resources are cached and why, and that the call must be followed by re-issuing the query. It does not say whether the reset itself can fail or whether existing cache entries for other services are unaffected in edge cases, so a small gap remains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: rationale, action, parameter. Front-loaded with why the cache exists before the instruction. The first sentence is long but every clause (TTL, cached resources, browser-avoidance rationale) contributes useful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A one-optional-param mutation with no output schema; the description covers the affected tools, cache lifetime, the trigger scenario, the required follow-up action, and the scope parameter. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the enum values are already documented, so the baseline is 3. The description adds the semantic purpose of the parameter ('сужает сброс до одного сервиса'), which helps the agent decide to use it rather than the default, nudging it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reset the in-memory cache of results from lms_*/elk_* tools and the my_today/my_week/my_deadlines summaries. Naming the affected siblings explicitly distinguishes it from hse_changes_reset and the data-reading tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the exact condition to invoke it ('если нужно гарантированно свежее значение'), a concrete trigger example (right after submitting a work or request), and the follow-up step (repeat the request). It also explains what scope does, so the agent knows when to narrow the reset.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lms_get_course_materialsМатериалы курсаA
Read-onlyIdempotent

Список элементов курса SmartLMS (файлы, задания, тесты, форумы и т.п.) по id курса (см. lms_list_courses). Возвращает тип, название и ссылку каждого элемента.

NameRequiredDescriptionDefault
courseIdYesid курса на edu.hse.ru (course/view.php?id=...)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully covered by structured data. The description adds that each element carries type, title and link, which is useful beyond the annotations, but says nothing about ordering, pagination, or behavior for an invalid/nonexistent courseId.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler: the scope and element types come first, the prerequisite pointer and return shape follow. Every clause carries information an agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only list tool with full annotation coverage, this is nearly sufficient: it names the input source and the returned fields even without an output schema. The only gaps are pagination/ordering behavior and what happens for an unknown courseId, both minor here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema coverage; the schema already documents it as an integer course id from course/view.php?id=... The description only restates 'по id курса' and adds no format, range, or edge-case detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Список элементов курса SmartLMS') and enumerates what counts as an element (files, assignments, quizzes, forums), which lets an agent distinguish it from the narrower sibling lms_list_assignments. It does not explicitly name that sibling as the alternative, so the differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(см. lms_list_courses)' gives a concrete prerequisite for obtaining courseId, which is genuine usage help. However, there is no guidance on when to prefer this tool over lms_list_assignments or lms_get_grades, and no exclusions or failure conditions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lms_get_gradesОценки по курсуA
Read-onlyIdempotent

Оценки студента по курсу SmartLMS (отчёт по пользователю): items — строки журнала по порядку, у каждой name (название элемента или категории), level (уровень вложенности), path (категории-предки), isCategory и grade (текст оценки; null у категории, «-» если оценки ещё нет). Если вёрстка журнала курса не распознана — ошибка.

NameRequiredDescriptionDefault
courseIdYesid курса на edu.hse.ru

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), so the description correctly spends its budget on what annotations cannot express: the per-user report scope, the ordered items structure, the meaning of grade values (null for categories, "-" for missing grades), and the failure mode when journal markup is unrecognized. It stops short of stating whose user the report is for or what auth it needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, followed by the return-structure enumeration and then the error condition. Each clause earns its place because no output schema exists, though the field-by-field listing is dense and could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-shape burden and does so thoroughly (items fields, ordering, grade semantics) plus an error condition. The remaining gap is identity/scope: nothing says whether 'the student' is the authenticated user or how that is determined, which matters for an openWorld read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter, courseId, fully documented in the schema (100% coverage) as the edu.hse.ru course id. The description adds nothing about the parameter, which is acceptable given the schema does the work – baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource in the first clause: student grades for a SmartLMS course, framed as a per-user report. That is far more informative than the vague title 'Оценки по курсу'. It never contrasts itself with near siblings such as lms_list_assignments, so the agent must infer the boundary from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no mention of the obvious alternative tools (lms_list_assignments, lms_get_course_materials). Usage is only implied by the resource name; the only routing signal given is the error case when the journal markup is unrecognized.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lms_get_messageПисьмо внутренней почты SmartLMSA
Read-onlyIdempotent

Полный текст письма внутренней почты SmartLMS по id (см. lms_list_messages): текст, курс, отправитель, получатели, вложения (имя файла, размер, ссылка на скачивание).

NameRequiredDescriptionDefault
messageIdYesid письма (из lms_list_messages)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds value by enumerating what the read returns — full text, course, sender, recipients and per-attachment name/size/download link — which is exactly the context an agent needs to plan a follow-up download.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, then the return fields and the sibling reference. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by spelling out the shape of the response including nested attachment fields. For a one-parameter read tool whose annotations cover safety, nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, and the description only restates that the value is a message id sourced from lms_list_messages. No additional syntax or edge-case semantics are offered, so the schema does the heavy lifting — a baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('Полный текст письма ... по id') with a concrete resource and enumerates the returned fields (text, course, sender, recipients, attachments). Referring to lms_list_messages as the source of the id clearly distinguishes it from the list sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(см. lms_list_messages)' makes the workflow explicit: this tool is a follow-up detail fetch whose id comes from the list tool. There are no explicit exclusions or when-not conditions, but for a simple detail lookup the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lms_list_assignmentsЗадания курсаB
Read-onlyIdempotent

Список заданий (mod/assign) курса SmartLMS со сроками сдачи и статусами.

NameRequiredDescriptionDefault
courseIdYesid курса на edu.hse.ru

Output Schema

NameRequiredDescription
assignmentsYesСтроки таблицы заданий курса: заголовок колонки → текст ячейки

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds that results carry submission deadlines and statuses, but says nothing about pagination, ordering, or what happens for a course with no assignments.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with no filler; the parenthetical module name and the returned fields are the only content. It is efficient, though slightly terse and unsegmented.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only list tool with rich annotations and an output schema, the description supplies the resource and the returned fields (deadlines, statuses). Remaining gaps are minor and largely covered by the structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter with 100% schema description coverage ('id курса на edu.hse.ru'), so the schema already carries the meaning. The description only implies the course scope and adds no format or constraint detail beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: lists course assignments (mod/assign) in SmartLMS with deadlines and statuses. It does not, however, distinguish itself from nearby siblings such as lms_get_course_materials or my_deadlines, which can also surface deadline-related data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this versus my_deadlines or lms_get_course_materials, no prerequisites, no exclusions. The usage is only inferable from the purpose sentence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lms_list_coursesСписок курсов SmartLMSA
Read-onlyIdempotent

Список курсов текущего студента на SmartLMS (edu.hse.ru, Moodle): id, название, категория, даты начала/окончания, процент прохождения, избранное/скрытое. Требует входа через единый SSO ВШЭ (выполняется автоматически, credentials из .env).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
coursesYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered; the description adds genuinely new context that SSO auth is required and happens automatically with credentials from .env, which matters for an open-world scraper tool. It stops short of mentioning latency, rate limits, or failure modes on auth expiry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the resource and returned fields come first, followed by the operational prerequisite. Every clause carries information an agent would otherwise have to guess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be spelled out, and the auth prerequisite is disclosed. The one gap is the absence of any routing hint among the many sibling lms_* tools for agents unsure whether courses or assignments/grades are wanted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The enumerated return fields are informative but relate to output, not parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list of the current student's courses on SmartLMS/edu.hse.ru Moodle) and enumerates the returned fields, so the purpose is unambiguous. It does not explicitly distinguish itself from siblings such as lms_get_course_materials or lms_list_assignments, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Scope is implied by 'текущего студента' (current student only), which tells the agent whose courses are returned, but there is no explicit when-to-use, when-not-to-use, or pointer to an alternative sibling tool. Usage must be inferred from the name and resource.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lms_list_messagesВходящие внутренней почты SmartLMSA
Read-onlyIdempotent

Список входящих писем внутренней почты SmartLMS (плагин local_mail, edu.hse.ru/local/mail) — переписка с преподавателями внутри курсов. Важные объявления и материалы от преподавателей часто приходят именно сюда. Возвращает тему, курс, отправителя, дату, статус прочтения, число вложений.

NameRequiredDescriptionDefault
limitNoМаксимум писем

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful scope and return details: incoming-only correspondence and the fields subject, course, sender, date, read status, and attachment count.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by useful context and return fields. It is three sentences with no redundant or wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter and rich annotations, the description provides enough context to call it correctly. It also compensates for the absence of an output schema by naming the returned fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter, limit, and the schema description coverage is 100%, including default and min/max values. The description does not add meaning beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: listing incoming messages in SmartLMS internal mail. It distinguishes this from the sibling lms_get_message by scoping it to the inbox list and noting the local_mail plugin and course correspondence context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: this is where important teacher announcements and course materials arrive. However, it does not explicitly say when to use lms_get_message instead, nor does it state any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lms_open_pageОткрыть произвольную страницу SmartLMSA
Read-onlyIdempotent

Открыть любую страницу edu.hse.ru по относительному пути (например /calendar/view.php) под авторизованной сессией и вернуть видимый текст и ссылки. Полезно для сценариев, не покрытых готовыми тулами.

NameRequiredDescriptionDefault
pathYesОтносительный путь на edu.hse.ru, напр. /calendar/view.php?view=month

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuinely new context: requests run 'под авторизованной сессией' and the result is unstructured visible text plus links rather than parsed data. It omits any note on output size limits or failure behavior on auth expiry or bad paths.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no waste: the action and scoping come first, the example path is inline, and the differentiation clause closes it. Nothing is padded or restated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple read-only, one-parameter opener with a fully covered schema and no output schema, so the description's duty is mainly to say what comes back — which it does ('видимый текст и ссылки'). A brief note on output truncation or behavior on an invalid path would make it complete for an open-world fetcher.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully documented in the schema (100% coverage) including an example path. The description repeats essentially the same example ('/calendar/view.php') without adding constraints such as whether query strings, absolute URLs or non-edu.hse.ru hosts are rejected. With a fully described single param, baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Открыть), a specific resource (любую страницу edu.hse.ru), the input form (относительный путь) and even the return content (видимый текст и ссылки). The clause 'для сценариев, не покрытых готовыми тулами' implicitly separates it from the dedicated siblings like lms_get_grades, but no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the tool as a fallback for scenarios not covered by the ready-made tools, which gives an agent a clear selection rule against the other lms_* siblings. It stops short of naming which sibling to prefer or warning about what this page-scraping route cannot do (e.g. structured data), so it isn't a full when/when-not treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_deadlinesДедлайныA
Read-onlyIdempotent

Что горит: несданные задания и тесты SmartLMS (в том числе просроченные, у которых приём уже закрыт), окна ЕЛК (например, оценка курсов), активные задачи и заявки ЕЛК, ближайшие экзамены/зачёты за days дней вперёд. Элементы без распознанной даты идут в конце с when: null. Возвращает JSON: items — единый список элементов (kind, when, title, course, place, overdue, unread, source, ...), отсортированный: просроченные несданные первыми, затем по времени, затем без даты; sources — статус каждого источника (ok/error/skipped, текст ошибки, warnings). Если источник недоступен (например, ЕЛК не ответил), сводка всё равно возвращается — смотрите sources.

NameRequiredDescriptionDefault
daysNoГоризонт в днях вперёд
coursesNoСузить курсы SmartLMS: число — id курса, строка — часть названия. По умолчанию — все видимые курсы: будущие дедлайны берутся у актуальных (не завершённых), просроченные несданные — у любых видимых. Расписание, окна ЕЛК и остальные источники фильтром не ограничиваются.

Output Schema

NameRequiredDescription
itemsYes
windowYes
sourcesYes
generatedAtYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly/idempotent/openWorld), the description discloses real behavioral traits: items lacking a recognized date go to the end with when:null, the explicit sort order, the per-source status array with ok/error/skipped and warnings, and critically that a partial failure still returns a summary rather than erroring. That partial-failure contract is exactly the kind of thing annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the content enumeration comes first, then edge-case behavior (null dates), then the return contract. Every sentence carries information, though the opening sentence is a long comma-spliced list that is slightly harder to parse than it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, multi-source aggregator with an output schema, this covers everything an agent needs: what is included, sort order, null-date handling, per-source degradation, and filtering exclusions. Return values are explained consistent with (not redundant to) the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: the days horizon is framed as 'days forward', and it explains that the courses filter only narrows SmartLMS while schedule, ELK windows and other sources are unaffected — a scope boundary the schema alone does not state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific composite resource ('what's burning') and enumerates its sources precisely: SmartLMS unsubmitted assignments/tests including overdue, ELK windows, active ELK tasks/requests, and upcoming exams within days. This clearly distinguishes it from siblings like my_today, my_week, or the individual lms_list_assignments / elk_get_schedule tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the content enumeration and the 'days forward' horizon, so an agent can infer this is the aggregated multi-source deadline view, but the description never explicitly says when to prefer it over my_today/my_week or the per-source tools. No exclusions or 'use X instead when…' guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_todayСводка на сегодняA
Read-onlyIdempotent

Что у студента сегодня: занятия на сегодня, дедлайны (все просроченные несданные и до конца завтрашнего дня) из SmartLMS и ЕЛК, экзамены/зачёты, непрочитанная внутренняя почта SmartLMS, непрочитанные уведомления ЕЛК, активные заявки и задачи ЕЛК. Возвращает JSON: items — единый список элементов (kind, when, title, course, place, overdue, unread, source, ...), отсортированный: просроченные несданные первыми, затем по времени, затем без даты; sources — статус каждого источника (ok/error/skipped, текст ошибки, warnings). Если источник недоступен (например, ЕЛК не ответил), сводка всё равно возвращается — смотрите sources.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
itemsYes
windowYes
sourcesYes
generatedAtYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/openWorld annotations, the description discloses that the tool fans out across multiple sources, defines the deadline window (all overdue unsent plus through end of tomorrow), specifies the sort priority (overdue first, then by time, then undated), and states that a partial summary is still returned when a source fails, with per-source status in the sources field. That partial-failure contract is the key behavior an agent needs and is not in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the content inventory, then moves to return shape and failure behavior; every clause adds information. Some of the JSON field enumeration (kind, when, title, course, place) duplicates the output schema and could be trimmed, but the run-on style remains dense rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, rich annotations, and an existing output schema, the description supplies exactly the missing pieces: the aggregation scope, the deadline horizon, sort order, and the degraded-mode contract. An agent can call this correctly and interpret partial results without further information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the baseline is 4; there is nothing for the description to disambiguate. The description correctly spends no space on argument semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates exactly what the aggregate contains (today's classes, overdue and due-by-tomorrow deadlines from SmartLMS and ЕЛК, exams, unread mail/notifications, active requests), which is far more specific than the name alone. It does not state how it differs from overlapping siblings such as my_week or my_deadlines, so an agent must infer the split from the word 'сегодня'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the framing 'what the student has today' and by the deadline window that extends into tomorrow, but there is no explicit 'use this instead of X' or 'do not use when' guidance despite the presence of my_week and my_deadlines. The only explicit conditional is the degraded-source note, which is behavioral rather than selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_weekСводка на неделюA
Read-onlyIdempotent

План на ближайшие 7 дней (сегодня + 6): расписание занятий, дедлайны SmartLMS и ЕЛК, экзамены/зачёты, просроченные несданные работы. Без почты и уведомлений — для них my_today. Возвращает JSON: items — единый список элементов (kind, when, title, course, place, overdue, unread, source, ...), отсортированный: просроченные несданные первыми, затем по времени, затем без даты; sources — статус каждого источника (ok/error/skipped, текст ошибки, warnings). Если источник недоступен (например, ЕЛК не ответил), сводка всё равно возвращается — смотрите sources.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
itemsYes
windowYes
sourcesYes
generatedAtYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover only the safety profile (readOnly/idempotent/openWorld), and the description adds real behavior: partial-failure tolerance (a summary is still returned if a source like ЕЛК fails, with status in sources), source statuses ok/error/skipped with error text and warnings, and an explicit sort order for items. That is exactly the operational context an agent needs and cannot get from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentence front-loads scope and time window before the sibling exclusion and the return details. It is dense and every clause carries information, though the field enumeration for items (kind, when, title, ...) is slightly heavy given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the time window, included/excluded data sources, failure semantics, sort order, and the meaning of the sources field. Even though an output schema exists, the description's extra explanation of degraded-mode behavior leaves nothing an agent needs unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the baseline is 4 and the description correctly spends no space on parameter semantics. Instead it documents the output shape (items fields, sources), which is value-add rather than repetition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb-scope and resource: a 7-day plan (today + 6) aggregating schedule, SmartLMS/ЕЛК deadlines, exams, and overdue work. It explicitly separates itself from my_today by excluding mail and notifications, so an agent can distinguish it from siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear positive trigger (next 7 days) and an explicit exclusion that redirects to my_today for mail/notifications. It doesn't mention how it relates to my_deadlines or the per-source LMS/ЕЛК tools, so routing is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 21 tool updatesv0.1.1
    • First observedelk_get_academic_data
    • First observedelk_get_notifications
    • First observedelk_get_schedule
    • First observedelk_get_section
    • First observedelk_get_user_info
    • First observedelk_list_requests
    • First observedelk_open_page
    • First observedelk_search_services
    • First observedhse_changes
    • First observedhse_changes_reset
    • First observedhse_clear_cache
    • First observedlms_get_course_materials
    • First observedlms_get_grades
    • First observedlms_get_message
    • First observedlms_list_assignments
    • First observedlms_list_courses
    • First observedlms_list_messages
    • First observedlms_open_page
    • First observedmy_deadlines
    • First observedmy_today
    • First observedmy_week

TDQS

A3.5/5.0

Scored across 21 tools

Disambiguation4/5

Prefixes (elk_/lms_/my_/hse_) plus explicit cross-references in descriptions (e.g. elk_get_user_info says to use elk_get_academic_data for academic card; elk_get_section notes profile replacement) make most tools clearly separable. The main softness is the trio my_today / my_week / my_deadlines, whose windows overlap (today already includes deadlines through tomorrow, week includes deadlines too), and the two generic open_page escape hatches that can retrieve anything the specific tools return.

Naming Consistency4/5

Almost all tools are snake_case verb_noun with a source prefix (elk_get_schedule, lms_list_messages, elk_search_services), which is predictable and readable. The deviations are modest: the my_* aggregators use noun-only names (my_today, my_week, my_deadlines), and hse_changes / hse_changes_reset / hse_clear_cache break the source_action pattern with a prefix plus noun.

Tool Count3/5

21 tools is at the heavy end for what is essentially a read-only student dashboard, and there is visible redundancy: three overlapping summary tools, two generic open_page catch-alls, two snapshot/maintenance tools, and both elk_get_user_info and elk_get_academic_data. The scope (two separate systems plus cross-system aggregation) does justify breadth, so it is borderline rather than bloated.

Completeness3/5

Read coverage is broad — schedule, academic record, courses, materials, assignments, grades, mail, requests, notifications, plus aggregate digests and diffing — but every tool is read-only: no request/application submission (explicitly stated as unimplemented), no assignment submission, no message sending, no profile edits. The two open_page tools let an agent navigate uncovered read paths, but they too return only text and links, so write-side workflows remain dead ends.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    B
    maintenance
    MCP server for the Moodle-based Campus Virtual FCEIA UNR, providing tools to read courses, assignments, forums, and grades, plus write operations (posting, grading, messaging, events) with dry-run safety.
    20
    1
    -
  • A
    license
    A
    quality
    B
    maintenance
    A read-only MCP server that lets students query Union College's Nexus (Moodle) account through natural language, covering courses, assignments, due and overdue work, grades, course materials, announcements, and calendar events, plus daily/weekly briefings and workload analysis. It uses Moodle's official web-service API with a personal student token, so it only reads the user's own data and never writes or scrapes.
    19
    1
    MIT