Skip to main content
Glama
Google Maps MCP Server

Google Maps MCP Server

gmaps-mcp

Google Maps MCP server for AI agents and LLM applications.

Python 3.10+ License: MIT

Purpose

gmaps-mcp is an open-source Google Maps MCP server and command line interface built on the Model Context Protocol. It provides an AI agent maps tool that requires no API key, billing account, or browser automation setup.

AI assistants in Claude Desktop, Cursor, Cline, Windsurf, Zed, and OpenCode connect to this Model Context Protocol Google Maps server to search local businesses, inspect reviews and star ratings, find phone numbers and websites, and retrieve geographic coordinates. The tool runs locally through standard input/output (stdio) or across networks through Streamable HTTP.

Related MCP server: Google Maps MCP Server

Architecture

The system has four core layers:

  1. Protocol layer. Built with the official MCP Python SDK (mcp.server.mcpserver.MCPServer). Exposes tools and resources over stdio or Streamable HTTP transports. Server logging writes strictly to stderr so stdout remains clean JSON-RPC for MCP clients.

  2. Scraper engine. Built on aiohttp and phonenumbers. The engine queries Google Maps endpoints directly with asynchronous HTTP requests, parses raw response payloads, extracts place records, and normalizes phone numbers into E.164 format. It runs without Playwright, Puppeteer, or browser binaries.

  3. Geospatial grid tiling. When searching broad areas or entire cities, the grid crawler calculates the geographic bounding box and subdivides the region into smaller viewport tiles. This bypasses the standard 20-result pagination cap of Google Maps and collects hundreds of places per query.

  4. Storage and delivery layer. When result sets exceed normal prompt budgets, the server stores full result objects in memory and returns an MCP resource URI (gmaps://results/{resource_id}). Clients fetch the complete payload through the MCP resource interface, preventing context window exhaustion.

Setup

Requirements

  • Python 3.10 or higher

  • uv package manager (recommended) or pip

Install and run with uvx

Run the server directly without cloning:

uvx --from git+https://github.com/devsanthoshmk/gmaps-mcp.git gmaps-mcp serve

Install from source

Clone the repository and install dependencies with uv:

git clone https://github.com/devsanthoshmk/gmaps-mcp.git
cd gmaps-mcp
uv sync

Usage

Run as an MCP server

Start the server using stdio transport (default):

uv run gmaps-mcp serve

Start the server using Streamable HTTP transport:

uv run gmaps-mcp serve --transport streamable-http --host 127.0.0.1 --port 8000

Run via command line

Search places

Search for places and display a formatted table:

uv run gmaps-mcp search "dentists" "Chicago" --limit 10 --country us --format table

Search across an entire city using geospatial grid tiling:

uv run gmaps-mcp search "bakeries" "Paris" --country fr --grid --format table

Export search results to CSV or JSON:

uv run gmaps-mcp search "pharmacies" "Chennai" --grid --country in --output pharmacies.csv
uv run gmaps-mcp search "coffee shops" "Seattle" --country us --output coffee.json

Get place details

Look up details by Google Place ID:

uv run gmaps-mcp details "ChIJ7xiFY1VmUjoR2IuH0fYWMlk" --format table

Look up details by name and export to CSV:

uv run gmaps-mcp details "Eiffel Tower Paris" --country fr --output eiffel.csv

Configuration

Claude Desktop

To configure Claude Desktop MCP Maps integration, add gmaps-mcp to claude_desktop_config.json:

{
  "mcpServers": {
    "google-maps": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/devsanthoshmk/gmaps-mcp.git",
        "gmaps-mcp",
        "serve"
      ]
    }
  }
}

Config file paths by platform:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

Cursor

Add to .cursor/mcp.json or your global Cursor MCP configuration:

{
  "mcpServers": {
    "google-maps": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/devsanthoshmk/gmaps-mcp.git",
        "gmaps-mcp",
        "serve"
      ]
    }
  }
}

Windsurf, Cline, and Zed

