Skip to main content
Glama

hse-ruz-mcp

CI npm License: MIT

Локальный MCP-сервер (stdio) для расписания НИУ ВШЭ через API RUZ (ruz.hse.ru/api): ищет студентов, преподавателей, группы и аудитории, показывает расписание студента по email и расписание группы. Логин, пароль и браузер не нужны.

Ограничение: только из сети ВШЭ

RUZ отвечает только из внутренней сети ВШЭ (Wi-Fi HSE.Student на кампусе или VPN сотрудника). Вне её API перенаправляет на HTML-заглушку, и tools возвращают ошибку с объяснением.

Related MCP server: hdu-ics-mcp-server

Установка

Нужен Node.js 22+.

Claude Code

claude mcp add hse-ruz-mcp -- npx -y hse-ruz-mcp

Claude Desktop, Cursor и другие клиенты

{
  "mcpServers": {
    "hse-ruz-mcp": {
      "command": "npx",
      "args": ["-y", "hse-ruz-mcp"]
    }
  }
}

Из исходников

git clone https://github.com/ihavealotofguap/hse-ruz-mcp.git
cd hse-ruz-mcp
npm install
npm run build
claude mcp add hse-ruz-mcp -- node <путь-к-проекту>/dist/index.js

Tools

Tool

Что делает

ruz_find_person

Ищет студента, преподавателя, группу или аудиторию по подстроке и возвращает id (type: student по умолчанию, lecturer, group, auditorium)

ruz_get_my_schedule

Возвращает расписание студента по корпоративному email (login@edu.hse.ru) на 1–60 дней вперёд (по умолчанию 7)

ruz_get_group_schedule

Возвращает расписание группы по RUZ id (id берётся из ruz_find_person с type=group) на 1–60 дней вперёд (по умолчанию 7)

По преподавателям и аудиториям есть только поиск, расписание по ним сервер не отдаёт. Даты запроса берутся в часовом поясе машины (ожидается московское время).

Примеры запросов

  • «Какие у меня пары завтра? Мой email login@edu.hse.ru»

  • «Найди группу БПИ231 и покажи её расписание на неделю»

Разработка

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

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

Участие в разработке и выпуск релизов описаны в CONTRIBUTING.md.

Лицензия

MIT

Available Tools

3 tools
ruz_find_personНайти в РУЗA

Поиск студента, преподавателя, группы или аудитории ВШЭ по подстроке (ФИО, номер группы) через API RUZ (ruz.hse.ru/api/search). ВАЖНО: RUZ отдаёт данные только из внутренней сети ВШЭ (Wi-Fi HSE.Student на кампусе или VPN сотрудника) — вне сети запрос вернёт ошибку. Для поиска по расписанию вне сети ВШЭ используйте elk_get_schedule (тул hsemcp, если подключён; API ЕЛК, работает из любой сети). Возвращает id и подпись найденных совпадений — id группы/преподавателя пригодится для ruz_get_group_schedule.

NameRequiredDescriptionDefault
termYesСтрока поиска: часть ФИО, номер группы и т.п.
typeNostudent

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full disclosure burden and does well: it states the hard network prerequisite (campus Wi-Fi or employee VPN), that failure occurs outside it, and what is returned (id plus label). It stops short of mentioning auth, rate limits, or result-count limits, which keeps it from a 5.

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 action and endpoint, then the critical network caveat and the alternative. Dense but nearly every clause earns its place; the parenthetical tool-provenance note (тул hsemcp, если подключён; API ЕЛК) is slightly noisy but still informative.

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, no-annotation, no-output-schema tool, the description supplies everything an agent needs: what it searches, the network precondition, the failure mode, the shape of the return value, and where the returned ids are consumed next.

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 50%: `term` is documented in the schema, while `type` has only an enum and default with no description. The description partially compensates by enumerating the four searchable entity kinds (студент, преподаватель, группа, аудитория), which map onto the enum, but it never explains the `type` parameter itself or its default.

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 (поиск по подстроке), the exact resources (студент, преподаватель, группа, аудитория ВШЭ) and the backing endpoint (ruz.hse.ru/api/search). It also positions itself against the schedule tools by naming ruz_get_group_schedule as the downstream consumer of the returned ids.

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 an explicit when-not (outside the HSE internal network the request errors) and names an alternative (elk_get_schedule) with the condition that selects it. The gap is that this alternative only covers schedule lookups, so an agent searching for a person while off-network is left without a fallback.

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

ruz_get_group_scheduleРасписание группыB

Расписание занятий учебной группы ВШЭ по её RUZ id (узнать id — ruz_find_person с type=group) на заданный период.

NameRequiredDescriptionDefault
groupIdYesRUZ id группы
daysAheadNo

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about return format, whether the endpoint is public or requires auth, or how the period window behaves. Only the notion of a 'заданный период' hints at the scope constraint.

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?

