Skip to main content
Glama
alcylu

Nightlife Search

by alcylu

log_unmet_request

Records user nightlife queries when no suitable events or venues are found, enabling follow-up analysis to improve search results.

Instructions

Log unmet user intent when no good nightlife answer is available, for product follow-up.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
channelNo
languageNo
cityNo
raw_queryYes
intentNo
suggested_filtersNo
user_hashNo

Implementation Reference

  • The core implementation of the log_unmet_request tool, which validates input and inserts the unmet request record into Supabase.
    export async function logUnmetRequest(
      supabase: SupabaseClient,
      input: LogUnmetRequestInput,
    ): Promise<UnmetRequestResult> {
      const rawQuery = String(input.raw_query || "").trim();
      if (!rawQuery) {
        throw new NightlifeError("INVALID_REQUEST", "raw_query cannot be blank.");
      }
    
      const payload = {
        channel: normalizeChannel(input.channel),
        language: normalizeLanguage(input.language),
        city: normalizeCity(input.city),
        raw_query: rawQuery.slice(0, 4000),
        normalized_intent: normalizeIntent(input.intent),
        suggested_filters: normalizeSuggestedFilters(input.suggested_filters),
        user_hash: normalizeUserHash(input.user_hash),
        status: "open",
      };
    
      const { data, error } = await supabase
        .from("concierge_unmet_requests")
        .insert(payload)
        .select("id,status,created_at")
        .single<UnmetRequestRow>();
    
      if (error || !data) {
        throw new NightlifeError("REQUEST_WRITE_FAILED", "Failed to log unmet request.", {
          cause: error?.message || "Unknown insert error",
        });
      }
    
      return {
        request_id: data.id,
        status: data.status,
        created_at: data.created_at,
      };
    }
  • Registration of the log_unmet_request tool with the MCP server, including input/output schema validation and wrapping in the runTool handler.
    export function registerRequestTools(server: McpServer, deps: ToolDeps): void {
      server.registerTool(
        "log_unmet_request",
        {
          description:
            "Log unmet user intent when no good nightlife answer is available, for product follow-up.",
          inputSchema: {
            channel: z.string().optional(),
            language: z.string().optional(),
            city: z.string().optional(),
            raw_query: z.string().min(1),
            intent: z.string().optional(),
            suggested_filters: z.record(z.string(), z.unknown()).optional(),
            user_hash: z.string().optional(),
          },
          outputSchema: unmetRequestOutputSchema,
        },
        async (args) => runTool(
          "log_unmet_request",
          unmetRequestOutputSchema,
          async () => logUnmetRequest(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