UNC LibCal MCP
UNC LibCal MCP
MCP-сервер для бронирования учебных помещений UNC Davis Library из Claude, Cursor, Codex или любого MCP-клиента — с опциональной интеграцией с Apple Calendar.
Создан для студентов, преподавателей и сотрудников UNC с действующим Onyen. Не аффилирован с UNC Libraries и не одобрен ими.
Что он делает
Спросите своего агента:
Забронируй мне куб в Davis на завтра в 14:00
Сервер:
Проверит доступность в LibCal (публичный API — вход не нужен)
Предложит ранжированные варианты (
libcal_suggest) или забронирует слот после вашего подтверждения (libcal_book)Завершит бронирование в вашем браузерном сеансе (Playwright + сохранённый вход Onyen)
При необходимости добавит событие в Apple Calendar (только macOS)
Related MCP server: @aiwerk/mcp-server-cal
Требования
Node.js 20+
UNC Onyen (для бронирования; проверка доступности работает без входа)
macOS для синхронизации с Apple Calendar (необязательно)
Chromium (устанавливается автоматически через Playwright)
Быстрый старт
1. Клонируйте и установите
git clone https://github.com/Thespaceblade/unc-libcal-mcp.git
cd unc-libcal-mcp
npm install
npx playwright install chromium
npm run build
npm test2. Войдите в LibCal
npm run loginОткроется браузер → войдите с помощью Onyen (+ Duo, если будет предложено) → когда страница Davis LibCal загрузится, нажмите Enter в терминале.
Ваш сеанс сохраняется в ~/.unc-libcal/storage-state.json (никогда не коммитьте этот файл).
3. Настройка (необязательно)
При первом запуске создаётся ~/.unc-libcal/config.json со значениями по умолчанию:
{
"defaultCategory": "davis-cubes",
"calendarName": "Calendar",
"preferSameDay": true,
"minLeadMinutes": 30,
"searchHorizonDays": 7,
"bookingPurpose": "Study session"
}Попросите агента выполнить libcal_list_calendars, затем установите calendarName на нужный календарь Apple Calendar. Предоставьте разрешение Automation, когда macOS запросит его (Terminal или Cursor → Calendar).
4. Подключите ваш MCP-клиент
Каждому клиенту нужен абсолютный путь к dist/index.js. Изнутри репозитория:
pwd # e.g. /Users/you/projects/unc-libcal-mcp
# Use: <that-path>/dist/index.jsИли одной строкой:
node -e "const p=require('path'); console.log(p.join(process.cwd(),'dist/index.js'))"Все клиенты ниже используют один и тот же stdio-сервер:
{
"command": "node",
"args": ["/absolute/path/to/unc-libcal-mcp/dist/index.js"]
}Перезапустите клиент после изменения конфигурации.
Claude Desktop
Файл: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"unc-libcal": {
"command": "node",
"args": ["/absolute/path/to/unc-libcal-mcp/dist/index.js"]
}
}
}Полностью завершите работу Claude Desktop и откройте его заново.
Cursor
Вариант A — интерфейс: Настройки → MCP → Добавить сервер → вставьте JSON-блок выше.
Вариант B — файл проекта: .cursor/mcp.json в этом репозитории (удобно для совместной работы с коллегами):
{
"mcpServers": {
"unc-libcal": {
"command": "node",
"args": ["./dist/index.js"]
}
}
}Используйте ./dist/index.js только если рабочая директория MCP в Cursor — корень проекта; в противном случае используйте абсолютный путь.
OpenAI Codex (CLI)
Codex использует TOML, а не JSON. Файл: ~/.codex/config.toml (или .codex/config.toml в доверенном проекте).
[mcp_servers.unc-libcal]
command = "node"
args = ["/absolute/path/to/unc-libcal-mcp/dist/index.js"]Или через CLI:
codex mcp add unc-libcal -- node /absolute/path/to/unc-libcal-mcp/dist/index.js
codex mcp list # verify it appearsЕсли серверы не отображаются, убедитесь, что проект доверенный (codex trust в репозитории) при использовании локального для проекта .codex/config.toml.
Claude Code (CLI)
Файл: ~/.claude.json (глобально) или .mcp.json в проекте:
{
"mcpServers": {
"unc-libcal": {
"command": "node",
"args": ["/absolute/path/to/unc-libcal-mcp/dist/index.js"]
}
}
}В сеансе Claude Code выполните /mcp, чтобы убедиться, что инструменты загружены.
Другие MCP-клиенты
Любой клиент, поддерживающий stdio MCP, может использовать те же command + args. Укажите ему dist/index.js после npm run build.
5. Проверьте, что всё работает
В вашем агенте попробуйте:
Check libcal auth statusЗатем:
Suggest Davis cubes for 2 hours tomorrowПосле подключения сервера вы должны увидеть доступные libcal_auth_status, libcal_suggest, libcal_check_availability, libcal_book и libcal_list_calendars.
MCP-инструменты
Инструмент | Требуется вход | Назначение |
| Нет | Ранжированные варианты бронирования; приоритет на сегодня, если не указана дата |
| Нет | Открытые слоты на одну дату |
| Да | Бронирование подтверждённого слота + опциональное событие в Apple Calendar |
| Да | Проверка, действителен ли сохранённый сеанс |
| Нет | Список названий календарей Apple Calendar (macOS) |
Процесс бронирования
Для запросов без конкретики («забронируй куб», «максимум часов») → агент сначала вызывает
libcal_suggestАгент показывает пронумерованные варианты; вы выбираете один
Агент вызывает
libcal_bookсuser_confirmed: trueи выбранными датой/временем
libcal_book не будет выполнен без явного подтверждения.
Категории помещений
ID | Описание |
| Davis Collaboration Cubes (по умолчанию) |
| Групповые учебные комнаты Davis |
| Компьютеры лаборатории Data Services |
Примеры запросов
Book me a study room for as long as possible
→ libcal_suggest shows TODAY vs later; you pick; then libcal_book
Book me a Davis cube tomorrow 11am–1pm
→ libcal_suggest or direct libcal_book with your exact time
Any study rooms free Friday afternoon?
→ libcal_check_availability or libcal_suggestКак это работает
Доступность — реверс-инженеренный grid API LibCal (
/spaces/availability/grid)Бронирование — Playwright управляет реальным интерфейсом LibCal: выбор слота → отправка времени → оформление на
/spaces/auth→ форма подтвержденияКалендарь — AppleScript → Calendar.app (требуется разрешение Automation в macOS)
Сеансы периодически истекают. Выполните npm run login снова, когда libcal_auth_status сообщит об истечении.
CLI-скрипты
# Refresh Onyen session
npm run login
# Run unit tests (38 tests)
npm test
# Book via CLI (uses saved session)
node dist/scripts/run-task.js --date 2026-09-01 --start 14:00 --duration 120
# Check public bookings page / cancel-link availability
node dist/scripts/list-bookings.jsОтмена бронирований
UNC LibCal не предоставляет страницу отмены «мои бронирования» в веб-интерфейсе. Отмените бронирование по ссылке в письме с подтверждением от alerts@mail.libcal.com.
Лимиты LibCal (UNC Davis)
До 3 часов в день, сегментами по 30 минут / 1 час
Популярные слоты могут быть заняты между suggest и book
Для кубов может потребоваться «название курса или группы» в форме оформления (по умолчанию —
bookingPurposeв конфиге)
Разработка
npm run build # compile TypeScript → dist/
npm test # unit + integration tests
npm run dev # build and start MCP server on stdioПредостережения
Личный инструмент автоматизации — используйте ответственно и соблюдайте правила библиотеки UNC
Протестировано только с
calendar.lib.unc.edu(UNC Chapel Hill)Другим учреждениям LibCal потребуются другие константы
lid/gidвsrc/libcal/constants.ts
Лицензия
MIT — см. LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables interaction with the DiSH room booking platform to search availability, create bookings, and manage reservations. It allows AI assistants to handle meeting room logistics directly through natural language commands.3

@aiwerk/mcp-server-calofficial
AlicenseAqualityCmaintenanceConnects AI assistants to Cal.com for managing bookings, event types, and availability through natural language.1260MIT- FlicenseNot gradedqualityDmaintenanceEnables natural language booking and management of rooms in Nexudus coworking spaces, including listing rooms, checking availability, booking, viewing/cancelling bookings, and schedules.
- FlicenseNot gradedqualityDmaintenanceExposes Cal.com scheduling tools to AI agents via MCP, enabling listing event types, checking availability, and managing bookings (create, cancel, reschedule).
Related MCP Connectors
Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Manage Novacal event types, availability, and bookings.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Thespaceblade/unc-libcal-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server