Skip to main content
Glama

find_dining

Search for Disney park restaurants using filters like cuisine, meal period, price range, and reservation options to find dining locations matching specific preferences.

Instructions

Find dining locations at Disney parks with filters. Returns restaurant metadata including service type, meal periods, cuisine, price range, and reservation requirements. Use list_parks first to get valid destination and park IDs.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
destinationYesDestination ID: 'wdw' (Walt Disney World) or 'dlr' (Disneyland Resort)
parkIdNoFilter to a specific park by ID. Get park IDs from list_parks.
filtersNoOptional filters to narrow results

Implementation Reference

  • Main execution logic for the find_dining tool: validates destination, fetches dining data from DisneyFinderClient, applies user filters, formats output as JSON.
    export const handler: ToolHandler = async (args) => { return withTimeout( "find_dining", async () => { // Validate destination const destination = args.destination as string | undefined; if (!destination || !["wdw", "dlr"].includes(destination)) { return formatErrorResponse( new ValidationError("destination must be 'wdw' or 'dlr'", "destination", destination) ); } const parkId = args.parkId as string | undefined; const filters = (args.filters as Record<string, unknown>) ?? {}; try { const client = getDisneyFinderClient(); let dining = await client.getDining(destination as DestinationId, parkId); // Apply filters dining = applyFilters(dining, filters); return { content: [ { type: "text" as const, text: JSON.stringify( { destination, parkId: parkId ?? null, count: dining.length, dining: dining.map(formatDining), }, null, 2 ), }, ], }; } catch (error) { return formatErrorResponse(error); } }, TIMEOUTS.DEFAULT ); };
  • Tool definition including name, description, and detailed input schema for parameters like destination, parkId, and filters.
    export const definition: ToolDefinition = { name: "find_dining", description: "Find dining locations at Disney parks with filters. " + "Returns restaurant metadata including service type, meal periods, " + "cuisine, price range, and reservation requirements. " + "Use list_parks first to get valid destination and park IDs.", inputSchema: { type: "object" as const, properties: { destination: { type: "string", description: "Destination ID: 'wdw' (Walt Disney World) or 'dlr' (Disneyland Resort)", enum: ["wdw", "dlr"], }, parkId: { type: "string", description: "Filter to a specific park by ID. Get park IDs from list_parks.", }, filters: { type: "object", description: "Optional filters to narrow results", properties: { serviceType: { type: "string", description: "Filter by service type", enum: [ "table-service", "quick-service", "character-dining", "fine-signature-dining", "lounge", ], }, mealPeriod: { type: "string", description: "Filter to restaurants serving this meal", enum: ["breakfast", "lunch", "dinner", "snacks"], }, reservationsAccepted: { type: "boolean", description: "Only show restaurants that accept reservations", }, characterDining: { type: "boolean", description: "Only show character dining experiences", }, mobileOrder: { type: "boolean", description: "Only show restaurants with mobile ordering", }, }, }, }, required: ["destination"], }, };
  • Registers the find_dining tool (via dining.definition and dining.handler) in the central tools array used by registerTools function.
    const tools: ToolEntry[] = [ { definition: destinations.definition, handler: destinations.handler }, { definition: attractions.definition, handler: attractions.handler }, { definition: dining.definition, handler: dining.handler }, { definition: search.definition, handler: search.handler }, { definition: discover.definition, handler: discover.handler }, { definition: status.definition, handler: status.handler }, { definition: sync.definition, handler: sync.handler }, ];
  • Helper function to filter the dining list based on provided filter criteria such as serviceType, mealPeriod, etc.
    function applyFilters(dining: DisneyDining[], filters: Record<string, unknown>): DisneyDining[] { return dining.filter((d) => { // Service type filter if (filters.serviceType) { if (d.serviceType !== filters.serviceType) return false; } // Meal period filter if (filters.mealPeriod) { if (!d.mealPeriods.includes(filters.mealPeriod as MealPeriod)) return false; } // Reservations filter if (filters.reservationsAccepted === true) { if (!d.reservationsAccepted) return false; } // Character dining filter if (filters.characterDining === true) { if (!d.characterDining) return false; } // Mobile order filter if (filters.mobileOrder === true) { if (!d.mobileOrder) return false; } return true; }); }
  • Helper function to format individual dining entries for the response, mapping raw data to a clean output structure.
    function formatDining(d: DisneyDining): { id: string; name: string; slug: string | null; park: string | null; location: { latitude: number; longitude: number } | null; url: string | null; metadata: { serviceType: string | null; priceRange: string | null; cuisine: string[]; mealPeriods: string[]; }; features: { reservationsAccepted: boolean; reservationsRequired: boolean; mobileOrder: boolean; characterDining: boolean; disneyDiningPlan: boolean; }; } { return { id: d.id, name: d.name, slug: d.slug, park: d.parkName, location: d.location, url: d.url, metadata: { serviceType: d.serviceType, priceRange: d.priceRange?.symbol ?? null, cuisine: d.cuisineTypes, mealPeriods: d.mealPeriods, }, features: { reservationsAccepted: d.reservationsAccepted, reservationsRequired: d.reservationsRequired, mobileOrder: d.mobileOrder, characterDining: d.characterDining, disneyDiningPlan: d.disneyDiningPlan, }, }; }

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/cameronsjo/mouse-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server