get_city_rides_thisweek
Retrieve weekly city ride summaries from VanMoof riders, including total rides, average distance, duration, and location data for analysis.
Instructions
Retrieves total city rides summary from VanMoof riders.
Returns:
The a summary of the total rides of the VanMoof rider city if authentication is successful, otherwise None.
The following information is returned:
- City name
- Average distance in km
- Total Rides
- Average duration in minutes
- Location in latitude and longitude
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- server.py:375-443 (handler)The handler function decorated with @mcp.tool(), which registers and implements the 'get_city_rides_thisweek' tool. It authenticates with VanMoof API, retrieves necessary IDs and preferences, fetches this week's rides data, extracts city summary, processes average duration, adds location info, and returns the result.@mcp.tool() def get_city_rides_thisweek()-> Dict[str, Any]: """ Retrieves total city rides summary from VanMoof riders. Returns: The a summary of the total rides of the VanMoof rider city if authentication is successful, otherwise None. The following information is returned: - City name - Average distance in km - Total Rides - Average duration in minutes - Location in latitude and longitude """ # 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 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"} # Get the riders preferences and city riderPreferences = VanMoofAPI.get_rider_preferences() riderCity = riderPreferences.get('city') # Get city name from the city code cities = VanMoofAPI.get_vanmoof_cities() location= next((city['location'] for city in cities if city['code'] == riderCity), None) last_seen_week = datetime.now().strftime("%Y-%m-%d") # Ensure last_seen_week is the Monday of the week date_obj = datetime.strptime(last_seen_week, "%Y-%m-%d") monday = date_obj - timedelta(days=date_obj.weekday()) last_seen_week = monday.strftime("%Y-%m-%d") url = f"https://tenjin.vanmoof.com/api/v1/rides/{riderId}/{bikeId}/weekly" querystring = {"lastSeenWeek": last_seen_week, "limit": str(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('carousel', {}).get('city', {}) # Convert the average duration from milliseconds to minutes. result['averageDuration'] = round(result['averageDuration'] / 1000 / 60, 2) # Add the city name to the result result['location'] = location return result