Skip to content

com.googleapis.mapstools/mcp

by mapstools.googleapis.com · remote · no sign-in to list tools · v1.0.0 · published by com.googleapis.mapstools

Ground your AI applications with trusted geospatial data from Google Maps.

Changes · 2

5 tools: 2 change things and 3 only read.

Scanned Oct 21, 2026

4 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http mapstools https://mapstools.googleapis.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn3 info
  • The server marks "search_places" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "search_places" says "search": a word for reading.

    What this check looks for
  • The description is 2,870 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...to the source using the information from the `attribution` field when available."

    What this check looks for
  • The description is 3,008 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...to the source using the information from the `attribution` field when available."

    What this check looks for
  • The description is 2,308 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...equest. Do not assume the entire batch call failed because of a partial failure."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

5 tools

Changes things 2Claude Code: ask
  • compute_routesComputes a travel route between a specified origin and destination.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Computes a travel route between a specified origin and destination. **Supported Travel Modes:** DRIVE (default), WALK. **Input Requirements (CRITICAL):** Requires both **origin** and **destination**. Each must be provided using one of the following methods, nested within its respective field: * **address:** (string, e.g., 'Eiffel Tower, Paris'). Note: The more granular or specific the input address is, the better the results will be. * **lat_lng:** (object, {"latitude": number, "longitude": number}) * **place_id:** (string, e.g., 'ChIJOwE_Id1w5EAR4Q27FkL6T_0') Note: This id can be obtained from the search_places tool. Any combination of input types is allowed (e.g., origin by address, destination by lat_lng). If either the origin or destination is missing, **you MUST ask the user for clarification** before attempting to call the tool. **Example Tool Call:** {"origin":{"address":"Eiffel Tower"},"destination":{"place_id":"ChIJt_5xIthw5EARoJ71mGq7t74"},"travel_mode":"DRIVE"} * The grounded output must be attributed to the source using the information from the `attribution` field when available.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
    • readOnlyHint: true
  • search_placesCall this tool when the user's request is to find places, businesses, addresses, locations, points of interest, or any other Google Maps related search.2 findings

    Why it is in this group

    • The name "search_places" says "search": a word for reading.
    • The description's first verb is "call": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Info

      The description is 2,870 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...to the source using the information from the `attribution` field when available."

      What this check looks for
    • Warn

      The server marks "search_places" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "search_places" says "search": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Call this tool when the user's request is to find places, businesses, addresses, locations, points of interest, or any other Google Maps related search. **Input Requirements (CRITICAL):** 1. **`text_query` (string - MANDATORY):** The primary search query. This must clearly define what the user is looking for. * **Examples:** `'restaurants in New York'`, `'coffee shops near Golden Gate Park'`, `'SF MoMA'`, `'1600 Amphitheatre Pkwy, Mountain View, CA, USA'`, `'pets friendly parks in Manhattan, New York'`, `'date night restaurants in Chicago'`, `'accessible public libraries in Los Angeles'`. * **For specific place details:** Include the requested attribute (e.g., `'Google Store Mountain View opening hours'`, `'SF MoMa phone number'`, `'Shoreline Park Mountain View address'`). 2. **`location_bias` (object - OPTIONAL):** Use this to prioritize results near a specific geographic area. * **Format:** `{"location_bias": {"circle": {"center": {"latitude": [value], "longitude": [value]}, "radius_meters": [value (optional)]}}}` * **Usage:** * **To bias to a 5km radius:** `{"location_bias": {"circle": {"center": {"latitude": 34.052235, "longitude": -118.243683}, "radius_meters": 5000}}}` * **To bias strongly to the center point:** `{"location_bias": {"circle": {"center": {"latitude": 34.052235, "longitude": -118.243683}}}}` (omitting `radius_meters`). 3. **`language_code` (string - OPTIONAL):** The language to show the search results summary in. * **Format:** A two-letter language code (ISO 639-1), optionally followed by an underscore and a two-letter country code (ISO 3166-1 alpha-2), e.g., `en`, `ja`, `en_US`, `zh_CN`, `es_MX`. If the language code is not provided, the results will be in English. 4. **`region_code` (string - OPTIONAL):** The Unicode CLDR region code of the user. This parameter is used to display the place details, like region-specific place name, if available. The parameter canaffect results based on applicable law. * **Format:** A two-letter country code (ISO 3166-1 alpha-2), e.g., `US`, `CA`. **Instructions for Tool Call:** * Location Information (CRITICAL): The search must contain sufficient location information. If the location is ambiguous (e.g., just "pizza places"), *you must* specify it in the `text_query` (e.g., "pizza places in New York") or use the `location_bias` parameter. Include city, state/province, and region/country name if needed for disambiguation. * Always provide the most specific and contextually rich `text_query` possible. * Only use `location_bias` if coordinates are explicitly provided or if inferring a location from a user's known context is appropriate *and* necessary for better results. * The grounded output must be attributed to the source using the information from the `attribution` field when available.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
    • readOnlyHint: true
Only reads 3Claude Code: allow
  • lookup_weatherRetrieves comprehensive weather data including current conditions, hourly, and daily forecasts.1 finding

    Why it is in this group

    • The name "lookup_weather" says "lookup": a word for reading.

    Findings

    • Info

      The description is 3,008 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...to the source using the information from the `attribution` field when available."

      What this check looks for
    Description, as the server wrote it
    Retrieves comprehensive weather data including current conditions, hourly, and daily forecasts. **Specific Data Available:** Temperature (Current, Feels Like, Max/Min, Heat Index), Wind (Speed, Gusts, Direction), Celestial Events (Sunrise/Sunset, Moon Phase), Precipitation (Type, Probability, Quantity/QPF), Atmospheric Conditions (UV Index, Humidity, Cloud Cover, Thunderstorm Probability), and Geocoded Location Address. **Location & Location Rules (CRITICAL):** The location for which weather data is requested is specified using the `location` field. This field is a 'oneof' structure, meaning you MUST provide a value for ONLY ONE of the three location sub-fields below to ensure an accurate weather data lookup. 1. Geographic Coordinates (lat_lng) * Use it when you are provided with exact lat/lng coordinates. * Example: {"location": {"lat_lng": {"latitude": 34.0522, "longitude": -118.2437}}} // Los Angeles 2. Place ID (place_id) * An unambiguous string identifier (Google Maps Place ID). * The place_id can be fetched from the search_places tool. * Example: {"location": {"place_id": "ChIJLU7jZClu5kcR4PcOOO6p3I0"}} // Eiffel Tower 3. Address String (address) * A free-form string that requires specificity for geocoding. * City & Region: Always include region/country (e.g., "London, UK", not "London"). * Street Address: Provide the full address (e.g., "1600 Pennsylvania Ave NW, Washington, DC"). * Postal/Zip Codes: MUST be accompanied by a country name (e.g., "90210, USA", NOT "90210"). * Example: {"location": {"address": "1600 Pennsylvania Ave NW, Washington, DC"}} **Usage Modes:** * **Current Weather:** Provide `location` only. Do not specify `date` and `hour`. * **Hourly Forecast:** Provide `location`, `date`, and `hour` (0-23). Use for specific times (e.g., "at 5 PM") or terms like "next few hours" or "later today". If the user specifies minute, round down to the nearest hour. Hourly forecast beyond 120 hours from now is not supported. Historical hourly weather is supported up to 24 hours in the past. * **Daily Forecast:** Provide `location` and `date`. Do not specify `hour`. Use for general day requests (e.g., "weather for tomorrow", "weather on Friday", "weather on 12/25"). If today's date is not in the context, you should clarify it with the user. Daily forecast beyond 10 days including today is not supported. Historical weather is not supported. **Parameter Constraints:** * **Timezones:** All `date` and `hour` inputs must be relative to the **location's local time zone**, not the user's time zone. * **Date Format:** Inputs must be separated into `{year, month, day}` integers. * **Units:** Defaults to `METRIC`. Set `units_system` to `IMPERIAL` for Fahrenheit/Miles if the user implies US standards or explicitly requests it. * The grounded output must be attributed to the source using the information from the `attribution` field when available.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
    • readOnlyHint: true
  • resolve_maps_urlsResolves a list of Google Maps URLs into canonical Google Maps Place IDs.No findings

    Why it is in this group

    • The name "resolve_maps_urls" says "resolve": a word for reading.
    Description, as the server wrote it
    Resolves a list of Google Maps URLs into canonical Google Maps Place IDs. **When to call this tool (CRITICAL):** * Use this tool when the user provides one or more Google Maps sharing links or URLs (e.g. 'https://maps.app.goo.gl/...', 'https://www.google.com/maps/place/...', or 'https://maps.google.com/...') and you need to extract the underlying canonical Place IDs. * You can specify up to 20 URLs to resolve in a single batch request. **Input Requirements (CRITICAL):** * **`urls` (array of strings - MANDATORY):** The list of Google Maps URLs to resolve. Each URL must be a valid, single-place Google Maps URL. **Save to Google Maps:** * The response includes a `save_to_maps_url` field: a single Google Maps link containing all successfully resolved places. * When the user wants to save, share, or open the resolved places as a list in Google Maps (e.g. collecting places shared in a conversation), present this link to the user. Do NOT construct this link yourself. **Error Handling (CRITICAL):** * This is a batch processing tool. A request might return "mixed results" (e.g. some URLs resolve successfully while others fail). * The output list of `entities` is guaranteed to map 1:1 with the input `urls` indices. A failed URL resolution will result in an empty `Entity` message (no fields are set) at its corresponding index in the `entities` list. * You **MUST** check the `failed_requests` map field in the response to identify which specific URL index failed. The key of `failed_requests` represents the 0-based index of the failed URL in the request. Do not assume the entire batch call failed because of a partial failure.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
    • readOnlyHint: true
  • resolve_namesResolves a batch list of specific location queries (landmark names or exact addresses) into canonical Google Maps Place IDs.1 finding

    Why it is in this group

    • The name "resolve_names" says "resolve": a word for reading.

    Findings

    • Info

      The description is 2,308 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...equest. Do not assume the entire batch call failed because of a partial failure."

      What this check looks for
    Description, as the server wrote it
    Resolves a batch list of specific location queries (landmark names or exact addresses) into canonical Google Maps Place IDs. **Input Requirements (CRITICAL):** 1. **`queries` (array of objects - MANDATORY):** A list of location queries to resolve. You may specify up to 20 queries. * **Each query object must have:** * **`text` (string - MANDATORY):** The text query representing a specific place name or address to resolve. * **Examples:** `'Googleplex, Mountain View, CA'`, `'1600 Amphitheatre Pkwy, Mountain View, CA'`, `'Eiffel Tower, Paris'`. 2. **`location_bias` (object - OPTIONAL):** Use this to prioritize results near a specific geographic area. * **Format:** `{"viewport": {"low": {"latitude": [value], "longitude": [value]}, "high": {"latitude": [value], "longitude": [value]}}}` 3. **`region_code` (string - OPTIONAL):** The Unicode CLDR region code (two-letter country code, e.g., `US`, `CA`) of the user to bias the results. **Instructions for Tool Call:** * Specificity (CRITICAL): Queries must represent a specific place name or address. General searches like `'restaurants'` or chain names like `'Starbucks'` are not supported. * Do NOT call this tool if the downstream tools you plan to invoke already accept raw address or place name strings directly. **Save to Google Maps:** * The response includes a `save_to_maps_url` field: a single Google Maps link containing all successfully resolved places. * When the user wants to save, share, or open the resolved places as a list in Google Maps, present this link to the user. Do NOT construct this link yourself. **Error Handling (CRITICAL):** * This is a batch processing tool. A request might return "mixed results" (e.g. some queries resolve successfully while others fail). * The output list of `results` is guaranteed to map 1:1 with the input `queries` indices. A failed query will result in an empty `Result` message (no `entity` is set) at its corresponding index in the `results` list. * You **MUST** check the `failed_requests` map field in the response to identify which specific query index failed. The key of `failed_requests` represents the 0-based index of the failed query in the request. Do not assume the entire batch call failed because of a partial failure.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http mapstools https://mapstools.googleapis.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__mapstools__lookup_weather",
      "mcp__mapstools__resolve_names",
      "mcp__mapstools__resolve_maps_urls"
    ],
    "ask": [
      "mcp__mapstools__search_places",
      "mcp__mapstools__compute_routes"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as mapstools. Review it before you use it.