VOOZH about

URL: https://glama.ai/mcp/servers/alcylu/nightlife-mcp?locale=ja-JP

⇱ ナイトライフ検索 by alcylu | Glama


nightlife-mcp

Supabaseをバックエンドとしたナイトライフイベント検索用MCPサーバー。

クイックスタート

本番環境エンドポイント: https://api.nightlife.dev/mcp

  1. nightlife.dev で無料のAPIキーを取得します。

  2. 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_events

  • get_tonight

  • get_event_details

  • search_venues

  • get_venue_info

  • search_performers

  • get_performer_info

  • log_unmet_request

  • create_vip_booking_request

  • get_vip_booking_status

  • get_vip_table_availability

  • get_vip_table_chart

  • get_recommendations (v0.2, MCP_ENABLE_RECOMMENDATIONS=true で有効化)

  • APIキーミドルウェアを備えたストリーミング可能なHTTPエンドポイント

  • 構造化されたツール出力スキーマ (outputSchema)

  • 安定したエラーコードを持つ決定論的なツールエラーペイロード

  • /health で公開されるランタイムリクエスト/ツールメトリクス

前提条件

  • Node.js 18以上

  • SupabaseプロジェクトURL + サービスロールキー

セットアップ

cp .env.example .env
npm install

.env に環境変数を設定します:

  • SUPABASE_URL

  • SUPABASE_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 を有効化)

DB APIキーモード (推奨)

HTTP認証では、Supabaseの永続的なAPIキーとクォータ追跡を使用できます。

  1. Supabase SQLエディタでSQLマイグレーションを実行します:

-- copy file contents from:
-- supabase/migrations/20260219094000_mcp_api_keys.sql
  1. .env でDB認証フラグが有効になっていることを確認します:

MCP_HTTP_REQUIRE_API_KEY=true
MCP_HTTP_USE_DB_KEYS=true
MCP_HTTP_ALLOW_ENV_KEY_FALLBACK=true
  1. APIキーレコードを作成します:

npm run key:create -- --name claude-desktop --tier starter --daily-quota 1000 --minute-quota 60

これにより、生の api_key が一度だけ表示されます。安全に保存し、MCP HTTP呼び出しで使用してください。

DB RPCが利用できない場合、MCP_HTTP_ALLOW_ENV_KEY_FALLBACK=true の場合にのみ MCP_HTTP_API_KEYS へのフォールバックが機能します。

コンシェルジュ未対応リクエストのバックログ

パブリックコンシェルジュフローは、サポートされていないユーザーの意図を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_request

  • get_vip_booking_status

  • get_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_sent

  • claim_vip_request_after_ack

  • update_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 を添付)

予約可能な会場を最初に発見するには、以下を使用します:

  • vip_booking_supported_only=true を指定した search_venues

  • または get_venue_infovip_booking_supported を確認

内部の会場予約担当者は、DB関数を介してキュータスクを要求します:

  • public.claim_next_vip_agent_task(p_agent_id text)

VIP Opsダッシュボード

内部ダッシュボードルート:

  • GET /ops/login

  • POST /ops/login

  • POST /ops/logout

  • GET /ops/vip-dashboard

内部管理APIルート (Cookieセッション保護):

  • GET /api/v1/admin/vip-bookings

  • GET /api/v1/admin/vip-bookings/:id

  • PATCH /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)

レコメンデーション用デバッグWeb UI:

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_venuesget_venue_info には vip_booking_supported が含まれており、クライアントはVIP予約送信を受け付ける会場を正確に表示できます。

  • vip_booking_supportedpublic.venues.vip_booking_enabled から取得されます (guest_list_enabled とは別)。

  • create_vip_booking_requestvip_booking_supported=true の会場のみを受け付けます。

  • 都市処理は public.cities (slug, タイムゾーン, サービス日の区切り) によってバックアップされています。

  • サポートされているトップレベルの都市は環境設定可能です (例: tokyosan-francisco)。東京はデフォルトのままにできます。

  • Stdioトランスポート:APIキーチェックなし。

  • HTTPトランスポート (/mcp):デフォルトでAPIキーが必要 (MCP_HTTP_REQUIRE_API_KEY=true)。

  • APIキーヘッダー:

    • Authorization: Bearer <key>

    • x-api-key: <key>

  • DBバックエンド認証がアクティブな場合、HTTPレスポンスにはキーのティア/ソースおよびレート制限ヘッダーが含まれます:

    • X-API-Key-Tier

    • X-API-Key-Source

    • X-RateLimit-Daily-Limit

    • X-RateLimit-Daily-Remaining

    • X-RateLimit-Minute-Limit

    • X-RateLimit-Minute-Remaining

  • ヘルスエンドポイント:/health

  • 手動ツールテスト用デバッグページ:/debug/recommendations

  • ツールエラーは result.content[0].text 内のJSONテキストペイロードとして返されます:

    • INVALID_DATE_FILTER

    • INVALID_EVENT_ID

    • UNSUPPORTED_EVENT_ID

    • EVENT_NOT_FOUND

    • INVALID_VENUE_ID

    • VENUE_NOT_FOUND

    • INVALID_PERFORMER_ID

    • PERFORMER_NOT_FOUND

    • INVALID_BOOKING_REQUEST

    • BOOKING_REQUEST_NOT_FOUND

    • BOOKING_STATUS_UPDATE_FAILED

    • VIP_TASK_NOT_AVAILABLE

    • VIP_ALERT_UPDATE_FAILED

    • VIP_CLAIM_FAILED

    • INVALID_REQUEST

    • REQUEST_WRITE_FAILED

    • DB_QUERY_FAILED

    • INTERNAL_ERROR

貢献とCI

ワークフローとルールについては CONTRIBUTING.md を参照してください。AIエージェントは AGENTS.md を読み取ります。CLAUDE.md がアーキテクチャの信頼できる情報源です。

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