Labsco
cablate logo

MCP Google Map Server

β˜… 369

from cablate

Integrates Google Maps API for location-based queries and data processing.

πŸ”₯πŸ”₯πŸ”₯πŸ”₯βœ“ VerifiedAccount requiredAdvanced setup
<p align="center"> <a href="https://www.npmjs.com/package/@cablate/mcp-google-map"><img src="https://img.shields.io/npm/v/@cablate/mcp-google-map" alt="npm version"></a> <a href="https://www.npmjs.com/package/@cablate/mcp-google-map"><img src="https://img.shields.io/npm/dm/@cablate/mcp-google-map" alt="npm downloads"></a> <a href="https://github.com/cablate/mcp-google-map/stargazers"><img src="https://img.shields.io/github/stars/cablate/mcp-google-map?style=social" alt="GitHub stars"></a> <a href="./LICENSE"><img src="https://img.shields.io/github/license/cablate/mcp-google-map" alt="license"></a> </p> <p align="center"> <img src="./assets/banner.webp" alt="MCP Google Maps β€” AI-Powered Geospatial Tools" width="800"> </p> <h3 align="center"><b>Give your AI agent the ability to understand the physical world β€”<br>geocode, route, search, and reason about locations.</b></h3> <p align="center"> <b>English</b> | <a href="./README.zh-TW.md">繁體中文</a> </p> <p align="center"> <img src="./assets/demo-grid-en.png" alt="Travel planning demo β€” Kyoto 2-day, Tokyo outdoor, Japan 5-day, Bangkok budget" width="800"> </p>
  • 18 tools β€” 14 atomic + 4 composite (explore-area, plan-route, compare-places, local-rank-tracker)
  • 3 modes β€” stdio, StreamableHTTP, standalone exec CLI
  • Agent Skill β€” built-in skill definition teaches AI how to chain geo tools (skills/google-maps/)

vs Google Grounding Lite

This projectGrounding Lite
Tools183
GeocodingYesNo
Step-by-step directionsYesNo
ElevationYesNo
Distance matrixYesNo
Place detailsYesNo
TimezoneYesNo
WeatherYesYes
Air qualityYesNo
Map imagesYesNo
Composite tools (explore, plan, compare)YesNo
Open sourceMITNo
Self-hostedYesGoogle-managed only
Agent SkillYesNo

Quick Start

Copy & paste β€” that's it
# 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

Special thanks to @junyinnnn for helping add support for streamablehttp.

Available Tools

ToolDescription
maps_search_nearbyFind places near a location by type (restaurant, cafe, hotel, etc.). Supports filtering by radius, rating, and open status.
maps_search_placesFree-text place search (e.g., "sushi restaurants in Tokyo"). Supports location bias, rating, open-now filters.
maps_place_detailsGet full details for a place by its place_id β€” reviews, phone, website, hours. Optional maxPhotos param returns photo URLs.
maps_geocodeConvert an address or landmark name into GPS coordinates.
maps_reverse_geocodeConvert GPS coordinates into a street address.
maps_distance_matrixCalculate travel distances and times between multiple origins and destinations. Driving mode supports avoid_tolls and avoid_highways.
maps_directionsGet step-by-step navigation between two points with route details. Driving mode supports avoid_tolls and avoid_highways.
maps_elevationGet elevation (meters above sea level) for geographic coordinates.
maps_timezoneGet timezone ID, name, UTC/DST offsets, and local time for coordinates.
maps_weatherGet current weather conditions or forecast β€” temperature, humidity, wind, UV, precipitation.
maps_air_qualityGet air quality index, pollutant concentrations, and health recommendations by demographic group.
maps_static_mapGenerate a map image with markers, paths, or routes β€” returned inline for the user to see directly.
maps_batch_geocodeGeocode up to 50 addresses in one call β€” returns coordinates for each.
maps_search_along_routeSearch for places along a route between two points β€” ranked by minimal detour time.
Composite Tools
maps_explore_areaExplore what's around a location β€” searches multiple place types and gets details in one call.
maps_plan_routePlan an optimized multi-stop route β€” uses Routes API waypoint optimization (up to 25 stops) for efficient ordering. Driving mode supports avoid_tolls and avoid_highways.
maps_compare_placesCompare places side-by-side β€” searches, gets details, and optionally calculates distances.
maps_local_rank_trackerTrack 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.

