nightlife-mcp
MCP-сервер для поиска событий ночной жизни на базе Supabase.
Быстрый старт
Продакшн-эндпоинт: https://api.nightlife.dev/mcp
Получите бесплатный API-ключ на nightlife.dev
Добавьте его в конфигурацию Claude Desktop (
claude_desktop_config.json):
{
"mcpServers": {
"nightlife": {
"url": "https://api.nightlife.dev/mcp",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
}
}
}Информацию о curl, TypeScript SDK и других клиентах см. в CLIENT_SETUP.md.
Related MCP server: Eventfinda MCP
Реализовано (v0.3)
search_eventsget_tonightget_event_detailssearch_venuesget_venue_infosearch_performersget_performer_infolog_unmet_requestcreate_vip_booking_requestget_vip_booking_statusget_vip_table_availabilityget_vip_table_chartget_recommendations(v0.2, приMCP_ENABLE_RECOMMENDATIONS=true)Потоковый HTTP-эндпоинт с middleware для API-ключа
Структурированные схемы вывода инструментов (
outputSchema)Детерминированные полезные нагрузки ошибок инструментов со стабильными кодами ошибок
Метрики запросов/инструментов во время выполнения доступны по адресу
/health
Предварительные требования
Node.js 18+
URL проекта Supabase + ключ service role
Настройка
cp .env.example .env
npm installУстановите переменные окружения в .env:
SUPABASE_URLSUPABASE_SERVICE_ROLE_KEY
Опционально:
DEFAULT_CITY(по умолчанию:tokyo)MCP_TOP_LEVEL_CITIES(пример по умолчанию:tokyo,san-francisco; управляетavailable_citiesв ответах для неподдерживаемых городов)DEFAULT_COUNTRY_CODE(по умолчанию:JP)NIGHTLIFE_BASE_URL(по умолчанию:https://nightlifetokyo.com)MCP_HTTP_REQUIRE_API_KEY(по умолчанию:true)MCP_HTTP_USE_DB_KEYS(по умолчанию:true)MCP_HTTP_ALLOW_ENV_KEY_FALLBACK(по умолчанию:true)MCP_HTTP_API_KEYS(запятая-разделенные устаревшие резервные ключи)MCP_ENABLE_RECOMMENDATIONS(по умолчанию:false; включаетget_recommendations)
Режим API-ключей БД (Рекомендуется)
HTTP-аутентификация может использовать постоянные API-ключи из Supabase плюс отслеживание квот.
Выполните SQL-миграцию в редакторе SQL Supabase:
-- copy file contents from:
-- supabase/migrations/20260219094000_mcp_api_keys.sqlУбедитесь, что флаги аутентификации БД включены в
.env:
MCP_HTTP_REQUIRE_API_KEY=true
MCP_HTTP_USE_DB_KEYS=true
MCP_HTTP_ALLOW_ENV_KEY_FALLBACK=trueСоздайте запись API-ключа:
npm run key:create -- --name claude-desktop --tier starter --daily-quota 1000 --minute-quota 60Это один раз выведет необработанный api_key. Сохраните его в безопасности и используйте в HTTP-вызовах MCP.
Если DB RPC недоступен, резервный вариант MCP_HTTP_API_KEYS работает только при MCP_HTTP_ALLOW_ENV_KEY_FALLBACK=true.
Журнал невыполненных запросов консьержа
Публичные потоки консьержа могут записывать неподдерживаемые намерения пользователей в Supabase.
Запустите миграцию:
-- copy file contents from:
-- supabase/migrations/20260226_concierge_unmet_requests.sqlЗатем вызывайте инструмент MCP log_unmet_request, когда в доступных данных о ночной жизни нет подходящего ответа.
VIP-бронирование, этап 1
Отправка заявок на VIP-бронирование столов и отслеживание статуса поддерживаются через Supabase.
Запустите миграцию:
-- copy file contents from:
-- supabase/migrations/20260227143000_vip_phase1_requests_and_queue.sql
-- supabase/migrations/20260228124500_add_vip_booking_enabled_to_venues.sql
-- and if already deployed before 2026-02-28:
-- supabase/migrations/20260228111000_vip_outward_language_defaults.sql
-- supabase/migrations/20260301010000_vip_table_availability_chart.sql
-- supabase/migrations/20260301114000_vip_table_chart_storage_bucket.sql
-- supabase/migrations/20260303093000_vip_dashboard_admin_edits.sqlЗатем вызывайте инструменты MCP:
create_vip_booking_requestget_vip_booking_statusget_vip_table_availability(чтение доступности столов по дням для заведения/диапазона дат)get_vip_table_chart(чтение структурированной схемы столов с опциональным наложением статуса по датам и опциональнымlayout_image_url)
Политика общения для create_vip_booking_request:
Подтвердите дату/время бронирования по местному времени заведения перед отправкой.
Используйте формулировку с двойной датой, особенно для ночных прибытий (
00:00-05:59).Обязательный шаблон подтверждения:
Just to confirm: you want a table for [Night Day] night ([Night Date]), arriving around [Time] on [Arrival Day], [Arrival Date] ([Timezone]). I'll submit that as [Night Day] night with [Time] arrival. Is that correct?
Если пользователь называет время, например
2am, без указания дня, спросите:Do you mean 2:00 AM after Thursday night (Friday morning), or after Friday night (Saturday morning)?
Если пользователь меняет день, заново сгенерируйте подтверждение перед отправкой.
Сессии уровня Ops также имеют инструменты внутренней очереди:
list_vip_reservations(все невыполненные бронирования; статусы по умолчанию:submitted,in_review,confirmed)list_vip_requests_for_alerting(только просроченные оповещения)mark_vip_request_alert_sentclaim_vip_request_after_ackupdate_vip_booking_status(установкаconfirmed/rejected/cancelledс событием аудита)upsert_vip_venue_tables(запись определений столов заведения + координаты схемы + опциональные примечания к столам + опциональныйlayout_image_url)upsert_vip_table_availability(запись статусов по датам)upload_vip_table_chart_image(загрузка изображения схемы в хранилище и прикреплениеlayout_image_urlк метаданным столов заведения)
Чтобы сначала найти заведения, доступные для бронирования, используйте:
search_venuesсvip_booking_supported_only=trueили
get_venue_infoи проверьтеvip_booking_supported
Для внутренних работников по бронированию заведений, забирайте задачи из очереди через функцию БД:
public.claim_next_vip_agent_task(p_agent_id text)
VIP Ops Dashboard
Маршруты внутренней панели управления:
GET /ops/loginPOST /ops/loginPOST /ops/logoutGET /ops/vip-dashboard
Внутренние маршруты API администратора (защищены cookie-сессией):
GET /api/v1/admin/vip-bookingsGET /api/v1/admin/vip-bookings/:idPATCH /api/v1/admin/vip-bookings/:id
Обязательные переменные окружения:
VIP_DASHBOARD_ADMINS(парыusername:password, разделенные запятыми)
Опциональные переменные окружения:
VIP_DASHBOARD_SESSION_TTL_MINUTES(по умолчанию:720)VIP_DASHBOARD_SESSION_COOKIE_NAME(по умолчанию:vip_dashboard_session)
Запуск
Stdio (локальные десктопные клиенты):
npm run devПотоковый HTTP:
npm run dev:httpДля сборки продакшна:
npm run build
npm startДля HTTP в продакшне:
npm run start:httpАутентифицированная проверка работоспособности продакшна:
NLT_API_KEY=... npm run smoke:prod:authОпциональные переопределения окружения:
NLT_MCP_URL(по умолчанию:https://api.nightlife.dev/mcp)NLT_REST_BASE_URL(по умолчанию:https://api.nightlife.dev/api/v1)NLT_SMOKE_CITY(по умолчанию:tokyo)
Отладочный веб-интерфейс для рекомендаций:
MCP_ENABLE_RECOMMENDATIONS=true npm run dev:http
# open http://127.0.0.1:3000/debug/recommendationsПримечания
Обработка дат поддерживает
tonight,this_weekend,YYYY-MM-DDиYYYY-MM-DD/YYYY-MM-DD.get_recommendationsвозвращает до 10 разнообразных слотов с динамическим резервным вариантом с учетом города.Инструменты для заведений и исполнителей включают снимки предстоящих событий.
log_unmet_requestзаписывает неразрешенные запросы пользователей вpublic.concierge_unmet_requests.VIP этап 1 записывает заявки на бронирование в
public.vip_booking_requests, а задачи очереди работников вpublic.vip_agent_tasks.Инвентаризация VIP записывает определения столов в
public.vip_venue_tables, а статусы по датам вpublic.vip_table_availability.search_venuesиget_venue_infoвключаютvip_booking_supported, чтобы клиенты могли точно видеть, какие заведения принимают заявки на VIP-бронирование.vip_booking_supportedберется изpublic.venues.vip_booking_enabled(отдельно отguest_list_enabled).create_vip_booking_requestпринимает только те заведения, гдеvip_booking_supported=true.Обработка городов поддерживается
public.cities(slug, часовой пояс и время отсечки рабочего дня).Поддерживаемые города верхнего уровня настраиваются в окружении (например,
tokyoиsan-francisco), при этом Токио может оставаться по умолчанию.Транспорт Stdio: проверка API-ключа отсутствует.
Транспорт HTTP (
/mcp): API-ключ требуется по умолчанию (MCP_HTTP_REQUIRE_API_KEY=true).Заголовки API-ключа:
Authorization: Bearer <key>x-api-key: <key>
HTTP-ответы включают уровень/источник ключа и заголовки ограничения скорости, когда активна аутентификация через БД:
X-API-Key-TierX-API-Key-SourceX-RateLimit-Daily-LimitX-RateLimit-Daily-RemainingX-RateLimit-Minute-LimitX-RateLimit-Minute-Remaining
Эндпоинт состояния:
/health.Страница отладки для ручного тестирования инструментов:
/debug/recommendations.Ошибки инструментов возвращаются как JSON-текстовые полезные нагрузки в
result.content[0].text:INVALID_DATE_FILTERINVALID_EVENT_IDUNSUPPORTED_EVENT_IDEVENT_NOT_FOUNDINVALID_VENUE_IDVENUE_NOT_FOUNDINVALID_PERFORMER_IDPERFORMER_NOT_FOUNDINVALID_BOOKING_REQUESTBOOKING_REQUEST_NOT_FOUNDBOOKING_STATUS_UPDATE_FAILEDVIP_TASK_NOT_AVAILABLEVIP_ALERT_UPDATE_FAILEDVIP_CLAIM_FAILEDINVALID_REQUESTREQUEST_WRITE_FAILEDDB_QUERY_FAILEDINTERNAL_ERROR
Участие и CI
См. CONTRIBUTING.md для рабочего процесса и правил. AI-агенты читают AGENTS.md. CLAUDE.md является источником истины по архитектуре.
Maintenance
Latest Blog Posts
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/alcylu/nightlife-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
