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
| Name | Required | Description | Default |
|---|---|---|---|
| date_in_week | No |
Implementation Reference
- server.py:299-374 (handler)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