Skip to main content
Glama

google-maps-mcp

Un servidor TypeScript Model Context Protocol (MCP) que expone las APIs de Google Maps Platform como herramientas para LLMs. Proporciona a los asistentes de IA datos cartográficos reales y estructurados — indicaciones, rutas de tránsito, búsqueda de lugares, validación de direcciones, fotos, elevación y más — en lugar de adivinar a partir de datos de entrenamiento.

Funciona con Claude Desktop y cualquier otro cliente compatible con MCP.


Características

15 herramientas en tres categorías:

Categoría

Herramientas

Mapas

URL de imagen de mapa estático, URL de inserción (iframe), datos de elevación, URL de imagen de Street View

Rutas

Indicaciones paso a paso (coche/a pie/bicicleta/transporte público), matriz de distancias, optimización de rutas con varias paradas

Lugares

Geocodificación / geocodificación inversa, detalles de lugar, búsqueda de texto, búsqueda cercana, autocompletado, fotos, validación de direcciones, zona horaria

Transporte: HTTP Streamable (sesiones con estado, SSE keep-alive) — el transporte MCP moderno, compatible con mcp-remote y todos los clientes compatibles con HTTP.

Huella mínima: solo dos dependencias en tiempo de ejecución (@modelcontextprotocol/sdk, zod). Todas las llamadas a Google Maps usan el fetch integrado de Node.js contra las API REST — no se requiere SDK de Google.


Related MCP server: google-maps-mcp-server

Requisitos previos

  • Node.js 22+ (o Docker)

  • mcp-remote — instalar una vez de forma global: npm install -g mcp-remote

  • Una clave de API de Google Maps Platform con las APIs relevantes habilitadas (ver más abajo)

  • Un proyecto de Google Cloud con facturación habilitada

APIs que habilitar en Google Cloud Console

Ve a APIs y Servicios → Biblioteca y habilita:

API

Utilizada por

Maps Static API

maps_static_map

Street View Static API

maps_street_view

Maps Embed API

maps_embed_url

Elevation API

maps_elevation

Geocoding API

places_geocode

Time Zone API

places_timezone

Places API (New)

places_details, places_text_search, places_nearby_search, places_autocomplete, places_photos

Address Validation API

places_address_validation

Routes API

routes_compute, routes_matrix

Route Optimization API

routes_optimize (opcional)

Puedes restringir la clave a estas APIs y a la IP de tu servidor para uso en producción.


Inicio rápido

Opción A — Ejecutar con Docker (recomendada)

docker run -d \
  --name google-maps-mcp \
  -p 127.0.0.1:3003:3003 \
  -e GOOGLE_MAPS_API_KEY=your_key_here \
  -e MCP_AUTH_TOKEN=your_secret_token \
  ghcr.io/apurvaumredkar/google-maps-mcp:latest

Verifica:

curl http://localhost:3003/health
# {"status":"ok","service":"google-maps-mcp"}

Opción B — npm / npx

No requiere instalación — ejecútalo directamente con npx:

GOOGLE_MAPS_API_KEY=your_key_here \
MCP_AUTH_TOKEN=your_secret_token \
npx mcp-server-google-maps
# google-maps-mcp listening on port 3003

O instalar globalmente:

npm install -g mcp-server-google-maps
GOOGLE_MAPS_API_KEY=your_key_here MCP_AUTH_TOKEN=your_secret_token mcp-server-google-maps

Establece PORT= para cambiar el puerto predeterminado (3003).


Opción C — Compilar desde el código fuente

git clone https://github.com/apurvaumredkar/google-maps-mcp.git
cd google-maps-mcp
npm install
npm run build

Crea un archivo .env (o exporta las variables):

GOOGLE_MAPS_API_KEY=your_key_here
MCP_AUTH_TOKEN=your_secret_token
# Optional — only needed for routes_optimize:
GOOGLE_CLOUD_PROJECT_ID=your_project_id

Inicia el servidor:

GOOGLE_MAPS_API_KEY=... MCP_AUTH_TOKEN=... npm start
# google-maps-mcp listening on port 3003

Opción D — Docker Compose (pila autoalojada)

Añade a tu docker-compose.yml:

