OSM Edit MCP Server
OSM Edit MCP Server
Мощный сервер Model Context Protocol (MCP), который позволяет AI-ассистентам взаимодействовать с данными OpenStreetMap. Читайте, ищите, проверяйте и редактируйте данные карты безопасно, со встроенными защитными механизмами.
🌟 Что вы можете делать?
🔍 Искать места: находите рестораны, кафе, больницы, школы и многое другое
📍 Проверять координаты: проверяйте координаты и получайте подробную информацию о местоположении
🗺️ Исследовать области: узнавайте, что находится в любом географическом регионе
✏️ Редактировать безопасно: сначала вносите правки на сервере разработки
🤖 Естественный язык: используйте простой английский для описания того, что вам нужно
Related MCP server: Magic Lane MCP Server
📦 Предварительные требования
Python 3.10+
(Необязательно) uv для быстрого управления зависимостями
# Install uv (optional but recommended) curl -LsSf https://astral.sh/uv/install.sh | sh
🚀 Быстрый старт (5 минут)
1️⃣ Установка
git clone https://github.com/skywinder/osm-edit-mcp
cd osm-edit-mcp
uv sync --dev # Installs both base and development dependencies2️⃣ Настройка
cp .env.example .env
# Defaults target the development sandbox (OSM_USE_DEV_API=true), which is safe
# to experiment with. See "Switching to the Production API" below before pointing
# this at the real map.3️⃣ Тестирование
uv run python status_check.py4️⃣ Подключение к MCP-клиенту
Важно: MCP-серверы общаются с MCP-клиентами через stdin/stdout. Не запускайте main.py напрямую!
Вместо этого настройте сервер в вашем MCP-клиенте:
Cursor IDE: Настройки → Features → MCP
Claude Desktop: см. Настройка MCP-клиента
VSCode (Cline): добавьте в settings.json
Чтобы проверить функциональность без клиента:
uv run python test_comprehensive.py🔐 Включение операций записи (необязательно)
Для создания или редактирования данных карты требуется аутентификация OAuth:
Шаг 1: Создайте учётную запись разработчика
Посетите https://api06.dev.openstreetmap.org и зарегистрируйтесь (отдельно от основной OSM).
Шаг 2: Создайте OAuth-приложение
Перейдите в настройки учётной записи разработчика → OAuth 2 Applications
Зарегистрируйте новое приложение:
Название:
OSM Edit MCP DevRedirect URI:
https://localhost:8080/callbackРазрешения: отметьте все флажки
Шаг 3: Добавьте учётные данные
Отредактируйте .env и добавьте свои учётные данные OAuth:
OSM_DEV_CLIENT_ID=your_client_id_here
OSM_DEV_CLIENT_SECRET=your_client_secret_hereШаг 4: Аутентификация
uv run python oauth_auth.pyШаг 5: Проверка
uv run python test_comprehensive.pyЭтот набор тестов выполняет реальные записи — он открывает наборы изменений и создаёт узлы. Он
привязан к API разработки и откажется запускаться, если конфигурация указывает на
производственный сервер, поэтому его безопасно запускать, даже если ваш .env указывает на прод.
Для модульных тестов (без сети, без записи):
uv run pytest🌍 Переключение на производственный API
По умолчанию .env.example указывает на песочницу разработки. Переключение на реальную
базу данных OpenStreetMap — это осознанный отдельный шаг — каждая ваша правка становится
публичным постоянным изменением карты, которое другим людям придётся проверять или откатывать.
Шаг 1: Зарегистрируйте производственное OAuth-приложение
Войдите на https://www.openstreetmap.org → Мои настройки → OAuth 2 applications → Зарегистрировать новое приложение:
Redirect URI:
https://localhost:8080/callbackРазрешения: как минимум
read_prefs,write_api,write_changesets
Это другое приложение, отличное от вашего приложения для песочницы разработки; учётные данные не общие для двух серверов.
Шаг 2: Настройка
В .env:
OSM_USE_DEV_API=false # switches every tool to the live API
OSM_PROD_CLIENT_ID=your_prod_client_id
OSM_PROD_CLIENT_SECRET=your_prod_client_secret
OSM_PROD_REDIRECT_URI=https://localhost:8080/callbackОставьте OSM_CLIENT_ID / OSM_CLIENT_SECRET незаданными — эти устаревшие переменные переопределяют
переключатель dev/prod, если они присутствуют.
Шаг 3: Аутентификация в производственной среде
uv run python oauth_auth.pyЭто записывает .osm_token_prod.json (токены разработки хранятся в .osm_token_dev.json; сервер
выбирает файл, соответствующий OSM_USE_DEV_API, поэтому они никогда не смешиваются).
Шаг 4: Подтвердите цель
uv run python status_check.pyПри запуске сервер выводит предупреждение PRODUCTION MODE с указанием живого API. Если вы его
не видите, вы всё ещё находитесь в песочнице.
Примечание: test_comprehensive.py всегда выполняется против API разработки независимо от этих
настроек, по замыслу — проверка никогда не должна записывать тестовые данные на живую карту.
📖 Доступные инструменты
🔍 Поиск и обнаружение
Инструмент | Описание | Пример |
| Найти места вокруг местоположения | "Найти рестораны в радиусе 500 м" |
| Поиск мест по названию | "Где находится Центральный парк?" |
| Текстовый поиск любого элемента | "Поиск кофеен" |
| Преобразование адреса в координаты | "10 Downing Street, London" |
📍 Инструменты для работы с местоположением
Инструмент | Описание | Пример |
| Проверить, допустимы ли координаты |
|
| Получить все элементы в области | "Что в этой области?" |
| Статистика по области | "Сколько ресторанов?" |
🗺️ Доступ к данным OSM
Инструмент | Описание | Пример |
| Получить узел по ID | Детали узла |
| Получить линию по ID | Информация об улице/здании |
| Получить отношение по ID | Сложные объекты |
✏️ Инструменты редактирования (требуется аутентификация)
Инструмент | Описание | Пример |
| Начать сеанс редактирования | Требуется для правок |
| Завершить сеанс редактирования | Публикует правку |
| Добавить новую точку | "Добавить ресторан здесь" |
| Переместить или изменить теги точки | "Изменить часы работы" |
| Создание на естественном языке | "Добавить кофейню Bean There по адресу..." |
Недоступно: создание или обновление линий и отношений, а также удаление чего-либо.
Эти пути кода существуют в write_tools.py, но только создают предварительный просмотр запроса без его
отправки, поэтому они намеренно не зарегистрированы как инструменты MCP — агент, который мог бы их
вызвать, потерпел бы неудачу на полпути к правке. Для редактирования линий, отношений или удаления
элементов используйте JOSM или iD.
💡 Примеры использования
Поиск ближайших ресторанов
# Find Italian restaurants near the Colosseum
result = await find_nearby_amenities(
lat=41.8902, lon=12.4922,
radius_meters=500,
amenity_type="restaurant"
)Проверка координат
# Check if coordinates are valid and get location info
result = await validate_coordinates(51.5074, -0.1278)
# Returns: "London, England, United Kingdom"Поиск на естественном языке
# Parse natural language requests
result = await parse_natural_language_osm_request(
"Find coffee shops near the Eiffel Tower"
)🖥️ Интеграция с MCP-клиентами
Быстрая настройка для популярных клиентов
// With uv (Recommended)
{
"mcpServers": {
"osm-edit": {
"command": "uv",
"args": ["run", "python", "main.py"],
"cwd": "/path/to/osm-edit-mcp",
"env": {
"OSM_USE_DEV_API": "true",
"LOG_LEVEL": "INFO"
}
}
}
}
// Alternative: Using wrapper script (if uv has path issues)
{
"mcpServers": {
"osm-edit": {
"command": "/path/to/osm-edit-mcp/run_mcp.sh",
"args": [],
"env": {
"OSM_USE_DEV_API": "true",
"LOG_LEVEL": "INFO"
}
}
}
}Добавьте в Cursor Settings → Features → MCP
Вы также можете настроить записи dev и prod непосредственно в ~/.cursor/mcp.json, используя предоставленный скрипт-обёртку run_mcp.sh.
{
"mcpServers": {
"osm-edit-dev": {
"command": "/Users/pk/repo/_mine/osm-edit-mcp/run_mcp.sh",
"args": [],
"env": {
"OSM_USE_DEV_API": "true",
"LOG_LEVEL": "INFO",
"DEVELOPMENT_MODE": "true"
},
"enabled": false,
"_comment": "OSM Edit MCP Server - Development (safe testing with api06.dev.openstreetmap.org)"
},
"osm-edit-prod": {
"command": "/Users/pk/repo/_mine/osm-edit-mcp/run_mcp.sh",
"args": [],
"env": {
"OSM_USE_DEV_API": "false",
"LOG_LEVEL": "INFO",
"DEVELOPMENT_MODE": "false"
},
"enabled": false,
"_comment": "OSM Edit MCP Server - Production (uses api.openstreetmap.org). Use with extreme caution; write operations require OAuth and explicit confirmation."
}
}
}Совет: замените абсолютный путь на ваш локальный путь по мере необходимости. Держите запись для production отключённой, пока вы полностью не настроены и не понимаете риски.
// With uv (Recommended)
{
"mcpServers": {
"osm-edit": {
"command": "uv",
"args": ["run", "python", "main.py"],
"cwd": "/path/to/osm-edit-mcp",
"env": {
"OSM_USE_DEV_API": "true",
"LOG_LEVEL": "INFO"
}
}
}
}
// Alternative: Using wrapper script (if uv has path issues)
{
"mcpServers": {
"osm-edit": {
"command": "/path/to/osm-edit-mcp/run_mcp.sh",
"args": [],
"env": {
"OSM_USE_DEV_API": "true",
"LOG_LEVEL": "INFO"
}
}
}
}Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json (Mac)
{
"mcpServers": [
{
"name": "osm-edit",
"command": "uv",
"args": ["run", "python", "main.py"],
"cwd": "/path/to/osm-edit-mcp"
}
]
}Добавьте в ~/.continue/config.json
{
"cline.mcpServers": {
"osm-edit": {
"command": "uv",
"args": ["run", "python", "main.py"],
"cwd": "./osm-edit-mcp"
}
}
}Добавьте в настройки VSCode или .vscode/settings.json
📖 Полное руководство по настройке MCP-клиента — подробные инструкции для всех клиентов
Примеры запросов
"Найти рестораны рядом с Таймс-сквер"
"Что находится по координатам 48.8584, 2.2945?"
"Поиск больниц в Сиэтле"
🛡️ Функции безопасности
Что сервер фактически обеспечивает сегодня:
OAuth требуется для записи — операции с наборами изменений, созданием и обновлением узлов отказываются работать без действительного токена.
Управление наборами изменений — правки группируются в наборы изменений, которые вы открываете и закрываете.
Проверка координат — границы широты/долготы проверяются перед любой записью.
Экранирование XML — ключи и значения тегов экранируются, поэтому имена, содержащие кавычки или амперсанды, не могут повредить или внедриться в набор изменений.
Тестовый набор привязан к песочнице —
test_comprehensive.pyпрерывается, а не записывает на живую карту.Предупреждение о production при запуске — сервер выводит громкое предупреждение всякий раз, когда он настроен против живого API.
Ещё не реализовано — require_user_confirmation, rate_limit_per_minute,
max_changeset_size и настройки кэша принимаются как конфигурация, но ни один путь кода
на них не действует. Не полагайтесь на них как на защитные механизмы.
📊 Статус проекта
Версия: 0.1.0 (альфа)
Python: 3.10+
Лицензия: MIT
Инструменты чтения/поиска: работают с живым API
Инструменты записи:
create_changeset,close_changeset,create_osm_node,update_osm_nodeНе реализовано: создание/обновление линий и отношений, а также все операции удаления. Они не зарегистрированы как инструменты MCP — см. Доступные инструменты.
🌐 Удалённое развёртывание (сделайте его доступным откуда угодно)
OSM Edit MCP Server может быть развёрнут как веб-сервис, доступный откуда угодно. Это полезно для:
Совместной работы команды
Интеграции с веб-приложениями
Запуска на облачных серверах
Доступа с нескольких устройств
🚀 Быстрое развёртывание с Docker
1. Предварительные требования
Установлены Docker и docker-compose
Сервер с публичным IP или доменным именем
SSL-сертификат (или используйте самоподписанный сертификат для тестирования)
2. Шаги развёртывания
# Clone the repository
git clone https://github.com/skywinder/osm-edit-mcp
cd osm-edit-mcp
# Configure environment
cp .env.example .env
# Edit .env with your OAuth credentials and API_KEY
# Deploy with Docker
chmod +x deploy.sh
./deploy.shСкрипт развёртывания:
Соберёт Docker-контейнеры
Сгенерирует SSL-сертификаты (самоподписанные для разработки)
Запустит веб-сервер на порту 8000
Настроит обратный прокси Nginx на порту 443
3. Доступ к вашему серверу
После развёртывания доступ к серверу осуществляется по адресу:
https://your-server-ip/(с Nginx SSL)http://your-server-ip:8000/(прямой доступ)Документация API:
http://your-server-ip:8000/docs
📡 Использование API
Все функции MCP доступны через конечные точки REST API. Аутентифицируйтесь с помощью вашего API-ключа:
# Example: Find nearby amenities
curl -X POST https://your-server-ip/api/nearby-amenities \
-H "Authorization: Bearer your-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"lat": 51.5074,
"lon": -0.1278,
"radius_meters": 500,
"amenity_type": "restaurant"
}'🔐 Настройка безопасности
API-ключ: установите надёжный
API_KEYв вашем файле.envSSL-сертификат: замените самоподписанный сертификат на настоящий для production
Брандмауэр: открывайте только необходимые порты (80, 443)
Ограничение скорости: настраивается через
RATE_LIMIT_PER_MINUTEв.env
☁️ Развёртывание на облачных платформах
# Launch EC2 instance (Ubuntu 22.04 recommended)
# Install Docker
sudo apt update
sudo apt install docker.io docker-compose
# Clone and deploy
git clone https://github.com/skywinder/osm-edit-mcp
cd osm-edit-mcp
sudo ./deploy.sh# Create a Droplet with Docker pre-installed
# SSH into your droplet
ssh root@your-droplet-ip
# Clone and deploy
git clone https://github.com/skywinder/osm-edit-mcp
cd osm-edit-mcp
./deploy.sh# Build and push to Container Registry
gcloud builds submit --tag gcr.io/PROJECT-ID/osm-edit-mcp
# Deploy to Cloud Run
gcloud run deploy osm-edit-mcp \
--image gcr.io/PROJECT-ID/osm-edit-mcp \
--platform managed \
--allow-unauthenticated \
--set-env-vars API_KEY=your-api-key🔧 Расширенная настройка
Пользовательский домен и SSL
# Update nginx.conf with your domain
server_name yourdomain.com;
# Use Let's Encrypt for free SSL
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.comПеременные окружения
Вся настройка выполняется через переменные окружения. Ключевые параметры:
OSM_USE_DEV_API: использовать API разработки (true) или production (false)API_KEY: ключ аутентификации для доступа к APIRATE_LIMIT_PER_MINUTE: ограничение скорости APILOG_LEVEL: уровень детализации журнала
Мониторинг
# View logs
docker-compose logs -f
# Check health
curl https://your-server/health
# Monitor resources
docker stats📊 Контрольный список для production
Используйте production API OSM (
OSM_USE_DEV_API=false)Установите надёжный
API_KEYУстановите настоящий SSL-сертификат
Настройте правила брандмауэра
Настройте мониторинг/оповещения
Включите автоматическое резервное копирование
Настройте ротацию журналов
Установите ограничения ресурсов в docker-compose.yml
🧪 Тестирование
# Quick test
python quick_test.py
# Full test suite
python test_comprehensive.py
# Check your edits
# Visit: https://api06.dev.openstreetmap.org/user/YOUR_USERNAME/history🚨 Устранение неполадок
Проблема | Решение |
«Сервер зависает» при запуске main.py | Это нормально! MCP-серверы ожидают ввода от клиента. Вместо этого используйте |
«401 Unauthorized» | Запустите |
«Client auth failed» | Проверьте учетные данные OAuth в |
Ошибки импорта | Запустите |
Не видно наборов изменений | Проверьте URL dev-сервера (не основной OSM) |
uv: команда не найдена | Установите uv: |
Как использовать сервер? | Настройте в MCP-клиенте или запустите |
📚 Документация
Карточка быстрой справки — Все команды на одной странице
Настройка MCP-клиента — Cursor, Claude, VSCode и др.
Запуск сервера — Фоновый режим, мониторинг, автоперезапуск
🤝 Участие в разработке
Мы приветствуем ваш вклад! См. CONTRIBUTING.md с рекомендациями.
🔗 Ссылки
Готовы исследовать картографические данные мира? Начните с раздела «Быстрый старт» выше! 🌍
Available Tools
28 toolsanalyze_gpx_trackBRead-onlyIdempotent
Inspect a GPX file and list its independently selectable track segments.
| Name | Required | Description | Default |
|---|---|---|---|
| gpx_xml | No | ||
| gpx_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, and the description's 'Inspect/list' wording is consistent with those. It adds the detail that segments are 'independently selectable', giving useful context about the output's role, but it discloses no additional behavioral constraints beyond what annotations already cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the verb, and no filler. Every word contributes to the purpose, making it easy to scan and remember.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two optional parameters and no input guidance, an agent cannot reliably know how to pass the GPX data. The output schema may describe return values, but the description lacks the minimal usage context needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not explain the gpx_xml and gpx_path parameters or how to choose between them. The parameter names are somewhat self-explanatory, but the description adds no meaning beyond the schema field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'Inspect' and the resource 'GPX file', with a precise outcome: list independently selectable track segments. This clearly differentiates it from sibling track selection/editing tools like create_track_selection or apply_track_road_edit, which operate on selections rather than analyze files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus create_track_selection or other track-related siblings. The description only states what it does, leaving the agent to infer its role in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_osm_editBDestructiveIdempotent
Apply a reviewed proposal after a separate client-host confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| proposal_id | Yes | ||
| changeset_id | No | ||
| proposal_digest | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate that this is destructive and not read-only, and the description adds a useful workflow safeguard ('reviewed proposal', 'client-host confirmation'). However, it does not disclose what gets modified or destroyed, what happens on application, or any safety considerations beyond what the annotations imply. The description is consistent with annotations, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or repetition. It states the core action first and then the key precondition, which is an efficient structure for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with two required parameters and no parameter-level documentation, this description is too sparse. It omits how the proposal_digest should be used, what the changeset_id does, and what outcome the agent should expect after applying. The output schema and annotations help, but they do not fill the gap left by the absent parameter semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of proposal_id, proposal_digest, or changeset_id, nor how they relate to the review/confirmation workflow. The description does not compensate for the missing schema parameter documentation at all, leaving an agent to guess the meaning and provenance of required arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Apply') and a clear resource ('a reviewed proposal'), so an agent can tell this is the mutation step in an OSM editing workflow. It does not explicitly differentiate from sibling tools like verify_osm_edit or apply_track_road_edit, but 'proposal' narrows the scope enough to avoid major ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'after a separate client-host confirmation' establishes a clear prerequisite and workflow context: this tool should only be called once confirmation has happened. It does not mention alternatives or when not to use it, but the conditional context is explicit enough for most invocation decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_track_road_editCDestructiveIdempotent
Apply an exact dev-API digest after separate host confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | ||
| proposal_id | Yes | ||
| changeset_id | No | ||
| proposal_digest | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and non-read-only, so the description does not need to restate that. It adds a small amount of context with 'exact' and 'after separate host confirmation,' but it does not disclose what will be modified, whether the change is reversible, or what happens on failure. For a destructive tool, this is insufficient behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. It front-loads the action and adds a condition, making it efficient. However, the extreme brevity sacrifices useful detail, so it earns a 4 rather than 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a destructive, write-oriented tool with four parameters (three required) and no parameter descriptions, a one-sentence cryptic description is not complete enough for an agent to invoke it safely. The output schema may cover return values, but the surrounding workflow, parameter semantics, and destructive impact remain unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented parameters. It weakly aligns with 'proposal_digest' and 'confirm,' but 'proposal_id' and the optional 'changeset_id' receive no explanation, and there is no guidance on how the parameters relate or why 'confirm' is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb ('Apply') and a target ('an exact dev-API digest'), and the tool name adds 'track road edit' context. However, it is jargon-heavy and does not clearly explain what the tool actually does to a track road edit, nor does it distinguish itself from siblings like preview_track_road_edit or apply_osm_edit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'after separate host confirmation' provides a weak usage condition, implying the tool should be run only after an external confirmation step. But there is no explicit guidance about when to use this tool versus alternatives, no prerequisites, and no warning about when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_authenticationARead-onlyIdempotent
Check authentication status and get current user information.
Returns: Dictionary containing authentication status and user info
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint=false, which fully cover the safety profile. The description adds that the result is a dictionary containing authentication status and user information, which is consistent with annotations and mildly useful, but not substantially beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and contains no filler. The return-type note is brief and does not burden the agent with unneeded detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument status-checking tool with an output schema, this description is complete. It identifies the tool's purpose and result type, and there are no parameters or hidden prerequisites that an agent would need to know before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and schema description coverage is 100%, so there is no parameter ambiguity. The 0-parameter case warrants a baseline of 4, and no description compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific action: 'Check authentication status and get current user information.' This is a distinct purpose and is not confused with any sibling OSM data or editing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's context obvious: it is for retrieving authentication state and user identity. It does not explicitly mention ahead of edit operations, but no alternative tool competes for this purpose, so the usage context is clear despite lacking exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_track_selectionCRead-onlyIdempotent
Select one continuous subsection of an analyzed GPX without copying it.
| Name | Required | Description | Default |
|---|---|---|---|
| end_lat | No | ||
| end_lon | No | ||
| end_time | No | ||
| track_id | Yes | ||
| start_lat | No | ||
| start_lon | No | ||
| segment_id | Yes | ||
| start_time | No | ||
| end_point_index | No | ||
| start_point_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the behavioral nuance that the selection does not copy the GPX data and that it is a continuous subsection, which is useful context beyond the annotations. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler and the core action is front-loaded. However, for a tool with 10 parameters and no schema documentation, the brevity leaves important context unaddressed, so it is not a perfect structure for this complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is not complete enough for correct invocation. It does not explain how to specify the continuous subsection (e.g., by coordinate pair, time range, or point indices), what relationship the selection has to later sibling tools, or what the output represents. While annotations and the output schema reduce some burden, the 10-parameter surface with 0% schema coverage demands more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for explaining the 10 parameters. It provides no information about how start_lat/start_lon, start_time, start_point_index, and their end_ counterparts relate to one another, which parameters are required, or how the selection determines the subsection. Parameter names are somewhat self-explanatory, but that is not sufficient compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Select one continuous subsection of an analyzed GPX.' The qualifier 'without copying it' adds useful distinction. However, it does not explicitly differentiate the tool from sibling tools like match_track_selection or analyze_gpx_track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives, and it does not mention prerequisites or follow-up steps. The phrase 'of an analyzed GPX' only weakly implies that analysis must happen first, which is not enough for confident tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_osm_dataARead-onlyIdempotent
Export OSM data from a bounding box in various formats.
Args: bbox: Bounding box as "min_lon,min_lat,max_lon,max_lat" format: Export format (json, xml, geojson) include_metadata: Whether to include metadata like changeset info
Returns: Dictionary containing exported data
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| format | No | json | |
| include_metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds only the return shape and parameter-driven behavior; it does not disclose limits, auth needs, or other operational traits, so it provides moderate value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear one-line purpose, followed by a compact Args/Returns breakdown. The Returns line is slightly redundant since an output schema exists, but the overall structure is efficient and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All three parameters are documented, the return type is indicated, and annotations cover safety and side effects. It lacks comparison with sibling tools and any guidance on large bbox exports, but for a straightforward export operation the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the Args block fully compensates by explaining the exact bbox string format, listing allowed format values (json, xml, geojson), and clarifying include_metadata. This is essential semantic information the agent would otherwise lack.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Export') and resource ('OSM data from a bounding box'), and names the supported output formats. This makes the tool's purpose clear and semantically distinct from sibling getters, searches, and editing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like get_osm_elements_in_area or search_osm_elements. There are no exclusions, prerequisites, or conditions stated, only the basic operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_nearby_amenitiesARead-onlyIdempotent
Find nearby amenities around a location using Overpass API.
Args: lat: Latitude coordinate lon: Longitude coordinate radius_meters: Search radius in meters (default: 1000) amenity_type: Type of amenity to search for (restaurant, cafe, hospital, etc.)
Returns: Dictionary containing nearby amenities with their details
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| amenity_type | No | restaurant | |
| radius_meters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the tool uses the Overpass API and returns a dictionary of amenities, which is useful context. However, it does not disclose potential external API behavior, rate limits, or data freshness, though these are less critical given the read-only annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose statement followed by a compact parameter list and a brief return note. Every line adds value, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to detail return fields. It covers all input parameters with meaningful semantics and the tool's underlying API. It is complete enough for invocation, though it lacks usage differentiation from siblings, which is more of a usage-guidance gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. It provides meaningful explanations for all four parameters: lat/lon as coordinates, radius_meters in meters, and amenity_type with concrete examples. This is clear and goes beyond what the schema titles alone provide, though it could include bounds or accepted amenity values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('find') and resource ('nearby amenities') around a location via Overpass API. This distinguishes it from generic OSM element retrieval tools like get_osm_node or search_osm_elements, though it does not explicitly name any alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus sibling tools such as search_osm_elements, get_place_info, or get_osm_elements_in_area. No alternatives or exclusions are mentioned, leaving the agent to infer appropriate usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_changesetBRead-onlyIdempotent
Get information about a changeset.
Args: changeset_id: The ID of the changeset to retrieve
Returns: Dictionary containing changeset information
| Name | Required | Description | Default |
|---|---|---|---|
| changeset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, which cover the safety profile. The description does not contradict these annotations and adds that it returns a dictionary, but it provides no additional behavioral details such as error cases, authentication needs, or scope limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with a clear one-line summary. The Args and Returns sections are somewhat redundant with the input and output schemas, but they are standard and do not add meaningful bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-parameter read-only tool, and the annotations plus output schema cover a substantial portion of what the agent needs. The main gap is the lack of usage differentiation from get_changeset_history and any notes on edge cases or response semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description's Args section explains changeset_id as 'The ID of the changeset to retrieve,' which adds operational meaning beyond the schema's type and title. It could be improved with examples or constraints, but it sufficiently clarifies the only parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation, 'Get information about a changeset,' with a clear resource. However, it does not explicitly differentiate from the sibling get_changeset_history, leaving some potential ambiguity about which changeset-related tool to choose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_changeset_history. There is no mention of prerequisites, context, or exclusions, so the agent must infer usage solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_changeset_historyBRead-onlyIdempotent
Get changeset history for analysis and tracking.
Args: user_id: Optional user ID to filter changesets limit: Maximum number of changesets to return
Returns: Dictionary containing changeset history
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| user_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds no meaningful behavioral information beyond a generic 'Returns: Dictionary containing changeset history' and does not disclose ordering, pagination, or filtering behavior beyond what the schema already shows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and organized into Args and Returns sections, with the main purpose front-loaded. 'For analysis and tracking' is slightly vague filler, but overall every major part earns its place and no unnecessary detail bloats the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and annotations cover safety, the description is minimally viable: it states purpose, defines parameters, and notes the return type. However, it lacks enough context to help an agent distinguish this from get_changeset and does not mention sorting, pagination, or the meaning of 'history' (e.g., creation vs. edit history). These gaps make it adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description compensates by explaining both parameters: 'user_id: Optional user ID to filter changesets' and 'limit: Maximum number of changesets to return.' This adds clear meaning to the raw schema types and defaults. It does not cover edge cases like maximum allowed limit or user_id format, but the core semantics are present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get changeset history for analysis and tracking.' This clearly identifies the tool's function. However, it does not explicitly distinguish itself from the sibling tool get_changeset, which could be confused with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for analysis and tracking' provides a weak contextual hint but no concrete guidance on when to use this tool versus get_changeset or other sibling tools. There is no mention of alternatives, exclusions, or prerequisites, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_edit_capabilitiesCRead-onlyIdempotent
Describe the active safety profile and optional local services.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this read-only, idempotent, and non-destructive, so the description does not need to repeat that. However, the description only names the resource without explaining what behavior to expect, such as what status is returned or what these services actually are.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At nine words, the description is genuinely concise and front-loaded. It avoids repeating annotation details, though the terseness comes at the cost of specificity, so it is not a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, safe read-only annotations, and an output schema present, the description can afford to be brief. Still, it leaves 'active safety profile' and 'optional local services' undefined and provides no reason an agent would select this tool over similar read-only siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description has no parameter burden. The baseline of 4 applies because there is nothing structurally missing; the empty schema is accurately complemented by a description that does not claim parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb, 'describe', and names two resources, 'active safety profile' and 'optional local services', so it is not a pure tautology. However, those resources are undefined jargon, and the description does not distinguish this tool from siblings like check_authentication or get_server_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to call this tool or when a sibling would be more appropriate. The text simply restates the tool's subject matter, leaving the agent to infer any usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_osm_elements_in_areaARead-onlyIdempotent
Get OSM elements within a bounding box.
Args: bbox: Bounding box as "min_lon,min_lat,max_lon,max_lat"
Returns: Dictionary containing all elements in the area
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only, idempotent, and non-destructive. The description adds that it returns a dictionary containing 'all elements' without filtering, but it does not disclose potential size limits, coordinate validation behavior, or what element types are included. This is adequate but not rich context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose appears in the first sentence, followed by a minimal Args section and a brief Returns line. Every sentence contributes needed information, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single parameter, explicit bbox formatting in the description, an output schema, and rich read-only/idempotent annotations, the description covers what an agent needs to call it safely. It could add a note about whether all element types (nodes, ways, relations) are returned, but that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden for the bbox parameter. It explicitly documents the required string format ('min_lon,min_lat,max_lon,max_lat'), which is essential for correct invocation and goes well beyond the bare property title 'Bbox'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get'), a clear resource ('OSM elements'), and a specific scope ('within a bounding box'). This distinguishes it from singular resource tools like get_osm_node or get_osm_way, and from search-oriented siblings like search_osm_elements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it should be used when you have a bounding box and want all OSM elements in that area. However, it provides no explicit guidance about when to prefer this over alternatives such as search_osm_elements or get_osm_node/way/relation, and no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_osm_nodeARead-onlyIdempotent
Get an OSM node by ID.
Args: node_id: The ID of the node to retrieve
Returns: Dictionary containing node data including coordinates and tags
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds a useful but limited return-shape note ('Dictionary containing node data including coordinates and tags') without discussing error handling or external data volatility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and uses clear Args/Returns sections with no filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read-only tool with output schema and safety annotations, the description covers the essential purpose, parameter, and return content. It does not mention edge cases like nonexistent node IDs, but the operation is simple enough that this is not a major gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides a basic semantic for node_id ('The ID of the node to retrieve'), but this mostly restates the property name and does not add constraints, examples, or format guidance beyond the integer type in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a clear resource ('OSM node'), and a precise selection mechanism ('by ID'). It distinguishes itself from siblings like get_osm_way and get_osm_relation through the explicit resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'by ID' phrasing clearly conveys that this tool is for retrieving a node when its ID is known, which provides clear context. However, it does not explicitly mention when not to use it or point to alternatives such as search_osm_elements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_osm_relationARead-onlyIdempotent
Get an OSM relation by ID.
Args: relation_id: The ID of the relation to retrieve
Returns: Dictionary containing relation data including members and tags
| Name | Required | Description | Default |
|---|---|---|---|
| relation_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds a useful behavioral detail beyond annotations by stating the return shape: a dictionary with relation data including members and tags. It does not discuss not-found behavior, but for a simple lookup with an output schema present this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The docstring is compact and front-loaded with the core purpose, then offers an Args/Returns structure. Every sentence is informative and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only lookup, the definition is complete: the resource, retrieval key, and return shape are present, annotations cover safety/idempotence, and an output schema exists to define the exact return fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema-description coverage, the description needed to compensate, but it only restates the schema's 'Relation Id' title: 'relation_id: The ID of the relation to retrieve'. This is enough for a single obvious integer parameter but adds no deeper detail about valid ID ranges, formats, or the meaning of members/tags.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('OSM relation'), and the retrieval key ('by ID'). This clearly distinguishes the tool from sibling operations like get_osm_node, get_osm_way, and spatial queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is obvious: use whenever you need a relation by its numeric ID. The description does not explicitly name alternatives or exclusions, but the simple fetch-by-ID context makes the when-to-use clear enough without more.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_osm_statisticsARead-onlyIdempotent
Get statistics and analytics for OSM data in a bounding box.
Args: bbox: Bounding box as "min_lon,min_lat,max_lon,max_lat"
Returns: Dictionary containing comprehensive statistics
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds that the return value is a dictionary containing statistics, which is useful but not deeply detailed; the output schema likely covers return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the primary purpose, and uses a clear Args/Returns structure. Every sentence serves a purpose, and there is no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description provides the necessary bbox format and indicates the return type. The output schema and annotations cover remaining details, though the description could mention what kinds of statistics are included to make the tool more self-explanatory.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines bbox as a string with no format guidance. The description fully compensates by specifying the exact bounding box format as min_lon,min_lat,max_lon,max_lat, which is the key information needed to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets statistics and analytics for OSM data in a bounding box, combining a specific verb with a concrete resource. It is distinguishable from sibling tools like get_osm_node or get_osm_way, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention related tools such as get_osm_elements_in_area or smart_geocode, nor does it state what types of requests should or should not be routed here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_osm_wayARead-onlyIdempotent
Get an OSM way by ID.
Args: way_id: The ID of the way to retrieve
Returns: Dictionary containing way data including nodes and tags
| Name | Required | Description | Default |
|---|---|---|---|
| way_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior. The description adds that the returned dictionary includes nodes and tags, which is a small behavioral detail beyond annotations, but it does not disclose error behavior, not-found handling, or any API-specific quirks. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-sentence purpose, followed by tidy Args and Returns sections. No filler or redundant background information appears, and the structure makes the single parameter and return type easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only lookup tool, this is nearly complete. The output schema covers return structure, annotations cover safety and idempotency, and the description states what data is included. The main missing piece is any mention of behavior for invalid or nonexistent way IDs, but overall an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It says way_id is 'the ID of the way to retrieve,' which clarifies the integer's referent but does little more than restate the parameter name. No format, example, range, or source hint is provided, so it only partially compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get an OSM way by ID.' This clearly identifies the operation and the OSM element type, distinguishing it from sibling tools like get_osm_node and get_osm_relation even without naming them. The returns line adds that the result includes nodes and tags, further narrowing the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this tool over the sibling get_osm_node or get_osm_relation, nor any conditions, exclusions, or alternatives. The only usage signal is the implicit need for a way ID, which is already obvious from the parameter name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_place_infoBRead-onlyIdempotent
Get information about a place by name using OSM Nominatim.
Args: place_name: Name of the place to search for
Returns: Dictionary containing place information and coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| place_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds that it uses OSM Nominatim and returns a dictionary with coordinates, which is useful context. However, it does not disclose potential ambiguity, external service dependency, rate limits, or behavior when no place is found. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with Args and Returns sections. Every sentence serves a purpose, and there is minimal redundancy. It could be slightly improved by folding the Args section into a more natural sentence, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter, strong annotations, and an existing output schema, the description is mostly adequate. It conveys the core behavior, input, and return type. However, it omits context about when an agent should prefer this over smart_geocode or search_osm_elements, and leaves room for ambiguity about how place names are interpreted by Nominatim.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the schema's lack of details. It does explain place_name as 'Name of the place to search for,' but this adds little beyond the schema's existing 'Place Name' title and string type. It offers no examples, formatting hints, or guidance on ambiguity (e.g., 'Paris, France' vs 'Paris, Texas').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get information about a place by name using OSM Nominatim.' It also specifies the mechanism (Nominatim) and the output (information and coordinates). It does not explicitly differentiate itself from siblings like smart_geocode or search_osm_elements, but 'by name' gives a reasonably distinct purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. Sibling tools such as smart_geocode, get_osm_node, and search_osm_elements overlap conceptually, and the description gives no exclusions, conditions, or preferred use cases. The agent must infer usage from the tool name and the phrase 'by name.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_infoARead-onlyIdempotent
Get information about the OSM Edit MCP server.
Returns: Dictionary containing server configuration and status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering side-effect safety. The description adds the high-level return payload ('Dictionary containing server configuration and status'), which is useful but not extensive. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short lines, front-loaded with the action, with no filler or repetition. The 'Returns' line earns its place by giving the output shape at a high level.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only info endpoint with rich annotations and an output schema, the description sufficiently covers what the tool does and what it returns. No critical operational detail is missing for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties, so there are no parameters to document. With 0 params and 100% schema coverage, the description need not provide additional parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Get information') on a specific resource ('the OSM Edit MCP server') and notes the return type. This clearly distinguishes it from sibling data-retrieval tools like get_osm_node or get_changeset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is clear enough that an agent would invoke it when needing server configuration or status, but no explicit when-to-use guidance or alternative routing is provided. Sibling check_authentication is also a meta tool and could be confused, yet the description does not differentiate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_map_contextCRead-onlyIdempotent
Return stable OSM IDs, versions, tags and GeoJSON for a small bbox.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | Yes | ||
| highway_only | No | ||
| max_elements | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the useful 'stable OSM IDs' and 'small bbox' constraints, but it does not disclose bbox format, element limits, or how results are returned beyond GeoJSON.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words, and the core purpose is immediately visible. However, it is so terse that some important invocation details are missing, keeping it from a top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return structure is covered elsewhere, and annotations cover safety behavior. Still, with zero schema param coverage, no bbox format detail, no explanation of highway_only or max_elements, and no usage guidance, the description is incomplete for an agent to confidently invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description only mentions 'bbox' vaguely as a small bbox. It does not explain the required bbox format (e.g., coordinate order or syntax), and highway_only and max_elements are entirely omitted from the narrative, leaving the agent without needed semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: it returns stable OSM IDs, versions, tags, and GeoJSON for a small bbox. This is more specific than sibling tools like get_osm_elements_in_area or get_osm_node, though it does not explicitly name and differentiate itself from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as get_osm_elements_in_area or search_osm_elements. The phrase 'small bbox' implies a scale limitation, but there is no explicit when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_edit_proposalsARead-onlyIdempotent
List local proposal metadata without exposing raw GPX coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint: false, so the safety profile is known. The description adds value by disclosing that raw GPX coordinates are intentionally excluded and that only metadata is returned, which is not captured by the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that puts the verb first, states the resource, and adds the key security constraint without any filler. Every word contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and the annotations cover read-only/idempotent behavior, the description provides the essential purpose and privacy constraint needed for safe invocation. The only minor gap is that status values are undocumented, but the parameter is optional with a null default, so the tool remains usable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description never mentions the limit or status parameters. The agent receives no additional meaning beyond the bare schema types and defaults, leaving the status parameter especially underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List', a clear verb, and names the exact resource: 'local proposal metadata'. The qualifier 'without exposing raw GPX coordinates' clarifies the scope and distinguishes this read-only listing from mutation-heavy sibling tools like apply_osm_edit or apply_track_road_edit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'local proposal metadata' implies the tool is for inspecting proposals before applying edits, which gives some usage context. However, the description does not explicitly state when to use this tool versus siblings like preview_track_road_edit or apply_osm_edit, nor does it mention filtering by status or limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_track_selectionBRead-onlyIdempotent
Map-match a selected GPX subsection using the configured local Valhalla.
| Name | Required | Description | Default |
|---|---|---|---|
| costing | No | auto | |
| selection_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a behavioral dependency—the operation uses a 'configured local Valhalla'—which goes beyond the readOnly/idempotent annotations. However, it doesn't disclose other behavioral traits like failure modes or what transformations occur, and the annotations already cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. The verb and resource come first, and the remaining words add meaningful scope and context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple read-only tool, especially since an output schema exists and annotations cover safety. But it leaves key gaps: where selection_id comes from, how to choose costing, and what the local Valhalla configuration implies for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description needed to explain the parameters but only loosely relates selection_id to a GPX subsection. The costing parameter is entirely unexplained, including valid values or the meaning of the 'auto' default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation, 'Map-match', on a clear resource, 'a selected GPX subsection', and adds useful context with 'using the configured local Valhalla'. It is semantically distinct from siblings like analyze_gpx_track or create_track_selection, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when you need to map-match a selected GPX subsection) but gives no explicit when-not or alternative guidance. It also doesn't mention prerequisites such as creating a selection first with create_track_selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_natural_language_osm_requestARead-onlyIdempotent
Parse a natural language request into structured OSM data.
Args: request: Natural language request for OSM operations
Returns: Dictionary containing parsed components of the request
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, openWorld, and non-destructive behavior, so the description does not need to repeat those. It adds that the tool returns a dictionary of parsed components, which is useful but minimal. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, starting with a clear purpose sentence followed by concise Args and Returns sections. Every sentence adds value, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter parser, the description covers purpose and parameter meaning, while the output schema handles return structure. However, it does not explain how the parsed output connects to other OSM tools or what types of natural language requests are supported, leaving slight ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The Args section defines 'request' as a natural language request for OSM operations, providing the essential meaning. It is helpful but lacks examples, language constraints, or scope details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: parsing a natural language request into structured OSM data. This distinguishes it from sibling tools that query, edit, or analyze OSM data directly. The verb 'Parse' and resource 'natural language request' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a natural language request needs to be converted into structured OSM data, but it gives no explicit guidance on when to prefer this tool over alternatives or how it fits into an OSM workflow. There are no exclusions or conditions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_track_road_editBRead-onlyIdempotent
Build a non-writing GeoJSON and element diff preview for a road edit.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| action | Yes | ||
| gpx_xml | No | ||
| gpx_path | No | ||
| segment_id | No | ||
| selection_id | No | ||
| evidence_kind | No | survey_gpx | |
| target_way_ids | No | ||
| changeset_source | Yes | ||
| changeset_comment | Yes | ||
| evidence_provider | No | ||
| evidence_observed_at | No | ||
| simplify_tolerance_m | No | ||
| max_alignment_distance_m | No | ||
| connect_endpoints_to_ways | No | ||
| endpoint_snap_tolerance_m | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds modest context by specifying that the output is a GeoJSON and element diff preview, but it does not explain other behavioral aspects such as validation or failure cases. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no wasted words and the key 'non-writing preview' concept is front-loaded. However, for a tool with 16 parameters and no other descriptive material, the one-sentence description is arguably too thin to be appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (16 parameters, 3 required, 0% schema parameter coverage), a single sentence describing the output is not enough for an agent to understand how to call it correctly. The output schema may cover return values, but the description leaves key context such as action values, changeset requirements, evidence inputs, and relationships to sibling preview/apply tools unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of the 16 parameters, including the three required ones (action, changeset_comment, changeset_source). The parameter names and types are present in the schema, but the description does not compensate for the complete lack of schema-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Build') and a specific resource ('non-writing GeoJSON and element diff preview for a road edit'). The 'non-writing preview' phrasing clearly distinguishes it from the sibling apply_track_road_edit, so an agent can tell what this tool produces at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'preview' and 'non-writing' imply this is meant to be used before an apply operation, but the description never explicitly says 'use this before apply_track_road_edit' or states when not to use it. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_osm_elementsARead-onlyIdempotent
Search for OSM elements using Overpass API with a text query.
Args: query: Search query (e.g., "coffee shop", "hospital", "park") element_type: Type of element to search for (node, way, relation, or all)
Returns: Dictionary containing search results
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| element_type | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds only that it uses the Overpass API and returns a dictionary; no result limits, timeout behavior, or API quirks are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with a clear one-sentence purpose followed by compact Args/Returns sections. The 'Dictionary containing search results' line is vague but does not add meaningful bulk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only 2-parameter tool with rich annotations and an output schema, the invocation-critical details are mostly present. It lacks context for choosing among the many sibling tools and says nothing about Overpass API behavior such as rate limits, result caps, or query interpretation, so completeness is adequate but not strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates: it explains the query with concrete examples and enumerates the four element_type options. This is exactly the information an agent needs to fill both parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search'), resource ('OSM elements'), and method ('Overpass API') with a text query, making its core function clear. It doesn't explicitly call out sibling alternatives like get_osm_elements_in_area or parse_natural_language_osm_request, so differentiation is left to the reader.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The query examples ('coffee shop', 'hospital', 'park') imply it is for free-text POI/category searches, so usage is inferable. There is no explicit when-to-use or when-to-prefer-sibling guidance, no exclusions, and no mention of ID- or area-based alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
smart_geocodeBRead-onlyIdempotent
Enhanced geocoding with address parsing and multiple search strategies.
Args: address_or_description: Full address or location description
Returns: Dictionary containing geocoding results with multiple candidates
| Name | Required | Description | Default |
|---|---|---|---|
| address_or_description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds useful behavioral context by mentioning address parsing, multiple search strategies, and returning 'multiple candidates,' but it stops short of explaining what strategies are used or how ambiguous inputs are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and organized into purpose, args, and returns, with no filler or repetition. The main geocoding capability is front-loaded and the parameter explanation is direct, though a small example would have made it even more useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter, strong annotations, and an output schema present, the description does not need to explain return values in depth. However, it lacks guidance on when to use this tool versus the many sibling search/geocoding tools, and the vague 'multiple search strategies' leaves behavioral ambiguity. It is adequate for basic invocation but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining the parameter. It does add meaning beyond the schema by defining address_or_description as 'Full address or location description,' but this is minimal and lacks examples, format constraints, or clarification about what kind of descriptions are acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs 'geocoding' with 'address parsing and multiple search strategies,' which identifies the core function of converting an address or description into geocode candidates. It is more specific than a bare verb+resource but does not explicitly differentiate itself from sibling tools like search_osm_elements or get_place_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool accepts a full address or location description, but it gives no explicit guidance on when to choose smart_geocode over related tools such as parse_natural_language_osm_request, validate_coordinates, or search_osm_elements. There are no exclusions, alternative references, or context-based selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_track_road_candidatesBRead-onlyIdempotent
Suggest nearby OSM highway ways without selecting or modifying any way.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| gpx_xml | No | ||
| gpx_path | No | ||
| segment_id | No | ||
| selection_id | No | ||
| search_radius_m | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds a useful side-effect guarantee about not selecting ways, but it does not disclose how suggestions are computed, what inputs take precedence, or any behavioral details beyond the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear, front-loaded sentence with no filler. It is efficient, though slightly under-sized for a tool with six parameters and multiple possible input sources.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema may cover return values, and annotations cover side-effect safety, but the description leaves major invocation questions unanswered: Which of gpx_xml, gpx_path, segment_id, or selection_id should be provided? Are they mutually exclusive or combined? What does 'nearby' depend on? This is insufficient for correct tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention or explain any of the six parameters (limit, gpx_xml, gpx_path, segment_id, selection_id, search_radius_m). An agent gets no guidance on which input source to supply or how the parameters relate to 'nearby'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Suggest'), a specific resource ('nearby OSM highway ways'), and an explicit non-behavior ('without selecting or modifying any way'). This clearly distinguishes it from sibling tools that create selections or apply edits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without selecting or modifying any way' implies this is for read-only candidate suggestions, but it does not explicitly say when to use this tool versus alternatives like match_track_selection or preview_track_road_edit. No direct sibling or exclusion strategy is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_coordinatesBRead-onlyIdempotent
Validate coordinates and provide information about the location.
Args: lat: Latitude coordinate lon: Longitude coordinate
Returns: Dictionary containing validation results and location information
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that the tool returns a dictionary and provides location information, but it does not explain behavior for invalid or out-of-range coordinates, network dependencies, or any other operational nuance. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured with an opening summary, an Args section, and a Returns section. There is no wasted text, and the core purpose is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with only two required parameters and an output schema, so heavy documentation is not necessary. Still, the description lacks detail on what validation is performed, what location information means, and when this tool is preferable to siblings. These gaps make it minimally acceptable but not fully complete for an agent deciding how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the responsibility for explaining parameters. It labels each argument as 'Latitude coordinate' and 'Longitude coordinate,' which adds basic human-readable meaning beyond the schema titles 'Lat' and 'Lon.' However, it omits valid ranges (e.g., lat -90 to 90, lon -180 to 180) and any format or precision constraints, so the semantics are only minimally complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and resource: 'Validate coordinates and provide information about the location.' This distinguishes it from the sibling validate_osm_data, which targets OSM data objects rather than raw coordinates. However, it does not specify exactly what 'validate' means (range checking, OSM coverage, reverse geocoding) or what location information is included.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_place_info, smart_geocode, or validate_osm_data. There are no use cases, exclusions, or context clues beyond the name itself, so an agent must infer when this is the appropriate choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_osm_dataARead-onlyIdempotent
Validate OSM data for quality assurance before uploading.
Args: data: Dictionary containing OSM data to validate (tags, coordinates, etc.)
Returns: Dictionary containing validation results and suggestions
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds that it takes a dictionary and returns validation results and suggestions, which is useful but still generic. No behavioral detail about validation scope or edge cases is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose followed by Args/Returns sections. There is no fluff or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter validation tool, the description is adequate but leaves gaps: it does not specify what kinds of OSM data are accepted (e.g., single element vs. full edit), what validation checks are performed, or what the suggestion dictionary contains. The output schema may fill some gaps, but it is not visible here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single 'data' parameter with zero description coverage. The Args section says 'Dictionary containing OSM data to validate (tags, coordinates, etc.)', which adds some meaning beyond the bare schema, but remains vague about required structure and keys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Validate OSM data for quality assurance before uploading.' This clearly identifies the action and domain, but it does not explicitly differentiate from sibling tools like validate_coordinates or verify_osm_edit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'before uploading' gives a clear context for when the tool is intended to be used, but the description does not mention alternatives or conditions where another tool would be more appropriate. There is no explicit 'vs alternatives' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_osm_editARead-onlyIdempotent
Re-fetch every element recorded in an applied proposal receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| proposal_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the re-fetch behavior but does not disclose details such as what happens when an element is missing, whether errors are returned per element, or any rate/scale considerations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, and the core action 'Re-fetch every element' is front-loaded. It is appropriately sized for a one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has a strong annotation set, and an output schema exists, so the description does not need to cover return values. However, it lacks usage guidance and clear parameter provenance, leaving the agent to infer the connection between proposal_id and an 'applied proposal receipt'. It is minimally adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does not mention proposal_id directly, only implying that it identifies an applied proposal receipt; it omits how to obtain it, whether it is a string ID from a previous apply call, or any expected format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (re-fetch) and a concrete resource (every element recorded in an applied proposal receipt), making the tool's operation clear. It also differentiates this tool from sibling getters like get_osm_node/way/relation because it operates at the level of an entire proposal receipt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'applied' implies this is meant for post-application verification, but the description never explicitly states when to use it versus alternatives. It does not name a sibling such as apply_osm_edit or explain when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
28 tool updates
v0.2.1- First observed
analyze_gpx_track - First observed
apply_osm_edit - First observed
apply_track_road_edit - First observed
check_authentication - First observed
create_track_selection - First observed
export_osm_data - First observed
find_nearby_amenities - First observed
get_changeset - First observed
get_changeset_history - First observed
get_edit_capabilities - First observed
get_osm_elements_in_area - First observed
get_osm_node - First observed
get_osm_relation - First observed
get_osm_statistics - First observed
get_osm_way - First observed
get_place_info - First observed
get_server_info - First observed
inspect_map_context - First observed
list_edit_proposals - First observed
match_track_selection - First observed
parse_natural_language_osm_request - First observed
preview_track_road_edit - First observed
search_osm_elements - First observed
smart_geocode - First observed
suggest_track_road_candidates - First observed
validate_coordinates - First observed
validate_osm_data - First observed
verify_osm_edit
TDQS
Scored across 28 tools
Several tools overlap in their query surface: get_osm_elements_in_area, export_osm_data, and get_osm_statistics all operate on a bbox, while get_place_info, smart_geocode, and search_osm_elements cover adjacent geocoding/search tasks. The descriptions help separate them, but an agent could easily pick the wrong one.
All tool names are lowercase snake_case and follow a clear verb_noun pattern (get_osm_node, create_track_selection, apply_osm_edit, verify_osm_edit). The longer names like parse_natural_language_osm_request are verbose but still fit the same convention.
With 28 tools, the surface is heavy for an editing server and exceeds the 25-tool threshold. Many read/search/geocode helpers could be consolidated, and the GPX workflow adds a second large sub-domain on top of the core OSM editing flow.
The set covers a full edit workflow: discover, validate, propose, apply, and verify, along with GPX track analysis and export. It lacks explicit element-level create/update/delete and changeset management tools, but those seem intentionally funneled through apply_osm_edit.
Maintenance
Related MCP Connectors
Geolocate Me turns your phone into location context for any AI assistant. Install the iOS or Android app, connect once with OAuth, and your GPS is queryable in natural language. Ask where you are, where you parked, where you were yesterday at 3pm, or how long you were at the office — the assistant calls the tool and answers with a real street address. https://geolocateme.app
Ask in plain English, get a rendered, shareable map from live public data. 24 geospatial tools.
Provides AI assistants with direct access to Mapbox developer APIs and documentation.
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI assistants to access Google Maps services including places search, details, directions, geocoding, and nearby search through natural language.62MIT

Magic Lane MCP Serverofficial
AlicenseBqualityBmaintenanceEnables AI agents to become geospatially intelligent assistants with tools for location search, smart routing, round trip planning, reverse geocoding, isochrone analysis, route visualization, geofence management, and interactive map display.8217Apache 2.0- FlicenseNot gradedqualityCmaintenanceEnables users to search for locations, businesses, and points of interest on an interactive OpenStreetMap map within ChatGPT conversations.-
- AlicenseAqualityBmaintenanceProvides location-based services and geospatial data from OpenStreetMap, enabling geocoding, route directions, nearby place search, and neighborhood analysis through natural language.12MIT