Skip to main content
Glama
alcylu

Nightlife Search

by alcylu

get_guest_list_entry_status

Check guest list entry status for nightlife events using entry ID or event ID with customer email.

Instructions

Check the status of a guest list entry. Provide either entry_id or event_id + customer_email.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
entry_idNo
event_idNo
customer_emailNo

Implementation Reference

  • The handler function that implements the logic to retrieve the guest list entry status, including DB lookups and formatting the output.
    export async function getGuestListEntryStatus(
      supabase: SupabaseClient,
      input: StatusInput,
    ): Promise<StatusOutput> {
      if (!input.entry_id && !(input.event_id && input.customer_email)) {
        throw new NightlifeError(
          "INVALID_REQUEST",
          "Must provide either entry_id or event_id + customer_email",
        );
      }
    
      let entryData: any = null;
    
      if (input.entry_id) {
        const { data, error } = await supabase
          .from("event_guest_list_entries")
          .select("id, email, name, group_size, created_at, event_day_id, venue_id, service_date")
          .eq("id", input.entry_id)
          .maybeSingle();
    
        if (error) {
          throw new NightlifeError("DB_QUERY_FAILED", `Failed to look up entry: ${error.message}`);
        }
        entryData = data;
      } else if (input.event_id && input.customer_email) {
        // Resolve event_id to event_day_id(s)
        const { data: eventDays } = await supabase
          .from("event_occurrence_days")
          .select("id")
          .eq("event_occurrence_id", input.event_id);
    
        const dayIds = eventDays?.map((d: any) => d.id) ?? [];
    
        if (dayIds.length > 0) {
          const { data, error } = await supabase
            .from("event_guest_list_entries")
            .select("id, email, name, group_size, created_at, event_day_id, venue_id, service_date")
            .eq("email", input.customer_email.toLowerCase())
            .in("event_day_id", dayIds)
            .order("created_at", { ascending: false })
            .limit(1)
            .maybeSingle();
    
          if (error) {
            throw new NightlifeError("DB_QUERY_FAILED", `Failed to look up entry: ${error.message}`);
          }
          entryData = data;
        }
      }
    
      if (!entryData) {
        throw new NightlifeError(
          "GUEST_LIST_ENTRY_NOT_FOUND",
          "Guest list entry not found",
        );
      }
    
      // Get event name if we have event_day_id
      let eventName: string | null = null;
      let eventDate: string | null = entryData.service_date;
    
      if (entryData.event_day_id) {
        const { data: eventDay } = await supabase
          .from("event_occurrence_days")
          .select(`
            service_date,
            event_occurrences!inner (
              events!inner (
                name_en
              )
            )
          `)
          .eq("id", entryData.event_day_id)
          .maybeSingle();
    
        if (eventDay) {
          eventName = (eventDay as any).event_occurrences?.events?.name_en ?? null;
          eventDate = eventDay.service_date;
        }
      }
    
      // Get guest list settings for benefit/instructions
      const settings = await loadGuestListSettings(
        supabase,
        entryData.event_day_id,
        entryData.venue_id,
      );
    
      return {
        entry_id: entryData.id,
        status: "confirmed",
        customer_name: entryData.name,
        party_size: entryData.group_size,
        event_name: eventName,
        event_date: eventDate,
        created_at: entryData.created_at,
        guest_list_benefit: settings?.benefit_en ?? null,
        door_instructions: settings?.door_instructions_en ?? null,
      };
    }
  • Input and output Zod schemas for the get_guest_list_entry_status tool.
    export const getGuestListEntryStatusInputSchema = {
      entry_id: z.string().optional(),
      event_id: z.string().optional(),
      customer_email: z.string().optional(),
    };
    
    export const getGuestListEntryStatusOutputSchema = z.object({
      entry_id: z.string(),
      status: z.enum(["confirmed", "cancelled"]),
      customer_name: z.string(),
      party_size: z.number(),
      event_name: z.string().nullable(),
      event_date: z.string().nullable(),
      created_at: z.string(),
      guest_list_benefit: z.string().nullable(),
      door_instructions: z.string().nullable(),
    });
  • Tool registration for get_guest_list_entry_status using the McpServer instance.
    server.registerTool(
      "get_guest_list_entry_status",
      {
        description:
          "Check the status of a guest list entry. Provide either entry_id or event_id + customer_email.",
        inputSchema: getGuestListEntryStatusInputSchema,
        outputSchema: getGuestListEntryStatusOutputSchema,
      },
      async (args) => runTool(
        "get_guest_list_entry_status",
        getGuestListEntryStatusOutputSchema,
        async () => getGuestListEntryStatus(deps.supabase, args),
      ),
    );

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