Google Maps MCP
Server Details
Google Maps places: local search, place details, reviews, and turn-by-turn directions.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
Directions and reviews are clearly distinct, and the two search tools are differentiated by local pack vs. Google Maps places. However, google_local_search and google_maps_search still have overlapping search semantics, so an agent must read descriptions carefully to choose correctly.
All names use snake_case and follow a predictable prefix_action pattern. google_local_search is a minor deviation from the otherwise consistent google_maps_* prefix, but the convention remains readable.
Four tools cover the core SerpAPI Google Maps surface: local search, maps search, directions, and reviews. The set is slightly thin but each tool earns its place and there is no redundant bloat.
The read-only search, directions, and reviews lifecycle is well covered, including place details via google_maps_search type=place. Minor gaps exist around ancillary place data such as photos or hours, but core workflows are supported.
Available Tools
4 toolsgoogle_local_searchSearch Google Local (SerpAPI)AInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query, e.g. 'Coffee' or 'Pizza near Central Park'. | |
| gl | No | Country code for the search, e.g. 'us', 'uk', 'de'. | |
| hl | No | Language code, e.g. 'en', 'es', 'fr', 'pt-br'. | |
| tbs | No | Advanced search parameters not otherwise supported, passed through as a raw tbs string. | |
| uule | No | Google-encoded location string (an alternative to location). Mutually exclusive with location. | |
| start | No | Result offset for pagination (0-based); ~20 results per page, so use 20, 40, …. | |
| device | No | Device to emulate: 'desktop' (default), 'tablet' or 'mobile'. | |
| ludocid | No | Google CID of a business listing, to scope results to that place. | |
| location | No | 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 | No | Force a fresh SerpAPI fetch and bypass this server's result cache. Default false. | |
| zero_trace | No | Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false. | |
| google_domain | No | Google domain to use, e.g. 'google.com', 'google.co.uk'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does valuable work by disclosing the return payload shape (local_results with title, rating, reviews, type, address, phone, place ids) and the pagination granularity, but it says nothing about SerpAPI credit cost, rate limits, auth requirements, or failure modes for a 12-parameter network call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the identity of the tool and then the return shape, with no filler. The final sentence largely repeats what the schema already says about q, location/uule and start, which is the only slack.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters, no annotations and no output schema, the description does the important compensating work: it explains what comes back and how the place identifiers chain into google_maps_reviews. The remaining per-parameter details are fully covered by the schema, so only the lack of cost/rate-limit context leaves a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including gl, hl, tbs, ludocid, device and google_domain is already documented. The description restates q/location/uule/start behavior (including the '+20 per page' hint already present in the schema) without adding new syntax or constraints, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search the Google Local pack via SerpAPI') and immediately disambiguates what that means — 'the local business listings Google shows for a query' — which separates it from a general maps search. It also names google_maps_reviews as the downstream consumer of the place identifiers, giving the agent a clear picture of this tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete calling context: supply q, optionally location or a pre-encoded uule, and paginate with start at +20 increments. The location/uule exclusivity is called out. It stops short of stating when to prefer this over the sibling google_maps_search, which is the one routing decision an agent still has to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_maps_directionsGet Google Maps Directions (SerpAPI)AInspect
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Country code, e.g. 'us', 'uk', 'de'. | |
| hl | No | Language code, e.g. 'en', 'es', 'fr'. | |
| time | No | Departure/arrival time: 'depart_at:<unix>', 'arrive_by:<unix>', or 'last_available' (transit only). | |
| avoid | No | Comma-separated route features to avoid: 'highways', 'tolls', 'ferries'. | |
| route | No | Transit route option (travel_mode=3 only): 2=Fewer transfers, 3=Less walking, 4=Wheelchair accessible. | |
| prefer | No | Comma-separated transit preferences (travel_mode=3 only): 'bus', 'subway', 'train', 'tram_light_rail'. | |
| end_addr | No | Ending address, e.g. 'Dallas, TX'. Provide one of end_addr/end_coords/end_data_id. | |
| no_cache | No | Force a fresh SerpAPI fetch and bypass this server's result cache. Default false. | |
| end_coords | No | Ending GPS coordinates as 'lat,lon'. | |
| start_addr | No | Starting address, e.g. 'Austin, TX'. Provide one of start_addr/start_coords/start_data_id. | |
| zero_trace | No | Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false. | |
| end_data_id | No | Place data id of the ending point (from a google_maps_search result). | |
| travel_mode | No | Travel mode: 6=Best (default), 0=Driving, 1=Cycling, 2=Walking, 3=Transit, 4=Flight, 9=Two-wheeler. | |
| start_coords | No | Starting GPS coordinates as 'lat,lon', e.g. '30.1974,-97.6663'. | |
| distance_unit | No | Distance unit: 0=km, 1=miles. | |
| start_data_id | No | Place data id of the starting point (from a google_maps_search result). |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| source | Yes | |
| durations | No | |
| fetchedAt | Yes | |
| directions | No | |
| places_info | No | |
| search_metadata | No | |
| search_parameters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it does disclose that results come from a SerpAPI fetch and are returned as a list under `directions`. However it says nothing about caching behavior (no_cache), rate limits, error modes, or whether calls are billable/side-effect free — the very traits an agent needs for a read-through-SerpAPI tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and endpoint rules are correctly front-loaded, but roughly half the text is a deep enumeration of the return payload (nested trips, details, transit cost fields) that duplicates the existing output schema. Those sentences do not earn their place and bury the actionable parameter guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter, annotation-free read tool, the description covers the essential call contract (how to specify endpoints, how to shape the route) and an output schema covers returns. Gaps remain around caching semantics and failure behavior, but nothing that would cause a mis-invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value beyond the schema: it states the mutually-exclusive one-of constraint for start and end points, which the schema does not enforce (zero required fields, no top-level oneOf). It also groups travel_mode/avoid/time as the route-shaping controls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get directions between two points via SerpAPI") and immediately distinguishes itself from google_maps_search by naming it as the source of data_ids. An agent can tell this apart from google_maps_search, google_maps_reviews, and google_local_search without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: one endpoint must come from start_addr/start_coords/start_data_id, the other from end_addr/end_coords/end_data_id, and route shaping is done via travel_mode, avoid, and time. It does not state when-not to use it or contrast with sibling tools beyond sourcing data_ids, so it stops short of full alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_maps_reviewsGet Google Maps Reviews (SerpAPI)AInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hl | No | Language code, e.g. 'en', 'es', 'fr', 'pt-br'. | |
| num | No | 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 | No | Filter/search reviews by free text. Mutually exclusive with topic_id. | |
| data_id | No | 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 | No | Review sort order: 'qualityScore' (most relevant, default), 'newestFirst', 'ratingHigh', 'ratingLow'. | |
| data_cid | No | 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 | No | Force a fresh SerpAPI fetch and bypass this server's result cache. Default false. | |
| place_id | No | 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 | No | Filter reviews by a topic id (from a prior response). Mutually exclusive with query. | |
| zero_trace | No | Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false. | |
| next_page_token | No | Pagination token from the previous response, to fetch the next page of reviews. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose non-obvious behavior: a digit-only id triggers an extra place lookup before the review fetch, and results are paginated with a token from the prior response. It does not mention caching, rate limits, or quota cost, which keeps it short of a 5 for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the purpose, then identifiers, then return shape, then pagination. Every sentence adds a distinct decision-relevant fact with no repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, no output schema, and no annotations, the description supplies exactly the missing pieces: where identifiers come from, what the response contains (author, rating, text, date, topics), and how to continue paginating. Nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns an extra point by adding cross-field semantics that the schema states only piecemeal — that a digit-only value is accepted in any of the three id fields and resolved automatically. The remaining parameters (hl, sort_by, no_cache, zero_trace) are adequately covered by their schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch the reviews of a Google Maps place via SerpAPI') and immediately distinguishes itself from google_maps_search / google_local_search by naming them as the source of identifiers rather than substitutes. An agent can route between the three siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the prerequisite ('all come from google_maps_search or google_local_search results') and the selection rule (provide exactly one of place_id/data_id/data_cid), plus the pagination path via next_page_token. It does not explicitly state when to avoid this tool, but the sibling relationship is unambiguous enough that the gap is small.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_maps_searchSearch Google Maps (SerpAPI)AInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| m | No | Alternative map scale parameter, 1-15028132 (an alternative to the zoom level). | |
| q | No | Search query, e.g. 'Coffee' or 'Restaurants'. Required for a search (type=search) unless place_id/data_cid is given. | |
| z | No | 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 | No | Country code for the search, e.g. 'us', 'uk', 'de'. | |
| hl | No | Language code, e.g. 'en', 'es', 'fr', 'pt-br'. | |
| ll | No | Map center as '@lat,lon,zoomz' (latitude, longitude, zoom), e.g. '@40.7455096,-74.0083012,14z'. Zoom recommended 3z-15z. | |
| lat | No | Latitude of the map center (used with lon; alternative to ll). | |
| lon | No | Longitude of the map center (used with lat; alternative to ll). | |
| type | No | 'search' (default) returns a list of places for q; 'place' returns details for a single place (requires place_id or data_cid). | |
| start | No | Result offset for pagination (0-based); 20 results per page, so use 20, 40, …. | |
| nearby | No | Search nearby the given coordinates. Default false. | |
| data_cid | No | Google Maps CID (data_cid) of a specific place (from a prior search result). Use with type=place; also feeds google_maps_reviews. | |
| location | No | 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 | No | Force a fresh SerpAPI fetch and bypass this server's result cache. Default false. | |
| place_id | No | 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 | No | Maximum price-level filter for places. | |
| min_price | No | Minimum price-level filter for places. | |
| min_rating | No | 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 | No | Open-state filter: 'now' = open now, '24h' = open 24 hours. Mutually exclusive with open_on_day/open_at_hour. | |
| zero_trace | No | Enterprise-only ZeroTrace mode: don't store search params/metadata on SerpAPI. Default false. | |
| open_on_day | No | Filter to places open on a given day (mon-sun). Combine with open_at_hour. Mutually exclusive with open_state. | |
| open_at_hour | No | Filter to places open at a given hour, 0-23. Use with open_on_day. Mutually exclusive with open_state. | |
| google_domain | No | Google domain to use, e.g. 'google.com'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral-disclosure burden. It usefully explains the two response modes, pagination behavior, and that place_id/data_cid feed google_maps_reviews, but it omits caching/no_cache behavior, zero_trace implications, rate limits, and authentication expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it starts with the core action, then explains the two modes, pagination, map centering, and the link to google_maps_reviews. Every sentence adds usable information without repeating the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 23-parameter tool with no annotations and no output schema, the description covers the core search/place workflow but does not describe return-value shape or the behavior of the many filter parameters such as min_rating, price filters, open_state, and no_cache. The schema compensates for parameter documentation, but the overall context is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 23 parameters thoroughly. The description still adds cross-parameter workflow value by explaining that place_id/data_cid come from a prior search result and feed google_maps_reviews, plus how pagination advances by 20.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Search Google Maps via SerpAPI') and clearly distinguishes the two operating modes: type=search returns a list, while type=place returns full details for one place. It does not explicitly differentiate this tool from the sibling google_local_search, which is the main clarity gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear mode-selection guidance: type=search is the default for queries, type=place requires place_id or data_cid, and pagination uses start with +20 per page. However, it does not say when to use this tool instead of google_local_search or google_maps_directions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
google_local_search - First observed
google_maps_directions - First observed
google_maps_reviews - First observed
google_maps_search
Related MCP Connectors
Find local businesses on Google: name, address, phone, hours, ratings, and photos.
Google Maps places and leads: phone, website, address, rating, reviews, hours, emails.
Google Maps place photos: image URLs, thumbnails, positions, and Street View panoramas.
Google Maps reviews of any place: stars, text, date, photos, owner reply. Links, place IDs or names.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceSearch for places using Google Maps Places API and retrieve place photos. Supports text-based place searches with details like ratings, hours, and addresses.157 npm1MIT
- AlicenseBqualityDmaintenanceEnables access to Google Maps business data including search, reviews, photos, and geocoding. Supports searching businesses by location, area, or coordinates, retrieving detailed business information, reviews, and performing reverse geocoding operations.13MIT
- AlicenseNot gradedqualityCmaintenanceEnables location-aware AI agents to search for nearby places, get detailed place information including hours and ratings, and calculate routes with turn-by-turn directions using Google Maps APIs.22MIT
- AlicenseNot gradedqualityDmaintenanceEnables searching Google Local for businesses by keyword and location, returning details like name, address, phone, hours, ratings, and more. Useful for lead generation, local SEO, and market analysis.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.