Skip to main content
Glama
stefanstranger

mcp-server-vanmoof

get_rides_for_week

Retrieve weekly bike ride data from VanMoof by specifying any date within the desired week to track cycling activity patterns.

Instructions

    Retrieves rides for a specific week from the vanMoof API.
    
    Args:
        date_in_week: Any date within the week in format "YYYY-MM-DD".
                    If None, uses the current date.
                    
    Returns:
        The rides for the specified week if authentication is successful, otherwise None.
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
date_in_weekNo

Implementation Reference

  • Handler function decorated with @mcp.tool(), which registers and implements the get_rides_for_week tool. Validates input date, authenticates with VanMoof API, fetches customer data, constructs weekly rides URL, and returns the rides data for the specified week.
    @mcp.tool()
    def get_rides_for_week(date_in_week: str = "") -> Dict[str, Any]:
        """
        Retrieves rides for a specific week from the vanMoof API.
        
        Args:
            date_in_week: Any date within the week in format "YYYY-MM-DD".
                        If None, uses the current date.
                        
        Returns:
            The rides for the specified week if authentication is successful, otherwise None.
        """
        
        # If date_in_week is not provided, return error
        if date_in_week == "":
            return {"error": "Missing Argument. Please use YYYY-MM-DD format."}
        # Validate date format (YYYY-MM-DD)
        try:
            # Check basic format with regex
            if not re.match(r'^\d{4}-\d{2}-\d{2}$', date_in_week):
                return {"error": "Invalid date format. Please use YYYY-MM-DD format."}
            
            # Try to parse the date to validate it's a real date
            date_obj = datetime.strptime(date_in_week, "%Y-%m-%d")
        except ValueError:
            return {"error": "Invalid date. Please provide a valid date in YYYY-MM-DD format."}
        
        # Get the Bearer token from the authenticate method
        token = VanMoofAPI.get_vanmoof_token(VANMOOF_USERNAME, VANMOOF_PASSWORD)
        application_token = VanMoofAPI.get_application_token(token)
        if not application_token:
            return {"error": "Authentication failed"}
        
        # Get the riderId and bikeId from the customer data
        customerData = VanMoofAPI.get_customer_data()
        riderId = customerData.get('data', {}).get('uuid')
        if not riderId:
            return {"error": "RiderId not found"}
        bikeId = customerData.get('data', {}).get('bikes', [{}])[0].get('id')
        if not bikeId:
            return {"error": "BikeId not found"}
        country = customerData.get('data', {}).get('country')
        if not country:
            return {"error": "CountryCode not found"}    
        
        # Calculate the Monday (start) and Sunday (end) of the week
        monday = date_obj - timedelta(days=date_obj.weekday())
        sunday = monday + timedelta(days=7)
        
        # The API needs the end date of the week as lastSeenWeek
        last_seen_week = sunday.strftime("%Y-%m-%d")
        
        url = f"https://tenjin.vanmoof.com/api/v1/rides/{riderId}/{bikeId}/weekly"
        querystring = {"lastSeenWeek": last_seen_week, "limit": "1"}
        
        headers = {
            "authorization": f"Bearer {application_token}",
            "api-key": "fcb38d47-f14b-30cf-843b-26283f6a5819",
            "cache-control": "no-cache, private",
            "accept-language": f"{country.lower()}_{country.upper()}",
            "accept-encoding": "gzip",
            "timezone": timezone_name,
            "accept": "*/*",
        }
        
        response = requests.get(url, headers=headers, params=querystring)
        
        result = response.json().get('section', {})[0]
        # add section querystring to the result json
        result['querystring'] = querystring    
        
        if not result:
            return {"error": "No rides found for the specified week"}
        else:
            return result

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/stefanstranger/mcp-server-vanmoof'

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