Skip to main content
Glama

nasa_eonet

Access NASA's Earth Observatory Natural Event Tracker to retrieve data on wildfires, volcanoes, and other natural events with filtering by category, date range, and status.

Instructions

Earth Observatory Natural Event Tracker - natural events data

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
categoryNoEvent category (wildfires, volcanoes, etc.)
daysNoNumber of days to look back
sourceNoData source
statusNoEvent status (open, closed)
limitNoMaximum number of events to return

Implementation Reference

  • The nasaEonetHandler function that executes the core logic of the 'nasa_eonet' tool. It queries NASA's EONET API for natural event data based on parameters like category, days, source, status, and limit, handles fallbacks for empty results, registers JSON data as resources, and returns success/error messages.
    export async function nasaEonetHandler(params: EonetParams) { try { const { category, days, source, status, limit } = params; // Build the endpoint path let endpointPath = '/v3/events'; const apiParams: Record<string, any> = {}; // Add query parameters - using more default values to ensure we get results if (days) apiParams.days = days; if (source) apiParams.source = source; if (status) apiParams.status = status; if (limit) apiParams.limit = limit; // If no status is provided, default to "all" to ensure we get some events if (!status) apiParams.status = "all"; // If no days parameter, default to 60 days to ensure we get more events if (!days) apiParams.days = 60; // If a category is specified, use the category-specific endpoint if (category) { endpointPath = `/v3/categories/${category}`; } // Use direct axios call with the EONET-specific base URL const response = await axios.get(`${EONET_API_BASE_URL}${endpointPath}`, { params: apiParams, timeout: 10000 // 10 second timeout }); // If we don't have any events, try again with broader parameters if (!response.data.events || response.data.events.length === 0) { // Reset to the main events endpoint for maximum results endpointPath = '/v3/events'; // Use broader parameters const broadParams = { status: 'all', // Get both open and closed events days: 90, // Look back further limit: limit || 50 // Increase the limit }; const broadResponse = await axios.get(`${EONET_API_BASE_URL}${endpointPath}`, { params: broadParams, timeout: 10000 }); // Register the response as a resource const resourceId = `nasa://eonet/events?days=${broadParams.days}&status=${broadParams.status}`; addResource(resourceId, { name: `EONET Events (${broadParams.days} days, ${broadParams.status} status)`, mimeType: 'application/json', text: JSON.stringify(broadResponse.data, null, 2) }); return { content: [{ type: "text", text: `Used broader search criteria due to no events found with original parameters. Found ${broadResponse.data.events?.length || 0} events.` }], isError: false }; } // Register the response as a resource const resourceParams = []; if (days) resourceParams.push(`days=${days}`); if (category) resourceParams.push(`category=${category}`); if (status) resourceParams.push(`status=${status}`); const resourceId = `nasa://eonet/events${category ? '/categories/' + category : ''}?${resourceParams.join('&')}`; addResource(resourceId, { name: `EONET Events${category ? ' (' + category + ')' : ''}`, mimeType: 'application/json', text: JSON.stringify(response.data, null, 2) }); // Return the original result return { content: [{ type: "text", text: `Found ${response.data.events?.length || 0} EONET events.` }], isError: false }; } catch (error: any) { console.error('Error in EONET handler:', error); return { isError: true, content: [{ type: "text", text: `Error: ${error.message || 'An unexpected error occurred'}` }] }; } }
  • Zod schema (EonetSchema) defining the input parameters for the nasa_eonet tool, exported as eonetParamsSchema.
    const EonetSchema = z.object({ category: z.string().optional(), days: z.number().int().positive().optional(), source: z.string().optional(), status: z.enum(['open', 'closed', 'all']).optional(), limit: z.number().int().positive().optional() });
  • Import of the nasaEonetHandler in the setup file, likely where tool registration occurs through module imports in the MCP architecture.
    import { nasaEonetHandler } from './nasa/eonet';
  • Export of the parameter schema and type for the nasa_eonet tool.
    export const eonetParamsSchema = EonetSchema; export type EonetParams = z.infer<typeof eonetParamsSchema>;

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/ProgramComputer/NASA-MCP-server'

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