osm-mcp
osm-mcp
Сервер MCP для OpenStreetMap: геокодирование, расстояния и время в пути пешком/на автомобиле/на велосипеде, оптимизация маршрута с несколькими остановками, изохроны и поиск POI — создан для планирования поездок с помощью ИИ-ассистентов.
11 инструментов, все только для чтения. Все бэкенды — бесплатные публичные сервисы OpenStreetMap; ключ API не требуется. Ключ OpenRouteService можно указать опционально для смены движка маршрутизации.
📖 Полная документация: https://osm-mcp.ni-c.de
Зачем ещё один MCP-сервер для OSM?
Корректные маршруты для пеших и велосипедных прогулок. Публичные демо-серверы OSRM игнорируют сегмент профиля внутри пути URL OSRM и всегда возвращают маршруты для автомобиля, если не используются префиксы путей FOSSGIS
routed-foot/routed-bike/routed-car. Большинство существующих MCP-серверов для OSM делают это неправильно и молча возвращают время вождения для пеших запросов. Этот сервер использует префиксы, и его живой smoke-тест проверяет, что пешие маршруты значительно медленнее автомобильных.Соответствие политике по построению. Ограничение скорости для каждого сервиса (Nominatim и OSRM: 1 запрос/секунду), идентифицирующий User-Agent для каждого запроса (требуется политикой использования Nominatim), кэширование ответов, ограниченная конкурентность Overpass (2 слота) и автоматическое переключение на зеркало Overpass при 429/5xx.
Поддержка Photon. Опциональное геокодирование, устойчивое к опечаткам, с помощью komoot's Photon, которое предназначено для интерактивного использования — лучше подходит для поиска, управляемого LLM, чем постоянные запросы к Nominatim.
Related MCP server: Geo MCP Worker
Требования
Node.js ≥ 22
Доступ в Интернет к публичным сервисам OpenStreetMap (см. таблицу ниже)
Конфигурация
Все переменные опциональны — сервер работает «из коробки».
Переменная | Значение по умолчанию | Описание |
|
| User-Agent, отправляемый каждому сервису. Nominatim требует реальный, идентифицирующий. |
|
| Геокодирование / обратное геокодирование |
|
| Геокодирование, устойчивое к опечаткам |
|
| Маршрутизация, матрицы, оптимизация маршрутов. Должен обслуживать префиксы путей |
|
| Через запятую конечные точки Overpass, пробуются по порядку при 429/5xx |
|
| Изохроны |
| – | Опциональный ключ OpenRouteService (секрет). При установке маршруты, матрицы и изохроны используют ORS вместо OSRM/Valhalla. Бесплатный тариф: 2000 направлений/день, 40/минуту. |
|
| Конечная точка OpenRouteService |
|
| Время в секундах, в течение которого одинаковые ответы вышестоящих сервисов обслуживаются из кэша в памяти ( |
Установка
claude mcp add osm -- npx -y osm-mcpClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"osm": {
"command": "npx",
"args": ["-y", "osm-mcp"]
}
}
}Codex (~/.codex/config.toml):
[mcp_servers.osm]
command = "npx"
args = ["-y", "osm-mcp"]Контейнер (мультиархитектурный, с SBOM и подтверждением сборки):
docker run -i --rm ghcr.io/ni-c/osm-mcp-i обязателен — протокол работает через stdin и stdout. Нет порта для публикации. Другие рецепты для клиентов — в руководстве по клиентам.
Инструменты
Инструмент | Описание |
| Название места/адрес → координаты (Nominatim или Photon) |
| Координаты → ближайший адрес |
| Расстояние и время в пути между 2+ точками, |
| Время в пути/расстояние от каждого источника до каждого пункта назначения за один вызов |
| Лучший порядок посещения для набора остановок (задача коммивояжёра, OSRM trip) |
| Доступная зона в пределах заданного времени или расстояния (Valhalla, или ORS с ключом) |
| POI вокруг местоположения по категории или сырому тегу OSM, отсортированные по расстоянию (Overpass) |
| Полная запись OSM одного элемента: часы работы, веб-сайт, телефон, … |
| Справедливое место встречи для 2–8 человек (сбалансированное время в пути) |
| Расстояние по большому кругу, вычисляется офлайн |
| Ссылки на маркер / маршрут openstreetmap.org, вычисляются офлайн |
Каждый ввод места принимает либо название/адрес (автоматически геокодируется), либо буквальные координаты в формате "lat,lon".
Политика использования и атрибуция
Этот сервер взаимодействует с общей инфраструктурой сообщества. Он применяет опубликованные ограничения на стороне клиента, но оператор просит пользователей в целом не перегружать систему и использовать в некоммерческих целях:
Данные: © участники OpenStreetMap, лицензия ODbL 1.0.
Nominatim: макс. 1 запрос/секунду, обязателен идентифицирующий User-Agent, результаты кэшируются (политика).
OSRM / Valhalla (FOSSGIS): разумное, некоммерческое использование; макс. 1 запрос/секунду (о сервисе).
Overpass: ~2 одновременных слота на IP, <10 000 запросов/день (вики).
Photon: добросовестное использование (photon.komoot.io).
Для интенсивного или коммерческого использования разверните сервисы самостоятельно и укажите переменные *_BASE_URL на ваши экземпляры.
Безопасность
Все инструменты только для чтения; сервер никогда не записывает данные в OpenStreetMap.
Никакие учётные данные не требуются; опциональный
ORS_API_KEYудаляется из окружения процесса после загрузки и скрывается в сообщениях об ошибках.Контент из OSM (названия, адреса, теги) помечается как ненадёжные данные в результатах инструментов, чтобы модель обрабатывала их как данные, а не инструкции.
Тела ошибок вышестоящих сервисов усекаются, а HTML-страницы ошибок отбрасываются до того, как они попадут в контекст модели.
Перенаправления никогда не выполняются; все запросы имеют тайм-аут.
Разработка
npm install
npm run lint # eslint + prettier
npm test # unit tests (all upstream APIs mocked)
npm run test:coverage
npm run build
npm run smoke # opt-in LIVE test against the real public servicesРелиз
Управляется тегами, без ручного шага публикации:
Перенесите записи
[Unreleased]в новый раздел## [x.y.z] - YYYY-MM-DDвCHANGELOG.mdи обновитеpackage.json.npm run lint && npm run build && npm run test:coverage.Сделайте коммит, затем подписанный аннотированный тег:
git tag -s vx.y.z -m "vx.y.z".git push origin main vx.y.z.
Затем release.yml запускает тесты, публикует в npm с подтверждением через Trusted Publishing (без участия токена), создаёт релиз на GitHub из раздела CHANGELOG и публикует в реестр MCP как io.github.ni-c/osm-mcp. ci.yml отправляет мультиархитектурный образ в GHCR по тому же тегу.
Если шаг с реестром не удался, исправьте проблему в main и запустите workflow Publish to MCP Registry — не запускайте задачу с тегом повторно, так как она будет использовать старую версию кода.
Лицензия
Maintenance
Related MCP Servers
- AlicenseBqualityDmaintenanceA comprehensive MCP server providing 30 tools for geocoding, routing, and OpenStreetMap data analysis. It enables AI assistants to search for locations, calculate travel routes, and perform quality assurance checks on map data.303MIT
- Alicense-qualityBmaintenanceFree geospatial MCP server for AI agents, providing geocoding, reverse geocoding, POI search, and route planning using OpenStreetMap data via Nominatim, Overpass, and OSRM.1GPL 3.0
- Flicense-qualityAmaintenanceAn MCP server providing geocoding, routing, isochrones, and POI-by-proximity search through self-hosted OpenStreetMap backends.
- Alicense-qualityAmaintenanceMCP server for geocoding, reverse geocoding, place/POI search, and distance calculation using OpenStreetMap Nominatim, with no API key required.183MIT
Related MCP Connectors
MCP server for Japan geodata: cadastral lot numbers (chiban) and reverse geocoding, for AI agents.
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
AI marketplace — flights, tours, activities, transport & more via MCP. No auth required.
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/ni-c/osm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server