{"ok":true,"site":{"host":"web-mcp-server.vercel.app","url":"https://web-mcp-server.vercel.app/","type":"live","desc":"AI Trip Planner","tools":[{"name":"fly_to","kind":"act","impl":"imperative","description":"Animate the map camera to a specific location. Use this to navigate the map to a place of interest.","annotations":{"title":"Fly To Location","readOnlyHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"longitude":{"type":"number","description":"Longitude of the target location","minimum":-180,"maximum":180},"latitude":{"type":"number","description":"Latitude of the target location","minimum":-90,"maximum":90},"zoom":{"type":"number","description":"Zoom level (0–22). Defaults to current zoom if omitted.","minimum":0,"maximum":22}},"required":["longitude","latitude"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_marker","kind":"act","impl":"imperative","description":"Add a marker pin at a location on the map, with an optional popup label.","annotations":{"title":"Add Marker","readOnlyHint":false},"inputSchema":{"type":"object","properties":{"longitude":{"type":"number","description":"Longitude","minimum":-180,"maximum":180},"latitude":{"type":"number","description":"Latitude","minimum":-90,"maximum":90},"label":{"type":"string","description":"Optional popup text to display on the marker"}},"required":["longitude","latitude"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_markers","kind":"act","impl":"imperative","description":"Remove all markers that were added to the map via the add_marker tool.","annotations":{"title":"Clear Markers","readOnlyHint":false,"destructiveHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_viewport","kind":"answer","impl":"imperative","description":"Return the current map viewport: center coordinates, zoom level, bearing, pitch, and bounding box.","annotations":{"title":"Get Viewport","readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"show_route","kind":"act","impl":"imperative","description":"Draw a route on the map from a GeoJSON LineString. Replaces any previously drawn route.","annotations":{"title":"Show Route","readOnlyHint":false},"inputSchema":{"type":"object","properties":{"geojson":{"type":"string","description":"A GeoJSON LineString feature or FeatureCollection as a JSON string. Example: {\"type\":\"Feature\",\"geometry\":{\"type\":\"LineString\",\"coordinates\":[[-122.4,37.8],[-122.5,37.9]]}}"},"color":{"type":"string","description":"Line color as a CSS color string (e.g. \"#3b82f6\"). Defaults to \"#3b82f6\".","default":"#3b82f6"},"width":{"type":"number","description":"Line width in pixels. Defaults to 4.","minimum":1,"maximum":20,"default":4}},"required":["geojson"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_style","kind":"act","impl":"imperative","description":"Change the map style. Accepts a style shorthand (streets, satellite, dark, light, outdoors, satellite-streets, navigation-day, navigation-night) or a full Mapbox style URL.","annotations":{"title":"Set Map Style","readOnlyHint":false},"inputSchema":{"type":"object","properties":{"style":{"type":"string","description":"Style shorthand or full Mapbox style URL (mapbox://styles/...). Shorthands: streets, outdoors, light, dark, satellite, satellite-streets, navigation-day, navigation-night.","enum":["streets","outdoors","light","dark","satellite","satellite-streets","navigation-day","navigation-night"]}},"required":["style"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_markers","kind":"answer","impl":"imperative","description":"List all markers currently on the map, in the order they were added, with their coordinates and labels.","annotations":{"title":"List Markers","readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fit_bounds","kind":"act","impl":"imperative","description":"Animate the camera to frame all markers currently on the map. Use this after adding multiple stops to show the whole trip at once.","annotations":{"title":"Fit Bounds","readOnlyHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"padding":{"type":"number","description":"Padding in pixels around the fitted bounds.","minimum":0,"maximum":400,"default":60}},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"geocode_place","kind":"answer","impl":"imperative","description":"Look up a named place (landmark, POI, address) and return its coordinates. Use this to find where a specific place is. Pass just the place name (e.g. \"Louvre Museum\") — do NOT append \", City\" to the query, which tends to surface unrelated listings whose descriptions happen to mention the city. To disambiguate a common name, use proximity_longitude/proximity_latitude instead.","annotations":{"title":"Geocode Place","readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Name or address of the place to look up, e.g. \"Eiffel Tower\"."},"proximity_longitude":{"type":"number","description":"Optional longitude to bias results toward.","minimum":-180,"maximum":180},"proximity_latitude":{"type":"number","description":"Optional latitude to bias results toward.","minimum":-90,"maximum":90}},"required":["query"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_category","kind":"answer","impl":"imperative","description":"Search for places near a location by category (e.g. \"coffee\", \"restaurant\", \"museum\"). Returns a list of nearby matches.","annotations":{"title":"Search Category","readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Category to search for, e.g. \"coffee\", \"restaurant\", \"museum\"."},"proximity_longitude":{"type":"number","description":"Longitude to search near.","minimum":-180,"maximum":180},"proximity_latitude":{"type":"number","description":"Latitude to search near.","minimum":-90,"maximum":90},"limit":{"type":"number","description":"Maximum number of results. Defaults to 5.","minimum":1,"maximum":25,"default":5}},"required":["category","proximity_longitude","proximity_latitude"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_directions","kind":"answer","impl":"imperative","description":"Get a route between an ordered list of coordinates. Returns GeoJSON geometry (pass it directly to show_route), plus distance and duration.","annotations":{"title":"Get Directions","readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"coordinates":{"type":"string","description":"JSON-encoded array of stops in visit order, e.g. '[{\"longitude\":2.29,\"latitude\":48.86},{\"longitude\":2.33,\"latitude\":48.86}]'."},"profile":{"type":"string","description":"Routing profile. Defaults to \"walking\".","enum":["driving","walking","cycling"],"default":"walking"}},"required":["coordinates"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Travel & Events","apiSurface":"spec","toolCount":11}}