google-maps
...
@open-mcp/google-maps
Installing
First set the environment variables as shell variables:
KEY='...'
Then use the OpenMCP config CLI to add the server to your MCP client:
Claude desktop
npx @open-mcp/config add google-maps \
~/Library/Application\ Support/Claude/claude_desktop_config.json \
--KEY=$KEY
Cursor
Run this from the root of your project directory or, to add to all cursor projects, run it from your home directory ~
.
npx @open-mcp/config add google-maps \
.cursor/mcp.json \
--KEY=$KEY
Other
npx @open-mcp/config add google-maps \
/path/to/client/config.json \
--KEY=$KEY
Manually
If you don't want to use the helper above, add the following to your MCP client config manually:
{
"mcpServers": {
"google-maps": {
"command": "npx",
"args": ["-y", "@open-mcp/google-maps"],
"env": {"KEY":"..."}
}
}
}
Customizing the base URL
Set the environment variable OPEN_MCP_BASE_URL
to override each tool's base URL. This is useful if your OpenAPI spec defines a relative server URL.
Other environment variables
KEY
Inspector
Needs access to port 3000 for running a proxy server, will fail if http://localhost:3000 is already busy.
npx -y @modelcontextprotocol/inspector npx -y @open-mcp/google-maps
- Open http://localhost:5173
- Transport type:
STDIO
- Command:
npx
- Arguments:
-y @open-mcp/google-maps
- Click
Environment Variables
to add - Click
Connect
It should say MCP Server running on stdio in red.
- Click
List Tools
Tools
expandSchema
Expand the input schema for a tool before calling the tool
Input schema
{
toolName: z.string(),
jsonPointers: z.array(z.string().startsWith("/").describe("The pointer to the JSON schema object which needs expanding")).describe("A list of JSON pointers"),
}
geolocate
Environment variables
KEY
Input schema
{
"homeMobileCountryCode": z.number().int().describe("The cell tower's Mobile Country Code (MCC).").optional(),
"homeMobileNetworkCode": z.number().int().describe("The cell tower's Mobile Network Code. This is the MNC for GSM and WCDMA; CDMA uses the System ID (SID).").optional(),
"radioType": z.string().describe("The mobile radio type. Supported values are lte, gsm, cdma, and wcdma. While this field is optional, it should be included if a value is available, for more accurate results.").optional(),
"carrier": z.string().describe("The carrier name.").optional(),
"considerIp": z.string().describe("Specifies whether to fall back to IP geolocation if wifi and cell tower signals are not available. Defaults to true. Set considerIp to false to disable fall back.").optional(),
"cellTowers": z.array(z.object({ "cellId": z.number().int().describe("Unique identifier of the cell. On GSM, this is the Cell ID (CID); CDMA networks use the Base Station ID (BID). WCDMA networks use the UTRAN/GERAN Cell Identity (UC-Id), which is a 32-bit value concatenating the Radio Network Controller (RNC) and Cell ID. Specifying only the 16-bit Cell ID value in WCDMA networks may return inaccurate results."), "locationAreaCode": z.number().int().describe("The Location Area Code (LAC) for GSM and WCDMA networks. The Network ID (NID) for CDMA networks."), "mobileCountryCode": z.number().int().describe("The cell tower's Mobile Country Code (MCC)."), "mobileNetworkCode": z.number().int().describe("The cell tower's Mobile Network Code. This is the MNC for GSM and WCDMA; CDMA uses the System ID (SID)."), "age": z.number().int().describe("The number of milliseconds since this cell was primary. If age is 0, the cellId represents a current measurement.").optional(), "signalStrength": z.number().describe("Radio signal strength measured in dBm.").optional(), "timingAdvance": z.number().describe("The timing advance value.").optional() }).describe("Attributes used to describe a cell tower. The following optional fields are not currently used, but may be included if values are available: \`age\`, \`signalStrength\`, \`timingAdvance\`.")).describe("The request body's cellTowers array contains zero or more cell tower objects.").optional(),
"wifiAccessPoints": z.array(z.object({ "macAddress": z.string().describe("The MAC address of the WiFi node. It's typically called a BSS, BSSID or MAC address. Separators must be \`:\` (colon)."), "signalStrength": z.number().int().describe("The current signal strength measured in dBm.").optional(), "signalToNoiseRatio": z.number().int().describe("The current signal to noise ratio measured in dB.").optional(), "age": z.number().int().describe("The number of milliseconds since this access point was detected.").optional(), "channel": z.number().int().describe("The channel over which the client is communication with the access point.").optional() }).describe("Attributes used to describe a WiFi access point.")).describe("An array of two or more WiFi access point objects.").optional()
}
directions
Environment variables
KEY
Input schema
{
"arrival_time": z.number().describe("Specifies the desired time of arrival for transit directions, in seconds since midnight, January 1, 1970 UTC. You can specify either \`departure_time\` or \`arrival_time\`, but not both. Note that \`arrival_time\` must be specified as an integer.\n").optional(),
"departure_time": z.number().describe("Specifies the desired time of departure. You can specify the time as an integer in seconds since midnight, January 1, 1970 UTC. If a \`departure_time\` later than 9999-12-31T23:59:59.999999999Z is specified, the API will fall back the \`departure_time\` to 9999-12-31T23:59:59.999999999Z. Alternatively, you can specify a value of now, which sets the departure time to the current time (correct to the nearest second). The departure time may be specified in two cases:\n* For requests where the travel mode is transit: You can optionally specify one of \`departure_time\` or \`arrival_time\`. If neither time is specified, the \`departure_time\` defaults to now (that is, the departure time defaults to the current time).\n* For requests where the travel mode is driving: You can specify the \`departure_time\` to receive a route and trip duration (response field: duration_in_traffic) that take traffic conditions into account. The \`departure_time\` must be set to the current time or some time in the future. It cannot be in the past.\n\n<div class=\"note\">Note: If departure time is not specified, choice of route and duration are based on road network and average time-independent traffic conditions. Results for a given request may vary over time due to changes in the road network, updated average traffic conditions, and the distributed nature of the service. Results may also vary between nearly-equivalent routes at any time or frequency.</div>\n<div class=\"note\">Note: Distance Matrix requests specifying \`departure_time\` when \`mode=driving\` are limited to a maximum of 100 elements per request. The number of origins times the number of destinations defines the number of elements.</div>\n").optional(),
"alternatives": z.boolean().describe("If set to \`true\`, specifies that the Directions service may provide more than one route alternative in the response. Note that providing route alternatives may increase the response time from the server. This is only available for requests without intermediate waypoints. For more information, see the [guide to waypoints](https://developers.google.com/maps/documentation/directions/get-directions#Waypoints).\n").optional(),
"avoid": z.string().describe("Indicates that the calculated route(s) should avoid the indicated features. This parameter supports the following arguments:\n* \`tolls\` indicates that the calculated route should avoid toll roads/bridges.\n* \`highways\` indicates that the calculated route should avoid highways.\n* \`ferries\` indicates that the calculated route should avoid ferries.\n* \`indoor\` indicates that the calculated route should avoid indoor steps for walking and transit directions.\n\nIt's possible to request a route that avoids any combination of tolls, highways and ferries by passing multiple restrictions to the avoid parameter. For example: \n\n\`\`\`\navoid=tolls|highways|ferries.\n\`\`\`\n").optional(),
"destination": z.string().describe("The place ID, address, or textual latitude/longitude value to which you wish to calculate directions. The options for the destination parameter are the same as for the origin parameter."),
"origin": z.string().describe("The place ID, address, or textual latitude/longitude value from which you wish to calculate directions.\n* Place IDs must be prefixed with \`place_id:\`. You can retrieve place IDs from the Geocoding API and the Places API (including Place Autocomplete). For an example using place IDs from Place Autocomplete, see [Place Autocomplete and Directions](https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-directions). For more about place IDs, see the [Place ID overview](https://developers.google.com/maps/documentation/places/web-service/place-id).\n \n \`\`\`\n origin=place_id:ChIJ3S-JXmauEmsRUcIaWtf4MzE\n \`\`\`\n \n* If you pass an address, the Directions service geocodes the string and converts it to a latitude/longitude coordinate to calculate directions. This coordinate may be different from that returned by the Geocoding API, for example a building entrance rather than its center.\n \n \`\`\`\n origin=24+Sussex+Drive+Ottawa+ON\n \`\`\`\n \n Using place IDs is preferred over using addresses or latitude/longitude coordinates. Using coordinates will always result in the point being snapped to the road nearest to those coordinates - which may not be an access point to the property, or even a road that will quickly or safely lead to the destination.\n* If you pass coordinates, the point will snap to the nearest road. Passing a place ID is preferred. If you do pass coordinates, ensure that no space exists between the latitude and longitude values.\n \n \`\`\`\n origin=41.43206,-81.38992\n \`\`\`\n\n* Plus codes must be formatted as a global code or a compound code. Format plus codes as shown here (plus signs are url-escaped to \`%2B\` and spaces are url-escaped to \`%20\`). \n \n * **Global code** is a 4 character area code and 6 character or longer local code (849VCWC8+R9 is \`849VCWC8%2BR9\`). \n * **Compound code** is a 6 character or longer local code with an explicit location (CWC8+R9 Mountain View, CA, USA is \`CWC8%2BR9%20Mountain%20View%20CA%20USA\`).\n\n<div class=\"note\">Note: For efficiency and accuracy, use place ID's when possible. These ID's are uniquely explicit like a lat/lng value pair and provide geocoding benefits for routing such as access points and traffic variables. Unlike an address, ID's do not require the service to perform a search or an intermediate request for place details; therefore, performance is better.</div>\n"),
"units": z.enum(["imperial","metric"]).describe("Specifies the unit system to use when displaying results.\n\nDirections results contain text within distance fields that may be displayed to the user to indicate the distance of a particular \"step\" of the route. By default, this text uses the unit system of the origin's country or region.\n\nFor example, a route from \"Chicago, IL\" to \"Toronto, ONT\" will display results in miles, while the reverse route will display results in kilometers. You may override this unit system by setting one explicitly within the request's units parameter, passing one of the following values:\n\n* \`metric\` specifies usage of the metric system. Textual distances are returned using kilometers and meters.\n* \`imperial\` specifies usage of the Imperial (English) system. Textual distances are returned using miles and feet.\n\n<div class=\"note\">Note: this unit system setting only affects the text displayed within distance fields. The distance fields also contain values which are always expressed in meters.</div>\n").optional(),
"waypoints": z.string().describe("<div class=\"caution\">Caution: Requests using more than 10 waypoints (between 11 and 25), or waypoint optimization, are billed at a higher rate. <a href=\"https://developers.google.com/maps/billing-and-pricing/pricing#directions-advanced\">Learn more about billing</a> for Google Maps Platform products.</div>\n\nSpecifies an array of intermediate locations to include along the route between the origin and destination points as pass through or stopover locations. Waypoints alter a route by directing it through the specified location(s). The API supports waypoints for these travel modes: driving, walking and bicycling; not transit. You can supply one or more locations separated by the pipe character (\`|\` or \`%7C\`), in the form of a place ID, an address, or latitude/longitude coordinates. By default, the Directions service calculates a route using the waypoints in the order they are given. The precedence for parsing the value of the waypoint is place ID, latitude/longitude coordinates, then address.\n* If you pass a place ID, you must prefix it with \`place_id:\`. You can retrieve place IDs from the Geocoding API and the Places API (including Place Autocomplete). For an example using place IDs from Place Autocomplete, see [Place Autocomplete and Directions](/maps/documentation/javascript/examples/places-autocomplete-directions). For more about place IDs, see the [Place ID overview](/maps/documentation/places/web-service/place-id).\n <div class=\"note\">For efficiency and accuracy, use place ID's when possible. These ID's are uniquely explicit like a lat/lng value pair and provide geocoding benefits for routing such as access points and traffic variables. Unlike an address, ID's do not require the service to perform a search or an intermediate request for place details; therefore, performance is better.</div>\n* If you pass latitude/longitude coordinates, the values go directly to the front-end server to calculate directions without geocoding. The points are snapped to roads and might not provide the accuracy your app needs. Use coordinates when you are confident the values truly specify the points your app needs for routing without regard to possible access points or additional geocoding details. Ensure that a comma (\`%2C\`) and not a space (\`%20\`) separates the latitude and longitude values.\n* If you pass an address, the Directions service will geocode the string and convert it into latitude/longitude coordinates to calculate directions. If the address value is ambiguous, the value might evoke a search to disambiguate from similar addresses. For example, \"1st Street\" could be a complete value or a partial value for \"1st street NE\" or \"1st St SE\". This result may be different from that returned by the Geocoding API. You can avoid possible misinterpretations using place IDs.\n* Alternatively, you can supply an encoded set of points using the [Encoded Polyline Algorithm](https://developers.google.com/maps/documentation/utilities/polylinealgorithm). You will find an encoded set is useful for a large number of waypoints, because the URL is significantly shorter. All web services have a URL limit of 8192 characters.\n * Encoded polylines must be prefixed with \`enc:\` and followed by a colon (\`:\`). For example: \`waypoints=enc:gfo}EtohhU:\`.\n * You can also include multiple encoded polylines, separated by the pipe character (\`|\`). For example, \`waypoints=via:enc:wc~oAwquwMdlTxiKtqLyiK:|enc:c~vnAamswMvlTor@tjGi}L:| via:enc:udymA{~bxM:\`\n\n##### Influence routes with stopover and pass through points\n\nFor each waypoint in the request, the directions response appends an entry to the \`legs\` array to provide the details for stopovers on that leg of the journey.\n\nIf you'd like to influence the route using waypoints without adding a stopover, add the prefix \`via:\` to the waypoint. Waypoints prefixed with \`via:\` will not add an entry to the \`legs\` array, but will route the journey through the waypoint.\n\nThe following URL modifies the previous request such that the journey is routed through Lexington without stopping:\n\n\`\`\`\nhttps://maps.googleapis.com/maps/api/directions/json?\norigin=Boston,MA&destination=Concord,MA\n&waypoints=Charlestown,MA|via:Lexington,MA \n\`\`\`\n\nThe \`via:\` prefix is most effective when creating routes in response to the user dragging the waypoints on the map. Doing so allows the user to see how the final route may look in real-time and helps ensure that waypoints are placed in locations that are accessible to the Directions API.\n\n<div class=\"caution\">Caution: Using the \`via:\` prefix to avoid stopovers results in directions that are strict in their interpretation of the waypoint. This interpretation may result in severe detours on the route or \`ZERO_RESULTS\` in the response status code if the Directions API is unable to create directions through that point.</div>\n\n\n##### Optimize your waypoints\n\nBy default, the Directions service calculates a route through the provided waypoints in their given order. Optionally, you may pass \`optimize:true\` as the first argument within the waypoints parameter to allow the Directions service to optimize the provided route by rearranging the waypoints in a more efficient order. (This optimization is an application of the traveling salesperson problem.) Travel time is the primary factor which is optimized, but other factors such as distance, number of turns and many more may be taken into account when deciding which route is the most efficient. All waypoints must be stopovers for the Directions service to optimize their route.\n\nIf you instruct the Directions service to optimize the order of its waypoints, their order will be returned in the \`waypoint_order\` field within the routes object. The \`waypoint_order\` field returns values which are zero-based.\n\nThe following example calculates a road journey from Adelaide, South Australia to each of South Australia's main wine regions using route optimization.\n\n\`\`\`\nhttps://maps.googleapis.com/maps/api/directions/json?\norigin=Adelaide,SA&destination=Adelaide,SA\n&waypoints=optimize:true|Barossa+Valley,SA|Clare,SA|Connawarra,SA|McLaren+Vale,SA\n\`\`\`\n\nInspection of the calculated route will indicate that calculation uses waypoints in the following waypoint order:\n\n\`\`\`\n\"waypoint_order\": [ 3, 2, 0, 1 ]\n\`\`\`\n\n<div class=\"caution\">Caution: Requests using waypoint optimization are billed at a higher rate. <a href=\"https://developers.google.com/maps/billing-and-pricing/pricing#directions-advanced\">Learn more about how Google Maps Platform products are billed.</a></div>\n").optional(),
"language": z.enum(["ar","bg","bn","ca","cs","da","de","el","en","en-AU","en-GB","es","eu","fa","fi","fil","fr","gl","gu","hi","hr","hu","id","it","iw","ja","kn","ko","lt","lv","ml","mr","nl","no","pl","pt","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","ta","te","th","tl","tr","uk","vi","zh-CN","zh-TW"]).describe("The language in which to return results.\n\n* See the [list of supported languages](https://developers.google.com/maps/faq#languagesupport). Google often updates the supported languages, so this list may not be exhaustive.\n* If \`language\` is not supplied, the API attempts to use the preferred language as specified in the \`Accept-Language\` header.\n* The API does its best to provide a street address that is readable for both the user and locals. To achieve that goal, it returns street addresses in the local language, transliterated to a script readable by the user if necessary, observing the preferred language. All other addresses are returned in the preferred language. Address components are all returned in the same language, which is chosen from the first component.\n* If a name is not available in the preferred language, the API uses the closest match.\n* The preferred language has a small influence on the set of results that the API chooses to return, and the order in which they are returned. The geocoder interprets abbreviations differently depending on language, such as the abbreviations for street types, or synonyms that may be valid in one language but not in another. For example, _utca_ and _tér_ are synonyms for street in Hungarian.").optional(),
"mode": z.enum(["driving","bicycling","transit","walking"]).describe("For the calculation of distances and directions, you may specify the transportation mode to use. By default, \`DRIVING\` mode is used. By default, directions are calculated as driving directions. The following travel modes are supported:\n\n* \`driving\` (default) indicates standard driving directions or distance using the road network.\n* \`walking\` requests walking directions or distance via pedestrian paths & sidewalks (where available).\n* \`bicycling\` requests bicycling directions or distance via bicycle paths & preferred streets (where available).\n* \`transit\` requests directions or distance via public transit routes (where available). Transit trips are available for up to 7 days in the past or 100 days in the future. If you set the mode to transit, you can optionally specify either a \`departure_time\` or an \`arrival_time\`. If neither time is specified, the \`departure_time\` defaults to now (that is, the departure time defaults to the current time). You can also optionally include a \`transit_mode\` and/or a \`transit_routing_preference\`. \n\n<div class=\"note\">Note: Both walking and bicycling directions may sometimes not include clear pedestrian or bicycling paths, so these directions will return warnings in the returned result which you must display to the user.</div>\n").optional(),
"region": z.enum(["ac","ad","ae","af","ag","ai","al","am","an","ao","aq","ar","as","at","au","aw","ax","az","ba","bb","bd","be","bf","bg","bh","bi","bj","bl","bm","bn","bo","bq","br","bs","bt","bv","bw","by","bz","ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cu","cv","cw","cx","cy","cz","de","dj","dk","dm","do","dz","ec","ee","eg","eh","en","er","es","et","eu","fi","fj","fk","fm","fo","fr","ga","gb","gd","ge","gf","gg","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy","hk","hm","hn","hr","ht","hu","id","ie","il","im","in","io","iq","ir","is","it","je","jm","jo","jp","ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz","la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly","ma","mc","md","me","mf","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu","mv","mw","mx","my","mz","na","nc","ne","nf","ng","ni","nl","no","np","nr","nu","nz","om","pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pt","pw","py","qa","re","ro","rs","ru","rw","sa","sb","sc","sd","se","sg","sh","si","sj","sk","sl","sm","sn","so","sr","ss","st","su","sv","sx","sy","sz","tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tp","tr","tt","tv","tw","tz","ua","ug","uk","um","us","uy","uz","va","vc","ve","vg","vi","vn","vu","wf","ws","ye","yt","za","zm","zw"]).describe("The region code, specified as a [ccTLD (\"top-level domain\")](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains) two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom's ccTLD is \"uk\" (.co.uk) while its ISO 3166-1 code is \"gb\" (technically for the entity of \"The United Kingdom of Great Britain and Northern Ireland\").").optional(),
"traffic_model": z.enum(["best_guess","pessimistic","optimistic"]).describe("Specifies the assumptions to use when calculating time in traffic. This setting affects the value returned in the duration_in_traffic field in the response, which contains the predicted time in traffic based on historical averages. The \`traffic_model\` parameter may only be specified for driving directions where the request includes a \`departure_time\`. The available values for this parameter are:\n* \`best_guess\` (default) indicates that the returned duration_in_traffic should be the best estimate of travel time given what is known about both historical traffic conditions and live traffic. Live traffic becomes more important the closer the \`departure_time\` is to now.\n* \`pessimistic\` indicates that the returned duration_in_traffic should be longer than the actual travel time on most days, though occasional days with particularly bad traffic conditions may exceed this value.\n* \`optimistic\` indicates that the returned duration_in_traffic should be shorter than the actual travel time on most days, though occasional days with particularly good traffic conditions may be faster than this value.\nThe default value of \`best_guess\` will give the most useful predictions for the vast majority of use cases. It is possible the \`best_guess\` travel time prediction may be shorter than \`optimistic\`, or alternatively, longer than \`pessimistic\`, due to the way the \`best_guess\` prediction model integrates live traffic information.\n").optional(),
"transit_mode": z.string().describe("Specifies one or more preferred modes of transit. This parameter may only be specified for transit directions. The parameter supports the following arguments:\n* \`bus\` indicates that the calculated route should prefer travel by bus.\n* \`subway\` indicates that the calculated route should prefer travel by subway.\n* \`train\` indicates that the calculated route should prefer travel by train.\n* \`tram\` indicates that the calculated route should prefer travel by tram and light rail.\n* \`rail\` indicates that the calculated route should prefer travel by train, tram, light rail, and subway. This is equivalent to \`transit_mode=train|tram|subway\`.\n").optional(),
"transit_routing_preference": z.enum(["less_walking","fewer_transfers"]).describe("Specifies preferences for transit routes. Using this parameter, you can bias the options returned, rather than accepting the default best route chosen by the API. This parameter may only be specified for transit directions. The parameter supports the following arguments:\n* \`less_walking\` indicates that the calculated route should prefer limited amounts of walking.\n* \`fewer_transfers\` indicates that the calculated route should prefer a limited number of transfers.\n").optional()
}
elevation
Environment variables
KEY
Input schema
{
"locations": z.array(z.string()).describe("An array of comma separated {latitude,longitude} strings.").optional(),
"path": z.array(z.string()).describe("An array of comma separated {latitude,longitude} strings.").optional(),
"samples": z.number().describe("Required if path parameter is set.").optional()
}
geocode
Environment variables
KEY
Input schema
{
"address": z.string().describe("The street address or plus code that you want to geocode. Specify addresses in accordance with the format used by the national postal service of the country concerned. Additional address elements such as business names and unit, suite or floor numbers should be avoided. Street address elements should be delimited by spaces (shown here as url-escaped to \`%20\`):\n\n\`\`\`\naddress=24%20Sussex%20Drive%20Ottawa%20ON\n\`\`\`\n\nFormat plus codes as shown here (plus signs are url-escaped to \`%2B\` and spaces are url-escaped to \`%20\`):\n- global code is a 4 character area code and 6 character or longer local code (\`849VCWC8+R9\` is \`849VCWC8%2BR9\`).\n- compound code is a 6 character or longer local code with an explicit location (\`CWC8+R9 Mountain View, CA, USA\` is \`CWC8%2BR9%20Mountain%20View%20CA%20USA\`).\n\n<div class=\"note\">Note: At least one of \`address\` or \`components\` is required.</div>").optional(),
"bounds": z.array(z.string()).describe("An array of comma separated {latitude,longitude} strings.").optional(),
"components": z.array(z.string()).describe("A components filter with elements separated by a pipe (|). The components filter is also accepted as an optional parameter if an address is provided. Each element in the components filter consists of a \`component:value\` pair, and fully restricts the results from the geocoder.\n\nThe components that can be filtered include:\n\n* \`postal_code\` matches \`postal_code\` and \`postal_code_prefix\`.\n* \`country\` matches a country name or a two letter ISO 3166-1 country code. The API follows the ISO standard for defining countries, and the filtering works best when using the corresponding ISO code of the country.\n <aside class=\"note\"><strong>Note</strong>: If you receive unexpected results with a country code, verify that you are using a code which includes the countries, dependent territories, and special areas of geographical interest you intend. You can find code information at Wikipedia: List of ISO 3166 country codes or the ISO Online Browsing Platform.</aside>\n \nThe following components may be used to influence results, but will not be enforced:\n\n* \`route\` matches the long or short name of a route.\n* \`locality\` matches against \`locality\` and \`sublocality\` types.\n* \`administrative_area\` matches all the \`administrative_area\` levels.\n \nNotes about component filtering:\n\n* Do not repeat these component filters in requests, or the API will return \`INVALID_REQUEST\`: \n * \`country\`\n * \`postal_code\`\n * \`route\`\n* If the request contains repeated component filters, the API evaluates those filters as an AND, not an OR.\n* Results are consistent with Google Maps, which occasionally yields unexpected \`ZERO_RESULTS\` responses. Using Place Autocomplete may provide better results in some use cases. To learn more, see [this FAQ](https://developers..google.com/maps/documentation/geocoding/faq#trbl_component_filtering).\n* For each address component, either specify it in the address parameter or in a components filter, but not both. Specifying the same values in both may result in \`ZERO_RESULTS\`.\n\n<div class=\"note\">Note: At least one of \`address\` or \`components\` is required.</div>").optional(),
"latlng": z.string().describe("The street address that you want to geocode, in the format used by the national postal service of the country concerned. Additional address elements such as business names and unit, suite or floor numbers should be avoided.").optional(),
"location_type": z.array(z.enum(["APPROXIMATE","GEOMETRIC_CENTER","RANGE_INTERPOLATED","ROOFTOP"])).describe("A filter of one or more location types, separated by a pipe (\`|\`). If the parameter contains multiple location types, the API returns all addresses that match any of the types. A note about processing: The \`location_type\` parameter does not restrict the search to the specified location type(s). Rather, the \`location_type\` acts as a post-search filter: the API fetches all results for the specified latlng, then discards those results that do not match the specified location type(s). The following values are supported:\n* \`APPROXIMATE\` returns only the addresses that are characterized as approximate.\n* \`GEOMETRIC_CENTER\` returns only geometric centers of a location such as a polyline (for example, a street) or polygon (region).\n* \`RANGE_INTERPOLATED\` returns only the addresses that reflect an approximation (usually on a road) interpolated between two precise points (such as intersections). An interpolated range generally indicates that rooftop geocodes are unavailable for a street address.\n* \`ROOFTOP\` returns only the addresses for which Google has location information accurate down to street address precision.").optional(),
"place_id": z.string().describe("A textual identifier that uniquely identifies a place, returned from a [Place Search](https://developers.google.com/maps/documentation/places/web-service/search).\nFor more information about place IDs, see the [place ID overview](https://developers.google.com/maps/documentation/places/web-service/place-id).\n").optional(),
"result_type": z.array(z.enum(["administrative_area_level_1","administrative_area_level_2","administrative_area_level_3","administrative_area_level_4","administrative_area_level_5","airport","colloquial_area","country","intersection","locality","natural_feature","neighborhood","park","plus_code","political","postal_code","premise","route","street_address","sublocality","subpremise"])).describe("A filter of one or more address types, separated by a pipe (|). If the parameter contains multiple address types, the API returns all addresses that match any of the types. A note about processing: The \`result_type\` parameter does not restrict the search to the specified address type(s). Rather, the \`result_type\` acts as a post-search filter: the API fetches all results for the specified \`latlng\`, then discards those results that do not match the specified address type(s).The following values are supported:\n* \`administrative_area_level_1\` indicates a first-order civil entity below the country level. Within the United States, these administrative levels are states. Not all nations exhibit these administrative levels. In most cases, administrative_area_level_1 * \`short\` names will closely match ISO 3166-2 subdivisions and other widely circulated lists; however this is not guaranteed as our geocoding results are based on a variety of signals and location data.\n* \`administrative_area_level_2\` indicates a second-order civil entity below the country level. Within the United States, these administrative levels are counties. Not all nations exhibit these administrative levels.\n* \`administrative_area_level_3\` indicates a third-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.\n* \`administrative_area_level_4\` indicates a fourth-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.\n* \`administrative_area_level_5\` indicates a fifth-order civil entity below the country level. This type indicates a minor civil division. Not all nations exhibit these administrative levels.\n* \`airport\` indicates an airport.\n* \`colloquial_area\` indicates a commonly-used alternative name for the entity.\n* \`country\` indicates the national political entity, and is typically the highest order type returned by the Geocoder.\n* \`intersection\` indicates a major intersection, usually of two major roads.\n* \`locality\` indicates an incorporated city or town political entity.\n* \`natural_feature\` indicates a prominent natural feature.\n* \`neighborhood\` indicates a named neighborhood\n* \`park\` indicates a named park.\n* \`plus_code\` indicates an encoded location reference, derived from latitude and longitude. Plus codes can be used as a replacement for street addresses in places where they do not exist (where buildings are not numbered or streets are not named). See [https://plus.codes/](https://plus.codes/) for details.\n* \`point_of_interest\` indicates a named point of interest. Typically, these \"POI\"s are prominent local entities that don't easily fit in another category, such as \"Empire State Building\" or \"Eiffel Tower\".\n* \`political\` indicates a political entity. Usually, this type indicates a polygon of some civil administration.\n* \`postal_code\` indicates a postal code as used to address postal mail within the country.\n* \`premise\` indicates a named location, usually a building or collection of buildings with a common name\n* \`route\` indicates a named route (such as \"US 101\").\n* \`street_address\` indicates a precise street address.\n* \`sublocality\` indicates a first-order civil entity below a locality. For some locations may receive one of the additional types: \`sublocality_level_1\` to \`sublocality_level_5\`. Each sublocality level is a civil entity. Larger numbers indicate a smaller geographic area.\n* \`subpremise\` indicates a first-order entity below a named location, usually a singular building within a collection of buildings with a common name").optional(),
"language": z.enum(["ar","bg","bn","ca","cs","da","de","el","en","en-AU","en-GB","es","eu","fa","fi","fil","fr","gl","gu","hi","hr","hu","id","it","iw","ja","kn","ko","lt","lv","ml","mr","nl","no","pl","pt","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","ta","te","th","tl","tr","uk","vi","zh-CN","zh-TW"]).describe("The language in which to return results.\n\n* See the [list of supported languages](https://developers.google.com/maps/faq#languagesupport). Google often updates the supported languages, so this list may not be exhaustive.\n* If \`language\` is not supplied, the API attempts to use the preferred language as specified in the \`Accept-Language\` header.\n* The API does its best to provide a street address that is readable for both the user and locals. To achieve that goal, it returns street addresses in the local language, transliterated to a script readable by the user if necessary, observing the preferred language. All other addresses are returned in the preferred language. Address components are all returned in the same language, which is chosen from the first component.\n* If a name is not available in the preferred language, the API uses the closest match.\n* The preferred language has a small influence on the set of results that the API chooses to return, and the order in which they are returned. The geocoder interprets abbreviations differently depending on language, such as the abbreviations for street types, or synonyms that may be valid in one language but not in another. For example, _utca_ and _tér_ are synonyms for street in Hungarian.").optional(),
"region": z.enum(["ac","ad","ae","af","ag","ai","al","am","an","ao","aq","ar","as","at","au","aw","ax","az","ba","bb","bd","be","bf","bg","bh","bi","bj","bl","bm","bn","bo","bq","br","bs","bt","bv","bw","by","bz","ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cu","cv","cw","cx","cy","cz","de","dj","dk","dm","do","dz","ec","ee","eg","eh","en","er","es","et","eu","fi","fj","fk","fm","fo","fr","ga","gb","gd","ge","gf","gg","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy","hk","hm","hn","hr","ht","hu","id","ie","il","im","in","io","iq","ir","is","it","je","jm","jo","jp","ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz","la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly","ma","mc","md","me","mf","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu","mv","mw","mx","my","mz","na","nc","ne","nf","ng","ni","nl","no","np","nr","nu","nz","om","pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pt","pw","py","qa","re","ro","rs","ru","rw","sa","sb","sc","sd","se","sg","sh","si","sj","sk","sl","sm","sn","so","sr","ss","st","su","sv","sx","sy","sz","tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tp","tr","tt","tv","tw","tz","ua","ug","uk","um","us","uy","uz","va","vc","ve","vg","vi","vn","vu","wf","ws","ye","yt","za","zm","zw"]).describe("The region code, specified as a [ccTLD (\"top-level domain\")](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains) two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom's ccTLD is \"uk\" (.co.uk) while its ISO 3166-1 code is \"gb\" (technically for the entity of \"The United Kingdom of Great Britain and Northern Ireland\").").optional()
}
timezone
Environment variables
KEY
Input schema
{
"language": z.enum(["ar","bg","bn","ca","cs","da","de","el","en","en-AU","en-GB","es","eu","fa","fi","fil","fr","gl","gu","hi","hr","hu","id","it","iw","ja","kn","ko","lt","lv","ml","mr","nl","no","pl","pt","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","ta","te","th","tl","tr","uk","vi","zh-CN","zh-TW"]).describe("The language in which to return results.\n\n* See the [list of supported languages](https://developers.google.com/maps/faq#languagesupport). Google often updates the supported languages, so this list may not be exhaustive.\n* If \`language\` is not supplied, the API attempts to use the preferred language as specified in the \`Accept-Language\` header.\n* The API does its best to provide a street address that is readable for both the user and locals. To achieve that goal, it returns street addresses in the local language, transliterated to a script readable by the user if necessary, observing the preferred language. All other addresses are returned in the preferred language. Address components are all returned in the same language, which is chosen from the first component.\n* If a name is not available in the preferred language, the API uses the closest match.\n* The preferred language has a small influence on the set of results that the API chooses to return, and the order in which they are returned. The geocoder interprets abbreviations differently depending on language, such as the abbreviations for street types, or synonyms that may be valid in one language but not in another. For example, _utca_ and _tér_ are synonyms for street in Hungarian.").optional(),
"location": z.string().describe("A comma-separated latitude,longitude tuple, \`location=39.6034810,-119.6822510\`, representing the location to look up.\n"),
"timestamp": z.number().describe("The desired time as seconds since midnight, January 1, 1970 UTC. The Time Zone API uses the \`timestamp\` to determine whether or not Daylight Savings should be applied, based on the time zone of the \`location\`. \n\nNote that the API does not take historical time zones into account. That is, if you specify a past timestamp, the API does not take into account the possibility that the location was previously in a different time zone.\n")
}
snaptoroads
Environment variables
KEY
Input schema
{
"path": z.array(z.string()).describe("An array of comma separated {latitude,longitude} strings."),
"interpolate": z.boolean().describe("Whether to interpolate a path to include all points forming the full road-geometry. When true, additional interpolated points will also be returned, resulting in a path that smoothly follows the geometry of the road, even around corners and through tunnels. Interpolated paths will most likely contain more points than the original path. Defaults to \`false\`.\n").optional()
}
nearestroads
Environment variables
KEY
Input schema
{
"points": z.array(z.string()).describe("An array of comma separated {latitude,longitude} strings.")
}
distancematrix
Environment variables
KEY
Input schema
{
"arrival_time": z.number().describe("Specifies the desired time of arrival for transit directions, in seconds since midnight, January 1, 1970 UTC. You can specify either \`departure_time\` or \`arrival_time\`, but not both. Note that \`arrival_time\` must be specified as an integer.\n").optional(),
"departure_time": z.number().describe("Specifies the desired time of departure. You can specify the time as an integer in seconds since midnight, January 1, 1970 UTC. If a \`departure_time\` later than 9999-12-31T23:59:59.999999999Z is specified, the API will fall back the \`departure_time\` to 9999-12-31T23:59:59.999999999Z. Alternatively, you can specify a value of now, which sets the departure time to the current time (correct to the nearest second). The departure time may be specified in two cases:\n* For requests where the travel mode is transit: You can optionally specify one of \`departure_time\` or \`arrival_time\`. If neither time is specified, the \`departure_time\` defaults to now (that is, the departure time defaults to the current time).\n* For requests where the travel mode is driving: You can specify the \`departure_time\` to receive a route and trip duration (response field: duration_in_traffic) that take traffic conditions into account. The \`departure_time\` must be set to the current time or some time in the future. It cannot be in the past.\n\n<div class=\"note\">Note: If departure time is not specified, choice of route and duration are based on road network and average time-independent traffic conditions. Results for a given request may vary over time due to changes in the road network, updated average traffic conditions, and the distributed nature of the service. Results may also vary between nearly-equivalent routes at any time or frequency.</div>\n<div class=\"note\">Note: Distance Matrix requests specifying \`departure_time\` when \`mode=driving\` are limited to a maximum of 100 elements per request. The number of origins times the number of destinations defines the number of elements.</div>\n").optional(),
"avoid": z.string().describe("Distances may be calculated that adhere to certain restrictions. Restrictions are indicated by use of the avoid parameter, and an argument to that parameter indicating the restriction to avoid. The following restrictions are supported:\n\n* \`tolls\` indicates that the calculated route should avoid toll roads/bridges.\n* \`highways\` indicates that the calculated route should avoid highways.\n* \`ferries\` indicates that the calculated route should avoid ferries.\n* \`indoor\` indicates that the calculated route should avoid indoor steps for walking and transit directions.\n\n<div class=\"note\">Note: The addition of restrictions does not preclude routes that include the restricted feature; it biases the result to more favorable routes.</div>\n").optional(),
"destinations": z.array(z.string()).describe("One or more locations to use as the finishing point for calculating travel distance and time. The options for the destinations parameter are the same as for the origins parameter."),
"origins": z.array(z.string()).describe("The starting point for calculating travel distance and time. You can supply one or more locations separated by the pipe character (|), in the form of a place ID, an address, or latitude/longitude coordinates:\n- **Place ID**: If you supply a place ID, you must prefix it with \`place_id:\`.\n- **Address**: If you pass an address, the service geocodes the string and converts it to a latitude/longitude coordinate to calculate distance. This coordinate may be different from that returned by the Geocoding API, for example a building entrance rather than its center.\n <div class=\"note\">Note: using place IDs is preferred over using addresses or latitude/longitude coordinates. Using coordinates will always result in the point being snapped to the road nearest to those coordinates - which may not be an access point to the property, or even a road that will quickly or safely lead to the destination. Using the address will provide the distance to the center of the building, as opposed to an entrance to the building.</div>\n- **Coordinates**: If you pass latitude/longitude coordinates, they they will snap to the nearest road. Passing a place ID is preferred. If you do pass coordinates, ensure that no space exists between the latitude and longitude values.\n- **Plus codes** must be formatted as a global code or a compound code. Format plus codes as shown here (plus signs are url-escaped to %2B and spaces are url-escaped to %20):\n - **global code** is a 4 character area code and 6 character or longer local code (\`849VCWC8+R9\` is encoded to \`849VCWC8%2BR9\`).\n - **compound code** is a 6 character or longer local code with an explicit location (\`CWC8+R9 Mountain View, CA, USA\` is encoded to \`CWC8%2BR9%20Mountain%20View%20CA%20USA\`).\n- **Encoded Polyline** Alternatively, you can supply an encoded set of coordinates using the [Encoded Polyline Algorithm](https://developers.google.com/maps/documentation/utilities/polylinealgorithm). This is particularly useful if you have a large number of origin points, because the URL is significantly shorter when using an encoded polyline.\n - Encoded polylines must be prefixed with \`enc:\` and followed by a colon \`:\`. For example: \`origins=enc:gfo}EtohhU:\`\n - You can also include multiple encoded polylines, separated by the pipe character \`|\`. For example: \n \`\`\`\n origins=enc:wc~oAwquwMdlTxiKtqLyiK:|enc:c~vnAamswMvlTor@tjGi}L:|enc:udymA{~bxM:\n \`\`\`\n"),
"units": z.enum(["imperial","metric"]).describe("Specifies the unit system to use when displaying results.\n\n<div class=\"note\">Note: this unit system setting only affects the text displayed within distance fields. The distance fields also contain values which are always expressed in meters.</div>\n").optional(),
"language": z.enum(["ar","bg","bn","ca","cs","da","de","el","en","en-AU","en-GB","es","eu","fa","fi","fil","fr","gl","gu","hi","hr","hu","id","it","iw","ja","kn","ko","lt","lv","ml","mr","nl","no","pl","pt","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","ta","te","th","tl","tr","uk","vi","zh-CN","zh-TW"]).describe("The language in which to return results.\n\n* See the [list of supported languages](https://developers.google.com/maps/faq#languagesupport). Google often updates the supported languages, so this list may not be exhaustive.\n* If \`language\` is not supplied, the API attempts to use the preferred language as specified in the \`Accept-Language\` header.\n* The API does its best to provide a street address that is readable for both the user and locals. To achieve that goal, it returns street addresses in the local language, transliterated to a script readable by the user if necessary, observing the preferred language. All other addresses are returned in the preferred language. Address components are all returned in the same language, which is chosen from the first component.\n* If a name is not available in the preferred language, the API uses the closest match.\n* The preferred language has a small influence on the set of results that the API chooses to return, and the order in which they are returned. The geocoder interprets abbreviations differently depending on language, such as the abbreviations for street types, or synonyms that may be valid in one language but not in another. For example, _utca_ and _tér_ are synonyms for street in Hungarian.").optional(),
"mode": z.enum(["driving","bicycling","transit","walking"]).describe("For the calculation of distances and directions, you may specify the transportation mode to use. By default, \`DRIVING\` mode is used. By default, directions are calculated as driving directions. The following travel modes are supported:\n\n* \`driving\` (default) indicates standard driving directions or distance using the road network.\n* \`walking\` requests walking directions or distance via pedestrian paths & sidewalks (where available).\n* \`bicycling\` requests bicycling directions or distance via bicycle paths & preferred streets (where available).\n* \`transit\` requests directions or distance via public transit routes (where available). Transit trips are available for up to 7 days in the past or 100 days in the future. If you set the mode to transit, you can optionally specify either a \`departure_time\` or an \`arrival_time\`. If neither time is specified, the \`departure_time\` defaults to now (that is, the departure time defaults to the current time). You can also optionally include a \`transit_mode\` and/or a \`transit_routing_preference\`. \n\n<div class=\"note\">Note: Both walking and bicycling directions may sometimes not include clear pedestrian or bicycling paths, so these directions will return warnings in the returned result which you must display to the user.</div>\n").optional(),
"region": z.enum(["ac","ad","ae","af","ag","ai","al","am","an","ao","aq","ar","as","at","au","aw","ax","az","ba","bb","bd","be","bf","bg","bh","bi","bj","bl","bm","bn","bo","bq","br","bs","bt","bv","bw","by","bz","ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cu","cv","cw","cx","cy","cz","de","dj","dk","dm","do","dz","ec","ee","eg","eh","en","er","es","et","eu","fi","fj","fk","fm","fo","fr","ga","gb","gd","ge","gf","gg","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy","hk","hm","hn","hr","ht","hu","id","ie","il","im","in","io","iq","ir","is","it","je","jm","jo","jp","ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz","la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly","ma","mc","md","me","mf","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu","mv","mw","mx","my","mz","na","nc","ne","nf","ng","ni","nl","no","np","nr","nu","nz","om","pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pt","pw","py","qa","re","ro","rs","ru","rw","sa","sb","sc","sd","se","sg","sh","si","sj","sk","sl","sm","sn","so","sr","ss","st","su","sv","sx","sy","sz","tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tp","tr","tt","tv","tw","tz","ua","ug","uk","um","us","uy","uz","va","vc","ve","vg","vi","vn","vu","wf","ws","ye","yt","za","zm","zw"]).describe("The region code, specified as a [ccTLD (\"top-level domain\")](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains) two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom's ccTLD is \"uk\" (.co.uk) while its ISO 3166-1 code is \"gb\" (technically for the entity of \"The United Kingdom of Great Britain and Northern Ireland\").").optional(),
"traffic_model": z.enum(["best_guess","pessimistic","optimistic"]).describe("Specifies the assumptions to use when calculating time in traffic. This setting affects the value returned in the duration_in_traffic field in the response, which contains the predicted time in traffic based on historical averages. The \`traffic_model\` parameter may only be specified for driving directions where the request includes a \`departure_time\`. The available values for this parameter are:\n* \`best_guess\` (default) indicates that the returned duration_in_traffic should be the best estimate of travel time given what is known about both historical traffic conditions and live traffic. Live traffic becomes more important the closer the \`departure_time\` is to now.\n* \`pessimistic\` indicates that the returned duration_in_traffic should be longer than the actual travel time on most days, though occasional days with particularly bad traffic conditions may exceed this value.\n* \`optimistic\` indicates that the returned duration_in_traffic should be shorter than the actual travel time on most days, though occasional days with particularly good traffic conditions may be faster than this value.\nThe default value of \`best_guess\` will give the most useful predictions for the vast majority of use cases. It is possible the \`best_guess\` travel time prediction may be shorter than \`optimistic\`, or alternatively, longer than \`pessimistic\`, due to the way the \`best_guess\` prediction model integrates live traffic information.\n").optional(),
"transit_mode": z.string().describe("Specifies one or more preferred modes of transit. This parameter may only be specified for transit directions. The parameter supports the following arguments:\n* \`bus\` indicates that the calculated route should prefer travel by bus.\n* \`subway\` indicates that the calculated route should prefer travel by subway.\n* \`train\` indicates that the calculated route should prefer travel by train.\n* \`tram\` indicates that the calculated route should prefer travel by tram and light rail.\n* \`rail\` indicates that the calculated route should prefer travel by train, tram, light rail, and subway. This is equivalent to \`transit_mode=train|tram|subway\`.\n").optional(),
"transit_routing_preference": z.enum(["less_walking","fewer_transfers"]).describe("Specifies preferences for transit routes. Using this parameter, you can bias the options returned, rather than accepting the default best route chosen by the API. This parameter may only be specified for transit directions. The parameter supports the following arguments:\n* \`less_walking\` indicates that the calculated route should prefer limited amounts of walking.\n* \`fewer_transfers\` indicates that the calculated route should prefer a limited number of transfers.\n").optional()
}
placedetails
Environment variables
KEY
Input schema
{
"place_id": z.string().describe("A textual identifier that uniquely identifies a place, returned from a [Place Search](https://developers.google.com/maps/documentation/places/web-service/search).\nFor more information about place IDs, see the [place ID overview](https://developers.google.com/maps/documentation/places/web-service/place-id).\n"),
"fields": z.array(z.string()).min(1).describe("\n<div class=\"caution\"> Caution: Place Search requests and Place Details requests do not return the same fields. Place Search requests return a subset of the fields that are returned by Place Details requests. If the field you want is not returned by Place Search, you can use Place Search to get a <code>place_id</code>, then use that Place ID to make a Place Details request. For more information on the fields that are unavailable in a Place Search request, see <a href=\"https://developers.google.com/maps/documentation/places/web-service/place-data-fields#places-api-fields-support\">Places API fields support</a>.</div>\n\nUse the fields parameter to specify a comma-separated list of place data types to return. For example: \`fields=formatted_address,name,geometry\`. Use a forward slash when specifying compound values. For example: \`opening_hours/open_now\`.\n\nFields are divided into three billing categories: Basic, Contact, and Atmosphere. Basic fields are billed at base rate, and incur no additional charges. Contact and Atmosphere fields are billed at a higher rate. See the [pricing sheet](https://developers.google.com/maps/documentation/places/web-service/usage-and-billing/) for more information. Attributions, \`html_attributions\`, are always returned with every call, regardless of whether the field has been requested.\n\n**Basic**\n\nThe Basic category includes the following fields: \`address_components\`, \`adr_address\`, \`business_status\`, \`formatted_address\`, \`geometry\`, \`icon\`, \`icon_mask_base_uri\`, \`icon_background_color\`, \`name\`, \`permanently_closed\` ([deprecated](https://developers.google.com/maps/deprecations)), \`photo\`, \`place_id\`, \`plus_code\`, \`type\`, \`url\`, \`utc_offset\`, \`vicinity\`, \`wheelchair_accessible_entrance\`.\n\n**Contact**\n\nThe Contact category includes the following fields: \`current_opening_hours\`, \`formatted_phone_number\`, \`international_phone_number\`, \`opening_hours\`, \`secondary_opening_hours\`, \`website\`\n\n**Atmosphere**\n\nThe Atmosphere category includes the following fields: \`curbside_pickup\`, \`delivery\`, \`dine_in\`, \`editorial_summary\`, \`price_level\`, \`rating\`, \`reservable\`, \`reviews\`, \`serves_beer\`, \`serves_breakfast\`, \`serves_brunch\`, \`serves_dinner\`, \`serves_lunch\`, \`serves_vegetarian_food\`, \`serves_wine\`, \`takeout\`, \`user_ratings_total\`.\n").optional(),
"sessiontoken": z.string().describe("A random string which identifies an autocomplete [session](https://developers.google.com/maps/documentation/places/web-service/details#session_tokens) for billing purposes.\n\nThe session begins when the user starts typing a query, and concludes when they select a place and a call to Place Details is made. Each session can have multiple queries, followed by one place selection. The API key(s) used for each request within a session must belong to the same Google Cloud Console project. Once a session has concluded, the token is no longer valid; your app must generate a fresh token for each session. If the \`sessiontoken\` parameter is omitted, or if you reuse a session token, the session is charged as if no session token was provided (each request is billed separately).\n\nWe recommend the following guidelines:\n\n- Use session tokens for all autocomplete sessions.\n- Generate a fresh token for each session. Using a version 4 UUID is recommended.\n- Ensure that the API key(s) used for all Place Autocomplete and Place Details requests within a session belong to the same Cloud Console project.\n- Be sure to pass a unique session token for each new session. Using the same token for more than one session will result in each request being billed individually.\n").optional(),
"language": z.enum(["ar","bg","bn","ca","cs","da","de","el","en","en-AU","en-GB","es","eu","fa","fi","fil","fr","gl","gu","hi","hr","hu","id","it","iw","ja","kn","ko","lt","lv","ml","mr","nl","no","pl","pt","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","ta","te","th","tl","tr","uk","vi","zh-CN","zh-TW"]).describe("The language in which to return results.\n\n* See the [list of supported languages](https://developers.google.com/maps/faq#languagesupport). Google often updates the supported languages, so this list may not be exhaustive.\n* If \`language\` is not supplied, the API attempts to use the preferred language as specified in the \`Accept-Language\` header.\n* The API does its best to provide a street address that is readable for both the user and locals. To achieve that goal, it returns street addresses in the local language, transliterated to a script readable by the user if necessary, observing the preferred language. All other addresses are returned in the preferred language. Address components are all returned in the same language, which is chosen from the first component.\n* If a name is not available in the preferred language, the API uses the closest match.\n* The preferred language has a small influence on the set of results that the API chooses to return, and the order in which they are returned. The geocoder interprets abbreviations differently depending on language, such as the abbreviations for street types, or synonyms that may be valid in one language but not in another. For example, _utca_ and _tér_ are synonyms for street in Hungarian.").optional(),
"region": z.enum(["ac","ad","ae","af","ag","ai","al","am","an","ao","aq","ar","as","at","au","aw","ax","az","ba","bb","bd","be","bf","bg","bh","bi","bj","bl","bm","bn","bo","bq","br","bs","bt","bv","bw","by","bz","ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cu","cv","cw","cx","cy","cz","de","dj","dk","dm","do","dz","ec","ee","eg","eh","en","er","es","et","eu","fi","fj","fk","fm","fo","fr","ga","gb","gd","ge","gf","gg","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy","hk","hm","hn","hr","ht","hu","id","ie","il","im","in","io","iq","ir","is","it","je","jm","jo","jp","ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz","la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly","ma","mc","md","me","mf","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu","mv","mw","mx","my","mz","na","nc","ne","nf","ng","ni","nl","no","np","nr","nu","nz","om","pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pt","pw","py","qa","re","ro","rs","ru","rw","sa","sb","sc","sd","se","sg","sh","si","sj","sk","sl","sm","sn","so","sr","ss","st","su","sv","sx","sy","sz","tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tp","tr","tt","tv","tw","tz","ua","ug","uk","um","us","uy","uz","va","vc","ve","vg","vi","vn","vu","wf","ws","ye","yt","za","zm","zw"]).describe("The region code, specified as a [ccTLD (\"top-level domain\")](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains) two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom's ccTLD is \"uk\" (.co.uk) while its ISO 3166-1 code is \"gb\" (technically for the entity of \"The United Kingdom of Great Britain and Northern Ireland\").").optional(),
"reviews_sort": z.string().describe("The sorting method to use when returning reviews. Can be set to \`most_relevant\` (default) or \`newest\`.\n\n- For \`most_relevant\` (default), reviews are sorted by relevance; the service will bias the results to return reviews originally written in the preferred language.\n- For \`newest\`, reviews are sorted in chronological order; the preferred language does not affect the sort order.\n\nGoogle recommends that you display how the reviews are being sorted to the end user.\n").optional(),
"reviews_no_translations": z.boolean().describe("\nSpecify \`reviews_no_translations=true\` to disable translation of reviews; specify \`reviews_no_translations=false\` to enable translation of reviews. Reviews are returned in their original language.\n\nIf omitted, or passed with no value, translation of reviews is enabled. If the \`language\` parameter was specified in the request, use the specified language as the preferred language for translation. If \`language\` is omitted, the API attempts to use the \`Accept-Language\` header as the preferred language.\n").optional()
}
findplacefromtext
Environment variables
KEY
Input schema
{
"fields": z.array(z.string()).min(1).describe("\n<div class=\"caution\"> Caution: Place Search requests and Place Details requests do not return the same fields. Place Search requests return a subset of the fields that are returned by Place Details requests. If the field you want is not returned by Place Search, you can use Place Search to get a <code>place_id</code>, then use that Place ID to make a Place Details request. For more information on the fields that are unavailable in a Place Search request, see <a href=\"https://developers.google.com/maps/documentation/places/web-service/place-data-fields#places-api-fields-support\">Places API fields support</a>.</div>\n\nUse the fields parameter to specify a comma-separated list of place data types to return. For example: \`fields=formatted_address,name,geometry\`. Use a forward slash when specifying compound values. For example: \`opening_hours/open_now\`.\n\nFields are divided into three billing categories: Basic, Contact, and Atmosphere. Basic fields are billed at base rate, and incur no additional charges. Contact and Atmosphere fields are billed at a higher rate. See the [pricing sheet](https://developers.google.com/maps/documentation/places/web-service/usage-and-billing/) for more information. Attributions, \`html_attributions\`, are always returned with every call, regardless of whether the field has been requested.\n\n**Basic**\n\nThe Basic category includes the following fields: \`address_components\`, \`adr_address\`, \`business_status\`, \`formatted_address\`, \`geometry\`, \`icon\`, \`icon_mask_base_uri\`, \`icon_background_color\`, \`name\`, \`permanently_closed\` ([deprecated](https://developers.google.com/maps/deprecations)), \`photo\`, \`place_id\`, \`plus_code\`, \`type\`, \`url\`, \`utc_offset\`, \`vicinity\`, \`wheelchair_accessible_entrance\`.\n\n**Contact**\n\nThe Contact category includes the following fields: \`current_opening_hours\`, \`formatted_phone_number\`, \`international_phone_number\`, \`opening_hours\`, \`secondary_opening_hours\`, \`website\`\n\n**Atmosphere**\n\nThe Atmosphere category includes the following fields: \`curbside_pickup\`, \`delivery\`, \`dine_in\`, \`editorial_summary\`, \`price_level\`, \`rating\`, \`reservable\`, \`reviews\`, \`serves_beer\`, \`serves_breakfast\`, \`serves_brunch\`, \`serves_dinner\`, \`serves_lunch\`, \`serves_vegetarian_food\`, \`serves_wine\`, \`takeout\`, \`user_ratings_total\`.\n").optional(),
"input": z.string().describe("The text string on which to search, for example: \"restaurant\" or \"123 Main Street\". This must be a place name, address, or category of establishments. Any other types of input can generate errors\nand are not guaranteed to return valid results. The Places API will return candidate matches based on this string and order the results based on their perceived relevance.\n"),
"inputtype": z.enum(["textquery","phonenumber"]).describe("The type of input. This can be one of either \`textquery\` or \`phonenumber\`. Phone numbers must be in international format (prefixed by a plus sign (\"+\"), followed by the country code, then the phone number itself). See [E.164 ITU recommendation](https://en.wikipedia.org/wiki/E.164) for more information.\n"),
"locationbias": z.string().describe("Prefer results in a specified area, by specifying either a radius plus lat/lng, or two lat/lng pairs representing the points of a rectangle. If this parameter is not specified, the API uses IP address biasing by default.\n- IP bias: Instructs the API to use IP address biasing. Pass the string \`ipbias\` (this option has no additional parameters).\n- Circular: A string specifying radius in meters, plus lat/lng in decimal degrees. Use the following format: \`circle:radius@lat,lng\`.\n- Rectangular: A string specifying two lat/lng pairs in decimal degrees, representing the south/west and north/east points of a rectangle. Use the following format:\`rectangle:south,west|north,east\`. Note that east/west values are wrapped to the range -180, 180, and north/south values are clamped to the range -90, 90.\n").optional(),
"language": z.enum(["ar","bg","bn","ca","cs","da","de","el","en","en-AU","en-GB","es","eu","fa","fi","fil","fr","gl","gu","hi","hr","hu","id","it","iw","ja","kn","ko","lt","lv","ml","mr","nl","no","pl","pt","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","ta","te","th","tl","tr","uk","vi","zh-CN","zh-TW"]).describe("The language in which to return results.\n\n* See the [list of supported languages](https://developers.google.com/maps/faq#languagesupport). Google often updates the supported languages, so this list may not be exhaustive.\n* If \`language\` is not supplied, the API attempts to use the preferred language as specified in the \`Accept-Language\` header.\n* The API does its best to provide a street address that is readable for both the user and locals. To achieve that goal, it returns street addresses in the local language, transliterated to a script readable by the user if necessary, observing the preferred language. All other addresses are returned in the preferred language. Address components are all returned in the same language, which is chosen from the first component.\n* If a name is not available in the preferred language, the API uses the closest match.\n* The preferred language has a small influence on the set of results that the API chooses to return, and the order in which they are returned. The geocoder interprets abbreviations differently depending on language, such as the abbreviations for street types, or synonyms that may be valid in one language but not in another. For example, _utca_ and _tér_ are synonyms for street in Hungarian.").optional()
}
nearbysearch
Environment variables
KEY
Input schema
{
"keyword": z.string().describe("The text string on which to search, for example: \"restaurant\" or \"123 Main Street\". This must be a place name, address, or category of establishments.\nAny other types of input can generate errors and are not guaranteed to return valid results. The Google Places service will return candidate matches\nbased on this string and order the results based on their perceived relevance.\n\nExplicitly including location information using this parameter may conflict with the location, radius, and rankby parameters, causing unexpected results.\n\nIf this parameter is omitted, places with a business_status of CLOSED_TEMPORARILY or CLOSED_PERMANENTLY will not be returned.\n").optional(),
"location": z.string().describe("The point around which to retrieve place information. This must be specified as \`latitude,longitude\`.\n"),
"maxprice": z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).describe("Restricts results to only those places within the specified range. Valid values range between 0 (most affordable) to 4 (most expensive), inclusive. The exact amount indicated by a specific value will vary from region to region.\n").optional(),
"minprice": z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).describe("Restricts results to only those places within the specified range. Valid values range between 0 (most affordable) to 4 (most expensive), inclusive. The exact amount indicated by a specific value will vary from region to region.\n").optional(),
"name": z.string().describe("Equivalent to \`keyword\`. Values in this field are combined with values in the \`keyword\` field and passed as part of the same search string.\n").optional(),
"opennow": z.boolean().describe("Returns only those places that are open for business at the time the query is sent. Places that do not specify opening hours in the Google Places database will not be returned if you include this parameter in your query.\n").optional(),
"pagetoken": z.string().describe("Returns up to 20 results from a previously run search. Setting a \`pagetoken\` parameter will execute a search with the same parameters used previously — all parameters other than pagetoken will be ignored.\n").optional(),
"rankby": z.enum(["prominence","distance"]).describe("Specifies the order in which results are listed. Possible values are:\n- \`prominence\` (default). This option sorts results based on their importance. Ranking will favor prominent places within the set radius over nearby places that match but that are less prominent. Prominence can be affected by a place's ranking in Google's index, global popularity, and other factors. When prominence is specified, the \`radius\` parameter is required.\n- \`distance\`. This option biases search results in ascending order by their distance from the specified location. When \`distance\` is specified, one or more of \`keyword\`, \`name\`, or \`type\` is required and \`radius\` is disallowed.\n").optional(),
"radius": z.number().describe("Defines the distance (in meters) within which to return place results. You may bias results to a specified circle by passing a \`location\` and a \`radius\` parameter. Doing so instructs the Places service to _prefer_ showing results within that circle; results outside of the defined area may still be displayed.\n\nThe radius will automatically be clamped to a maximum value depending on the type of search and other parameters.\n\n* Autocomplete: 50,000 meters\n* Nearby Search: \n * with \`keyword\` or \`name\`: 50,000 meters\n * without \`keyword\` or \`name\`\n * Up to 50,000 meters, adjusted dynamically based on area density, independent of \`rankby\` parameter.\n * When using \`rankby=distance\`, the radius parameter will not be accepted, and will result in an \`INVALID_REQUEST\`.\n* Query Autocomplete: 50,000 meters\n* Text Search: 50,000 meters\n"),
"type": z.string().describe("Restricts the results to places matching the specified type. Only one type may be specified. If more than one type is provided, all types following the first entry are ignored.\n\n* \`type=hospital|pharmacy|doctor\` becomes \`type=hospital\`\n* \`type=hospital,pharmacy,doctor\` is ignored entirely\n\nSee the list of [supported types](https://developers.google.com/maps/documentation/places/web-service/supported_types).\n<div class=\"note\">Note: Adding both \`keyword\` and \`type\` with the same value (\`keyword=cafe&type=cafe\` or \`keyword=parking&type=parking\`) can yield \`ZERO_RESULTS\`.</div>\n").optional(),
"language": z.enum(["ar","bg","bn","ca","cs","da","de","el","en","en-AU","en-GB","es","eu","fa","fi","fil","fr","gl","gu","hi","hr","hu","id","it","iw","ja","kn","ko","lt","lv","ml","mr","nl","no","pl","pt","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","ta","te","th","tl","tr","uk","vi","zh-CN","zh-TW"]).describe("The language in which to return results.\n\n* See the [list of supported languages](https://developers.google.com/maps/faq#languagesupport). Google often updates the supported languages, so this list may not be exhaustive.\n* If \`language\` is not supplied, the API attempts to use the preferred language as specified in the \`Accept-Language\` header.\n* The API does its best to provide a street address that is readable for both the user and locals. To achieve that goal, it returns street addresses in the local language, transliterated to a script readable by the user if necessary, observing the preferred language. All other addresses are returned in the preferred language. Address components are all returned in the same language, which is chosen from the first component.\n* If a name is not available in the preferred language, the API uses the closest match.\n* The preferred language has a small influence on the set of results that the API chooses to return, and the order in which they are returned. The geocoder interprets abbreviations differently depending on language, such as the abbreviations for street types, or synonyms that may be valid in one language but not in another. For example, _utca_ and _tér_ are synonyms for street in Hungarian.").optional()
}
textsearch
Environment variables
KEY
Input schema
{
"location": z.string().describe("The point around which to retrieve place information. This must be specified as \`latitude,longitude\`. \n\n<div class=\"note\">The <code>location</code> parameter may be overriden if the <code>query</code> contains an explicit location such as <code>Market in Barcelona</code>. Using quotes around the query may also influence the weight given to the <code>location</code> and <code>radius</code>.</div>\n").optional(),
"maxprice": z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).describe("Restricts results to only those places within the specified range. Valid values range between 0 (most affordable) to 4 (most expensive), inclusive. The exact amount indicated by a specific value will vary from region to region.\n").optional(),
"minprice": z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).describe("Restricts results to only those places within the specified range. Valid values range between 0 (most affordable) to 4 (most expensive), inclusive. The exact amount indicated by a specific value will vary from region to region.\n").optional(),
"opennow": z.boolean().describe("Returns only those places that are open for business at the time the query is sent. Places that do not specify opening hours in the Google Places database will not be returned if you include this parameter in your query.\n").optional(),
"pagetoken": z.string().describe("Returns up to 20 results from a previously run search. Setting a \`pagetoken\` parameter will execute a search with the same parameters used previously — all parameters other than pagetoken will be ignored.\n").optional(),
"query": z.string().describe("The text string on which to search, for example: \"restaurant\" or \"123 Main Street\". This must a place name, address, or category of establishments. Any other types\nof input can generate errors and are not guaranteed to return valid results. The Google Places service will return candidate matches based on this string and order\nthe results based on their perceived relevance.\n"),
"radius": z.number().describe("Defines the distance (in meters) within which to return place results. You may bias results to a specified circle by passing a \`location\` and a \`radius\` parameter. Doing so instructs the Places service to _prefer_ showing results within that circle; results outside of the defined area may still be displayed.\n\nThe radius will automatically be clamped to a maximum value depending on the type of search and other parameters.\n\n* Autocomplete: 50,000 meters\n* Nearby Search: \n * with \`keyword\` or \`name\`: 50,000 meters\n * without \`keyword\` or \`name\`\n * Up to 50,000 meters, adjusted dynamically based on area density, independent of \`rankby\` parameter.\n * When using \`rankby=distance\`, the radius parameter will not be accepted, and will result in an \`INVALID_REQUEST\`.\n* Query Autocomplete: 50,000 meters\n* Text Search: 50,000 meters\n"),
"type": z.string().describe("Restricts the results to places matching the specified type. Only one type may be specified. If more than one type is provided, all types following the first entry are ignored.\n\n* \`type=hospital|pharmacy|doctor\` becomes \`type=hospital\`\n* \`type=hospital,pharmacy,doctor\` is ignored entirely\n\nSee the list of [supported types](https://developers.google.com/maps/documentation/places/web-service/supported_types).\n<div class=\"note\">Note: Adding both \`keyword\` and \`type\` with the same value (\`keyword=cafe&type=cafe\` or \`keyword=parking&type=parking\`) can yield \`ZERO_RESULTS\`.</div>\n").optional(),
"language": z.enum(["ar","bg","bn","ca","cs","da","de","el","en","en-AU","en-GB","es","eu","fa","fi","fil","fr","gl","gu","hi","hr","hu","id","it","iw","ja","kn","ko","lt","lv","ml","mr","nl","no","pl","pt","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","ta","te","th","tl","tr","uk","vi","zh-CN","zh-TW"]).describe("The language in which to return results.\n\n* See the [list of supported languages](https://developers.google.com/maps/faq#languagesupport). Google often updates the supported languages, so this list may not be exhaustive.\n* If \`language\` is not supplied, the API attempts to use the preferred language as specified in the \`Accept-Language\` header.\n* The API does its best to provide a street address that is readable for both the user and locals. To achieve that goal, it returns street addresses in the local language, transliterated to a script readable by the user if necessary, observing the preferred language. All other addresses are returned in the preferred language. Address components are all returned in the same language, which is chosen from the first component.\n* If a name is not available in the preferred language, the API uses the closest match.\n* The preferred language has a small influence on the set of results that the API chooses to return, and the order in which they are returned. The geocoder interprets abbreviations differently depending on language, such as the abbreviations for street types, or synonyms that may be valid in one language but not in another. For example, _utca_ and _tér_ are synonyms for street in Hungarian.").optional(),
"region": z.enum(["ac","ad","ae","af","ag","ai","al","am","an","ao","aq","ar","as","at","au","aw","ax","az","ba","bb","bd","be","bf","bg","bh","bi","bj","bl","bm","bn","bo","bq","br","bs","bt","bv","bw","by","bz","ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cu","cv","cw","cx","cy","cz","de","dj","dk","dm","do","dz","ec","ee","eg","eh","en","er","es","et","eu","fi","fj","fk","fm","fo","fr","ga","gb","gd","ge","gf","gg","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy","hk","hm","hn","hr","ht","hu","id","ie","il","im","in","io","iq","ir","is","it","je","jm","jo","jp","ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz","la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly","ma","mc","md","me","mf","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu","mv","mw","mx","my","mz","na","nc","ne","nf","ng","ni","nl","no","np","nr","nu","nz","om","pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pt","pw","py","qa","re","ro","rs","ru","rw","sa","sb","sc","sd","se","sg","sh","si","sj","sk","sl","sm","sn","so","sr","ss","st","su","sv","sx","sy","sz","tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tp","tr","tt","tv","tw","tz","ua","ug","uk","um","us","uy","uz","va","vc","ve","vg","vi","vn","vu","wf","ws","ye","yt","za","zm","zw"]).describe("The region code, specified as a [ccTLD (\"top-level domain\")](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains) two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom's ccTLD is \"uk\" (.co.uk) while its ISO 3166-1 code is \"gb\" (technically for the entity of \"The United Kingdom of Great Britain and Northern Ireland\").").optional()
}
placephoto
Environment variables
KEY
Input schema
{
"photo_reference": z.string().describe("A string identifier that uniquely identifies a photo. Photo references are returned from either a Place Search or Place Details request.\n"),
"maxheight": z.number().describe("Specifies the maximum desired height, in pixels, of the image. If the image is smaller than the values specified, the original image will be returned. If the image is larger in either dimension, it will be scaled to match the smaller of the two dimensions, restricted to its original aspect ratio. Both the \`maxheight\` and \`maxwidth\` properties accept an integer between \`1\` and \`1600\`.\n").optional(),
"maxwidth": z.number().describe("Specifies the maximum desired width, in pixels, of the image. If the image is smaller than the values specified, the original image will be returned. If the image is larger in either dimension, it will be scaled to match the smaller of the two dimensions, restricted to its original aspect ratio. Both the \`maxheight\` and \`maxwidth\` properties accept an integer between \`1\` and \`1600\`.\n").optional()
}
queryautocomplete
Environment variables
KEY
Input schema
{
"input": z.string().describe("The text string on which to search. The Place Autocomplete service will return candidate matches based on this string and order results based on their perceived relevance.\n"),
"offset": z.number().describe("The position, in the input term, of the last character that the service uses to match predictions. For example, if the input is \`Google\` and the offset is 3, the service will match on \`Goo\`. The string determined by the offset is matched against the first word in the input term only. For example, if the input term is \`Google abc\` and the offset is 3, the service will attempt to match against \`Goo abc\`. If no offset is supplied, the service will use the whole term. The offset should generally be set to the position of the text caret.\n").optional(),
"location": z.string().describe("The point around which to retrieve place information. This must be specified as \`latitude,longitude\`. \n\n<div class=\"note\">The <code>location</code> parameter may be overriden if the <code>query</code> contains an explicit location such as <code>Market in Barcelona</code>. Using quotes around the query may also influence the weight given to the <code>location</code> and <code>radius</code>.</div>\n").optional(),
"radius": z.number().describe("Defines the distance (in meters) within which to return place results. You may bias results to a specified circle by passing a \`location\` and a \`radius\` parameter. Doing so instructs the Places service to _prefer_ showing results within that circle; results outside of the defined area may still be displayed.\n\nThe radius will automatically be clamped to a maximum value depending on the type of search and other parameters.\n\n* Autocomplete: 50,000 meters\n* Nearby Search: \n * with \`keyword\` or \`name\`: 50,000 meters\n * without \`keyword\` or \`name\`\n * Up to 50,000 meters, adjusted dynamically based on area density, independent of \`rankby\` parameter.\n * When using \`rankby=distance\`, the radius parameter will not be accepted, and will result in an \`INVALID_REQUEST\`.\n* Query Autocomplete: 50,000 meters\n* Text Search: 50,000 meters\n"),
"language": z.enum(["ar","bg","bn","ca","cs","da","de","el","en","en-AU","en-GB","es","eu","fa","fi","fil","fr","gl","gu","hi","hr","hu","id","it","iw","ja","kn","ko","lt","lv","ml","mr","nl","no","pl","pt","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","ta","te","th","tl","tr","uk","vi","zh-CN","zh-TW"]).describe("The language in which to return results.\n\n* See the [list of supported languages](https://developers.google.com/maps/faq#languagesupport). Google often updates the supported languages, so this list may not be exhaustive.\n* If \`language\` is not supplied, the API attempts to use the preferred language as specified in the \`Accept-Language\` header.\n* The API does its best to provide a street address that is readable for both the user and locals. To achieve that goal, it returns street addresses in the local language, transliterated to a script readable by the user if necessary, observing the preferred language. All other addresses are returned in the preferred language. Address components are all returned in the same language, which is chosen from the first component.\n* If a name is not available in the preferred language, the API uses the closest match.\n* The preferred language has a small influence on the set of results that the API chooses to return, and the order in which they are returned. The geocoder interprets abbreviations differently depending on language, such as the abbreviations for street types, or synonyms that may be valid in one language but not in another. For example, _utca_ and _tér_ are synonyms for street in Hungarian.").optional()
}
autocomplete
Environment variables
KEY
Input schema
{
"input": z.string().describe("The text string on which to search. The Place Autocomplete service will return candidate matches based on this string and order results based on their perceived relevance.\n"),
"sessiontoken": z.string().describe("A random string which identifies an autocomplete [session](https://developers.google.com/maps/documentation/places/web-service/details#session_tokens) for billing purposes.\n\nThe session begins when the user starts typing a query, and concludes when they select a place and a call to Place Details is made. Each session can have multiple queries, followed by one place selection. The API key(s) used for each request within a session must belong to the same Google Cloud Console project. Once a session has concluded, the token is no longer valid; your app must generate a fresh token for each session. If the \`sessiontoken\` parameter is omitted, or if you reuse a session token, the session is charged as if no session token was provided (each request is billed separately).\n\nWe recommend the following guidelines:\n\n- Use session tokens for all autocomplete sessions.\n- Generate a fresh token for each session. Using a version 4 UUID is recommended.\n- Ensure that the API key(s) used for all Place Autocomplete and Place Details requests within a session belong to the same Cloud Console project.\n- Be sure to pass a unique session token for each new session. Using the same token for more than one session will result in each request being billed individually.\n").optional(),
"components": z.string().describe("A grouping of places to which you would like to restrict your results. Currently, you can use components to filter by up to 5 countries. Countries must be passed as a two character, ISO 3166-1 Alpha-2 compatible country code. For example: \`components=country:fr\` would restrict your results to places within France. Multiple countries must be passed as multiple \`country:XX\` filters, with the pipe character \`|\` as a separator. For example: \`components=country:us|country:pr|country:vi|country:gu|country:mp\` would restrict your results to places within the United States and its unincorporated organized territories.\n<div class=\"note\"><strong>Note:</strong> If you receive unexpected results with a country code, verify that you are using a code which includes the countries, dependent territories, and special areas of geographical interest you intend. You can find code information at <a href=\"https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes\" target=\"blank\" class=\"external\">Wikipedia: List of ISO 3166 country codes</a> or the <a href=\"https://www.iso.org/obp/ui/#search\" target=\"blank\" class=\"external\">ISO Online Browsing Platform</a>.</div>\n").optional(),
"strictbounds": z.boolean().describe("Returns only those places that are strictly within the region defined by \`location\` and \`radius\`. This is a restriction, rather than a bias, meaning that results outside this region will not be returned even if they match the user input.\n").optional(),
"offset": z.number().describe("The position, in the input term, of the last character that the service uses to match predictions. For example, if the input is \`Google\` and the offset is 3, the service will match on \`Goo\`. The string determined by the offset is matched against the first word in the input term only. For example, if the input term is \`Google abc\` and the offset is 3, the service will attempt to match against \`Goo abc\`. If no offset is supplied, the service will use the whole term. The offset should generally be set to the position of the text caret.\n").optional(),
"origin": z.string().describe("The origin point from which to calculate straight-line distance to the destination (returned as \`distance_meters\`). If this value is omitted, straight-line distance will not be returned. Must be specified as \`latitude,longitude\`.\n").optional(),
"location": z.string().describe("The point around which to retrieve place information. This must be specified as \`latitude,longitude\`. The \`radius\` parameter must also be provided when specifying a location. If \`radius\` is not provided, the \`location\` parameter is ignored.\n\n<div class=\"note\">When using the Text Search API, the \`location\` parameter may be overriden if the \`query\` contains an explicit location such as \`Market in Barcelona\`.</div>\n").optional(),
"locationbias": z.string().describe("Prefer results in a specified area, by specifying either a radius plus lat/lng, or two lat/lng pairs representing the points of a rectangle. If this parameter is not specified, the API uses IP address biasing by default.\n- IP bias: Instructs the API to use IP address biasing. Pass the string \`ipbias\` (this option has no additional parameters).\n- Circular: A string specifying radius in meters, plus lat/lng in decimal degrees. Use the following format: \`circle:radius@lat,lng\`.\n- Rectangular: A string specifying two lat/lng pairs in decimal degrees, representing the south/west and north/east points of a rectangle. Use the following format:\`rectangle:south,west|north,east\`. Note that east/west values are wrapped to the range -180, 180, and north/south values are clamped to the range -90, 90.\n").optional(),
"locationrestriction": z.string().describe("Restrict results to a specified area, by specifying either a radius plus lat/lng, or two lat/lng pairs representing the points of a rectangle.\n- Circular: A string specifying radius in meters, plus lat/lng in decimal degrees. Use the following format: \`circle:radius@lat,lng\`.\n- Rectangular: A string specifying two lat/lng pairs in decimal degrees, representing the south/west and north/east points of a rectangle. Use the following format:\`rectangle:south,west|north,east\`. Note that east/west values are wrapped to the range -180, 180, and north/south values are clamped to the range -90, 90.\n").optional(),
"radius": z.number().describe("Defines the distance (in meters) within which to return place results. You may bias results to a specified circle by passing a \`location\` and a \`radius\` parameter. Doing so instructs the Places service to _prefer_ showing results within that circle; results outside of the defined area may still be displayed.\n\nThe radius will automatically be clamped to a maximum value depending on the type of search and other parameters.\n\n* Autocomplete: 50,000 meters\n* Nearby Search: \n * with \`keyword\` or \`name\`: 50,000 meters\n * without \`keyword\` or \`name\`\n * Up to 50,000 meters, adjusted dynamically based on area density, independent of \`rankby\` parameter.\n * When using \`rankby=distance\`, the radius parameter will not be accepted, and will result in an \`INVALID_REQUEST\`.\n* Query Autocomplete: 50,000 meters\n* Text Search: 50,000 meters\n"),
"types": z.string().describe("You can restrict results from a Place Autocomplete request to be of a certain type by passing the \`types\` parameter. This parameter specifies a type or a type collection, as listed in [Place Types](/maps/documentation/places/web-service/supported_types). If nothing is specified, all types are returned.\n\nFor the value of the \`types\` parameter you can specify either:\n* Up to five values from [Table 1](/maps/documentation/places/web-service/supported_types#table1) or [Table 2](/maps/documentation/places/web-service/supported_types#table2). For multiple values, separate each value with a \`|\` (vertical bar). For example:\n\n \`types=book_store|cafe\`\n\n* Any supported filter in [Table 3](/maps/documentation/places/web-service/supported_types#table3). You can safely mix the \`geocode\` and \`establishment\` types. You cannot mix type collections (\`address\`, \`(cities)\` or \`(regions)\`) with any other type, or an error occurs.\n\nThe request will be rejected with an \`INVALID_REQUEST\` error if:\n\n* More than five types are specified.\n* Any unrecognized types are present.\n* Any types from in [Table 1](/maps/documentation/places/web-service/supported_types#table1) or [Table 2](/maps/documentation/places/web-service/supported_types#table2) are mixed with any of the filters in [Table 3](/maps/documentation/places/web-service/supported_types#table3).\n").optional(),
"language": z.enum(["ar","bg","bn","ca","cs","da","de","el","en","en-AU","en-GB","es","eu","fa","fi","fil","fr","gl","gu","hi","hr","hu","id","it","iw","ja","kn","ko","lt","lv","ml","mr","nl","no","pl","pt","pt-BR","pt-PT","ro","ru","sk","sl","sr","sv","ta","te","th","tl","tr","uk","vi","zh-CN","zh-TW"]).describe("The language in which to return results.\n\n* See the [list of supported languages](https://developers.google.com/maps/faq#languagesupport). Google often updates the supported languages, so this list may not be exhaustive.\n* If \`language\` is not supplied, the API attempts to use the preferred language as specified in the \`Accept-Language\` header.\n* The API does its best to provide a street address that is readable for both the user and locals. To achieve that goal, it returns street addresses in the local language, transliterated to a script readable by the user if necessary, observing the preferred language. All other addresses are returned in the preferred language. Address components are all returned in the same language, which is chosen from the first component.\n* If a name is not available in the preferred language, the API uses the closest match.\n* The preferred language has a small influence on the set of results that the API chooses to return, and the order in which they are returned. The geocoder interprets abbreviations differently depending on language, such as the abbreviations for street types, or synonyms that may be valid in one language but not in another. For example, _utca_ and _tér_ are synonyms for street in Hungarian.").optional(),
"region": z.enum(["ac","ad","ae","af","ag","ai","al","am","an","ao","aq","ar","as","at","au","aw","ax","az","ba","bb","bd","be","bf","bg","bh","bi","bj","bl","bm","bn","bo","bq","br","bs","bt","bv","bw","by","bz","ca","cc","cd","cf","cg","ch","ci","ck","cl","cm","cn","co","cr","cu","cv","cw","cx","cy","cz","de","dj","dk","dm","do","dz","ec","ee","eg","eh","en","er","es","et","eu","fi","fj","fk","fm","fo","fr","ga","gb","gd","ge","gf","gg","gh","gi","gl","gm","gn","gp","gq","gr","gs","gt","gu","gw","gy","hk","hm","hn","hr","ht","hu","id","ie","il","im","in","io","iq","ir","is","it","je","jm","jo","jp","ke","kg","kh","ki","km","kn","kp","kr","kw","ky","kz","la","lb","lc","li","lk","lr","ls","lt","lu","lv","ly","ma","mc","md","me","mf","mg","mh","mk","ml","mm","mn","mo","mp","mq","mr","ms","mt","mu","mv","mw","mx","my","mz","na","nc","ne","nf","ng","ni","nl","no","np","nr","nu","nz","om","pa","pe","pf","pg","ph","pk","pl","pm","pn","pr","ps","pt","pw","py","qa","re","ro","rs","ru","rw","sa","sb","sc","sd","se","sg","sh","si","sj","sk","sl","sm","sn","so","sr","ss","st","su","sv","sx","sy","sz","tc","td","tf","tg","th","tj","tk","tl","tm","tn","to","tp","tr","tt","tv","tw","tz","ua","ug","uk","um","us","uy","uz","va","vc","ve","vg","vi","vn","vu","wf","ws","ye","yt","za","zm","zw"]).describe("The region code, specified as a [ccTLD (\"top-level domain\")](https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains) two-character value. Most ccTLD codes are identical to ISO 3166-1 codes, with some notable exceptions. For example, the United Kingdom's ccTLD is \"uk\" (.co.uk) while its ISO 3166-1 code is \"gb\" (technically for the entity of \"The United Kingdom of Great Britain and Northern Ireland\").").optional()
}
streetview
Environment variables
KEY
Input schema
{
"fov": z.number().describe("Determines the horizontal field of view of the image. The field of view is expressed in degrees, with a maximum allowed value of 120. When dealing with a fixed-size viewport, as with a Street View image of a set size, field of view in essence represents zoom, with smaller numbers indicating a higher level of zoom. Default is 90.\n").optional(),
"heading": z.number().describe("Indicates the compass heading of the camera. Accepted values are from 0 to 360 (both values indicating North, with 90 indicating East, and 180 South). If no heading is specified, a value will be calculated that directs the camera towards the specified location, from the point at which the closest photograph was taken.\n").optional(),
"location": z.string().describe("The point around which to retrieve place information. The Street View Static API will snap to the panorama photographed closest to this location. When an address text string is provided, the API may use a different camera location to better display the specified location. When a lat/lng is provided, the API searches a 50 meter radius for a photograph closest to this location. Because Street View imagery is periodically refreshed, and photographs may be taken from slightly different positions each time, it's possible that your \`location\` may snap to a different panorama when imagery is updated.\n").optional(),
"pano": z.string().describe("A specific panorama ID. These are generally stable, though panoramas may change ID over time as imagery is refreshed.\n").optional(),
"pitch": z.number().describe("Specifies the up or down angle of the camera relative to the Street View vehicle. This is often, but not always, flat horizontal. Positive values angle the camera up (with 90 degrees indicating straight up); negative values angle the camera down (with -90 indicating straight down). Default is 0.\n").optional(),
"radius": z.number().describe("Sets a radius, specified in meters, in which to search for a panorama, centered on the given latitude and longitude. Valid values are non-negative integers. Default is 50 meters.\n").optional(),
"return_error_code": z.boolean().describe("Indicates whether the API should return a non \`200 Ok\` HTTP status when no image is found (\`404 NOT FOUND\`), or in response to an invalid request (400 BAD REQUEST). Valid values are \`true\` and \`false\`. If set to \`true\`, an error message is returned in place of the generic gray image. This eliminates the need to make a separate call to check for image availability.\n").optional(),
"signature": z.string().describe("A digital signature used to verify that any site generating requests using your API key is authorized to do so. Requests that do not include a digital signature might fail. For more information, see [Get a Key and Signature](https://developers.google.com/maps/documentation/streetview/get-api-key).\n").optional(),
"size": z.string().describe("Specifies the output size of the image in pixels. Must not exceed 640 pixels wide or high, anything over will default to 640 pixels. Size is specified as \`{width}x{height}\` - for example, \`size=600x400\` returns an image 600 pixels wide, and 400 high.\n"),
"source": z.enum(["default","outdoor"]).describe("Limits Street View searches to selected sources. Valid values are:\n* \`default\` uses the default sources for Street View; searches are not limited to specific sources.\n* \`outdoor\` limits searches to outdoor collections. Indoor collections are not included in search results. Note that outdoor panoramas may not exist for the specified location. Also note that the search only returns panoramas where it's possible to determine whether they're indoors or outdoors. For example, PhotoSpheres are not returned because it's unknown whether they are indoors or outdoors.\n").optional()
}
streetviewmetadata
Environment variables
KEY
Input schema
{
"heading": z.number().describe("Indicates the compass heading of the camera. Accepted values are from 0 to 360 (both values indicating North, with 90 indicating East, and 180 South). If no heading is specified, a value will be calculated that directs the camera towards the specified location, from the point at which the closest photograph was taken.\n").optional(),
"location": z.string().describe("The point around which to retrieve place information. The Street View Static API will snap to the panorama photographed closest to this location. When an address text string is provided, the API may use a different camera location to better display the specified location. When a lat/lng is provided, the API searches a 50 meter radius for a photograph closest to this location. Because Street View imagery is periodically refreshed, and photographs may be taken from slightly different positions each time, it's possible that your \`location\` may snap to a different panorama when imagery is updated.\n").optional(),
"pano": z.string().describe("A specific panorama ID. These are generally stable, though panoramas may change ID over time as imagery is refreshed.\n").optional(),
"pitch": z.number().describe("Specifies the up or down angle of the camera relative to the Street View vehicle. This is often, but not always, flat horizontal. Positive values angle the camera up (with 90 degrees indicating straight up); negative values angle the camera down (with -90 indicating straight down). Default is 0.\n").optional(),
"radius": z.number().describe("Sets a radius, specified in meters, in which to search for a panorama, centered on the given latitude and longitude. Valid values are non-negative integers. Default is 50 meters.\n").optional(),
"return_error_code": z.boolean().describe("Indicates whether the API should return a non \`200 Ok\` HTTP status when no image is found (\`404 NOT FOUND\`), or in response to an invalid request (400 BAD REQUEST). Valid values are \`true\` and \`false\`. If set to \`true\`, an error message is returned in place of the generic gray image. This eliminates the need to make a separate call to check for image availability.\n").optional(),
"signature": z.string().describe("A digital signature used to verify that any site generating requests using your API key is authorized to do so. Requests that do not include a digital signature might fail. For more information, see [Get a Key and Signature](https://developers.google.com/maps/documentation/streetview/get-api-key).\n").optional(),
"size": z.string().describe("Specifies the output size of the image in pixels. Size is specified as \`{width}x{height}\` - for example, \`size=600x400\` returns an image 600 pixels wide, and 400 high.\n").optional(),
"source": z.enum(["default","outdoor"]).describe("Limits Street View searches to selected sources. Valid values are:\n* \`default\` uses the default sources for Street View; searches are not limited to specific sources.\n* \`outdoor\` limits searches to outdoor collections. Indoor collections are not included in search results. Note that outdoor panoramas may not exist for the specified location. Also note that the search only returns panoramas where it's possible to determine whether they're indoors or outdoors. For example, PhotoSpheres are not returned because it's unknown whether they are indoors or outdoors.\n").optional()
}