google-maps-mcp
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-remoteUna 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 |
|
Street View Static API |
|
Maps Embed API |
|
Elevation API |
|
Geocoding API |
|
Time Zone API |
|
Places API (New) |
|
Address Validation API |
|
Routes API |
|
Route Optimization API |
|
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:latestVerifica:
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 3003O 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-mapsEstablece 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 buildCrea 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_idInicia el servidor:
GOOGLE_MAPS_API_KEY=... MCP_AUTH_TOKEN=... npm start
# google-maps-mcp listening on port 3003Opció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 |
| Sí | Tu clave de API de Google Maps Platform |
| No | Token secreto que los clientes deben enviar en la cabecera |
| No | Puerto HTTP (predeterminado: |
| No | Solo se requiere para |
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 |
| string | obligatorio | Dirección o |
| integer |
| Nivel de zoom 0–21 |
| string |
| Dimensiones de imagen WxH en píxeles |
| enum |
|
|
| string | — | Especificación de marcador, p. ej. |
| string | — | Especificación de trazado para dibujar rutas |
| enum |
|
|
| enum |
|
|
| string | — | Código de idioma BCP 47 para etiquetas |
| 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 |
| enum |
|
| string | Consulta de lugar/búsqueda (modos place, search) |
| string |
|
| integer | Nivel de zoom |
| string | Para modo directions |
| string | Puntos de ruta separados por pipe |
| enum |
|
maps_elevation — Datos de elevación
Devuelve la elevación en metros sobre el nivel del mar.
Parámetro | Tipo | Descripción |
| string | Pares |
| string | Trazado |
| 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 |
| string | — | Dirección o |
| string | — | ID de panorámica específico (anula location) |
| string |
| Tamaño de imagen WxH |
| number | — | Orientación de cámara 0–360° |
| number | — | Inclinación de cámara -90° a 90° |
| number |
| Campo de visión 10–120° |
| enum | — |
|
Rutas
routes_compute — Calcular ruta
Indicaciones paso a paso con tráfico en tiempo real.
Restricciones de TRANSIT: el modo
TRANSITno admiteintermediates(puntos de ruta) ni modificadores de ruta (avoid_tolls,avoid_highways,avoid_ferries). Pasarlos contravel_mode: TRANSITdevuelve un error claro — calcula tramos separados en su lugar (A→B, luego B→C).
Parámetro | Tipo | Predeterminado | Descripción |
| string | obligatorio | Dirección o |
| string | obligatorio | Dirección o |
| enum |
|
|
| enum[] | — | Filtrar el transporte público por tipos de vehículo específicos: |
| string[] | — | Puntos de paso entre origen y destino (no compatible con |
| string | — | Fecha y hora ISO 8601 para el enrutado según el tráfico |
| boolean |
| Evitar carreteras de peaje (no compatible con |
| boolean |
| Evitar autopistas (no compatible con |
| boolean |
| Evitar ferris (no compatible con |
| enum |
|
|
| boolean |
| Devolver hasta 3 alternativas |
routes_matrix — Matriz de distancia de rutas
Parámetro | Tipo | Predeterminado | Descripción |
| string[] | obligatorio | Hasta 25 direcciones o cadenas |
| string[] | obligatorio | Hasta 25 direcciones o cadenas |
| enum |
|
|
| string | — | Fecha y hora ISO 8601 |
| enum |
|
|
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 |
| string | Ubicación inicial — debe ser |
| string | Ubicación final (por defecto, la inicial) |
| object[] | Matriz de |
| enum |
|
Lugares
places_geocode — Geocodificar / Geocodificación inversa
Parámetro | Tipo | Descripción |
| string | Dirección a geocodificar |
| string |
|
| string | Sesgo de región ISO 3166-1 alpha-2 |
| string | Filtro de componentes, p. ej. |
places_details — Detalles del lugar
Parámetro | Tipo | Descripción |
| string | Google Place ID |
| string | Máscara de campos separada por comas (tiene un valor predeterminado razonable) |
| string | Idioma de la respuesta |
places_text_search — Buscar lugares por texto
Parámetro | Tipo | Descripción |
| string | p. ej. |
| number | Sesgar los resultados hacia esta ubicación |
| number | Radio del círculo de sesgo |
| integer | 1–20, predeterminado 10 |
| number | Valoración media mínima en estrellas (0–5) |
| boolean | Solo lugares abiertos actualmente |
| string | Filtrar por tipo de lugar, p. ej. |
| enum[] |
|
places_nearby_search — Buscar lugares cercanos
Parámetro | Tipo | Descripción |
| number | Centro de la búsqueda |
| number | Radio de búsqueda en metros (máx. 50,000) |
| string[] | Filtros de tipo de lugar |
| string[] | Tipos de lugar a excluir |
| integer | 1–20, predeterminado 10 |
| enum |
|
places_autocomplete — Autocompletado de lugares
Parámetro | Tipo | Descripción |
| string | Texto parcial para completar |
| number | Sesgar hacia esta ubicación |
| string[] | Filtro de tipos |
| string[] | Filtro de país ISO 3166-1 alpha-2 |
| boolean | Devolver también predicciones de consulta |
places_photos — Fotos de lugares
Parámetro | Tipo | Predeterminado | Descripción |
| string | obligatorio | Google Place ID |
| integer |
| Máximo de fotos a devolver (1–10) |
| integer |
| Ancho máximo de la foto en píxeles |
| integer |
| Alto máximo de la foto en píxeles |
places_address_validation — Validar dirección
Parámetro | Tipo | Descripción |
| string[] | Líneas de dirección |
| string | Código de país ISO 3166-1 alpha-2 |
| string | Ciudad/pueblo |
| string | Estado/provincia |
| string | Código postal |
| boolean | Validación USPS CASS (solo EE. UU.) |
places_timezone — Obtener zona horaria
Parámetro | Tipo | Descripción |
| number | Ubicación |
| integer | Marca de tiempo Unix para el cálculo del horario de verano (por defecto, la actual) |
| 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, timezoneDecisiones de diseño clave:
node:httppuro 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 rompeStreamableHTTPServerTransport.Mapa de sesiones con estado —
mcp-remotey el mantenimiento de actividad de SSE requieren que las sesiones persistan entre solicitudes. Las sesiones se identifican mediante la cabeceraMcp-Session-Idy se limpian al cerrar el transporte.Autenticación antes de leer el cuerpo — la verificación de
X-Api-Keyocurre 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 cabeceraX-Goog-Api-Key.
Desarrollo
npm run dev # TypeScript watch mode (tsc --watch)
npm run build # Compile to dist/
npm start # Run compiled serverReconstruir la imagen de Docker después de los cambios
docker compose build google-maps-mcp
docker compose up -d google-maps-mcpProbar 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
.envtiene finales de línea CRLF de Windows, extrae los valores contr -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 — pasarintermediateso 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ámetrotransit_allowed_modespara 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.
This server cannot be installed
Maintenance
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
- AlicenseBqualityAmaintenanceA 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.71,992428MIT
- 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.114Apache 2.0
- AlicenseAqualityDmaintenanceA TypeScript-based MCP server that integrates with Swagger/OpenAPI specifications to expose API endpoints as tools for Large Language Models (LLMs), enabling natural language interaction with any OpenAPI-compliant API.49MIT
- FlicenseNot gradedqualityDmaintenanceComprehensive MCP server for Google Maps APIs, enabling geocoding, place search and details, distance matrix, elevation, and directions through natural language.6
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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