Skip to main content
Glama

google-maps-mcp

Сервер на TypeScript, реализующий Model Context Protocol (MCP), который предоставляет API Google Maps Platform в виде инструментов для LLM. Даёт AI-ассистентам реальные структурированные данные карт — маршруты, маршруты общественного транспорта, поиск мест, проверку адресов, фотографии, высоты и другое — вместо догадок на основе обучающих данных.

Работает с Claude Desktop и любым другим MCP-совместимым клиентом.


Возможности

15 инструментов в трёх категориях:

Категория

Инструменты

Карты

URL статической карты, URL для встраивания (iframe), данные о рельефе, URL изображения Street View

Маршруты

Пошаговые указания (авто/пешком/велосипед/транспорт), матрица расстояний, оптимизация маршрута с несколькими остановками

Места

Геокодирование / обратное геокодирование, сведения о месте, текстовый поиск, поиск поблизости, автодополнение, фотографии, проверка адресов, часовой пояс

Транспорт: HTTP Streamable (stateful-сессии, SSE keep-alive) — современный MCP-транспорт, совместимый с mcp-remote и всеми HTTP-клиентами.

Минимальный вес: всего две зависимости времени выполнения (@modelcontextprotocol/sdk, zod). Все вызовы Google Maps используют встроенный в Node.js fetch для обращения к REST API — Google SDK не требуется.


Related MCP server: google-maps-mcp-server

Предварительные требования

  • Node.js 22+ (или Docker)

  • mcp-remote — установите один раз глобально: npm install -g mcp-remote

  • Ключ Google Maps Platform API с включёнными соответствующими API (см. ниже)

  • Проект Google Cloud с включённым биллингом

API, которые нужно включить в Google Cloud Console

Перейдите в APIs & Services → Library и включите:

API

Используется

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 (необязательно)

В продакшене вы можете ограничить ключ этими API и IP-адресом вашего сервера.


Быстрый старт

Вариант A — запуск с Docker (рекомендуется)

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

Проверка:

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

Вариант B — npm / npx

Устанавливать ничего не нужно — запустите сразу через 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

Или установите глобально:

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

Установите PORT=, чтобы изменить порт по умолчанию (3003).


Вариант C — сборка из исходников

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

Создайте файл .env (или экспортируйте переменные):

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

Запустите сервер:

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

Вариант D — Docker Compose (самостоятельно развёртываемый стек)

Добавьте в ваш 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:-}

Переменные окружения

Переменная

Обязательная

Описание

GOOGLE_MAPS_API_KEY

Да

Ваш ключ Google Maps Platform API

MCP_AUTH_TOKEN

Нет

Секретный токен, который клиенты должны отправлять в заголовке X-Api-Key. Опустите для локального использования; установите при публикации сервера в сети или за прокси. Сгенерируйте с помощью openssl rand -hex 32

PORT

Нет

HTTP-порт (по умолчанию: 3003)

GOOGLE_CLOUD_PROJECT_ID

Нет

Требуется только для routes_optimize (Route Optimization API)


Подключение клиента

Этот сервер работает с любым MCP-совместимым клиентом — Claude Desktop, LM Studio, Cursor или любым другим инструментом, поддерживающим Model Context Protocol. Формат конфигурации может отличаться у разных клиентов, но конечная точка и авторизация одинаковы.

Сервер предоставляет единую конечную точку: POST/GET http://localhost:3003/mcp

Если задан MCP_AUTH_TOKEN, все запросы должны включать заголовок:

X-Api-Key: <MCP_AUTH_TOKEN>

Если MCP_AUTH_TOKEN не задан, заголовок не требуется (подходит для локального использования).

Claude Desktop (пример)

Отредактируйте ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) или %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"
      ]
    }
  }
}

Справочник инструментов

Карты

maps_static_map — изображение статической карты

Возвращает прямой URL изображения для статической карты.

Параметр

Тип

По умолчанию

Описание

center

string

обязательно

Адрес или lat,lng

zoom

integer

13

Уровень масштабирования 0–21

size

string

640x480

Размер изображения WxH в пикселях

maptype

enum

roadmap

roadmap | satellite | terrain | hybrid

markers

string

Спецификация маркера, например color:red|48.8566,2.3522

path

string

Спецификация пути для отрисовки маршрутов

format

enum

png

png | png8 | png32 | gif | jpg

scale

enum

1

1 = обычный, 2 = HiDPI/retina

language

string

Код языка BCP 47 для подписей

region