A single sentence that front-loads the resource and folds the id-lookup tip into a parenthetical, with no filler. It is efficient, though the parenthetical slightly interrupts the reading order of the main clause.

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 annotations and no output schema, the description should say more about what a schedule response contains and how the time window is applied. It covers the input side adequately but leaves the output and period semantics under-specified.

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 50%: groupId is documented in the schema, while daysAhead has only min/max/default constraints and no description. The phrase 'на заданный период' gestures at the period parameter but does not explain that daysAhead counts forward from today, so it only marginally compensates for the gap.

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 ('учебной группы ВШЭ по её RUZ id') with the lookup key explicit. It is distinguishable from ruz_get_my_schedule by being group-scoped rather than personal, though that contrast is only implied 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 Guidelines4/5

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

Gives actionable routing: it tells the agent to obtain the id via ruz_find_person with type=group, which is exactly the prerequisite most callers would otherwise miss. It does not state when to prefer ruz_get_my_schedule or any exclusions, so it stops short of a full 5.

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

ruz_get_my_scheduleРасписание студента по emailA

Расписание занятий студента ВШЭ на заданный период по его корпоративному email (login@edu.hse.ru). Использует API RUZ, который отдаёт данные только из внутренней сети ВШЭ (Wi-Fi HSE.Student на кампусе или VPN) — при ошибке подключения вне кампуса используйте elk_get_schedule (тул hsemcp, если подключён) — расписание через API ЕЛК, работает из любой сети.

NameRequiredDescriptionDefault
emailYesКорпоративный email студента, напр. ivanov@edu.hse.ru
daysAheadNoНа сколько дней вперёд от сегодня получить расписание

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the burden and discloses the biggest behavioral trait: the RUZ API only returns data from inside the HSE network and will fail outside campus. It does not describe authentication beyond the email, return format, or how many entries come back.

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?

A single front-loaded block: purpose first, then the network constraint, then the fallback. It is dense and every clause earns its place, though the fallback clause is somewhat parenthetical and slightly clauses-heavy.

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 two-parameter, no-output-schema tool this covers purpose, the critical network limitation, and an alternative. The main omission is what the returned schedule looks like, which matters since there is no output schema to lean on.

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 in the schema. The description only reinforces the corporate-email domain ('login@edu.hse.ru') and the notion of a period; it adds no syntax or constraint details beyond the schema, so 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 ('Расписание занятий студента ВШЭ') plus the scoping key (corporate email) and the time window, which implicitly separates it from a group schedule. It never names the actual siblings (ruz_get_group_schedule, ruz_find_person), so the differentiation is inferable rather than explicit.

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 an explicit precondition (only works from the HSE internal network — Wi-Fi HSE.Student or VPN) and names the fallback tool elk_get_schedule with the condition that selects it ('при ошибке подключения вне кампуса'). This is exactly the when/when-not/alternative pattern.

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. 3 tool updatesv0.1.0
    • First observedruz_find_person
    • First observedruz_get_group_schedule
    • First observedruz_get_my_schedule

TDQS

A3.6/5.0

Scored across 3 tools

Disambiguation4/5

Each tool targets a distinct entity: person/group lookup, personal schedule, and group schedule. The only mild overlap is between the two schedule tools, but the descriptions clearly separate 'my' (by email) from 'group' (by RUZ id). References to an external tun (elk_get_schedule from another MCP) add some noise but do not blur the boundaries between these three tools.

Naming Consistency4/5

All three tools share a clear ruz_ prefix and a verb_noun structure (find_person, get_my_schedule, get_group_schedule). The only deviation is mixing 'find' with 'get', which is defensible as search-vs-fetch semantics.

Tool Count3/5

Three tools is a very narrow surface, borderline thin for a scheduling domain that also covers teachers and rooms. It is not padded or bloated, but the set feels like a minimal vertical slice rather than a well-rounded toolset.

Completeness3/5

Student and group schedules are covered, but ruz_find_person advertises searching teachers and auditoriums with no corresponding schedule-fetch tool, creating dead ends. The teacher/room ids surfaced by search are effectively unusable except indirectly, which is a notable gap.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables querying University of Caen (Unicaen) schedule data to find next classes for professors, students, or rooms and check room availability. Integrates with ADE scheduling system to provide real-time schedule information through natural language queries.
    -
  • F
    license
    B
    quality
    C
    maintenance
    Enables querying of Hangzhou Dianzi University course schedules, exams, and campus events by accessing the HDUHelp ICS calendar subscription. Supports getting today's and upcoming events, as well as keyword search.
    3
    -
  • A
    license
    A
    quality
    B
    maintenance
    Provides LLM clients with real-time access to BSUIR class schedules, academic weeks, student groups, and teachers through a read-only MCP interface, enabling natural-language queries about lessons and timetable information.
    22
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables users to search for information about the Institute of Fundamental Medicine and Biology at KFU and retrieve academic group schedules. It uses OpenRouter to understand natural-language questions and automatically invoke MCP tools.
    1
    -