Google Maps places: local search, place details, reviews, and turn-by-turn directions.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Search the Google Local pack via SerpAPI — the local business listings Google shows for a query. Returns local_results, each with title, rating, reviews, type, address, phone and the place identifiers (place_id / data_id / data_cid) that feed google_maps_reviews. Provide a query q and optionally a location (or a pre-encoded uule). Paginate with start (+20 per page).
Search query, e.g. 'Coffee' or 'Pizza near Central Park'.
Country code for the search, e.g. 'us', 'uk', 'de'.
Language code, e.g. 'en', 'es', 'fr', 'pt-br'.
Advanced search parameters not otherwise supported, passed through as a raw tbs string.
Google-encoded location string (an alternative to location). Mutually exclusive with location.
Result offset for pagination (0-based); ~20 results per page, so use 20, 40, ….
Device to emulate: 'desktop' (default), 'tablet' or 'mobile'.
Google CID of a business listing, to scope results to that place.
Geographic origin of the search — a SerpAPI canonical city-level name, e.g. 'Warsaw,Masovian Voivodeship,Poland'. For a small town or a district, put the place in q instead. Mutually exclusive with uule.
Force a fresh SerpAPI fetch and bypass this server's result cache. Default false.
Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false.
Google domain to use, e.g. 'google.com', 'google.co.uk'.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http google-maps https://mcp.wondel.ai/google-maps/mcp
Search the Google Local pack via SerpAPI — the local business listings Google shows for a query. Returns local_results, each with title, rating, reviews, type, address, phone and the place identifiers (place_id / data_id / data_cid) that feed google_maps_reviews. Provide a query q and optionally a location (or a pre-encoded uule). Paginate with start (+20 per page).
| Argument | Type | Description |
|---|---|---|
| q* | string | Search query, e.g. 'Coffee' or 'Pizza near Central Park'. |
| gl | string | Country code for the search, e.g. 'us', 'uk', 'de'. |
| hl | string | Language code, e.g. 'en', 'es', 'fr', 'pt-br'. |
| tbs | string | Advanced search parameters not otherwise supported, passed through as a raw tbs string. |
| uule | string | Google-encoded location string (an alternative to location). Mutually exclusive with location. |
| start | integer | Result offset for pagination (0-based); ~20 results per page, so use 20, 40, …. |
| device | string | Device to emulate: 'desktop' (default), 'tablet' or 'mobile'. |
| ludocid | string | Google CID of a business listing, to scope results to that place. |
| location | string | Geographic origin of the search — a SerpAPI canonical city-level name, e.g. 'Warsaw,Masovian Voivodeship,Poland'. For a small town or a district, put the place in q instead. Mutually exclusive with uule. |
| no_cache | boolean | Force a fresh SerpAPI fetch and bypass this server's result cache. Default false. |
| zero_trace | boolean | Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false. |
| google_domain | string | Google domain to use, e.g. 'google.com', 'google.co.uk'. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Search query, e.g. 'Coffee' or 'Pizza near Central Park'."
},
"gl": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Country code for the search, e.g. 'us', 'uk', 'de'."
},
"hl": {
"type": "string",
"description": "Language code, e.g. 'en', 'es', 'fr', 'pt-br'."
},
"tbs": {
"type": "string",
"description": "Advanced search parameters not otherwise supported, passed through as a raw tbs string."
},
"uule": {
"type": "string",
"description": "Google-encoded location string (an alternative to location). Mutually exclusive with location."
},
"start": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Result offset for pagination (0-based); ~20 results per page, so use 20, 40, …."
},
"device": {
"enum": [
"desktop",
"tablet",
"mobile"
],
"type": "string",
"description": "Device to emulate: 'desktop' (default), 'tablet' or 'mobile'."
},
"ludocid": {
"type": "string",
"description": "Google CID of a business listing, to scope results to that place."
},
"location": {
"type": "string",
"description": "Geographic origin of the search — a SerpAPI canonical city-level name, e.g. 'Warsaw,Masovian Voivodeship,Poland'. For a small town or a district, put the place in q instead. Mutually exclusive with uule."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh SerpAPI fetch and bypass this server's result cache. Default false."
},
"zero_trace": {
"type": "boolean",
"description": "Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false."
},
"google_domain": {
"type": "string",
"description": "Google domain to use, e.g. 'google.com', 'google.co.uk'."
}
}
}Get directions between two points via SerpAPI. Provide a start point (one of start_addr, start_coords 'lat,lon', or start_data_id) and an end point (one of end_addr, end_coords, or end_data_id) — the data_ids come from google_maps_search results. Returns the route(s) with distance, duration and step-by-step legs. Shape the route with travel_mode (driving/transit/walking/…), avoid, and time. Result shape: { source, fetchedAt, query, search_metadata, search_parameters, places_info: [{ address, data_id, gps_coordinates }], durations: [{ travel_mode, duration, formatted_duration }], directions: [...] } — the list key is `directions`. Each direction: { travel_mode, via, distance (meters), duration (seconds), formatted_distance, formatted_duration, typical_duration_range, extensions, trips: [{ travel_mode, title, distance, duration, formatted_distance, formatted_duration, details: [{ title, action, distance, duration }] }] } plus, for transit, start_time, end_time, arrive_around, cost, currency; a Flight entry has only { travel_mode, icon, flight }.
| Argument | Type | Description |
|---|---|---|
| gl | string | Country code, e.g. 'us', 'uk', 'de'. |
| hl | string | Language code, e.g. 'en', 'es', 'fr'. |
| time | string | Departure/arrival time: 'depart_at:<unix>', 'arrive_by:<unix>', or 'last_available' (transit only). |
| avoid | string | Comma-separated route features to avoid: 'highways', 'tolls', 'ferries'. |
| route | any | Transit route option (travel_mode=3 only): 2=Fewer transfers, 3=Less walking, 4=Wheelchair accessible. |
| prefer |
Fetch the reviews of a Google Maps place via SerpAPI. Provide exactly one of place_id, data_id or data_cid — all come from google_maps_search or google_local_search results. A digit-only id (the `place_id` that google_local_search returns is a Google CID) is accepted in any of the three fields and resolved to the Maps data_id automatically via one place lookup. Returns reviews (author, rating, text, date) plus the topics you can filter by. Paginate with next_page_token from the previous response.
| Argument | Type | Description |
|---|---|---|
| hl | string | Language code, e.g. 'en', 'es', 'fr', 'pt-br'. |
| num | integer | Number of reviews per page, 1-20 — only honoured together with next_page_token, topic_id or query; the initial page always returns 8 and the parameter is dropped there. |
| query | string | Filter/search reviews by free text. Mutually exclusive with topic_id. |
| data_id | string | Google Maps data_id of the place ('0x…:0x…' from google_maps_search). Provide exactly one of place_id, data_id or data_cid. |
| sort_by | string | Review sort order: 'qualityScore' (most relevant, default), 'newestFirst', 'ratingHigh', 'ratingLow'. |
| data_cid | string | Google CID of the place — the digit-only `place_id` google_local_search returns. Resolved to the Maps data_id via one place lookup. Provide exactly one of place_id, data_id or data_cid. |
| no_cache |
Search Google Maps via SerpAPI. type=search (default) returns a list of places for a query q — paginate with start (+20 per page). type=place returns the full details of a single place identified by place_id or data_cid (both obtainable from a prior search result). Center the map with ll ('@lat,lon,zoomz') or lat/lon/z. The place_id / data_cid in results feed google_maps_reviews.
| Argument | Type | Description |
|---|---|---|
| m | integer | Alternative map scale parameter, 1-15028132 (an alternative to the zoom level). |
| q | string | Search query, e.g. 'Coffee' or 'Restaurants'. Required for a search (type=search) unless place_id/data_cid is given. |
| z | integer | Map zoom level, 3-30 (higher = more zoomed in). Used with lat/lon or location; defaults to 14 when either is given without z or m. |
| gl | string | Country code for the search, e.g. 'us', 'uk', 'de'. |
| hl | string | Language code, e.g. 'en', 'es', 'fr', 'pt-br'. |
| ll | string | Map center as '@lat,lon,zoomz' (latitude, longitude, zoom), e.g. '@40.7455096,-74.0083012,14z'. Zoom recommended 3z-15z. |
| lat | number | Latitude of the map center (used with lon; alternative to ll). |
| lon | number | Longitude of the map center (used with lat; alternative to ll). |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| string |
| Comma-separated transit preferences (travel_mode=3 only): 'bus', 'subway', 'train', 'tram_light_rail'. |
| end_addr | string | Ending address, e.g. 'Dallas, TX'. Provide one of end_addr/end_coords/end_data_id. |
| no_cache | boolean | Force a fresh SerpAPI fetch and bypass this server's result cache. Default false. |
| end_coords | string | Ending GPS coordinates as 'lat,lon'. |
| start_addr | string | Starting address, e.g. 'Austin, TX'. Provide one of start_addr/start_coords/start_data_id. |
| zero_trace | boolean | Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false. |
| end_data_id | string | Place data id of the ending point (from a google_maps_search result). |
| travel_mode | any | Travel mode: 6=Best (default), 0=Driving, 1=Cycling, 2=Walking, 3=Transit, 4=Flight, 9=Two-wheeler. |
| start_coords | string | Starting GPS coordinates as 'lat,lon', e.g. '30.1974,-97.6663'. |
| distance_unit | any | Distance unit: 0=km, 1=miles. |
| start_data_id | string | Place data id of the starting point (from a google_maps_search result). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"gl": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Country code, e.g. 'us', 'uk', 'de'."
},
"hl": {
"type": "string",
"description": "Language code, e.g. 'en', 'es', 'fr'."
},
"time": {
"type": "string",
"description": "Departure/arrival time: 'depart_at:<unix>', 'arrive_by:<unix>', or 'last_available' (transit only)."
},
"avoid": {
"type": "string",
"description": "Comma-separated route features to avoid: 'highways', 'tolls', 'ferries'."
},
"route": {
"anyOf": [
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
},
{
"type": "number",
"const": 4
}
],
"description": "Transit route option (travel_mode=3 only): 2=Fewer transfers, 3=Less walking, 4=Wheelchair accessible."
},
"prefer": {
"type": "string",
"description": "Comma-separated transit preferences (travel_mode=3 only): 'bus', 'subway', 'train', 'tram_light_rail'."
},
"end_addr": {
"type": "string",
"description": "Ending address, e.g. 'Dallas, TX'. Provide one of end_addr/end_coords/end_data_id."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh SerpAPI fetch and bypass this server's result cache. Default false."
},
"end_coords": {
"type": "string",
"description": "Ending GPS coordinates as 'lat,lon'."
},
"start_addr": {
"type": "string",
"description": "Starting address, e.g. 'Austin, TX'. Provide one of start_addr/start_coords/start_data_id."
},
"zero_trace": {
"type": "boolean",
"description": "Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false."
},
"end_data_id": {
"type": "string",
"description": "Place data id of the ending point (from a google_maps_search result)."
},
"travel_mode": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
},
{
"type": "number",
"const": 4
},
{
"type": "number",
"const": 6
},
{
"type": "number",
"const": 9
}
],
"description": "Travel mode: 6=Best (default), 0=Driving, 1=Cycling, 2=Walking, 3=Transit, 4=Flight, 9=Two-wheeler."
},
"start_coords": {
"type": "string",
"description": "Starting GPS coordinates as 'lat,lon', e.g. '30.1974,-97.6663'."
},
"distance_unit": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
}
],
"description": "Distance unit: 0=km, 1=miles."
},
"start_data_id": {
"type": "string",
"description": "Place data id of the starting point (from a google_maps_search result)."
}
}
}| boolean |
| Force a fresh SerpAPI fetch and bypass this server's result cache. Default false. |
| place_id | string | Google Maps place_id of the place ('ChIJ…' from google_maps_search). A digit-only value is treated as a Google CID and resolved automatically. Provide exactly one of place_id, data_id or data_cid. |
| topic_id | string | Filter reviews by a topic id (from a prior response). Mutually exclusive with query. |
| zero_trace | boolean | Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false. |
| next_page_token | string | Pagination token from the previous response, to fetch the next page of reviews. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"hl": {
"type": "string",
"description": "Language code, e.g. 'en', 'es', 'fr', 'pt-br'."
},
"num": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "Number of reviews per page, 1-20 — only honoured together with next_page_token, topic_id or query; the initial page always returns 8 and the parameter is dropped there."
},
"query": {
"type": "string",
"description": "Filter/search reviews by free text. Mutually exclusive with topic_id."
},
"data_id": {
"type": "string",
"description": "Google Maps data_id of the place ('0x…:0x…' from google_maps_search). Provide exactly one of place_id, data_id or data_cid."
},
"sort_by": {
"enum": [
"qualityScore",
"newestFirst",
"ratingHigh",
"ratingLow"
],
"type": "string",
"description": "Review sort order: 'qualityScore' (most relevant, default), 'newestFirst', 'ratingHigh', 'ratingLow'."
},
"data_cid": {
"type": "string",
"description": "Google CID of the place — the digit-only `place_id` google_local_search returns. Resolved to the Maps data_id via one place lookup. Provide exactly one of place_id, data_id or data_cid."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh SerpAPI fetch and bypass this server's result cache. Default false."
},
"place_id": {
"type": "string",
"description": "Google Maps place_id of the place ('ChIJ…' from google_maps_search). A digit-only value is treated as a Google CID and resolved automatically. Provide exactly one of place_id, data_id or data_cid."
},
"topic_id": {
"type": "string",
"description": "Filter reviews by a topic id (from a prior response). Mutually exclusive with query."
},
"zero_trace": {
"type": "boolean",
"description": "Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false."
},
"next_page_token": {
"type": "string",
"description": "Pagination token from the previous response, to fetch the next page of reviews."
}
}
}| type | string | 'search' (default) returns a list of places for q; 'place' returns details for a single place (requires place_id or data_cid). |
| start | integer | Result offset for pagination (0-based); 20 results per page, so use 20, 40, …. |
| nearby | boolean | Search nearby the given coordinates. Default false. |
| data_cid | string | Google Maps CID (data_cid) of a specific place (from a prior search result). Use with type=place; also feeds google_maps_reviews. |
| location | string | Geographic origin of the search — a SerpAPI canonical city-level name, e.g. 'Warsaw,Masovian Voivodeship,Poland'. For a small town or a district, put the place in q instead. SerpAPI requires z or m alongside it — z defaults to 14 when neither is given. |
| no_cache | boolean | Force a fresh SerpAPI fetch and bypass this server's result cache. Default false. |
| place_id | string | Google Maps place_id of a specific place — an opaque string like 'ChIJ…' from a google_maps_search result. A digit-only id is a Google CID (what google_local_search calls place_id) and is sent as data_cid automatically. Use with type=place; also feeds google_maps_reviews. |
| max_price | integer | Maximum price-level filter for places. |
| min_price | integer | Minimum price-level filter for places. |
| min_rating | string | Minimum star-rating filter. Must be a string like '4.0' (a number such as 4.0 stringifies to '4' and breaks the filter). |
| open_state | string | Open-state filter: 'now' = open now, '24h' = open 24 hours. Mutually exclusive with open_on_day/open_at_hour. |
| zero_trace | boolean | Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false. |
| open_on_day | string | Filter to places open on a given day (mon-sun). Combine with open_at_hour. Mutually exclusive with open_state. |
| open_at_hour | integer | Filter to places open at a given hour, 0-23. Use with open_on_day. Mutually exclusive with open_state. |
| google_domain | string | Google domain to use, e.g. 'google.com'. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"m": {
"type": "integer",
"maximum": 15028132,
"minimum": 1,
"description": "Alternative map scale parameter, 1-15028132 (an alternative to the zoom level)."
},
"q": {
"type": "string",
"description": "Search query, e.g. 'Coffee' or 'Restaurants'. Required for a search (type=search) unless place_id/data_cid is given."
},
"z": {
"type": "integer",
"maximum": 30,
"minimum": 3,
"description": "Map zoom level, 3-30 (higher = more zoomed in). Used with lat/lon or location; defaults to 14 when either is given without z or m."
},
"gl": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Country code for the search, e.g. 'us', 'uk', 'de'."
},
"hl": {
"type": "string",
"description": "Language code, e.g. 'en', 'es', 'fr', 'pt-br'."
},
"ll": {
"type": "string",
"description": "Map center as '@lat,lon,zoomz' (latitude, longitude, zoom), e.g. '@40.7455096,-74.0083012,14z'. Zoom recommended 3z-15z."
},
"lat": {
"type": "number",
"description": "Latitude of the map center (used with lon; alternative to ll)."
},
"lon": {
"type": "number",
"description": "Longitude of the map center (used with lat; alternative to ll)."
},
"type": {
"enum": [
"search",
"place"
],
"type": "string",
"description": "'search' (default) returns a list of places for q; 'place' returns details for a single place (requires place_id or data_cid)."
},
"start": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Result offset for pagination (0-based); 20 results per page, so use 20, 40, …."
},
"nearby": {
"type": "boolean",
"description": "Search nearby the given coordinates. Default false."
},
"data_cid": {
"type": "string",
"description": "Google Maps CID (data_cid) of a specific place (from a prior search result). Use with type=place; also feeds google_maps_reviews."
},
"location": {
"type": "string",
"description": "Geographic origin of the search — a SerpAPI canonical city-level name, e.g. 'Warsaw,Masovian Voivodeship,Poland'. For a small town or a district, put the place in q instead. SerpAPI requires z or m alongside it — z defaults to 14 when neither is given."
},
"no_cache": {
"type": "boolean",
"description": "Force a fresh SerpAPI fetch and bypass this server's result cache. Default false."
},
"place_id": {
"type": "string",
"description": "Google Maps place_id of a specific place — an opaque string like 'ChIJ…' from a google_maps_search result. A digit-only id is a Google CID (what google_local_search calls place_id) and is sent as data_cid automatically. Use with type=place; also feeds google_maps_reviews."
},
"max_price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Maximum price-level filter for places."
},
"min_price": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Minimum price-level filter for places."
},
"min_rating": {
"enum": [
"2.0",
"2.5",
"3.0",
"3.5",
"4.0",
"4.5"
],
"type": "string",
"description": "Minimum star-rating filter. Must be a string like '4.0' (a number such as 4.0 stringifies to '4' and breaks the filter)."
},
"open_state": {
"enum": [
"now",
"24h"
],
"type": "string",
"description": "Open-state filter: 'now' = open now, '24h' = open 24 hours. Mutually exclusive with open_on_day/open_at_hour."
},
"zero_trace": {
"type": "boolean",
"description": "Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false."
},
"open_on_day": {
"enum": [
"mon",
"tue",
"wed",
"thu",
"fri",
"sat",
"sun"
],
"type": "string",
"description": "Filter to places open on a given day (mon-sun). Combine with open_at_hour. Mutually exclusive with open_state."
},
"open_at_hour": {
"type": "integer",
"maximum": 23,
"minimum": 0,
"description": "Filter to places open at a given hour, 0-23. Use with open_on_day. Mutually exclusive with open_state."
},
"google_domain": {
"type": "string",
"description": "Google domain to use, e.g. 'google.com'."
}
}
}