Nightlife Search
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: touch-grass-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 является источником истины по архитектуре.
Available Tools
17 toolscancel_vip_booking_requestA
Cancel a VIP booking request. Requires booking ID plus customer email and phone to verify ownership. Works for bookings in submitted, in_review, or confirmed status.
| Name | Required | Description | Default |
|---|---|---|---|
| booking_request_id | Yes | ||
| customer_email | Yes | ||
| customer_phone | Yes | ||
| cancellation_reason | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| booking_request_id | Yes | |
| status | Yes | |
| last_updated_at | Yes | |
| status_message | Yes | |
| latest_note | Yes | |
| history | Yes | |
| deposit_status | Yes | |
| deposit_amount_jpy | Yes | |
| deposit_payment_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions ownership verification and valid statuses, but does not disclose other behavioral traits such as whether cancellation is irreversible, if it triggers notifications, or what happens on failure. Some transparency is present but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, no redundancy. It front-loads the primary action and prerequisites, then adds a crucial status constraint. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, no annotations, output schema exists), the description covers core usage and constraints. It lacks details on error handling or post-cancellation effects, but is sufficient for an agent to use it correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It clarifies that booking_request_id, customer_email, and customer_phone are for verification, but cancellation_reason is only mentioned as an optional field without additional context. The description partially compensates for the schema gap but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Cancel a VIP booking request') and specifies the resource. It also distinguishes from sibling tools like create_vip_booking_request by naming the reverse operation and listing prerequisites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: requires booking ID plus customer email and phone for ownership verification, and works only for submitted, in_review, or confirmed statuses. It does not explicitly mention alternatives or exclusions, but the status restriction gives strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_vip_booking_requestA
Create a VIP table booking request and send it directly to the venue booking desk. The venue must have vip_booking_supported=true. Before calling this tool, always confirm booking date and arrival time in venue local time. For arrivals from 00:00 to 05:59, use the 'night + actual day' format to avoid midnight confusion. Required format: '[Night] night, [time] ([Actual Day] [time])' — e.g., 'Friday night, 2am (Saturday 2am)'. Example confirmation: 'So you're coming Friday night, 2am (Saturday 2am), table for 4 at Zouk?' If the user gives a time like 2am without a day, ask: 'Do you mean Thursday night, 2am (Friday morning), or Friday night, 2am (Saturday morning)?' If the user changes the requested day, regenerate confirmation before calling this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| venue_id | Yes | ||
| booking_date | Yes | ||
| arrival_time | Yes | ||
| party_size | Yes | ||
| customer_name | Yes | ||
| customer_email | Yes | ||
| customer_phone | Yes | ||
| preferred_table_code | No | ||
| special_requests | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| booking_request_id | Yes | |
| status | Yes | |
| created_at | Yes | |
| message | Yes | |
| preferred_table_code | Yes | |
| min_spend | Yes | |
| min_spend_currency | Yes | |
| table_warning | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool sends the request directly to the venue booking desk, requires a venue flag, and includes instructions for confirmation. However, it does not mention side effects like irreversible actions, confirmation emails, or failure modes. Still, it adds significant context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately lengthy but well-structured with examples and step-by-step instructions. It front-loads the core purpose and then provides essential usage details. Every sentence adds value, though it could be slightly shortened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, no schema descriptions, and an output schema not referenced), the description covers key usage context but omits parameter details and return values. It is adequate for an agent if the schema is well-named, but not fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 9 parameters with 0% description coverage. The description only indirectly explains booking_date, arrival_time, and party_size through format examples. Other required parameters like customer_name, customer_email, customer_phone, and venue_id are not explained. This is insufficient compensation for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a VIP table booking request and sends it directly to the venue booking desk. It specifies the prerequisite (venue must have vip_booking_supported=true) and provides a distinct action from siblings like cancel_vip_booking_request. The verb 'create' combined with resource 'VIP booking request' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: confirm booking date and arrival time in venue local time before calling, handle midnight confusion with a specific format, and regenerate confirmation if the day changes. It does not explicitly state when not to use or name alternatives, but the context is clear for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_detailsC
Get full details for a specific event occurrence ID (UUID).
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| event_id | Yes | |
| name | Yes | |
| date | Yes | |
| start_time | Yes | |
| end_time | Yes | |
| service_date | Yes | |
| venue | Yes | |
| lineup | Yes | |
| genres | Yes | |
| price | Yes | |
| flyer_url | Yes | |
| guest_list_status | Yes | |
| nlt_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states the tool gets full details but does not mention read-only nature, authentication, rate limits, or return format. This is insufficient for a tool with zero annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no extraneous information. It could potentially include a brief note on output or usage, but it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (single parameter, output schema present), the description is minimally adequate. However, it lacks context about what 'full details' includes, prerequisites, or any related work needed before calling this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter event_id is described as a UUID in the tool description, but the schema has 0% coverage (no description in schema). The description adds minimal meaning beyond the name; no example or guidance on obtaining the ID is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (get full details) and resource (event occurrence), specifying the identifier type (UUID). However, it does not differentiate from sibling tools like search_events or get_performer_info, which could be confused.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool versus alternatives. The description implies usage for a specific event ID but lacks explicit context, exclusions, or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guest_list_entry_statusA
Check the status of a guest list entry. Provide either entry_id or event_id + customer_email.
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | No | ||
| event_id | No | ||
| customer_email | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| entry_id | Yes | |
| status | Yes | |
| customer_name | Yes | |
| event_name | Yes | |
| event_date | Yes | |
| created_at | Yes | |
| guest_list_benefit | Yes | |
| door_instructions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
In the absence of annotations, the description carries the full burden but only conveys a read operation ('Check'). It does not detail error cases or behavior when both lookup methods are provided, but for a simple check operation this is mostly sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the purpose, the second provides exact usage instructions. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has an output schema (handling return values) and is a simple read operation, the description covers the main invocation logic. It could mention idempotency or lack of side effects, but the 'Check' verb implies read-only.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds critical relational context between parameters ('either ... or ...'), which is not present in the schema. However, it does not describe individual parameter formats or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and resource ('status of a guest list entry'), clearly distinguishing it from sibling tools like 'submit_to_guest_list' (creation) and 'cancel_vip_booking_request' (cancellation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the two valid parameter combinations ('Provide either entry_id or event_id + customer_email'), guiding the agent on how to invoke the tool correctly without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_performer_infoA
Get performer details by performer ID, including social links and upcoming events snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| performer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| performer_id | Yes | |
| name | Yes | |
| slug | Yes | |
| bio | Yes | |
| follower_count | Yes | |
| ranking_score | Yes | |
| genres | Yes | |
| image_url | Yes | |
| social_links | Yes | |
| upcoming_events | Yes | |
| nlt_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It correctly indicates this is a read operation returning performer details, social links, and upcoming events. However, it does not disclose any additional behavioral traits such as authentication needs, error handling, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that is front-loaded with the core purpose and includes no extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, read-only), the description adequately covers the purpose and included data. The existence of an output schema covers return values, so the description is sufficiently complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only mentions 'by performer ID' without clarifying the format, length, or pattern of the parameter. This adds marginal value beyond the parameter name, failing to compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and a clear resource 'performer details', and explicitly mentions the included elements: social links and upcoming events snapshot. This clearly distinguishes it from sibling tools like search_performers and get_event_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for fetching details by a specific ID, but there is no explicit guidance on when to use this tool versus alternatives like search_performers. No exclusions or context for usage are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tonightB
Get tonight's nightlife events and open VIP venues. Always check vip_venues_open — VIP clubs are open even without listed events.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | tokyo | |
| genre | No | ||
| area | No | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| date_filter | Yes | |
| events | Yes | |
| vip_venues_open | Yes | |
| unavailable_city | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fails to disclose behavioral traits such as read-only nature, authentication requirements, or rate limits. It only states the operation ('Get'), which implies a read, but offers no additional safety or side-effect information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise, using two sentences to convey purpose and a key usage note. It is front-loaded with the primary function and avoids any redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having a complex input schema (5 optional parameters) and an output schema, the description provides minimal context. It does not explain pagination (limit/offset), filtering (genre/area), or output structure, leaving the agent under-informed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 5 parameters with 0% description coverage, and the description provides no explanation or guidance on any parameter. The user must infer the meaning of city, genre, area, limit, and offset from context, making the tool difficult to invoke correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves 'tonight's nightlife events and open VIP venues', using the verb 'Get' and specifying the resource. It distinguishes from sibling tools like search_events and get_event_details by focusing on the 'tonight' scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a usage hint ('Always check vip_venues_open — VIP clubs are open even without listed events') but lacks explicit guidance on when to use this tool versus alternatives like search_events. It implies context for VIP venues but does not specify exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_venue_infoB
Get full details for a specific venue ID, including upcoming events and VIP booking support.
| Name | Required | Description | Default |
|---|---|---|---|
| venue_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| venue_id | Yes | |
| name | Yes | |
| area | Yes | |
| address | Yes | |
| website | Yes | |
| image_url | Yes | |
| vip_booking_supported | Yes | |
| sns_instagram | Yes | |
| sns_tiktok | Yes | |
| sns_x | Yes | |
| sns_youtube | Yes | |
| guest_list_enabled | Yes | |
| upcoming_event_count | Yes | |
| upcoming_events | Yes | |
| nlt_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It minimally discloses that the tool returns details including events and VIP support, but fails to mention read-only nature, authentication needs, or behavior for invalid IDs. Lacks depth for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core purpose. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter) and presence of an output schema, the description is minimally adequate. However, it does not mention what happens if venue_id is invalid or other edge-case behaviors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should compensate but does not. It only says 'specific venue ID' without explaining format, length, or any constraints beyond the schema's minLength. Adds little value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'full details for a specific venue ID'. It also specifies included content like upcoming events and VIP booking support, which distinguishes it from sibling tools like get_event_details or search_venues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool should be used when one has a specific venue ID, but it does not explicitly state when to use it versus alternatives (e.g., search_venues) or provide exclusions. No guidance on when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vip_booking_statusB
Fetch VIP booking status from the venue booking workflow. Requires booking request ID and matching customer email or phone.
| Name | Required | Description | Default |
|---|---|---|---|
| booking_request_id | Yes | ||
| customer_email | No | ||
| customer_phone | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| booking_request_id | Yes | |
| status | Yes | |
| last_updated_at | Yes | |
| status_message | Yes | |
| latest_note | Yes | |
| history | Yes | |
| deposit_status | Yes | |
| deposit_amount_jpy | Yes | |
| deposit_payment_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully convey behavior. It indicates a read operation (fetch) but lacks details on error handling, authorization beyond field matching, rate limits, or side effects. The minimal information leaves ambiguity about what happens on mismatches or missing data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loading the primary purpose and following with key requirement. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to explain return values. It covers basic purpose and one requirement, but omits guidance on common error cases or how to interpret responses. For a simple fetch, it is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that booking_request_id is required and customer_email/phone are needed for matching, adding context beyond the schema. However, it does not clarify which optional field must be provided or format requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches VIP booking status from the venue booking workflow, specifying the resource and action. It distinguishes from sibling tools like create or cancel, but does not explicitly differentiate from other get tools like get_guest_list_entry_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions required fields but provides no guidance on when to use this tool versus alternatives. It does not state scenarios where this tool is appropriate or not, nor does it reference sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vip_pricingA
Get VIP pricing information for a venue. Returns honest weekday and weekend minimum spend ranges, zone summaries, table chart image URL, and booking affordance.
WHEN TO CALL: When a user asks about VIP tables, VIP pricing, bottle service costs, minimum spend, or table reservations at a specific venue.
WHAT TO DO AFTER:
Present pricing conversationally ("Weekday minimums start around ¥100K, weekends from ¥200K")
Show table chart URL as a layout reference only — do not infer availability from the image
If booking_supported is true and user is interested, offer to submit an inquiry via create_vip_booking_request
Do NOT suggest specific table codes unless the user asks
If busy_night is true, mention the event name and that demand may be higher on that night
When pricing_approximate is true, use hedging language ("around", "approximately") rather than stating exact figures
When venue_open is false, the venue is closed on that specific date but general pricing ranges for open nights are still included. Present the open nights and pricing to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| venue_id | Yes | ||
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| venue_id | Yes | |
| venue_name | Yes | |
| venue_open | Yes | |
| venue_closed_message | Yes | |
| pricing_configured | Yes | |
| pricing_not_configured_message | Yes | |
| weekday_min_spend | Yes | |
| weekend_min_spend | Yes | |
| currency | Yes | |
| zones | Yes | |
| layout_image_url | Yes | |
| booking_supported | Yes | |
| booking_note | Yes | |
| generated_at | Yes | |
| service_date | Yes | |
| event_pricing_note | Yes | |
| event_name | Yes | |
| busy_night | Yes | |
| pricing_approximate | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It covers important behaviors: handling venue_open=false (returns open nights' pricing), pricing_approximate flag (use hedging language), and busy_night (mention event). Missing details on authentication, rate limits, or error cases, but adequate for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and includes clear 'WHEN TO CALL' and 'WHAT TO DO AFTER' sections. It is somewhat verbose but well-structured. Every section serves a purpose, though some post-call guidance could be considered agent behavior rather than tool definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not shown), the description does not need to explain return values but still summarizes them. It covers edge cases (venue closed, approximate pricing, busy night). Complete enough for a pricing retrieval tool, though missing pagination or request limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain the parameters (venue_id, date) beyond the context. It does not specify date format, requiredness, or how venue_id is obtained. The description focuses on output and post-call actions rather than input semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'VIP pricing for a venue', and lists specific returns (minimum spend ranges, zone summaries, table chart URL, booking affordance). This distinguishes it from sibling tools like create_vip_booking_request or get_vip_booking_status, which handle booking operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'WHEN TO CALL' section explicitly lists scenarios (VIP tables, pricing, bottle service, etc.), providing clear context. However, it does not explicitly state when not to use this tool or suggest alternatives, though the sibling list implies distinctions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_areasA
List distinct area/neighborhood names for a given city. Use this to discover valid area filters.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City slug (defaults to tokyo) |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| areas | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only states the function without detailing ordering, pagination, error handling, or side effects. This is insufficient for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences that front-load the purpose. Every word contributes, and there is no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple tool with one optional parameter and an output schema. However, it omits mention of the default city ('tokyo') and does not hint at the output structure or any filtering behavior, which would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameter and description provided. The description does not add meaning beyond the schema; it simply reiterates 'for a given city'. Baseline of 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List distinct area/neighborhood names for a given city', specifying the verb 'list' and the resource 'area/neighborhood names'. It distinguishes from sibling tools like list_cities, which lists cities. This is a specific and helpful purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use this to discover valid area filters', indicating when to use the tool. However, it does not provide exclusions or alternatives, such as noting that list_cities should be used for city-level queries. Guidance is minimal but present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_citiesA
List all available cities with metadata. Use this to discover valid city slugs before calling other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| cities | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses that the tool lists all cities with metadata, which implies a read-only operation. However, it does not elaborate on response size or pagination, though the output schema may cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, perfectly front-loaded. The first sentence states the action, the second adds contextual usage. No redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an output schema exists, and the tool is a simple list, the description is complete. It covers purpose, usage, and return type implicitly. No missing elements for this low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so baseline is 4. The description adds context that it returns all cities with metadata, which is useful beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all available cities with metadata' as a specific verb-resource combination. It differentiates from siblings like list_areas by establishing this tool as a prerequisite for discovering city slugs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use this to discover valid city slugs before calling other tools.' This provides clear when-to-use guidance and implies it's a prerequisite, making it easy for the agent to sequence correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_genresA
List all available genres. Use this to discover valid genre names before filtering events or venues.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| genres | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description implies a read-only, non-destructive operation by stating 'list all available genres.' This is adequate for a simple list tool, though it could explicitly mention safety (e.g., no side effects).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence states the purpose, the second gives practical usage advice. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and a simple output (presumably a list of strings), the description is complete. It covers what the tool does and why to use it. No additional details are necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist in the input schema, and schema description coverage is 100%. The baseline for zero parameters is 4, and the description adds no param info, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('list all available genres') and the resource ('genres'). It distinguishes from sibling tools like search_events or search_venues by focusing on genre discovery, not filtering or event retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using this tool before filtering events or venues, providing clear context. While it doesn't list what not to use or alternatives, the guidance is sufficient for this simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_unmet_requestB
Log unmet user intent when no good nightlife answer is available, for product follow-up.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | ||
| language | No | ||
| city | No | ||
| raw_query | Yes | ||
| intent | No | ||
| suggested_filters | No | ||
| user_hash | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| request_id | Yes | |
| status | Yes | |
| created_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only mentions logging without detailing side effects, data retention, or privacy implications, leaving behavioral traits vague.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, effectively communicating the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters including a nested object and an output schema, the description provides insufficient context about parameter meanings and return values, making it incomplete for complex use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description adds no explanation for any of the 7 parameters, leaving the agent without guidance on how to populate them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool logs unmet user intent when no good nightlife answer is available, distinguishing it from siblings which handle bookings, events, and venue information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to use (when no good nightlife answer), implying not to use when an answer exists, but does not explicitly state alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsA
Search nightlife events. Returns events plus vip_venues_open showing VIP clubs open on the queried date even without listed events. Always check vip_venues_open before concluding nothing is happening.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | tokyo | |
| date | No | ||
| genre | No | ||
| area | No | ||
| query | No | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| date_filter | Yes | |
| events | Yes | |
| vip_venues_open | Yes | |
| unavailable_city | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the response includes vip_venues_open even when no events are found, and implies a read-only operation. However, it does not mention pagination, rate limits, or authentication requirements, which are moderately important for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no extraneous information. It is front-loaded with the primary purpose and immediately adds a crucial behavioral note. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (7 parameters, an output schema, and multiple siblings), the description covers the unique return behavior (vip_venues_open) but omits parameter explanations and overall search semantics. While the output schema may fill some gaps, the description alone is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description only indirectly references the 'date' parameter by mentioning 'queried date'. It fails to explain the other 6 parameters (city, genre, area, query, limit, offset), leaving the agent to infer their meaning from names alone. This is insufficient compensation for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search' and the resource 'nightlife events', and distinguishes itself from siblings like search_venues and search_performers by highlighting a unique feature (vip_venues_open). It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to 'always check vip_venues_open before concluding nothing is happening', which is a clear usage guideline. However, it does not explicitly mention when not to use this tool or compare it with alternatives like get_tonight or search_venues, missing an opportunity for fuller guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_performersB
Search performers by city/date window with optional genre and text query filters.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | tokyo | |
| date | No | ||
| genre | No | ||
| query | No | ||
| sort_by | No | popularity | |
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| date_filter | Yes | |
| performers | Yes | |
| unavailable_city | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must compensate. It only mentions 'search' without disclosing pagination behavior, rate limits, or any side effects. The output schema exists but is not referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action and filters without extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters and no annotations, the description fails to address pagination (limit/offset), sorting options (enum), or required fields, leaving the agent uninformed about essential usage details. The output schema partially compensates but is not explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description adds minimal parameter context beyond the schema (e.g., 'optional genre and text query filters'). It does not explain the meaning or constraints of parameters like sort_by, limit, or offset, despite having 7 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches performers with specific filters (city, date window, optional genre, query), distinguishing it from sibling tools like search_events or search_venues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching performers but provides no explicit guidance on when to use this tool versus alternatives like search_events or list_cities, nor does it state limitations or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_venuesB
Search nightlife venues by city/date window and optional area, genre, text query, and VIP booking support.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | tokyo | |
| date | No | ||
| area | No | ||
| genre | No | ||
| query | No | ||
| vip_booking_supported_only | No | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| date_filter | Yes | |
| venues | Yes | |
| unavailable_city | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose behavioral traits such as pagination behavior (though 'limit' and 'offset' are in schema), rate limits, authentication requirements, or how results are ordered. The term 'search' is vague—does it support partial matches, exact matches, or full-text?
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence of 16 words. It front-loads the core action and lists essential filters efficiently. No redundant words or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, no annotations, and an output schema exists, the description is too minimal. It does not mention default behavior (e.g., city defaults to 'tokyo', limit 10), date format requirements, or result ordering. The presence of an output schema does not excuse the lack of contextual detail about the search behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should add meaning. It lists parameter names (city, date, area, genre, query, vip_booking_supported_only) but does not explain their semantics beyond the name. For instance, 'date' format is unspecified, 'query' is ambiguous (text in venue name?), and 'vip_booking_supported_only' is self-explanatory but not elaborated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search', the resource 'nightlife venues', and lists key parameters (city, date, area, genre, query, VIP booking). It distinguishes this tool from sibling tools like 'search_events' and 'search_performers' by specifying the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any exclusions, prerequisites, or when not to use it. For example, it does not differentiate from 'search_events' in terms of typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_to_guest_listC
Submit a guest list entry for an event or venue. Provide either event_id or venue_id + service_date. Returns confirmation with door instructions and guest list benefits if available.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | No | ||
| venue_id | No | ||
| service_date | No | ||
| customer_name | Yes | ||
| customer_email | Yes | ||
| customer_phone | No | ||
| messaging_channel | No | ||
| messaging_handle | No | ||
| language | No | en | |
| source | No | concierge |
Output Schema
| Name | Required | Description |
|---|---|---|
| entry_id | Yes | |
| status | Yes | |
| event_name | Yes | |
| event_date | Yes | |
| message | Yes | |
| guest_list_benefit | Yes | |
| door_instructions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It confirms the operation is a submission (likely a write), but does not mention side effects (e.g., overwriting existing entries), required authentication, rate limits, or idempotency. The description is insufficient for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences. It front-loads the primary purpose and conditional logic. However, it could benefit from a slightly more structured format (e.g., listing key points) to improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, 2 required, no annotations), the description is too sparse. It doesn't cover expected input formats, validation rules, or what happens on error. The presence of an output schema partially compensates, but the description fails to provide enough context for reliable tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should clarify parameter meanings. It only explains the conditional parameters (event_id, venue_id, service_date). Other important parameters like messaging_channel, source, and language are undocumented, leaving the agent to guess their purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Submit a guest list entry') and the resource ('event or venue'), and specifies that the tool returns confirmation, door instructions, and benefits. However, it does not explicitly differentiate from sibling tools like create_vip_booking_request or get_guest_list_entry_status, which could cause confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage condition: 'Provide either event_id or venue_id + service_date.' This helps the agent select the correct parameters. However, it lacks guidance on when to use this tool versus alternatives like create_vip_booking_request, and does not mention any prerequisites or error conditions.
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.
4 tool updates
v0.3.0- Changed
get_guest_list_entry_status2 fields changed- removed
Output schema / properties / party_sizeRemoved value: -{ - "type": "number" -} - changed
Output schema / requiredPrevious value: -[ - "entry_id", - "status", - "customer_name", - "party_size", - "event_name", - "event_date", - "created_at", - "guest_list_benefit", - "door_instructions" -]New value: +[ + "entry_id", + "status", + "customer_name", + "event_name", + "event_date", + "created_at", + "guest_list_benefit", + "door_instructions" +]
- Changed
get_tonight2 fields changed- added
Output schema / properties / vip_venues_openAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "area": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "type": "string" + }, + "hours": { + "type": "string" + }, + "min_spend": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "nlt_url": { + "type": "string" + }, + "venue_id": { + "type": "string" + } + }, + "required": [ + "venue_id", + "name", + "area", + "hours", + "min_spend", + "currency", + "nlt_url" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "city", - "date_filter", - "events", - "unavailable_city" -]New value: +[ + "city", + "date_filter", + "events", + "vip_venues_open", + "unavailable_city" +]
- Changed
search_events2 fields changed- added
Output schema / properties / vip_venues_openAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "area": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "type": "string" + }, + "hours": { + "type": "string" + }, + "min_spend": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "nlt_url": { + "type": "string" + }, + "venue_id": { + "type": "string" + } + }, + "required": [ + "venue_id", + "name", + "area", + "hours", + "min_spend", + "currency", + "nlt_url" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "city", - "date_filter", - "events", - "unavailable_city" -]New value: +[ + "city", + "date_filter", + "events", + "vip_venues_open", + "unavailable_city" +]
- Changed
submit_to_guest_list1 field changed- removed
Input schema / properties / party_sizeRemoved value: -{ - "default": 1, - "maximum": 20, - "minimum": 1, - "type": "integer" -}
17 tool updates
- First observed
cancel_vip_booking_request - First observed
create_vip_booking_request - First observed
get_event_details - First observed
get_guest_list_entry_status - First observed
get_performer_info - First observed
get_tonight - First observed
get_venue_info - First observed
get_vip_booking_status - First observed
get_vip_pricing - First observed
list_areas - First observed
list_cities - First observed
list_genres - First observed
log_unmet_request - First observed
search_events - First observed
search_performers - First observed
search_venues - First observed
submit_to_guest_list
TDQS
Scored across 17 tools
Each tool targets a distinct entity or action (e.g., events, venues, performers, VIP bookings, guest lists, metadata). No two tools serve overlapping purposes, and descriptions clearly differentiate them.
All tools follow verb_noun snake_case pattern (get_, list_, search_, create_, cancel_, submit_, log_). Convention is consistent across all tools.
17 tools cover the full scope of nightlife search and booking (discovery, details, VIP requests, guest lists, logging). Each tool serves a necessary function without bloat.
The set covers discovery (cities, areas, genres, search), details (events, venues, performers), VIP booking lifecycle (pricing, create, cancel, status), guest list (submit, status), and fallback logging. No obvious gaps for the intended use case.
Maintenance
Related MCP Connectors
Search local events, follow artists and interests, get weekend recommendations and change alerts
Live-concert discovery: 44,000+ upcoming concerts worldwide by city, artist, genre or festival.
What's on in any city: live, ranked concerts, sport, festivals, nightlife and culture.
Search live events in 60+ countries, plan a night out, and demand artists to tour your city.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables users to search for events, performers, and venues through the SeatGeek API. Provides event recommendations, detailed venue seating information, and performer discovery capabilities for ticketed entertainment events.453 npm3MIT
- AlicenseNot gradedqualityDmaintenancePreference-aware events discovery MCP server that aggregates events, restaurants, and cultural activities across multiple sources and re-ranks them against your personal taste profile to surface things you'd actually want to do.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying electronic/dance music events from 19hz.info by region, with tools to list available regions and retrieve events data.320 npmMIT
- FlicenseNot gradedqualityDmaintenanceLive-concert discovery MCP server: search concerts, artist tour dates, festivals and shows by city. Gives AI assistants real-time access to Gigora's global live-music data.-