google-maps-mcp
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 |
|
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 |
|
В продакшене вы можете ограничить ключ этими 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 Platform API |
| Нет | Секретный токен, который клиенты должны отправлять в заголовке |
| Нет | HTTP-порт (по умолчанию: |
| Нет | Требуется только для |
Подключение клиента
Этот сервер работает с любым 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 изображения для статической карты.
Параметр | Тип | По умолчанию | Описание |
| string | обязательно | Адрес или |
| integer |
| Уровень масштабирования 0–21 |
| string |
| Размер изображения WxH в пикселях |
| enum |
|
|
| string | — | Спецификация маркера, например |
| string | — | Спецификация пути для отрисовки маршрутов |
| enum |
|
|
| enum |
|
|
| string | — | Код языка BCP 47 для подписей |
| string | — | Код региона ISO 3166-1 alpha-2 |
maps_embed_url — URL для встраивания карты
Возвращает URL для встраивания через iframe.
Параметр | Тип | Описание |
| enum |
|
| string | Запрос места/поиска (режимы place, search) |
| string |
|
| integer | Уровень масштабирования |
| string | Для режима directions |
| string | Промежуточные точки через вертикальную черту |
| enum |
|
maps_elevation — данные о рельефе
Возвращает высоту над уровнем моря в метрах.
Параметр | Тип | Описание |
| string | Пары |
| string | Путь |
| integer | Количество точек выборки вдоль пути (2–512) |
maps_street_view — изображение Street View
Возвращает прямой URL изображения панорамы Street View.
Параметр | Тип | По умолчанию | Описание |
| string | — | Адрес или |
| string | — | Конкретный идентификатор панорамы (переопределяет location) |
| string |
| Размер изображения WxH |
| number | — | Направление камеры 0–360° |
| number | — | Наклон камеры от -90° до 90° |
| number |
| Поле зрения 10–120° |
| enum | — |
|
Маршруты
routes_compute — расчёт маршрута
Пошаговые указания с учётом трафика в реальном времени.
Ограничения TRANSIT: режим
TRANSITне поддерживаетintermediates(промежуточные точки) или модификаторы маршрута (avoid_tolls,avoid_highways,avoid_ferries). Передача этих параметров сtravel_mode: TRANSITприведёт к понятной ошибке — вместо этого вычисляйте отдельные участки (A→B, затем B→C).
Parameter | Type | Default | Description |
| string | обязательно | Адрес или |
| string | обязательно | Адрес или |
| enum |
|
|
| enum[] | — | Фильтр транзита по конкретным типам транспортных средств: |
| string[] | — | Промежуточные точки между началом и концом маршрута (не поддерживается с |
| string | — | Дата и время в формате ISO 8601 для маршрутизации с учётом трафика |
| boolean |
| Избегать платных дорог (не поддерживается с |
| boolean |
| Избегать автомагистралей (не поддерживается с |
| boolean |
| Избегать паромов (не поддерживается с |
| enum |
|
|
| boolean |
| Вернуть до 3 альтернативных маршрутов |
routes_matrix — Матрица расстояний маршрутов
Вычисляет время и расстояние поездки между несколькими точками отправления и назначения одновременно.
Parameter | Type | Default | Description |
| string[] | обязательно | До 25 адресов или строк |
| string[] | обязательно | До 25 адресов или строк |
| enum |
|
|
| string | — | Дата и время в формате ISO 8601 |
| enum |
|
|
routes_optimize — Оптимизация многоточечного маршрута
Оптимизирует порядок остановок, чтобы минимизировать общее время в пути. Требуется GOOGLE_CLOUD_PROJECT_ID.
Parameter | Type | Description |
| string | Начальное местоположение — должно быть |
| string | Конечное местоположение (по умолчанию — начальное) |
| object[] | Массив |
| enum |
|
Места
places_geocode — Геокодирование / Обратное геокодирование
Преобразует адреса ↔ координаты.
Parameter | Type | Description |
| string | Адрес для геокодирования |
| string |
|
| string | Региональное смещение ISO 3166-1 alpha-2 |
| string | Фильтр компонентов, например |
places_details — Сведения о месте
Полные сведения о месте по его Google Place ID.
Parameter | Type | Description |
| string | Google Place ID |
| string | Маска полей через запятую (имеет разумное значение по умолчанию) |
| string | Язык ответа |
places_text_search — Поиск мест по тексту
Находит места, соответствующие запросу на естественном языке.
Parameter | Type | Description |
| string | например |
| number | Смещать результаты к этому местоположению |
| number | Радиус круга смещения |
| integer | 1–20, по умолчанию 10 |
| number | Минимальный средний рейтинг в звёздах (0–5) |
| boolean | Только места, открытые в данный момент |
| string | Фильтр по типу места, например |
| enum[] |
|
places_nearby_search — Поиск мест поблизости
Находит места рядом с координатой в пределах радиуса.
Parameter | Type | Description |
| number | Центр поиска |
| number | Радиус поиска в метрах (максимум 50 000) |
| string[] | Фильтры типов мест |
| string[] | Типы мест для исключения |
| integer | 1–20, по умолчанию 10 |
| enum |
|
places_autocomplete — Автодополнение мест
Предсказывает названия мест по частичному вводу.
Parameter | Type | Description |
| string | Частичный текст для завершения |
| number | Смещение к этому местоположению |
| string[] | Фильтр типов |
| string[] | Фильтр стран ISO 3166-1 alpha-2 |
| boolean | Также возвращать прогнозы запросов |
places_photos — Фотографии мест
Получить URL фотографий для места.
Parameter | Type | Default | Description |
| string | обязательно | Google Place ID |
| integer |
| Максимальное количество фотографий для возврата (1–10) |
| integer |
| Максимальная ширина фотографии в пикселях |
| integer |
| Максимальная высота фотографии в пикселях |
places_address_validation — Проверка адреса
Проверяет и стандартизирует почтовый адрес.
Parameter | Type | Description |
| string[] | Строки адреса |
| string | Код страны ISO 3166-1 alpha-2 |
| string | Город/населённый пункт |
| string | Штат/провинция |
| string | Почтовый индекс |
| boolean | Проверка USPS CASS (только для США) |
places_timezone — Получение часового пояса
Получает часовой пояс IANA и смещение UTC/DST для любых координат.
Parameter | Type | Description |
| number | Местоположение |
| integer | Unix-время для расчёта летнего времени (по умолчанию — текущее время) |
| 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.
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