string

Код региона ISO 3166-1 alpha-2


maps_embed_url — URL для встраивания карты

Возвращает URL для встраивания через iframe.

Параметр

Тип

Описание

mode

enum

place | directions | search | view | streetview

q

string

Запрос места/поиска (режимы place, search)

center

string

lat,lng для режимов view/streetview

zoom

integer

Уровень масштабирования

origin / destination

string

Для режима directions

waypoints

string

Промежуточные точки через вертикальную черту

maptype

enum

roadmap | satellite


maps_elevation — данные о рельефе

Возвращает высоту над уровнем моря в метрах.

Параметр

Тип

Описание

locations

string

Пары lat,lng через вертикальную черту

path

string

Путь lat,lng через вертикальную черту

samples

integer

Количество точек выборки вдоль пути (2–512)


maps_street_view — изображение Street View

Возвращает прямой URL изображения панорамы Street View.

Параметр

Тип

По умолчанию

Описание

location

string

Адрес или lat,lng

pano

string

Конкретный идентификатор панорамы (переопределяет location)

size

string

640x480

Размер изображения WxH

heading

number

Направление камеры 0–360°

pitch

number

Наклон камеры от -90° до 90°

fov

number

90

Поле зрения 10–120°

source

enum

outdoor, чтобы исключить панорамы внутри помещений


Маршруты

routes_compute — расчёт маршрута

Пошаговые указания с учётом трафика в реальном времени.

Ограничения TRANSIT: режим TRANSIT не поддерживает intermediates (промежуточные точки) или модификаторы маршрута (avoid_tolls, avoid_highways, avoid_ferries). Передача этих параметров с travel_mode: TRANSIT приведёт к понятной ошибке — вместо этого вычисляйте отдельные участки (A→B, затем B→C).

Parameter

Type

Default

Description

origin

string

обязательно

Адрес или lat,lng

destination

string

обязательно

Адрес или lat,lng

travel_mode

enum

DRIVE

DRIVE | WALK | BICYCLE | TRANSIT | TWO_WHEELER

transit_allowed_modes

enum[]

Фильтр транзита по конкретным типам транспортных средств: BUS | SUBWAY | TRAIN | LIGHT_RAIL | RAIL. Применяется только когда travel_mode равен TRANSIT

intermediates

string[]

Промежуточные точки между началом и концом маршрута (не поддерживается с TRANSIT)

departure_time

string

Дата и время в формате ISO 8601 для маршрутизации с учётом трафика

avoid_tolls

boolean

false

Избегать платных дорог (не поддерживается с TRANSIT)

avoid_highways

boolean

false

Избегать автомагистралей (не поддерживается с TRANSIT)

avoid_ferries

boolean

false

Избегать паромов (не поддерживается с TRANSIT)

units

enum

METRIC

METRIC | IMPERIAL

compute_alternative_routes

boolean

false

Вернуть до 3 альтернативных маршрутов


routes_matrix — Матрица расстояний маршрутов

Вычисляет время и расстояние поездки между несколькими точками отправления и назначения одновременно.

Parameter

Type

Default

Description

origins

string[]

обязательно

До 25 адресов или строк lat,lng

destinations

string[]

обязательно

До 25 адресов или строк lat,lng

travel_mode

enum

DRIVE

DRIVE | WALK | BICYCLE | TRANSIT

departure_time

string

Дата и время в формате ISO 8601

units

enum

METRIC

METRIC | IMPERIAL


routes_optimize — Оптимизация многоточечного маршрута

Оптимизирует порядок остановок, чтобы минимизировать общее время в пути. Требуется GOOGLE_CLOUD_PROJECT_ID.

Parameter

Type

Description

vehicle_start

string

Начальное местоположение — должно быть lat,lng (при необходимости сначала выполните геокодирование)

vehicle_end

string

Конечное местоположение (по умолчанию — начальное)

visits

object[]

Массив { address, label?, duration_minutes? } — адреса должны быть lat,lng

travel_mode

enum

DRIVING | WALKING


Места

places_geocode — Геокодирование / Обратное геокодирование

Преобразует адреса ↔ координаты.

Parameter

Type

Description

address

string

Адрес для геокодирования

latlng

string

lat,lng для обратного геокодирования

region

string

Региональное смещение ISO 3166-1 alpha-2

components

string

Фильтр компонентов, например country:FR|postal_code:75001


places_details — Сведения о месте

Полные сведения о месте по его Google Place ID.

Parameter

Type

Description

