{"serverId":"mcp-registry/com.rovvafrica/ride-booking","tools":[{"name":"book_ride","fixed":{"name":"book_ride","description":"Book a Rovv ride. Requires pickup/dropoff coordinates, a vehicle_type ID (from get_fare_estimate), and payment method. Returns booking confirmation with ride number.","inputSchema":{"type":"object","required":["pick_lat","pick_lng","drop_lat","drop_lng","pick_address","drop_address","vehicle_type"],"properties":{"drop_lat":{"type":"number","description":"Dropoff latitude"},"drop_lng":{"type":"number","description":"Dropoff longitude"},"is_later":{"type":"boolean","default":false,"description":"Set to true for scheduled rides"},"pick_lat":{"type":"number","description":"Pickup latitude"},"pick_lng":{"type":"number","description":"Pickup longitude"},"payment_opt":{"type":"integer","default":1,"description":"Payment method: 0 = card, 1 = cash, 2 = wallet"},"drop_address":{"type":"string","description":"Dropoff address text"},"pick_address":{"type":"string","description":"Pickup address text"},"vehicle_type":{"type":"string","description":"The zone_type_id from get_fare_estimate results"},"trip_start_time":{"type":"string","description":"For scheduled rides: datetime in Y-m-d H:i:s format"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":317,"tokensAfter":317},{"name":"cancel_ride","fixed":{"name":"cancel_ride","description":"Cancel an active ride. Optionally provide a reason.","inputSchema":{"type":"object","required":[],"properties":{"reason":{"type":"string","description":"Optional cancellation reason"},"request_id":{"type":"string","description":"The ride request ID to cancel. If not provided, cancels the current active ride."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":98,"tokensAfter":98},{"name":"get_current_ride","fixed":{"name":"get_current_ride","description":"Get the status of the user's current active ride, including driver details, ETA, and ride status.","inputSchema":{"type":"object","required":[],"properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":57,"tokensAfter":57},{"name":"get_fare_estimate","fixed":{"name":"get_fare_estimate","description":"Get available vehicle types and fare estimates for a trip. Returns a list of vehicle options with prices, ETAs, and vehicle type IDs needed for booking.","inputSchema":{"type":"object","required":["pick_lat","pick_lng","drop_lat","drop_lng"],"properties":{"drop_lat":{"type":"number","description":"Dropoff latitude"},"drop_lng":{"type":"number","description":"Dropoff longitude"},"pick_lat":{"type":"number","description":"Pickup latitude"},"pick_lng":{"type":"number","description":"Pickup longitude"},"drop_address":{"type":"string","description":"Dropoff address text"},"pick_address":{"type":"string","description":"Pickup address text"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":192,"tokensAfter":192},{"name":"get_place_details","fixed":{"name":"get_place_details","description":"Get the exact coordinates and full address for a place using its place_id (returned from search_places). Call this after search_places to get lat/lng needed for fare estimates and booking.","inputSchema":{"type":"object","required":["place_id"],"properties":{"place_id":{"type":"string","description":"The Google place_id from a search_places result"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":111,"tokensAfter":111},{"name":"get_ride_history","fixed":{"name":"get_ride_history","description":"Get the user's past ride history. Returns recent completed and cancelled rides.","inputSchema":{"type":"object","required":[],"properties":{"limit":{"type":"integer","default":5,"description":"Number of rides to return (default 5, max 20)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":80,"tokensAfter":80},{"name":"get_route_info","fixed":{"name":"get_route_info","description":"Get driving route information between two points including distance, duration, and polyline.","inputSchema":{"type":"object","required":["pickup_lat","pickup_lng","drop_lat","drop_lng"],"properties":{"drop_lat":{"type":"number","description":"Dropoff latitude"},"drop_lng":{"type":"number","description":"Dropoff longitude"},"pickup_lat":{"type":"number","description":"Pickup latitude"},"pickup_lng":{"type":"number","description":"Pickup longitude"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":138,"tokensAfter":138},{"name":"get_wallet_balance","fixed":{"name":"get_wallet_balance","description":"Get the user's Rovv wallet balance, total added, total spent, and recent transactions.","inputSchema":{"type":"object","required":[],"properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":54,"tokensAfter":54},{"name":"search_places","fixed":{"name":"search_places","description":"Search for a location by name. Returns a list of matching places with addresses. Use this to find the pickup or dropoff location before booking a ride.","inputSchema":{"type":"object","required":["query"],"properties":{"lat":{"type":"number","description":"Optional latitude to bias results toward the user's area"},"lng":{"type":"number","description":"Optional longitude to bias results toward the user's area"},"query":{"type":"string","description":"The place name or address to search for, e.g. \"Lekki Phase 1\" or \"Murtala Muhammed Airport\""}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":165,"tokensAfter":165}],"toolsChanged":9,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}