maps-mcp
Provides tools for geocoding, reverse geocoding, place search and details, traffic-aware travel times, nearby place search, and time zone lookup using Google Maps Platform APIs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@maps-mcp How long does it take to drive from Surry Hills to Sydney Airport?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
maps-mcp
An MCP server exposing Google Maps Platform to any MCP client: geocoding, place search/details, traffic-aware travel times, and time zones. Seven tools, built on the Python MCP SDK (FastMCP). Runs as a local stdio server or as a containerized Streamable HTTP service with bearer auth.
Auth is a single API key, not OAuth — Maps Platform is a key-metered developer API, so there are no accounts to connect and no token refresh.
Tool Reference
Tool | Parameters | Description |
|
| Free-form address/place name → coordinates, canonical address, |
|
| Coordinates → nearest street address(es). |
|
| Text search for businesses/POIs ("vet near Potts Point"). Returns name, address, rating, open-now, phone, |
|
| One place in full: weekly opening hours, phone, website, rating, price level, editorial summary. |
|
| Route duration + distance via the Routes API; traffic-aware for |
|
| Typed "what's around me" (Places New searchNearby): |
|
| IANA zone + UTC offset (incl. DST) at a point; |
Origins/destinations for travel_time accept three spellings, resolved by
shape: a free-form address, "lat,lng", or "place_id:<id>".
# "When do I need to leave?" — compose with your calendar MCP server
travel_time(
origin="home address here",
destination="325 Edgecliff Rd, Woollahra", # from the event's location
mode="drive",
departure_time="2026-07-05T08:30:00+10:00",
)
# Find somewhere that's open right now
place_search(query="pharmacy Potts Point", open_now=True)Related MCP server: google-maps-mcp
Setup (Google Cloud console — one-time)
Create (or pick) a GCP project. Prefer a dedicated project — an API key is easier to leak than an OAuth token, and project isolation caps the blast radius. Enable billing (personal volumes sit inside the monthly free tiers, but the billing account is mandatory).
Enable four APIs: Geocoding API, Places API (New), Routes API, Time Zone API.
Create an API key (Credentials → Create credentials → API key) and restrict it to exactly those four APIs. Add IP restrictions if the caller set is stable.
Set
MAPS_API_KEYin the server's environment and restart. The server runs fine without the key — every tool call returns a setup-pointer error until it's set — so deployment order doesn't matter.
Quick start (stdio)
Most MCP clients (Claude Code, Claude Desktop, VS Code, …) spawn stdio servers directly. With uv installed:
// e.g. Claude Desktop claude_desktop_config.json / Claude Code .mcp.json
{
"mcpServers": {
"maps": {
"command": "uv",
"args": ["run", "--project", "/path/to/maps-mcp", "maps-mcp", "--stdio"],
"env": { "MAPS_API_KEY": "your-key-here" }
}
}
}stdio mode has no network surface and skips bearer auth — the client owns the process.
HTTP mode (container)
The bundled Containerfile builds a Streamable HTTP server at /mcp
(stateless — restarts never strand client sessions). HTTP mode refuses
to start without MCP_BEARER_TOKEN; clients authenticate with
Authorization: Bearer <token>.
podman build -t maps-mcp . # or: docker build -t maps-mcp .
podman run -d --name maps-mcp -p 8328:8328 \
-e MAPS_API_KEY=your-key -e MCP_BEARER_TOKEN=some-long-random-token \
maps-mcpmaps_mcp.healthcheck does a full HTTP round-trip to /mcp (the 401
counts as alive — it proves the event loop responds); wire it to your
container healthcheck with a restart-on-unhealthy policy. Terminate TLS
at a reverse proxy — the server itself speaks plain HTTP.
Configuration
Env var | Default | Purpose |
| (empty) | Google Maps Platform API key. Tools error clearly when unset. |
| (empty) | Optional ccTLD geocoding bias (e.g. |
| (empty) | Optional BCP-47 language for Places responses (e.g. |
|
| HTTP listen port. |
| (empty) | Required in HTTP mode; server refuses to start without it. Not used in |
Architecture notes
Four upstream APIs, one thread-safe
httpx.Client. Legacy-style APIs (Geocoding, Time Zone) take the key as a query param and report errors in a bodystatusfield; new-style APIs (Places New, Routes) takeX-Goog-Api-Key+ a mandatoryX-Goog-FieldMaskheader.Sync tool handlers are offloaded to a worker thread (the MCP SDK runs sync tools inline on the event loop, so a slow upstream call would otherwise stall every concurrent request). Per-request log lines (
tool= outcome= duration_ms= rss_mib=) go to stderr.API-key values are redacted from error messages before they can reach logs or clients.
Testing
# Tiers 1 + 2 — pure helpers + mocked HTTP (fast, no network, no key)
uv run --extra test pytest tests/test_maps_client.py -v
# Tier 3 — live API round-trips against stable Sydney landmarks
# (read-only; nothing to clean up). Gated on the key; skips without it.
MAPS_API_KEY=... uv run --extra test pytest tests/test_integration.py -vLicense
Available Tools
7 toolsgeocodeA
Resolve a free-form address or place name to coordinates, a canonical formatted address, and a place_id. region is a ccTLD bias (e.g. 'au'; default from the MAPS_REGION env var) — results elsewhere still resolve, just rank lower.
Inputs: address (required), region. Returns: result
place_detailsA
Full detail for one place by place_id (from place_search or geocode): weekly opening hours, phone, website, rating, price level, editorial summary.
Inputs: place_id (required). Returns: result
place_searchA
Find businesses/points of interest by free-text query (e.g. 'vet near Potts Point', 'best coffee Surry Hills'). Returns name, address, rating, open-now, phone, and place_id per result.
latitude/longitude (+ optional radius_meters, default 5 km) bias results toward a point — or just put the suburb in the query. open_now=True filters to places currently open.
Inputs: query (required), latitude, open_now, longitude, +2 more. Returns: result
place_search_nearbyA
Find places around a point by TYPE ('what's near me') — the typed complement to place_search's free-text queries.
latitude/longitude: center of the search circle. included_types: comma-separated place types, e.g. 'pharmacy', 'restaurant,cafe', 'ev_charging_station' (Places API type table); empty returns prominent places of any type. radius_meters: search radius (default 1500, max 50000). max_results: max places (default 5, max 20). rank_by_distance: True ranks nearest-first instead of by prominence.
Inputs: latitude (required), longitude (required), max_results, radius_meters, +2 more. Returns: result
reverse_geocodeC
Resolve coordinates to the nearest street address(es).
Inputs: latitude (required), longitude (required). Returns: result
time_zoneA
IANA time zone + UTC offset (incl. DST) at coordinates. timestamp (unix epoch seconds) evaluates DST at a specific moment; 0 = now.
Inputs: latitude (required), longitude (required), timestamp. Returns: result
travel_timeA
Route duration and distance between two points — traffic-aware for driving, step-by-step for transit. THE tool for "when do I need to leave?".
origin/destination: address, 'lat,lng', or 'place_id:'. mode: drive (default) / walk / bicycle / transit / two_wheeler. departure_time: RFC3339 (e.g. '2026-07-05T08:30:00+10:00'), must be now-or-future; empty means now. For driving, the result includes the delay vs the no-traffic baseline. arrival_time: RFC3339 "be there by" time — transit mode only (the Routes API restriction). The transit answer lists each leg: line, stops, and clock times, so "leave by" falls straight out. include_tolls: for drive/two_wheeler, adds an estimated toll cost (requests an extra computation — off by default).
Inputs: origin (required), destination (required), mode, avoid_tolls, +3 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool targets a distinct operation: geocoding forward/reverse, place search by text or type, place details by ID, routing, and timezone lookup. Even place_search and place_search_nearby are clearly separated by free-text vs. type/radius queries with distinct parameters, leaving no ambiguity.
All names are lowercase with underscores and readable, but the pattern is mixed: geocode and reverse_geocode are verb-first, while place_search, place_details, travel_time, and time_zone are noun-first. This is a minor inconsistency that does not harm clarity.
Seven tools cover the core map-related operations without redundancy or bloat. The scope is well-balanced, fitting a focused maps MCP server that handles geocoding, place discovery, routing, and timezone data.
The surface provides a complete life-cycle for map queries: geocoding both directions, place discovery via text and type, detailed place information, travel time/directions, and timezone data. No major gaps for the stated purpose, and all operations are read-only which suits the domain.
Maintenance
Related MCP Connectors
Hosted MCP for live place search, geocoding & turn-by-turn routes. No Maps API key to manage.
Geocoding, routing, isochrones, traffic, weather, and place search for AI agents. 19 MCP tools.
The Google Maps MCP server is a fully-managed server provided by the Maps Grounding Lite API that connects AI applications to Google Maps Platform services. It provides three main tools for building LLM applications: searching for places, looking up weather information, and computing routes with details like distance and travel time. The server acts as a proxy that translates Google Maps data into a format that AI applications can understand, enabling agents to accurately answer real-world location and travel queries.
Google Maps MCP Pack — geocoding, places, directions, distance matrix, elevation. Uses Google Maps…
Related MCP Servers
- AlicenseAqualityDmaintenanceProduction-ready MCP server for Google Maps Platform APIs, providing 11 tools for directions, places, geocoding, traffic, and road data to empower AI agents with location intelligence.1132 PyPI4Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA TypeScript MCP server that exposes Google Maps Platform APIs as tools for LLMs, providing real map data like directions, transit routes, place search, address validation, photos, and elevation.14 npm9GPL 3.0
- AlicenseNot gradedqualityDmaintenanceProvides MCP tools for Google Maps services including directions, geocoding, distance matrix, and places search.13Apache 2.0
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server for Google Maps — routing, place discovery, and commute comparison over stdio.41ISC