place_id

string

Google Place ID

fields

string

Маска полей через запятую (имеет разумное значение по умолчанию)

language_code

string

Язык ответа


Находит места, соответствующие запросу на естественном языке.

Parameter

Type

Description

query

string

например "best ramen in Tokyo"

location_bias_lat/lng

number

Смещать результаты к этому местоположению

location_bias_radius_m

number

Радиус круга смещения

max_results

integer

1–20, по умолчанию 10

min_rating

number

Минимальный средний рейтинг в звёздах (0–5)

open_now

boolean

Только места, открытые в данный момент

included_type

string

Фильтр по типу места, например restaurant

price_levels

enum[]

PRICE_LEVEL_FREEPRICE_LEVEL_VERY_EXPENSIVE


Находит места рядом с координатой в пределах радиуса.

Parameter

Type

Description

latitude / longitude

number

Центр поиска

radius_m

number

Радиус поиска в метрах (максимум 50 000)

included_types

string[]

Фильтры типов мест

excluded_types

string[]

Типы мест для исключения

max_results

integer

1–20, по умолчанию 10

rank_preference

enum

DISTANCE | POPULARITY


places_autocomplete — Автодополнение мест

Предсказывает названия мест по частичному вводу.

Parameter

Type

Description

input

string

Частичный текст для завершения

location_bias_lat/lng

number

Смещение к этому местоположению

included_primary_types

string[]

Фильтр типов

country_codes

string[]

Фильтр стран ISO 3166-1 alpha-2

include_query_predictions

boolean

Также возвращать прогнозы запросов


places_photos — Фотографии мест

Получить URL фотографий для места.

Parameter

Type

Default

Description

place_id

string

обязательно

Google Place ID

max_photos

integer

3

Максимальное количество фотографий для возврата (1–10)

max_width_px

integer

1200

Максимальная ширина фотографии в пикселях

max_height_px

integer

900

Максимальная высота фотографии в пикселях


places_address_validation — Проверка адреса

Проверяет и стандартизирует почтовый адрес.

Parameter

Type

Description

address_lines

string[]

Строки адреса

region_code

string

Код страны ISO 3166-1 alpha-2

locality

string

Город/населённый пункт

administrative_area

string

Штат/провинция

postal_code

string

Почтовый индекс

enable_usps_cass

boolean

Проверка USPS CASS (только для США)


places_timezone — Получение часового пояса

Получает часовой пояс IANA и смещение UTC/DST для любых координат.

Parameter

Type

Description

latitude / longitude

number

Местоположение

timestamp

integer

Unix-время для расчёта летнего времени (по умолчанию — текущее время)

language

string

Язык ответа


Архитектура

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

Ключевые проектные решения:

  • Чистый node:http вместо Express — требуется для корректного взаимодействия с внутренней обработкой запросов на основе Hono в MCP SDK. Express заранее потребляет поток тела запроса, что нарушает работу StreamableHTTPServerTransport.

  • Карта сеансов с сохранением состоянияmcp-remote и SSE keep-alive требуют, чтобы сеансы сохранялись между запросами. Сеансы привязаны к заголовку Mcp-Session-Id и удаляются при закрытии транспорта.

  • Аутентификация до чтения тела — проверка X-Api-Key выполняется по заголовку до обращения к потоку тела, поэтому отклонённые запросы корректно сбрасываются.

  • Разделение аутентификации для Google API — устаревшие REST API (Static Maps, Geocoding, Elevation, Timezone, Street View) используют параметр запроса ?key=; новые API (Places v1, Routes v2, Address Validation) используют заголовок X-Goog-Api-Key.


Разработка

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

Пересобрать Docker-образ после изменений

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

Тестирование 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}'

Особенность Windows/WSL: если ваш файл .env имеет окончания строк Windows CRLF, извлекайте значения с помощью tr -d '\r':

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

Журнал изменений

v1.0.4

  • routes_compute: Добавлена ранняя проверка для режима TRANSIT — передача intermediates или модификаторов маршрута (avoid_tolls, avoid_highways, avoid_ferries) теперь возвращает понятную и действенную ошибку вместо непонятной 400 от Google API.

v1.0.3

  • routes_compute: Добавлен параметр transit_allowed_modes для фильтрации транзитных маршрутов по типу транспорта (BUS, SUBWAY, TRAIN, LIGHT_RAIL, RAIL).

v1.0.2

  • Первый публичный выпуск с 15 инструментами в категориях Maps, Routes и Places.

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