services:
  google-maps-mcp:
    build: .
    container_name: google-maps-mcp
    restart: unless-stopped
    ports:
      - "127.0.0.1:3003:3003"
    environment:
      - GOOGLE_MAPS_API_KEY=${GOOGLE_MAPS_API_KEY}
      - MCP_AUTH_TOKEN=${MCP_AUTH_TOKEN}
      - GOOGLE_CLOUD_PROJECT_ID=${GOOGLE_CLOUD_PROJECT_ID:-}

Variables de entorno

Variable

Requerida

Descripción

GOOGLE_MAPS_API_KEY

Tu clave de API de Google Maps Platform

MCP_AUTH_TOKEN

No

Token secreto que los clientes deben enviar en la cabecera X-Api-Key. Omítelo para uso solo local; establécelo al exponer el servidor a través de una red o proxy. Genéralo con openssl rand -hex 32

PORT

No

Puerto HTTP (predeterminado: 3003)

GOOGLE_CLOUD_PROJECT_ID

No

Solo se requiere para routes_optimize (Route Optimization API)


Conexión de un cliente

Este servidor funciona con cualquier cliente compatible con MCP — Claude Desktop, LM Studio, Cursor, o cualquier otra herramienta que soporte el Model Context Protocol. El formato de configuración puede variar según el cliente, pero el endpoint y la autenticación son los mismos.

El servidor expone un único endpoint: POST/GET http://localhost:3003/mcp

Si MCP_AUTH_TOKEN está establecido, todas las solicitudes deben incluir la cabecera:

X-Api-Key: <MCP_AUTH_TOKEN>

Si MCP_AUTH_TOKEN no está establecido, no se requiere ninguna cabecera (adecuado para uso solo local).

Claude Desktop (ejemplo)

Edita ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "google-maps": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:3003/mcp",
        "--header",
        "X-Api-Key: your_secret_token"
      ]
    }
  }
}

Referencia de herramientas

Mapas

maps_static_map — Imagen de mapa estático

Devuelve una URL de imagen directa para un mapa estático.

Parámetro

Tipo

Predeterminado

Descripción

center

string

obligatorio

Dirección o lat,lng

zoom

integer

13

Nivel de zoom 0–21

size

string

640x480

Dimensiones de imagen WxH en píxeles

maptype

enum

roadmap

roadmap | satellite | terrain | hybrid

markers

string

Especificación de marcador, p. ej. color:red|48.8566,2.3522

path

string

Especificación de trazado para dibujar rutas

format

enum

png

png | png8 | png32 | gif | jpg

scale

enum

1

1 = estándar, 2 = HiDPI/retina

language

string

Código de idioma BCP 47 para etiquetas

region

string

Código de región ISO 3166-1 alpha-2


maps_embed_url — URL de inserción de Maps

Devuelve una URL de inserción lista para iframe.

Parámetro

Tipo

Descripción

mode

enum

place | directions | search | view | streetview

q

string

Consulta de lugar/búsqueda (modos place, search)

center

string

lat,lng para modo view/streetview

zoom

integer

Nivel de zoom

origin / destination

string

Para modo directions

waypoints

string

Puntos de ruta separados por pipe

maptype

enum

roadmap | satellite


maps_elevation — Datos de elevación

Devuelve la elevación en metros sobre el nivel del mar.

Parámetro

Tipo

Descripción

locations

string

Pares lat,lng separados por pipe

path

string

Trazado lat,lng separado por pipe

samples

integer

Número de muestras a lo largo del trazado (2–512)


maps_street_view — Imagen de Street View

Devuelve una URL directa de imagen panorámica de Street View.

Parámetro

Tipo

Predeterminado

Descripción

location

string

Dirección o lat,lng

pano

string

ID de panorámica específico (anula location)

size

string

640x480

Tamaño de imagen WxH

heading

number

Orientación de cámara 0–360°

pitch

number

Inclinación de cámara -90° a 90°

fov

number

90

Campo de visión 10–120°

source

enum

outdoor para excluir panorámicas de interiores


Rutas

routes_compute — Calcular ruta

Indicaciones paso a paso con tráfico en tiempo real.

Restricciones de TRANSIT: el modo TRANSIT no admite intermediates (puntos de ruta) ni modificadores de ruta (avoid_tolls, avoid_highways, avoid_ferries). Pasarlos con travel_mode: TRANSIT devuelve un error claro — calcula tramos separados en su lugar (A→B, luego B→C).

Parámetro

Tipo

Predeterminado

Descripción

origin

string

obligatorio

Dirección o lat,lng

destination

string

obligatorio

Dirección o lat,lng

