Skip to main content
Glama
tomekkorbak

Oura MCP Server

by tomekkorbak

get_readiness_data

Retrieve Oura readiness data for a specified date range to assess recovery and preparedness levels.

Instructions

Get readiness 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 readiness data

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
start_dateYes
end_dateYes

Implementation Reference

  • MCP tool handler for 'get_readiness_data'. Decorated with @mcp.tool() for registration. Parses input dates, handles errors, and delegates to OuraClient.get_readiness_data.
    @mcp.tool()
    def get_readiness_data(start_date: str, end_date: str) -> dict[str, Any]:
        """
        Get readiness 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 readiness 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_readiness_data(start, end)
        except Exception as e:
            return {"error": str(e)}
  • OuraClient helper method that fetches daily readiness data from the Oura API, filters out unnecessary fields like 'id' and timestamps, and returns transformed data.
    def get_readiness_data(
        self, start_date: date, end_date: Optional[date] = None
    ) -> dict[str, Any]:
        """
        Get readiness 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 readiness 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_readiness"
        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 and timestamp fields
            transformed_item = {
                k: v
                for k, v in item.items()
                if k != "id" and not k.endswith("_timestamp") and k != "timestamp"
            }
            transformed_data.append(transformed_item)
    
        # Return with the original structure but with transformed data
        return {"data": transformed_data}

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/tomekkorbak/oura-mcp-server'

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