getEvents
Find upcoming events at U.S. National Parks by filtering by park, date range, or search terms to discover activities and programs.
Instructions
Find upcoming events at parks
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| parkCode | No | Filter events by park code (e.g., "yose" for Yosemite). Multiple parks can be comma-separated (e.g., "yose,grca"). | |
| limit | No | Maximum number of events to return (default: 10, max: 50) | |
| start | No | Start position for results (useful for pagination) | |
| dateStart | No | Start date for filtering events (format: YYYY-MM-DD) | |
| dateEnd | No | End date for filtering events (format: YYYY-MM-DD) | |
| q | No | Search term to filter events by title or description |
Implementation Reference
- src/handlers/getEvents.ts:6-44 (handler)The main handler function getEventsHandler that implements the core tool logic: processes arguments, fetches events from NPS API, formats and groups data by park, returns JSON response.
export async function getEventsHandler(args: z.infer<typeof GetEventsSchema>) { // Set default limit if not provided or if it exceeds maximum const limit = args.limit ? Math.min(args.limit, 50) : 10; // Format the request parameters const requestParams = { limit, ...args }; const response = await npsApiClient.getEvents(requestParams); // Format the response for better readability by the AI const formattedEvents = formatEventData(response.data); // Group events by park code for better organization const eventsByPark: { [key: string]: any[] } = {}; formattedEvents.forEach(event => { if (!eventsByPark[event.parkCode]) { eventsByPark[event.parkCode] = []; } eventsByPark[event.parkCode].push(event); }); const result = { total: parseInt(response.total), limit: parseInt(response.limit), start: parseInt(response.start), events: formattedEvents, eventsByPark: eventsByPark }; return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } - src/schemas.ts:42-49 (schema)Zod input schema for the getEvents tool defining optional parameters: parkCode, limit, start, dateStart, dateEnd, q.
export const GetEventsSchema = z.object({ parkCode: z.string().optional().describe('Filter events by park code (e.g., "yose" for Yosemite). Multiple parks can be comma-separated (e.g., "yose,grca").'), limit: z.number().optional().describe('Maximum number of events to return (default: 10, max: 50)'), start: z.number().optional().describe('Start position for results (useful for pagination)'), dateStart: z.string().optional().describe('Start date for filtering events (format: YYYY-MM-DD)'), dateEnd: z.string().optional().describe('End date for filtering events (format: YYYY-MM-DD)'), q: z.string().optional().describe('Search term to filter events by title or description') }); - src/server.ts:69-72 (registration)Registration of the getEvents tool in the ListToolsRequestHandler response, specifying name, description, and input schema.
name: "getEvents", description: "Find upcoming events at parks", inputSchema: zodToJsonSchema(GetEventsSchema), }, - src/server.ts:110-113 (registration)Execution handler in CallToolRequestHandler switch statement: parses arguments using GetEventsSchema and delegates to getEventsHandler.
case "getEvents": { const args = GetEventsSchema.parse(request.params.arguments); return await getEventsHandler(args); } - src/utils/npsApiClient.ts:460-468 (helper)NPS API client helper method that fetches events data from the '/events' NPS API endpoint.
async getEvents(params: EventQueryParams = {}): Promise<NPSResponse<EventData>> { try { const response = await this.api.get('/events', { params }); return response.data; } catch (error) { console.error('Error fetching events data:', error); throw error; } }