travel_mode

enum

DRIVE

DRIVE | WALK | BICYCLE | TRANSIT | TWO_WHEELER

transit_allowed_modes

enum[]

Filtrar el transporte público por tipos de vehículo específicos: BUS | SUBWAY | TRAIN | LIGHT_RAIL | RAIL. Solo se aplica cuando travel_mode es TRANSIT

intermediates

string[]

Puntos de paso entre origen y destino (no compatible con TRANSIT)

departure_time

string

Fecha y hora ISO 8601 para el enrutado según el tráfico

avoid_tolls

boolean

false

Evitar carreteras de peaje (no compatible con TRANSIT)

avoid_highways

boolean

false

Evitar autopistas (no compatible con TRANSIT)

avoid_ferries

boolean

false

Evitar ferris (no compatible con TRANSIT)

units

enum

METRIC

METRIC | IMPERIAL

compute_alternative_routes

boolean

false

Devolver hasta 3 alternativas


routes_matrix — Matriz de distancia de rutas

Parámetro

Tipo

Predeterminado

Descripción

origins

string[]

obligatorio

Hasta 25 direcciones o cadenas lat,lng

destinations

string[]

obligatorio

Hasta 25 direcciones o cadenas lat,lng

travel_mode

enum

DRIVE

DRIVE | WALK | BICYCLE | TRANSIT

departure_time

string

Fecha y hora ISO 8601

units

enum

METRIC

METRIC | IMPERIAL


routes_optimize — Optimizar ruta de múltiples paradas

Optimiza el orden de las paradas para minimizar el tiempo total de viaje. Requiere GOOGLE_CLOUD_PROJECT_ID.

Parámetro

Tipo

Descripción

vehicle_start

string

Ubicación inicial — debe ser lat,lng (geocodifica primero si es necesario)

vehicle_end

string

Ubicación final (por defecto, la inicial)

visits

object[]

Matriz de { address, label?, duration_minutes? } — las direcciones deben ser lat,lng

travel_mode

enum

DRIVING | WALKING


Lugares

places_geocode — Geocodificar / Geocodificación inversa

Parámetro

Tipo

Descripción

address

string

Dirección a geocodificar

latlng

string

lat,lng para geocodificación inversa

region

string

Sesgo de región ISO 3166-1 alpha-2

components

string

Filtro de componentes, p. ej. country:FR|postal_code:75001


places_details — Detalles del lugar

Parámetro

Tipo

Descripción

place_id

string

Google Place ID

fields

string

Máscara de campos separada por comas (tiene un valor predeterminado razonable)

language_code

string

Idioma de la respuesta


Parámetro

Tipo

Descripción

query

string

p. ej. "best ramen in Tokyo"

location_bias_lat/lng

number

Sesgar los resultados hacia esta ubicación

location_bias_radius_m

number

Radio del círculo de sesgo

max_results

integer

1–20, predeterminado 10

min_rating

number

Valoración media mínima en estrellas (0–5)

open_now

boolean

Solo lugares abiertos actualmente

included_type

string

Filtrar por tipo de lugar, p. ej. restaurant

price_levels

enum[]

PRICE_LEVEL_FREEPRICE_LEVEL_VERY_EXPENSIVE


Parámetro

Tipo

Descripción

latitude / longitude

number

Centro de la búsqueda

radius_m

number

Radio de búsqueda en metros (máx. 50,000)

included_types

string[]

Filtros de tipo de lugar

excluded_types

string[]

Tipos de lugar a excluir

max_results

integer

1–20, predeterminado 10

rank_preference

enum

DISTANCE | POPULARITY


places_autocomplete — Autocompletado de lugares

Parámetro

Tipo

Descripción

input

string

Texto parcial para completar

location_bias_lat/lng

number

Sesgar hacia esta ubicación

included_primary_types

string[]

Filtro de tipos

country_codes

string[]

Filtro de país ISO 3166-1 alpha-2

include_query_predictions

boolean

Devolver también predicciones de consulta


places_photos — Fotos de lugares

Parámetro

Tipo

Predeterminado

Descripción

place_id

string

obligatorio

Google Place ID

max_photos

integer

3

Máximo de fotos a devolver (1–10)

max_width_px

integer

1200

Ancho máximo de la foto en píxeles

max_height_px

integer

900

Alto máximo de la foto en píxeles


places_address_validation — Validar dirección

Parámetro

Tipo

