The Mcp Google Map server provides AI agents with geospatial capabilities through 18 tools covering geocoding, place search, routing, elevation, distance matrix, timezone, weather, air quality, and map imagery, along with four composite tools for complex tasks like trip planning and location comparison. It operates in multiple modes (stdio, HTTP, and CLI) and includes built-in agent skill definitions to help AI models chain geographic operations together. The server solves the problem of giving language models practical understanding of the physical world by integrating Google Maps APIs in a structured, tool-based format that agents can reason about and utilize autonomously.
Public tool metadata for what this MCP can expose to an agent.
GOOGLE_MAPS_COMPUTE_ROUTE_MATRIXCalculates travel distance and duration matrix between multiple origins and destinations using the modern Routes API; supports OAuth2 authentication and various travel modes.7 paramsCalculates travel distance and duration matrix between multiple origins and destinations using the modern Routes API; supports OAuth2 authentication and various travel modes.
unitsstringMETRIC · IMPERIALdefault: IMPERIALoriginsarrayfieldMaskstringtravelModestringDRIVE · BICYCLE · WALK · TWO_WHEELER · TRANSITdefault: DRIVEdestinationsarraylanguageCodestringroutingPreferencestringROUTING_PREFERENCE_UNSPECIFIED · TRAFFIC_UNAWARE · TRAFFIC_AWARE · TRAFFIC_AWARE_OPTIMALdefault: TRAFFIC_AWAREGOOGLE_MAPS_DISTANCE_MATRIX_APIDEPRECATED: Legacy API that calculates travel distance and time for a matrix of origins and destinations. This API only works with API keys (no OAuth2 support). Use the modern 'Compute Route Matrix' action instead, which supports OAuth2 authentication. Supports different modes...13 paramsDEPRECATED: Legacy API that calculates travel distance and time for a matrix of origins and destinations. This API only works with API keys (no OAuth2 support). Use the modern 'Compute Route Matrix' action instead, which supports OAuth2 authentication. Supports different modes...
keystringmodestringdriving · walking · bicycling · transitdefault: drivingavoidstringtolls · highways · ferries · indoorunitsstringmetric · imperialregionstringoriginsstringlanguagestringarrival_timeintegerdestinationsstringtransit_modestringbus · subway · train · tram · railtraffic_modelstringbest_guess · pessimistic · optimisticdeparture_timeintegertransit_routing_preferencestringless_walking · fewer_transfersGOOGLE_MAPS_GEOCODING_APIDEPRECATED: Legacy API to convert addresses into geographic coordinates (latitude and longitude) and vice versa (reverse geocoding), or get an address for a Place ID. This API only works with API keys (no OAuth2 support). Consider using the modern Places API (Text Search or Ne...11 paramsDEPRECATED: Legacy API to convert addresses into geographic coordinates (latitude and longitude) and vice versa (reverse geocoding), or get an address for a Place ID. This API only works with API keys (no OAuth2 support). Consider using the modern Places API (Text Search or Ne...
keystringboundsstringlatlngstringregionstringaddressstringlanguagestringplace_idstringcomponentsstringresult_typestringlocation_typestringextra_computationsarrayGOOGLE_MAPS_GET_DIRECTIONDEPRECATED: Legacy API that fetches detailed directions between an origin and a destination, supporting intermediate waypoints and various travel modes. This API only works with API keys (no OAuth2 support). Use the modern 'Get Route' action instead, which supports OAuth2 auth...7 paramsDEPRECATED: Legacy API that fetches detailed directions between an origin and a destination, supporting intermediate waypoints and various travel modes. This API only works with API keys (no OAuth2 support). Use the modern 'Get Route' action instead, which supports OAuth2 auth...
modestringavoidstringunitsstringoriginstringlanguagestringwaypointsstringdestinationstringGOOGLE_MAPS_GET_ROUTECalculates one or more routes between two specified locations. Uses various travel modes and preferences; addresses must be resolvable by Google Maps.11 paramsCalculates one or more routes between two specified locations. Uses various travel modes and preferences; addresses must be resolvable by Google Maps.
unitsstringMETRIC · IMPERIALdefault: IMPERIALfieldMaskstringtravelModestringDRIVE · BICYCLE · WALK · TWO_WHEELER · TRANSITdefault: DRIVElanguageCodestringorigin_addressstringroutingPreferencestringROUTING_PREFERENCE_UNSPECIFIED · TRAFFIC_UNAWARE · TRAFFIC_AWARE · TRAFFIC_AWARE_OPTIMALdestination_addressstringcomputeAlternativeRoutesbooleanrouteModifiers_avoidTollsbooleanrouteModifiers_avoidFerriesbooleanrouteModifiers_avoidHighwaysbooleanGOOGLE_MAPS_MAPS_EMBED_APITool to generate an embeddable Google Map URL and HTML iframe code. Use when you need to display a map (place, view, directions, street view, search) on a webpage without JavaScript. Note: This API only works with API keys (no OAuth2 support). It generates embed URLs and does...6 paramsTool to generate an embeddable Google Map URL and HTML iframe code. Use when you need to display a map (place, view, directions, street view, search) on a webpage without JavaScript. Note: This API only works with API keys (no OAuth2 support). It generates embed URLs and does...
modestringplace · view · directions · streetview · searchview_paramsobjectplace_paramsobjectsearch_paramsobjectdirections_paramsobjectstreetview_paramsobjectGOOGLE_MAPS_NEARBY_SEARCHSearches for places (e.g., restaurants, parks) within a specified circular area, with options to filter by place types and customize the returned fields and number of results.7 paramsSearches for places (e.g., restaurants, parks) within a specified circular area, with options to filter by place types and customize the returned fields and number of results.
radiusnumberlatitudenumberfieldMaskstringlongitudenumberexcludedTypesarrayincludedTypesarraymaxResultCountintegerGOOGLE_MAPS_TEXT_SEARCHSearches for places on Google Maps using a textual query (e.g., "restaurants in London", "Eiffel Tower").3 paramsSearches for places on Google Maps using a textual query (e.g., "restaurants in London", "Eiffel Tower").
fieldMaskstringtextQuerystringmaxResultCountinteger
English | 繁體中文
skills/google-maps/)| This project | Grounding Lite | |
|---|---|---|
| Tools | 18 | 3 |
| Geocoding | Yes | No |
| Step-by-step directions | Yes | No |
| Elevation | Yes | No |
| Distance matrix | Yes | No |
| Place details | Yes | No |
| Timezone | Yes | No |
| Weather | Yes | Yes |
| Air quality | Yes | No |
| Map images | Yes | No |
| Composite tools (explore, plan, compare) | Yes | No |
| Open source | MIT | No |
| Self-hosted | Yes | Google-managed only |
| Agent Skill | Yes | No |
# stdio (Claude Desktop, Cursor, etc.)
npx @cablate/mcp-google-map --stdio
# exec CLI — no server needed
npx @cablate/mcp-google-map exec geocode '{"address":"Tokyo Tower"}'
# HTTP server
npx @cablate/mcp-google-map --port 3000 --apikey "YOUR_API_KEY"
Special thanks to @junyinnnn for helping add support for streamablehttp.
| Tool | Description |
|---|---|
maps_search_nearby | Find places near a location by type (restaurant, cafe, hotel, etc.). Supports filtering by radius, rating, and open status. |
maps_search_places | Free-text place search (e.g., "sushi restaurants in Tokyo"). Supports location bias, rating, open-now filters. |
maps_place_details | Get full details for a place by its place_id — reviews, phone, website, hours. Optional maxPhotos param returns photo URLs. |
maps_geocode | Convert an address or landmark name into GPS coordinates. |
maps_reverse_geocode | Convert GPS coordinates into a street address. |
maps_distance_matrix | Calculate travel distances and times between multiple origins and destinations. |
maps_directions | Get step-by-step navigation between two points with route details. |
maps_elevation | Get elevation (meters above sea level) for geographic coordinates. |
maps_timezone | Get timezone ID, name, UTC/DST offsets, and local time for coordinates. |
maps_weather | Get current weather conditions or forecast — temperature, humidity, wind, UV, precipitation. |
maps_air_quality | Get air quality index, pollutant concentrations, and health recommendations by demographic group. |
maps_static_map | Generate a map image with markers, paths, or routes — returned inline for the user to see directly. |
maps_batch_geocode | Geocode up to 50 addresses in one call — returns coordinates for each. |
maps_search_along_route | Search for places along a route between two points — ranked by minimal detour time. |
| Composite Tools | |
maps_explore_area | Explore what's around a location — searches multiple place types and gets details in one call. |
maps_plan_route | Plan an optimized multi-stop route — uses Routes API waypoint optimization (up to 25 stops) for efficient ordering. |
maps_compare_places | Compare places side-by-side — searches, gets details, and optionally calculates distances. |
maps_local_rank_tracker | Track a business's local search ranking across a geographic grid — like LocalFalcon. Supports up to 3 keywords for batch scanning. Returns rank at each point, top-3 competitors, and metrics (ARP, ATRP, SoLV). |
All tools are annotated with readOnlyHint: true and destructiveHint: false — MCP clients can auto-approve these without user confirmation.
Prerequisite: Enable Places API (New) and Routes API in Google Cloud Console before using place-related and routing tools.
Works with Claude Desktop, Cursor, VS Code, and any MCP client that supports stdio:
{
"mcpServers": {
"google-maps": {
"command": "npx",
"args": ["-y", "@cablate/mcp-google-map", "--stdio"],
"env": {
"GOOGLE_MAPS_API_KEY": "YOUR_API_KEY"
}
}
}
}
Reduce context usage — If you only need a subset of tools, set GOOGLE_MAPS_ENABLED_TOOLS to limit which tools are registered:
{
"env": {
"GOOGLE_MAPS_API_KEY": "YOUR_API_KEY",
"GOOGLE_MAPS_ENABLED_TOOLS": "maps_geocode,maps_directions,maps_search_places"
}
}
Omit or set to * for all 18 tools (default).
For multi-session deployments, per-request API key isolation, or remote access:
npx @cablate/mcp-google-map --port 3000 --apikey "YOUR_API_KEY"
# Bind to all interfaces for remote access (e.g. Docker, LAN)
npx @cablate/mcp-google-map --host 0.0.0.0 --port 3000 --apikey "YOUR_API_KEY"
Then configure your MCP client:
{
"mcpServers": {
"google-maps": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}
--stdio) or Streamable HTTP (default)GOOGLE_MAPS_ENABLED_TOOLSUse tools directly without running the MCP server:
npx @cablate/mcp-google-map exec geocode '{"address":"Tokyo Tower"}'
npx @cablate/mcp-google-map exec search-places '{"query":"ramen in Tokyo"}'
All 18 tools available: geocode, reverse-geocode, search-nearby, search-places, place-details, directions, distance-matrix, elevation, timezone, weather, air-quality, static-map, batch-geocode-tool, search-along-route, explore-area, plan-route, compare-places, local-rank-tracker. See skills/google-maps/ for the agent skill definition and full parameter docs.
Geocode hundreds of addresses from a file:
npx @cablate/mcp-google-map batch-geocode -i addresses.txt -o results.json
cat addresses.txt | npx @cablate/mcp-google-map batch-geocode -i -
Input: one address per line. Output: JSON with { total, succeeded, failed, results[] }. Default concurrency: 20 parallel requests.
API keys can be provided in three ways (priority order):
HTTP Headers (Highest priority)
{
"mcp-google-map": {
"transport": "streamableHttp",
"url": "http://localhost:3000/mcp",
"headers": {
"X-Google-Maps-API-Key": "YOUR_API_KEY"
}
}
}
Command Line
mcp-google-map --apikey YOUR_API_KEY
Environment Variable (.env file or command line)
GOOGLE_MAPS_API_KEY=your_api_key_here
MCP_SERVER_PORT=3000
MCP_SERVER_HOST=0.0.0.0
# Clone the repository
git clone https://github.com/cablate/mcp-google-map.git
cd mcp-google-map
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Edit .env with your API key
# Build the project
npm run build
# Start the server
npm start
# Or run in development mode
npm run dev
# Run smoke tests (no API key required for basic tests)
npm test
# Run full E2E tests (requires GOOGLE_MAPS_API_KEY)
npm run test:e2e
src/
├── cli.ts # CLI entry point
├── config.ts # Tool registration and server config
├── index.ts # Package exports
├── core/
│ └── BaseMcpServer.ts # MCP server with streamable HTTP transport
├── services/
│ ├── NewPlacesService.ts # Google Places API (New) client
│ ├── PlacesSearcher.ts # Service facade layer
│ ├── RoutesService.ts # Google Routes API client (directions, distance matrix, waypoint optimization)
│ └── toolclass.ts # Google Maps API client (geocoding, timezone, elevation, static map)
├── tools/
│ └── maps/
│ ├── searchNearby.ts # maps_search_nearby tool
│ ├── searchPlaces.ts # maps_search_places tool
│ ├── placeDetails.ts # maps_place_details tool
│ ├── geocode.ts # maps_geocode tool
│ ├── reverseGeocode.ts # maps_reverse_geocode tool
│ ├── distanceMatrix.ts # maps_distance_matrix tool
│ ├── directions.ts # maps_directions tool
│ ├── elevation.ts # maps_elevation tool
│ ├── timezone.ts # maps_timezone tool
│ ├── weather.ts # maps_weather tool
│ ├── airQuality.ts # maps_air_quality tool
│ ├── staticMap.ts # maps_static_map tool
│ ├── batchGeocode.ts # maps_batch_geocode tool
│ ├── searchAlongRoute.ts # maps_search_along_route tool
│ ├── exploreArea.ts # maps_explore_area (composite)
│ ├── planRoute.ts # maps_plan_route (composite)
│ ├── comparePlaces.ts # maps_compare_places (composite)
│ └── localRankTracker.ts # maps_local_rank_tracker (composite)
└── utils/
├── apiKeyManager.ts # API key management
└── requestContext.ts # Per-request context (API key isolation)
tests/
└── smoke.test.ts # Smoke + E2E test suite
skills/
├── google-maps/ # Agent Skill — how to USE the tools
│ ├── SKILL.md # Tool map, recipes, invocation
│ └── references/
│ ├── tools-api.md # Tool parameters + scenario recipes
│ ├── travel-planning.md # Travel planning methodology
│ └── local-seo.md # Local SEO / Google Business Profile ranking analysis
└── project-docs/ # Project Skill — how to DEVELOP/MAINTAIN
├── SKILL.md # Architecture overview + onboarding
└── references/
├── architecture.md # System design, code map, 9-file checklist
├── google-maps-api-guide.md # API endpoints, pricing, gotchas
├── geo-domain-knowledge.md # GIS fundamentals, Japan context
└── decisions.md # 10 ADRs (design decisions + rationale)
For enterprise security reviews, see Security Assessment Clarifications — a 23-item checklist covering licensing, data protection, credential management, tool contamination, and AI agent execution environment verification.
To report a vulnerability, see SECURITY.md.
| Tool / Feature | What it unlocks | Status |
|---|---|---|
maps_static_map | Map images with pins/routes — multimodal AI can "see" the map | Done |
maps_air_quality | AQI, pollutants — health-aware travel, outdoor planning | Done |
maps_batch_geocode | Geocode up to 50 addresses in one call — data enrichment | Done |
maps_search_along_route | Find places along a route ranked by detour time — trip planning | Done |
maps_explore_area | One-call neighborhood overview (composite) | Done |
maps_plan_route | Optimized multi-stop itinerary (composite) | Done |
maps_compare_places | Side-by-side place comparison (composite) | Done |
maps_local_rank_tracker | Geographic grid rank tracking — local SEO analysis (composite) | Done |
GOOGLE_MAPS_ENABLED_TOOLS | Filter tools to reduce context usage | Done |
| Feature | What it unlocks | Status |
|---|---|---|
maps_place_photo | Place photos for multimodal AI — "see" the restaurant ambiance | Planned |
| Language parameter | Multi-language responses (ISO 639-1) across all tools | Planned |
| MCP Prompt Templates | /travel-planner, /neighborhood-scout slash commands in Claude Desktop | Planned |
| Geo-Reasoning Benchmark | 10-scenario test suite measuring LLM geospatial reasoning accuracy | Research |
These are the real-world scenarios driving our tool decisions:
See CHANGELOG.md for version history.
MIT
Community participation and contributions are welcome! Please read CONTRIBUTING.md for development setup, coding guidelines, and the pull request process.
GOOGLE_MAPS_API_KEY*secretGoogle Maps API key (get one at https://console.cloud.google.com)
GOOGLE_MAPS_ENABLED_TOOLSComma-separated tool names to enable. Omit or * for all 18 tools.
com.mcparmory/google-search
io.github.pipeworx-io/brave-search
marcopesani/mcp-server-serper
brave/brave-search-mcp-server
com.mcparmory/google-search-console
acamolese/google-search-console-mcp