Add to your client MCP configuration:

{
  "mcpServers": {
    "google-maps": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/devsanthoshmk/gmaps-mcp.git",
        "gmaps-mcp",
        "serve"
      ]
    }
  }
}

Install with mcp-add

Add the server using the mcp-add utility:

npx mcp-add -n google-maps -t stdio -c "uvx --from git+https://github.com/devsanthoshmk/gmaps-mcp.git gmaps-mcp serve"

Local development configuration

Point an MCP client to a local repository checkout:

{
  "mcpServers": {
    "google-maps": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/gmaps-mcp",
        "gmaps-mcp",
        "serve"
      ]
    }
  }
}

Available tools

The server registers two MCP tools:

search_google_maps

Searches Google Maps for businesses, places, and points of interest.

Parameter

Type

Default

Description

term

string

required

Search query or business category such as "coffee shops" or "dentists"

location

string

required

City, neighborhood, or landmark such as "Paris", "Chicago", or "Chennai"

limit

integer

null

Maximum number of results to return

grid

boolean

false

Enable geospatial grid tiling for large area coverage

country

string

"in"

ISO 3166-1 alpha-2 country code such as "us", "fr", or "in"

language

string

"en"

Response language code

result_delivery

"inline" | "resource"

"inline"

Delivery mode. Use "resource" to prevent large result sets from filling the context window

get_place_details

Fetches structured details for a specific place.

Parameter

Type

Default

Description

place

string

required

Google Place ID (e.g. "ChIJ...") or exact business name

country

string

"in"

ISO 3166-1 alpha-2 country code

language

string

"en"

Response language code

Output schema

Places return structured JSON matching this schema:

{
  "place_id": "ChIJ7xiFY1VmUjoR2IuH0fYWMlk",
  "name": "New Chennai Pharmacy",
  "category": "Pharmacy",
  "address": "No. 33, Sarojini Street, T.Nagar, Chennai, Tamil Nadu 600017",
  "phone": "091500 97960",
  "international_phone": "+91 91500 97960",
  "website": "https://example.com",
  "domain": "example.com",
  "latitude": 13.0371485,
  "longitude": 80.2319365,
  "rating": 4.7,
  "review_count": 25,
  "google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJ7xiFY1VmUjoR2IuH0fYWMlk"
}

Development

Run the test suite:

uv run --extra dev pytest

License

MIT license in LICENSE.

Available Tools

2 tools
get_place_detailsA

Retrieve detailed information for a single specific Google Maps place or business. Looks up a place using its unique Google Place ID (e.g., 'ChIJ...' or 'place_id:ChIJ...') or specific landmark/business name. Returns complete structured details including address, phone number, website, rating, coordinates, and Google Maps URL.

Inputs: place (required), country, language. Returns: Result object returned by the get_place_details tool.

search_google_mapsA

Search Google Maps for local businesses, places, points of interest, and services. Returns structured place data including business name, Google Place ID, category, formatted street address, phone numbers, website URL, geo-coordinates (latitude/longitude), star rating, total review count, and direct Google Maps URL.

Inputs: query (required), limit, country, language. Returns: Result object returned by the search_google_maps tool.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 2 tools

    Disambiguation4/5

    The two tools have distinct purposes: search_google_maps finds places by query, and get_place_details retrieves details for a known place ID. There is slight overlap in the returned fields, but the use cases are clearly different.

    Naming Consistency4/5

    Both tools use a clear verb_noun pattern (search/get + google_maps/place_details). The naming is consistent, though 'get_place_details' could be more symmetrical as 'get_google_maps_place' for perfect parity.

    Tool Count2/5

    Only two tools for a Google Maps server is very limited. Maps APIs typically support additional operations like directions, geocoding, or place photos, so the tool count feels too small for the implied scope.

    Completeness2/5

    The core search and detail retrieval are present, but critical operations like navigation (directions), geocoding (address to coordinates and reverse), and place photo fetching are missing, creating significant gaps for common map-related tasks.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers