Nightlife Search
Provides music events, concerts, music festivals, nightclubs and other events information.
README
nightlife-mcp
MCP server for nightlife event discovery backed by Supabase.
Quick Start
Production endpoint: https://api.nightlife.dev/mcp
- Get a free API key at nightlife.dev
- Add to Claude Desktop config (
claude_desktop_config.json):
{
"mcpServers": {
"nightlife": {
"url": "https://api.nightlife.dev/mcp",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
}
}
}
For curl, TypeScript SDK, and other clients, see CLIENT_SETUP.md.
Implemented (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, behindMCP_ENABLE_RECOMMENDATIONS=true)- Streamable HTTP endpoint with API-key middleware
- Structured tool output schemas (
outputSchema) - Deterministic tool error payloads with stable error codes
- Runtime request/tool metrics exposed at
/health
Prerequisites
- Node.js 18+
- Supabase project URL + service role key
Setup
cp .env.example .env
npm install
Set env vars in .env:
SUPABASE_URLSUPABASE_SERVICE_ROLE_KEY
Optional:
DEFAULT_CITY(default:tokyo)MCP_TOP_LEVEL_CITIES(default example:tokyo,san-francisco; controlsavailable_citiesin unsupported-city responses)DEFAULT_COUNTRY_CODE(default:JP)NIGHTLIFE_BASE_URL(default:https://nightlifetokyo.com)MCP_HTTP_REQUIRE_API_KEY(default:true)MCP_HTTP_USE_DB_KEYS(default:true)MCP_HTTP_ALLOW_ENV_KEY_FALLBACK(default:true)MCP_HTTP_API_KEYS(comma-separated legacy fallback keys)MCP_ENABLE_RECOMMENDATIONS(default:false; enablesget_recommendations)
DB API Key Mode (Recommended)
HTTP authentication can use persistent API keys from Supabase plus quota tracking.
- Run SQL migration in your Supabase SQL editor:
-- copy file contents from:
-- supabase/migrations/20260219094000_mcp_api_keys.sql
- Ensure DB auth flags are enabled in
.env:
MCP_HTTP_REQUIRE_API_KEY=true
MCP_HTTP_USE_DB_KEYS=true
MCP_HTTP_ALLOW_ENV_KEY_FALLBACK=true
- Create an API key record:
npm run key:create -- --name claude-desktop --tier starter --daily-quota 1000 --minute-quota 60
This prints the raw api_key once. Save it securely and use it in MCP HTTP calls.
If the DB RPC is unavailable, fallback to MCP_HTTP_API_KEYS works only when MCP_HTTP_ALLOW_ENV_KEY_FALLBACK=true.
Concierge Unmet Request Backlog
Public concierge flows can log unsupported user intents to Supabase.
Run migration:
-- copy file contents from:
-- supabase/migrations/20260226_concierge_unmet_requests.sql
Then call MCP tool log_unmet_request when no good answer exists from available nightlife data.
VIP Booking Phase 1
VIP table booking submission and status tracking are backed by Supabase.
Run migration:
-- 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
Then call MCP tools:
create_vip_booking_requestget_vip_booking_statusget_vip_table_availability(read per-day table availability by venue/date range)get_vip_table_chart(read structured table chart with optional per-date status overlay and optionallayout_image_url)
Conversation policy for create_vip_booking_request:
- Confirm booking date/time in venue local time before submitting.
- Use dual-date confirmation wording, especially for late-night arrivals (
00:00-05:59). - Required confirmation template:
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?
- If the user gives a time like
2amwithout a day, ask:Do you mean 2:00 AM after Thursday night (Friday morning), or after Friday night (Saturday morning)?
- If the user changes day, regenerate confirmation before submission.
Ops-tier sessions also have internal queue tools:
list_vip_reservations(all outstanding reservations; default statuses:submitted,in_review,confirmed)list_vip_requests_for_alerting(due alerts only)mark_vip_request_alert_sentclaim_vip_request_after_ackupdate_vip_booking_status(setconfirmed/rejected/cancelledwith audit event)upsert_vip_venue_tables(write venue table definitions + chart coordinates + optional table notes + optionallayout_image_url)upsert_vip_table_availability(write per-date table statuses)upload_vip_table_chart_image(upload chart image to storage and attachlayout_image_urlto venue table metadata)
To discover bookable venues first, use:
search_venueswithvip_booking_supported_only=true- or
get_venue_infoand checkvip_booking_supported
For internal venue-booking workers, claim queue tasks via DB function:
public.claim_next_vip_agent_task(p_agent_id text)
VIP Ops Dashboard
Internal dashboard routes:
GET /ops/loginPOST /ops/loginPOST /ops/logoutGET /ops/vip-dashboard
Internal admin API routes (cookie-session protected):
GET /api/v1/admin/vip-bookingsGET /api/v1/admin/vip-bookings/:idPATCH /api/v1/admin/vip-bookings/:id
Required env vars:
VIP_DASHBOARD_ADMINS(comma-separatedusername:passwordpairs)
Optional env vars:
VIP_DASHBOARD_SESSION_TTL_MINUTES(default:720)VIP_DASHBOARD_SESSION_COOKIE_NAME(default:vip_dashboard_session)
Run
Stdio (local desktop clients):
npm run dev
Streamable HTTP:
npm run dev:http
For production build:
npm run build
npm start
For HTTP in production:
npm run start:http
Authenticated production smoke check:
NLT_API_KEY=... npm run smoke:prod:auth
Optional env overrides:
NLT_MCP_URL(default:https://api.nightlife.dev/mcp)NLT_REST_BASE_URL(default:https://api.nightlife.dev/api/v1)NLT_SMOKE_CITY(default:tokyo)
Debug web UI for recommendations:
MCP_ENABLE_RECOMMENDATIONS=true npm run dev:http
# open http://127.0.0.1:3000/debug/recommendations
Notes
- Date handling supports
tonight,this_weekend,YYYY-MM-DD, andYYYY-MM-DD/YYYY-MM-DD. get_recommendationsreturns up to 10 diverse modal slots with dynamic city-aware fallback.- Venue and performer tools include upcoming events snapshots.
log_unmet_requestwrites unresolved user asks topublic.concierge_unmet_requests.- VIP phase 1 writes booking submissions to
public.vip_booking_requestsand worker queue tasks topublic.vip_agent_tasks. - VIP inventory writes table definitions to
public.vip_venue_tablesand date-specific statuses topublic.vip_table_availability. search_venuesandget_venue_infoincludevip_booking_supportedso clients can show exactly which venues accept VIP booking submissions.vip_booking_supportedis sourced frompublic.venues.vip_booking_enabled(separate fromguest_list_enabled).create_vip_booking_requestonly accepts venues wherevip_booking_supported=true.- City handling is backed by
public.cities(slug, timezone, and service-day cutoff). - Supported top-level cities are environment-configurable (for example
tokyoandsan-francisco) while Tokyo can remain the default. - Stdio transport: no API key check.
- HTTP transport (
/mcp): API key required by default (MCP_HTTP_REQUIRE_API_KEY=true). - API key headers:
Authorization: Bearer <key>x-api-key: <key>
- HTTP responses include key tier/source and rate-limit headers when DB-backed auth is active:
X-API-Key-TierX-API-Key-SourceX-RateLimit-Daily-LimitX-RateLimit-Daily-RemainingX-RateLimit-Minute-LimitX-RateLimit-Minute-Remaining
- Health endpoint:
/health. - Debug page for manual tool testing:
/debug/recommendations. - Tool errors are returned as JSON text payloads in
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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。