Descripción

address_lines

string[]

Líneas de dirección

region_code

string

Código de país ISO 3166-1 alpha-2

locality

string

Ciudad/pueblo

administrative_area

string

Estado/provincia

postal_code

string

Código postal

enable_usps_cass

boolean

Validación USPS CASS (solo EE. UU.)


places_timezone — Obtener zona horaria

Parámetro

Tipo

Descripción

latitude / longitude

number

Ubicación

timestamp

integer

Marca de tiempo Unix para el cálculo del horario de verano (por defecto, la actual)

language

string

Idioma de la respuesta


Arquitectura

src/
├── index.ts         # Raw Node.js HTTP server, auth, stateful session management
├── server.ts        # McpServer instantiation + tool registration
├── maps-client.ts   # Typed fetch wrappers for all Google Maps REST APIs
└── tools/
    ├── maps.ts      # 4 tools: static map, embed, elevation, street view
    ├── routes.ts    # 3 tools: compute route, matrix, optimize
    └── places.ts    # 8 tools: geocode, details, text search, nearby, autocomplete,
                     #          photos, address validation, timezone

Decisiones de diseño clave:

  • node:http puro en lugar de Express — necesario para una interoperación correcta con el manejo de solicitudes interno basado en Hono del SDK de MCP. Express preconsume el flujo del cuerpo de la solicitud de una manera que rompe StreamableHTTPServerTransport.

  • Mapa de sesiones con estadomcp-remote y el mantenimiento de actividad de SSE requieren que las sesiones persistan entre solicitudes. Las sesiones se identifican mediante la cabecera Mcp-Session-Id y se limpian al cerrar el transporte.

  • Autenticación antes de leer el cuerpo — la verificación de X-Api-Key ocurre en la cabecera antes de tocar cualquier flujo del cuerpo, de modo que las solicitudes rechazadas se drenan correctamente.

  • Autenticación dividida para las API de Google — las API REST heredadas (Static Maps, Geocoding, Elevation, Timezone, Street View) usan el parámetro de consulta ?key=; las API nuevas (Places v1, Routes v2, Address Validation) usan la cabecera X-Goog-Api-Key.


Desarrollo

npm run dev    # TypeScript watch mode (tsc --watch)
npm run build  # Compile to dist/
npm start      # Run compiled server

Reconstruir la imagen de Docker después de los cambios

docker compose build google-maps-mcp
docker compose up -d google-maps-mcp

Probar el endpoint de MCP

# Health check (no auth required)
curl http://localhost:3003/health

# MCP initialize (auth required)
TOKEN=your_secret_token
curl -s -X POST http://localhost:3003/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "X-Api-Key: $TOKEN" \
  -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1"}},"id":1}'

# List tools (use session ID from Mcp-Session-Id response header)
SESSION=<Mcp-Session-Id from above>
curl -s -X POST http://localhost:3003/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "X-Api-Key: $TOKEN" \
  -H "Mcp-Session-Id: $SESSION" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":2}'

Advertencia para Windows/WSL: si tu archivo .env tiene finales de línea CRLF de Windows, extrae los valores con tr -d '\r':

TOKEN=$(grep MCP_AUTH_TOKEN .env | cut -d= -f2 | tr -d '\r')

Registro de cambios

v1.0.4

  • routes_compute: Se añadió validación temprana para el modo TRANSIT — pasar intermediates o modificadores de ruta (avoid_tolls, avoid_highways, avoid_ferries) ahora devuelve un error claro y accionable en lugar de un 400 críptico de la API de Google.

v1.0.3

  • routes_compute: Se añadió el parámetro transit_allowed_modes para filtrar las rutas de transporte público por tipo de vehículo (BUS, SUBWAY, TRAIN, LIGHT_RAIL, RAIL).

v1.0.2

  • Lanzamiento público inicial con 15 herramientas en las categorías Mapas, Rutas y Lugares.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
2wRelease cycle
3Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    A Model Context Protocol server that provides Google Maps API integration, allowing users to search locations, get place details, geocode addresses, calculate distances, obtain directions, and retrieve elevation data through LLM processing capabilities.
    7
    1,992
    428
    MIT

View all related MCP servers

Related MCP Connectors

  • Live Google Maps business search, review, and photo data for AI agents over MCP.

  • Google Maps MCP Pack — geocoding, places, directions, distance matrix, elevation.

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/apurvaumredkar/google-maps-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server