scientific_data
Retrieve real-time scientific data: earthquakes, air quality, solar events, and NASA imagery. Supports geographic filtering by location and date range.
Instructions
Fetch real-time scientific data from major public APIs. Datasets: earthquakes (USGS), air_quality (OpenAQ), solar_events (NASA DONKI), nasa_apod. Supports geographic filtering by lat/lon/radius. Returns structured, agent-ready data.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Scientific dataset to retrieve | |
| location | No | Location for spatially-filtered queries (city name, lat/lon, or country code) | |
| latitude | No | Latitude for geographic queries | |
| longitude | No | Longitude for geographic queries | |
| radius_km | No | Search radius in km around lat/lon (default: 500) | |
| date_from | No | Start date YYYY-MM-DD (default: 7 days ago) | |
| date_to | No | End date YYYY-MM-DD (default: today) | |
| min_magnitude | No | Minimum earthquake magnitude (for earthquakes dataset) | |
| max_results | No | Maximum results to return (default: 10) |
Implementation Reference
- tools/scientific_data.py:282-300 (handler)Main async handler function for the scientific_data tool. Dispatches to internal fetchers based on the 'dataset' parameter (earthquakes, solar_events, nasa_apod, air_quality). Returns structured JSON responses or error dicts.
async def scientific_data_handler(arguments: dict) -> dict: dataset = arguments.get("dataset", "") if not dataset: return {"error": "dataset parameter is required"} async with aiohttp.ClientSession() as session: if dataset == "earthquakes": return await _fetch_earthquakes(session, arguments) elif dataset == "solar_events": return await _fetch_solar_events(session, arguments) elif dataset == "nasa_apod": return await _fetch_nasa_apod(session, arguments) elif dataset == "air_quality": return await _fetch_air_quality(session, arguments) else: return {"error": f"Unknown dataset: {dataset}", "available_datasets": [ "earthquakes", "air_quality", "solar_events", "nasa_apod" ]} - tools/scientific_data.py:50-89 (schema)Input schema defining the tool's parameters: dataset (enum), location, latitude, longitude, radius_km, date_from, date_to, min_magnitude, max_results. The 'dataset' field is required.
TOOL_SCHEMA = { "type": "object", "properties": { "dataset": { "type": "string", "enum": [ "earthquakes", "air_quality", "solar_events", "nasa_apod", "climate_normals", ], "description": "Scientific dataset to retrieve", }, "location": { "type": "string", "description": "Location for spatially-filtered queries (city name, lat/lon, or country code)", }, "latitude": {"type": "number", "description": "Latitude for geographic queries"}, "longitude": {"type": "number", "description": "Longitude for geographic queries"}, "radius_km": { "type": "number", "description": "Search radius in km around lat/lon (default: 500)", "default": 500, }, "date_from": {"type": "string", "description": "Start date YYYY-MM-DD (default: 7 days ago)"}, "date_to": {"type": "string", "description": "End date YYYY-MM-DD (default: today)"}, "min_magnitude": { "type": "number", "description": "Minimum earthquake magnitude (for earthquakes dataset)", "default": 4.0, }, "max_results": { "type": "integer", "description": "Maximum results to return (default: 10)", "default": 10, }, }, "required": ["dataset"], } - tools/scientific_data.py:303-319 (registration)Registers the tool with the registry, providing name, description, input_schema, price_per_call_usd, stripe_price_id, handler function reference, and category.
def register(registry) -> None: from server import ToolDefinition registry.register(ToolDefinition( name=TOOL_NAME, description=( "Fetch real-time scientific data from major public APIs. " "Datasets: earthquakes (USGS), air_quality (OpenAQ), " "solar_events (NASA DONKI), nasa_apod. " "Supports geographic filtering by lat/lon/radius. " "Returns structured, agent-ready data." ), input_schema=TOOL_SCHEMA, price_per_call_usd=TOOL_PRICE_USD, stripe_price_id=TOOL_STRIPE_PRICE, handler=scientific_data_handler, category="earth_science", ))