Что такое MCP-сервер, показал 2ГИС: 6 инструментов отучили модель выдумывать адреса
Геосервис 2ГИС 3 июня опубликовал MCP-сервер с открытым кодом, который решает одну из самых раздражающих проблем на стыке языковых моделей и геоданных: модель перестаёт выдумывать адреса и координаты, потому что получает их из реального API, а не из собственной «памяти».
MCP-сервер 2ГИС показывает, как контрактом инструмента, а не уговорами в системном промпте, заставить модель работать с проверенными данными. Это готовый инженерный рецепт для любого разработчика, которому нужно подключить своё API к языковой модели.
Anthropic в конце 2024 года опубликовала спецификацию MCP (Model Context Protocol, открытый протокол подключения внешних инструментов к ИИ-моделям). С тех пор десятки команд пишут собственные MCP-серверы, но публичных разборов инженерных граблей почти нет. Команда 2ГИС выпустила и сам сервер, и подробный технический отчёт о том, что ломается, когда модель получает доступ к геоданным, и как это чинить архитектурой, а не промптами. Именно этот отчёт лёг в основу инструкции ниже.
Что такое MCP-сервер и зачем он нужен?
MCP-сервер, это программа, которая отдаёт ИИ-модели набор инструментов по стандартному протоколу. Модель видит имя каждого инструмента, описание и параметры, и сама решает, когда его вызвать. Код исполняет не модель, а клиент: модель лишь формирует вызов с аргументами, получает результат обратно в контекст и продолжает рассуждать.
Без подключённых инструментов ассистент на вопрос про маршрут или ближайшую аптеку отвечает уверенно и полностью выдуманно. Это классическая галлюцинация (когда ИИ уверенно выдумывает то, чего не было). Но и после подключения геоданных проблема не исчезает, а мутирует: модель начинает выдумывать адреса и координаты, подставляя их в вызовы инструментов. Заметить такое гораздо сложнее.
Сервер mcp-2gis решает это шестью инструментами поверх API 2ГИС:
- Поиск мест и организаций
- Прямое геокодирование (адрес в координаты)
- Обратное геокодирование (координаты в адрес)
- Построение маршрутов
- Изохроны (зона доступности за заданное время)
- Статические карты
Что понадобится
- Python 3.10+ и менеджер пакетов pip или uv
- API-ключ 2ГИС (получается бесплатно на dev.2gis.ru)
- MCP-совместимый клиент: Claude Desktop, Cursor, любой клиент с поддержкой MCP
- 15 минут на установку и первый тестовый запрос
Как устроена архитектура: каркас вместо копипаста
Ключевое архитектурное решение: каждый инструмент, это тонкий адаптер между MCP-контрактом и доменом API. Всё остальное (HTTP-пулы, авторизация, логирование, обработка ошибок) живёт в каркасе.
Слои выстроены так:
- MCP-клиент отправляет запрос
- Middleware FastMCP проверяет авторизацию, лимиты, таймауты
- Файл инструмента содержит MCP-схему, Pydantic-валидацию (проверку типов входных данных) и маппинг результата
- Общий модуль инструментов управляет зависимостями и границей ошибок
- Интеграционный модуль знает URL и параметры конкретного API
- HTTP-клиент держит общий пул соединений и подставляет ключ
- API 2ГИС возвращает данные
При добавлении нового инструмента разработчик пишет только адаптер на третьем слое. Не нужно копировать обработку ошибок авторизации, создание HTTP-пулов или чтение переменных окружения.
Как контракт побеждает галлюцинации?
Вот центральная находка команды 2ГИС. Модель выдумывает координаты и адреса не от «злого умысла», а потому что схема инструмента позволяет ей передать произвольную строку или число. Решение: строгая типизация и валидация на уровне контракта.
Координата WGS84 (пара чисел: долгота и широта в градусах) проверяется Pydantic-валидатором ещё до отправки в API. Если модель подставила несуществующие координаты, вызов не уйдёт в сеть и модель получит внятное сообщение об ошибке.
Описание инструмента (description) в MCP, это не комментарий для разработчика, а часть продукта. Модель читает именно его, решая, вызывать ли инструмент и с какими аргументами. По данным команды 2ГИС, с неточным описанием модель либо не понимала, что инструмент нужен, либо вызывала его с неверными параметрами.
Два типа ошибок: для модели и для протокола
Ядро сервера разводит ошибки на две категории:
- Бизнес-ошибка (неверный ключ, нет доступа): возвращается модели как результат инструмента с машиночитаемым кодом. Модель понимает, что произошло, и может сообщить пользователю
- Сетевой сбой (таймаут, обрыв): пробрасывается как ошибка протокола. Клиент может повторить запрос
Если бизнес-ошибку отдать как падение протокола, модель не поймёт причину и начнёт вызывать инструмент заново в цикле.
# Упрощённый пример ядра
async def run_gis_tool(name, ctx, operation) -> ToolResult:
try:
rt = get_runtime(ctx)
return await operation(rt.client, rt.access)
except GISAPIError as e:
return rt.client.error_result(e) # бизнес-ошибка → результат для модели
except UpstreamError as e:
raise to_mcp_error(e) from e # сеть → протокольная ошибка
Пользователь спрашивает ассистента: «Найди ближайшую аптеку к Невскому проспекту, 28». Без MCP-сервера модель уверенно называет несуществующую аптеку с выдуманным адресом. С подключённым mcp-2gis происходит следующее: модель вызывает инструмент поиска мест, передаёт валидированный адрес, получает из API 2ГИС реальный список организаций с настоящими координатами, названиями и режимом работы. Пользователь видит проверенный ответ с актуальными данными.
Нестрогая схема параметров. Если оставить координаты как произвольные числа без валидации диапазона, модель подставит правдоподобные, но несуществующие значения. Всегда типизируйте и валидируйте входные параметры.
Расплывчатое описание инструмента. Описание «ищет места», не даст модели понять, когда именно вызывать инструмент и какие параметры обязательны. Пишите описание так, будто объясняете задачу новому сотруднику.
Одинаковая обработка всех ошибок. Если и сетевой таймаут, и невалидный ключ возвращать одинаково, модель застрянет в бесполезных ретраях. Разделяйте бизнес-ошибки и сбои инфраструктуры.
Копирование логики между инструментами. Через три релиза получите пять версий обработки авторизации и пропущенное логирование. Выносите общее в каркас сразу.
Что с этим делать прямо сейчас, по ролям
Разработчику, который пишет свой MCP-сервер. Архитектура 2ГИС, это готовый шаблон: тонкие адаптеры на слое инструментов, каркас для общей логики, два контракта ошибок. Код доступен на GitHub (ссылка в документации 2ГИС), можно форкнуть и адаптировать под своё API.
Автору на Дзене или контент-маркетологу. Если вы используете ИИ-ассистентов для работы с локальным контентом (адреса, маршруты, рекомендации мест), подключение MCP-сервера 2ГИС к Claude Desktop устраняет проблему выдуманных адресов. Результат: можно доверять фактуре в черновиках.
Предпринимателю в РФ. 2ГИС, это российский сервис, API доступно без VPN, ключ бесплатный. Для задач с геоданными это рабочая альтернатива Google Maps API, доступ к которому из РФ нестабилен.
Главная ценность этого проекта не в самом сервере (шесть инструментов поверх API, это стандартная интеграция), а в публичном разборе инженерных решений. Команда 2ГИС честно показала, что доступ к данным не убирает галлюцинации, а смещает их: модель перестаёт выдумывать факты целиком, но начинает подставлять правдоподобные, но ложные параметры в вызовы инструментов. И решение через контракт (валидацию, типизацию, чёткое описание) работает надёжнее, чем попытки «уговорить» модель системным промптом. По моим наблюдениям, именно этот подход, контракт вместо промптинга, будет определять качество MCP-серверов в ближайший год. Честная оговорка: сервер пока покрывает шесть инструментов, и для сложных сценариев (цепочки вызовов, комбинация нескольких геосервисов) придётся дописывать логику самостоятельно.
Научитесь работать с ИИ-инструментами на практике
В dzen.guru мы разбираем, как авторы и маркетологи используют нейросети для реальных задач. Подключайтесь, чтобы не пропустить практические разборы.
Попробовать dzen.guruКонтракт инструмента бьёт промпт: если вы проектируете MCP-сервер или любую интеграцию языковой модели с внешним API, закладывайте валидацию и типизацию на уровне схемы, а не надейтесь, что правильная формулировка в системном промпте удержит модель от выдумок.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Разработка LLM в России: интеграторов почти нет, а бизнес готов платить
Если коротко: практик из «Финама» и преподаватель «Хекслета» рассказал, как устроена разработка LLM (больших языковых моделей) изнутри, кого ищут на рынке,…
OpenAI уволила трёх исследователей безопасности AI: компания говорит об утечке, они о цензуре
OpenAI 6 июня подтвердила увольнение трёх исследователей по безопасности ИИ, заявив о «серьёзном нарушении доверия», хотя сами уволенные утверждают, что…

Jev оценён в $7,5 млрд за недели после запуска: чему учат ИИ-стартапы в России
Стартап TypeSafe AI привлёк 870 миллионов долларов на развитие Jev, модели, которая не генерирует текст, а выдаёт вероятности для автоматизации…
Комментарии