get_resilience_data
Retrieve resilience data within a specified date range using ISO-formatted start and end dates. Provides a dictionary of resilience metrics for analysis or integration.
Instructions
Get resilience data for a specific date range.
Args:
start_date: Start date in ISO format (YYYY-MM-DD)
end_date: End date in ISO format (YYYY-MM-DD)
Returns:
Dictionary containing resilience data
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| start_date | Yes |
Implementation Reference
- src/oura_mcp_server/server.py:383-403 (handler)The MCP tool handler for get_resilience_data. It checks if the Oura client is initialized, parses the input date strings, calls the OuraClient's get_resilience_data method with date objects, and handles exceptions by returning an error dictionary.@mcp.tool() def get_resilience_data(start_date: str, end_date: str) -> dict[str, Any]: """ Get resilience data for a specific date range. Args: start_date: Start date in ISO format (YYYY-MM-DD) end_date: End date in ISO format (YYYY-MM-DD) Returns: Dictionary containing resilience data """ if oura_client is None: return {"error": "Oura client not initialized. Please provide an access token."} try: start = parse_date(start_date) end = parse_date(end_date) return oura_client.get_resilience_data(start, end) except Exception as e: return {"error": str(e)}
- The OuraClient helper method that performs the actual API call to fetch daily resilience data from the Oura API endpoint, handles the HTTP response, removes 'id' fields from data items, and returns transformed data.def get_resilience_data( self, start_date: date, end_date: Optional[date] = None ) -> dict[str, Any]: """ Get resilience data for a specific date range. Args: start_date: Start date for the query end_date: End date for the query (optional, defaults to start_date) Returns: Dictionary containing resilience data """ if end_date is None: end_date = start_date params = { "start_date": start_date.isoformat(), "end_date": end_date.isoformat(), } url = f"{self.BASE_URL}/daily_resilience" response = self.client.get(url, headers=self.headers, params=params) if response.status_code != 200: error_msg = f"Error {response.status_code}: {response.text}" raise Exception(error_msg) # Get the raw response raw_data = response.json() # Transform the data - just return the data array directly transformed_data = [] for item in raw_data.get("data", []): # Create transformed item without the id field transformed_item = {k: v for k, v in item.items() if k != "id"} transformed_data.append(transformed_item) # Return with the original structure but with transformed data return {"data": transformed_data}