Development

Local Development

Copy & paste β€” that's it
# 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

Testing

Copy & paste β€” that's it
# 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

Project Structure

Copy & paste β€” that's it
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)

Tech Stack

  • TypeScript - Type-safe development
  • Node.js - Runtime environment
  • @googlemaps/places - Google Places API (New) for place search and details
  • Google Routes API - Directions, distance matrix, and waypoint optimization via REST
  • @googlemaps/google-maps-services-js - Geocoding, timezone, elevation
  • @modelcontextprotocol/sdk - MCP protocol implementation (v1.27+)
  • Express.js - HTTP server framework
  • Zod - Schema validation

Security

  • API keys are handled server-side
  • Per-session API key isolation for multi-tenant deployments
  • DNS rebinding protection available for production
  • Input validation using Zod schemas

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.

Roadmap

Recent Additions

Tool / FeatureWhat it unlocksStatus
maps_static_mapMap images with pins/routes β€” multimodal AI can "see" the mapDone
maps_air_qualityAQI, pollutants β€” health-aware travel, outdoor planningDone
maps_batch_geocodeGeocode up to 50 addresses in one call β€” data enrichmentDone
maps_search_along_routeFind places along a route ranked by detour time β€” trip planningDone
maps_explore_areaOne-call neighborhood overview (composite)Done
maps_plan_routeOptimized multi-stop itinerary (composite)Done
maps_compare_placesSide-by-side place comparison (composite)Done
maps_local_rank_trackerGeographic grid rank tracking β€” local SEO analysis (composite)Done
GOOGLE_MAPS_ENABLED_TOOLSFilter tools to reduce context usageDone

Planned

FeatureWhat it unlocksStatus
maps_place_photoPlace photos for multimodal AI β€” "see" the restaurant ambiancePlanned
Language parameterMulti-language responses (ISO 639-1) across all toolsPlanned
MCP Prompt Templates/travel-planner, /neighborhood-scout slash commands in Claude DesktopPlanned
Geo-Reasoning Benchmark10-scenario test suite measuring LLM geospatial reasoning accuracyResearch

Use Cases We're Building Toward

These are the real-world scenarios driving our tool decisions:

  • Travel planning β€” "Plan a day trip in Tokyo" (geocode β†’ search β†’ directions β†’ weather)
  • Real estate analysis β€” "Analyze this neighborhood: schools, commute, flood risk" (search-nearby Γ— N + elevation + distance-matrix)
  • Logistics optimization β€” "Route these 12 deliveries efficiently from the warehouse" (plan-route)
  • Field sales β€” "Visit 6 clients in Chicago, minimize drive time, find lunch spots" (plan-route + search-nearby)
  • Disaster response β€” "Nearest open hospitals? Am I in a flood zone?" (search-nearby + elevation)
  • Content creation β€” "Top 5 neighborhoods in Austin with restaurant density and airport distance" (explore-area + distance-matrix)
  • Accessibility β€” "Wheelchair-accessible restaurants, avoid steep routes" (search-nearby + place-details + elevation)
  • Local SEO β€” "Audit my restaurant's ranking vs competitors within 1km" (search-places + compare-places + explore-area)

Changelog

See CHANGELOG.md for version history.

License

MIT

Contributing

Community participation and contributions are welcome! Please read CONTRIBUTING.md for development setup, coding guidelines, and the pull request process.

  • Submit Issues: Report bugs or provide suggestions
  • Create Pull Requests: Submit code improvements
  • Documentation: Help improve documentation

Contact

Star History

<a href="https://glama.ai/mcp/servers/@cablate/mcp-google-map"> <img width="380" height="200" src="https://glama.ai/mcp/servers/@cablate/mcp-google-map/badge" alt="Google Map Server MCP server" /> </a>

Star History Chart