remnawave-mcp
This is a read-only-by-default MCP server for the Remnawave 3.x panel that lets Claude Desktop, Cursor, and other MCP clients inspect users, nodes, traffic, devices, connections, and system health through natural-language chat.
User lookup & reports —
find_user,user_report,get_user_by_id/username/short_uuid, HWID devices, accessible nodes, subscription request history.Panel-wide views —
panel_overview,get_stats,get_stats_digest,get_recap, bandwidth stats, HTTP/health/metadata endpoints.Node management views — list/get nodes, tags, metrics, per-node usage, node integrations, node metadata.
Traffic & bandwidth analytics — per-user, per-node, and per-internal-squad usage over date ranges, top users/nodes limits.
Live connection checks —
node_connectionsanduser_connections(runs a job on the node, returns current IPs).GeoCheck —
geocheck_nodereveals how services see a node's IP (country, blocks), with a 30-min cooldown per node.Subscription inspection — subscriptions by ID/username/short UUID, subpage configs, request history and stats, templates.
Config & infra — config profiles, inbounds, hosts, internal/external squads, node plugins, shared lists, snippets, infra billing providers/records.
Abuse / security signals —
sharing_suspects(shared-subscription detection),get_top_users_by_hwid_devices, torrent blocker reports and stats.Key generation —
generate_x25519for X25519 keypairs.Privacy-preserving — secrets (UUIDs, keys, passwords) hidden and client data pseudonymized; write operations are disabled unless explicitly enabled with
write-scoped token.
Supports connecting to a Remnawave panel that is served behind Caddy using a secret path, by sending an API key via the X-Api-Key header (REMNAWAVE_API_KEY).
Supports connecting to a Remnawave panel protected by Cloudflare Access by supplying Cloudflare Access service token credentials (CF_ACCESS_CLIENT_ID / CF_ACCESS_CLIENT_SECRET) with each request.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@remnawave-mcpFind the user with Telegram ID 123456789 and show their traffic"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
remnawave-mcp
English | Русский
MCP-сервер для панели Remnawave 3.x. Через него Claude Desktop (а также Cursor, Windsurf и другие MCP-клиенты) может смотреть вашу панель: пользователей, ноды, трафик, устройства, подключения, GeoCheck — обычными вопросами в чате.
Главное:
Только чтение по умолчанию. Ничего в панели не меняется, пока вы явно не включите запись.
Всегда под вашу версию панели. Инструменты не написаны руками, а собираются из официального пакета
@remnawave/backend-contract. Обновили панель → подняли версию пакета → пересобрали.Секреты недоступны никогда: вход в панель, passkey, SECRET_KEY нод, API-токены.
Утечка чата не выдаёт ни ключей, ни клиентов. Приватные ключи Reality, пароли, UUID и ссылки подключения скрываются, а личные данные клиентов (username, email, Telegram ID, IP, HWID) заменяются псевдонимами. Подробнее — Приватность.
Готовые отчёты одной командой:
panel_overview(сводка по панели),user_report(всё о клиенте),sharing_suspects(кто делится подпиской), плюсfind_user,geocheck_node,node_connections,user_connections.Шаблоны запросов в меню Claude: «Сводка по панели», «Разбор клиента», «Кто делится подпиской», «Проверка нод».
Бережёт ноды и лимиты: повторный GeoCheck одной ноды в течение 30 минут отдаёт прошлый результат, ответы сжаты (в 2–3 раза меньше токенов), список нод по умолчанию короткий (
full: true— полный).Установка в один клик — расширение
.mcpbдля Claude Desktop, токен хранится в защищённом хранилище системы. Для серверов — Docker-образ под каждую версию панели.
Совместимость
Версия панели | Статус |
3.4.x | ✅ проверено на рабочих панелях (3.4.4) |
3.0 – 3.3 | ✅ отдельный файл расширения под каждую версию; при ручной установке — |
2.8.x | ⚠️ не поддерживается официально: основные команды собираются, но на живой панели не проверялось, часть доп. команд недоступна |
2.7 и старше | ❌ используйте TrackLine/mcp-remnawave |
Версия контракта должна совпадать с версией панели хотя бы по первым двум цифрам. Сервер сам подстраивается под установленный контракт (адреса, параметры и список команд берутся из него), а при подключении сверяет версию панели: если она другая, в чате появится предупреждение с подсказкой, какой файл скачать.
Related MCP server: IcePanel MCP Server
Установка
Способ 1 — расширение Claude Desktop (проще всего)
Узнайте версию своей панели — она написана внизу панели Remnawave (например,
3.4.4). Откройте последний релиз и скачайте файл под неё:Панель
Файл
3.4.x
remnawave-3.4.mcpb3.3.x
remnawave-3.3.mcpb3.2.x
remnawave-3.2.mcpb3.1.x
remnawave-3.1.mcpb3.0.x
remnawave-3.0.mcpbВзяли не тот файл — не страшно: сервер сам сравнит версии и подскажет в чате, какой файл нужен.
Дважды щёлкните по файлу (или Claude → Настройки → Расширения и перетащите файл в окно).
Нажмите Установить и заполните: адрес панели и API-токен (как создать — ниже). Остальные поля можно оставить пустыми.
Готово — спросите в чате: «Сделай сводку по панели».
Нужен только Claude Desktop — Node.js у него встроенный. Токен хранится в защищённом хранилище Windows/macOS, а не текстом в файле. Обновление (новая версия remnawave-mcp или панели) — скачать нужный .mcpb и открыть его так же.
Расширение подключает одну панель. Для нескольких панелей или для Cursor / Windsurf используйте способ 2.
Способ 2 — вручную (несколько панелей, другие MCP-клиенты)
Нужны Node.js 22+ и Git.
winget install OpenJS.NodeJS.LTS
winget install Git.GitПосле установки перезапустите PowerShell.
cd C:\Tools
git clone https://github.com/3APA3A-3AHO3A/remnawave-mcp.git
cd remnawave-mcp
npm ci
npm run build
npm run list-toolsПоследняя строка должна быть вида 79 API tools + 7 extra (contract 3.4.4). Дальше — подключение к Claude Desktop.
На macOS / Linux — те же команды, путь любой.
Claude Code
После шагов способа 2 (клонировать и собрать) зарегистрируйте сервер одной командой:
claude mcp add remnawave --scope user -e REMNAWAVE_BASE_URL=https://panel.example.com -e REMNAWAVE_API_TOKEN=ВАШ_ТОКЕН -- node "C:\Tools\remnawave-mcp\dist\index.js"--scope user— сервер доступен во всех проектах.--scope local— только в текущем проекте. Так удобно держать разные панели в разных проектах: в каждом проекте своя командаclaude mcp addсо своим адресом и токеном. Настройки хранятся в личном конфиге Claude Code, а не в репозитории — случайно закоммитить токен нельзя.Не используйте
--scope project: он записывает сервер вместе с токеном в.mcp.json, который обычно попадает в git.Проверка:
claude mcp list— сервер должен быть✓ Connected.
Способ 3 — Docker на сервере с панелью (Claude Code)
Если Claude Code стоит прямо на сервере, где работает панель, — Node.js ставить не нужно, Docker там уже есть (Remnawave сама работает в Docker).
claude mcp add remnawave --scope user \
-e REMNAWAVE_BASE_URL=https://panel.example.com \
-e REMNAWAVE_API_TOKEN=ВАШ_ТОКЕН \
-- docker run -i --rm -e REMNAWAVE_BASE_URL -e REMNAWAVE_API_TOKEN ghcr.io/3apa3a-3aho3a/remnawave-mcp:3.4:3.4— образ под панель 3.4.x; есть:3.3,:3.2,:3.1,:3.0и:latest(текущая стабильная). Образы для amd64 и arm64.-e REMNAWAVE_API_TOKENуdocker runбез значения — токен передаётся в контейнер из окружения и не светится в списке процессов (ps).Обновление:
docker pull ghcr.io/3apa3a-3aho3a/remnawave-mcp:3.4.Проверка:
claude mcp list→✓ Connected.
Напрямую к контейнеру панели, минуя nginx / Cloudflare и интернет — подключите MCP к Docker-сети панели:
docker network ls # в стандартной установке сеть называется remnawave-network
docker ps --format '{{.Names}}' # контейнер панели — обычно remnawave
claude mcp add remnawave --scope user \
-e REMNAWAVE_BASE_URL=http://remnawave:3000 \
-e REMNAWAVE_API_TOKEN=ВАШ_ТОКЕН \
-- docker run -i --rm --network remnawave-network -e REMNAWAVE_BASE_URL -e REMNAWAVE_API_TOKEN ghcr.io/3apa3a-3aho3a/remnawave-mcp:3.4При адресе http://… сервер сам добавляет заголовки, которые обычно ставит обратный прокси (X-Forwarded-Proto, X-Forwarded-For). Если панель всё равно отвечает ошибкой — используйте внешний https:// адрес из первого примера.
⚠ Безопасность. MCP даёт Claude удобные команды и прячет секреты, но не ограничивает Claude Code: если у него есть доступ к консоли сервера, он может выполнить любую команду. Запускайте Claude Code на боевом сервере не от root, не включайте режим «разрешать всё», а токен панели давайте только с правами
read.
API-токен в панели
Настройки → API-токены → Создать. Выдайте только права read:
users, nodes, hosts, hwid, connections, bandwidth-stats, system, subscriptions, subscription-request-history, internal-squads, external-squads, config-profiles, node-plugins (по желанию — остальные разделы тоже на read).
Не выдавайте write, *, а также api-tokens, passkeys, auth, keygen.
Права в Remnawave делятся на «чтение/запись», а не на GET/POST. Поэтому GeoCheck, запросы подключений и поиск пользователя работают с правами
read, хотя это POST-запросы.
Подключение к Claude Desktop
Только для способа 2.
Claude → Настройки → Разработчик → Edit Config. Полностью закройте Claude (трей → Выход), в открывшемся claude_desktop_config.json добавьте в начало, сразу после первой {:
"mcpServers": {
"remnawave": {
"command": "node",
"args": ["C:\\Tools\\remnawave-mcp\\dist\\index.js"],
"env": {
"REMNAWAVE_BASE_URL": "https://panel.example.com",
"REMNAWAVE_API_TOKEN": "ВАШ_ТОКЕН"
}
}
},В пути обратные слэши двойные:
\\.Запятая после блока обязательна, если в файле есть другие настройки.
Несколько панелей — несколько блоков с разными именами (
remnawave-main,remnawave-2…).
Запустите Claude. В Настройки → Разработчик сервер должен быть в статусе running. Проверка — спросите: «Сколько пользователей онлайн в панели?»
Пример целиком: examples/claude_desktop_config.example.json.
Настройки (переменные окружения)
Переменная | Обязательна | Что делает |
| да | Адрес панели: |
| да | API-токен |
| нет |
|
| нет |
|
| нет | Любая длинная строка — псевдонимы не меняются после перезапуска |
| нет | Заголовок |
| нет | Дополнительные заголовки к каждому запросу, JSON: |
| нет | Панель за Cloudflare Access |
| нет | Скрыть инструменты (через запятую) |
| нет | Оставить только эти инструменты |
| нет | Максимальная длина ответа, по умолчанию 60000. Длинные списки сокращаются с пометкой «показано N из M» |
| нет |
|
| нет | Потолок размера списков за один запрос, по умолчанию 200 (0 — без ограничения) |
| нет | Не чаще одного GeoCheck на ноду раз в N минут, по умолчанию 30 (0 — без ограничения) |
| нет | То же для списков подключений, по умолчанию 2 |
| нет | Таймаут запроса, по умолчанию 30000 |
Что можно спросить
В меню + в чате Claude есть готовые шаблоны: Сводка по панели, Разбор клиента, Кто делится подпиской, Проверка нод.
Или обычным текстом:
«Как дела у панели?» — сводка: онлайн, офлайн-ноды, трафик, истекающие подписки
«Разбери клиента 1234» — подписка, устройства, трафик по дням и нодам, последние запросы
«Кто похоже делится подпиской?»
«Сколько активных и онлайн пользователей?»
«Найди клиента с Telegram ID 123456789, покажи устройства и срок подписки»
«Какие ноды офлайн?» / «Трафик по нодам за прошлую неделю»
«Сделай GeoCheck ноды NL-1»
«Кто сейчас на ноде DE-1 и с каких IP?»
«Топ пользователей по количеству устройств» / «Отчёт по торрентам за сутки»
GeoCheck и запросы подключений выполняются на ноде и тратят её трафик. Поэтому повторный запрос для той же ноды в течение 30 минут (подключения — 2 минут) отдаёт прошлый результат с пометкой, а не нагружает ноду снова.
Если не работает
Симптом | Что делать |
Статус failed в «Разработчике» | Проверьте JSON конфига (запятые, скобки, |
| Токен истёк или удалён — создайте новый |
| Токену не хватает |
| Панель недоступна или неверный |
Инструменты не появились | Полностью перезапустите Claude (трей → Выход) |
Логи (Windows): %APPDATA%\Claude\logs\mcp-server-<имя>.log
Get-Content "$env:APPDATA\Claude\logs\mcp-server-remnawave.log" -Tail 30Проверить конфиг:
Get-Content "$env:APPDATA\Claude\claude_desktop_config.json" -Raw | ConvertFrom-Json | Select-Object -ExpandProperty mcpServers | Format-ListОбновление
Новая версия этого репозитория:
cd C:\Tools\remnawave-mcp
git pull
npm ci
npm run buildПанель обновилась, а репозиторий ещё нет — поставьте контракт под свою версию:
npm i @remnawave/backend-contract@<версия_панели> --save-exact
npm run buildПосле любого обновления — полностью перезапустите Claude.
Раз в сутки GitHub Actions сверяет последний стабильный релиз панели Remnawave с версией контракта в проекте и, если вышла новая, сам открывает Pull Request с обновлённым и собранным проектом. Промежуточные сборки контракта (dev-версии между релизами) пропускаются.
Как это устроено
В пакете @remnawave/backend-contract каждая ручка API описана «командой»: адрес, метод, схемы параметров и пометка чтение/запись. Сервер при запуске проходит по всем командам и превращает каждую в MCP-инструмент, проверяя аргументы теми же схемами, что и панель. Поэтому код почти не зависит от версии Remnawave.
src/
index.ts — запуск MCP-сервера, выбор инструментов, вызовы
registry.ts — сборка инструментов из контракта, список запрещённых
server.ts — MCP-сервер: список инструментов, вызовы, шаблоны
extras.ts — отчёты и удобные инструменты (panel_overview, user_report, …)
prompts.ts — шаблоны запросов для меню Claude
redact.ts — фильтр приватности: скрытие секретов и псевдонимы
format.ts — компактный вывод и сокращение длинных списков
limits.ts — ограничение повторов GeoCheck и размера списков
version.ts — сверка версии панели с версией сборки
client.ts — HTTP-запросы к панели
config.ts — переменные окруженияДля разработчиков
npm test # 40 тестов: приватность (ничего не утекает), отчёты, ограничения, список инструментов
npm run pack:mcpb # расширение под текущую версию → build\remnawave-3.4.mcpb
npm run pack:mcpb -- --all # под все версии 3.x → build\remnawave-3.0.mcpb … remnawave-3.4.mcpbCI на каждый push: сборка, тесты,
npm audit, сборка расширения (файл доступен в Actions → запуск → Artifacts).Релиз: поднять версию в
package.json, добавить раздел вCHANGELOG.md, затем на сайте Releases → Draft a new release (тегvX.Y.Z) или из консолиgit tag vX.Y.Z+git push origin vX.Y.Z. GitHub сам соберёт, прогонит тесты и приложит файлы.mcpbпод все версии 3.x; пустой текст релиза заполнится из CHANGELOG.Новая версия панели: раз в сутки workflow сверяет стабильный релиз Remnawave и открывает PR с обновлённым контрактом.
Приватность
Всё, что сервер отдаёт ИИ, попадает в историю чата. Поэтому ответы панели фильтруются у вас на компьютере, до отправки в чат.
Что |
|
|
|
Приватные ключи и shortIds Reality, SECRET_KEY, пароли, API-ключи, тексты ошибок | скрыто | скрыто | видно |
VLESS UUID, ссылки | скрыто | скрыто | видно |
Команды «ключи подключения» и «сырая подписка» | недоступны | недоступны | доступны |
username, email, Telegram ID, описание клиента | псевдоним | видно | видно |
IP-адреса клиентов, HWID (в т.ч. ID устройства в User-Agent), имена компьютеров клиентов ( | псевдоним | видно | видно |
ID пользователя в панели, статус, трафик, сроки, ноды, статистика | видно | видно | видно |
Как работают псевдонимы. Вместо ivan_petrov ИИ видит user~dca596, вместо IP — ip~f055f3. Одинаковые значения дают одинаковые псевдонимы, поэтому ИИ всё равно заметит, что «у двух клиентов один IP» или «это тот же человек», но самих данных не узнает. Псевдоним можно передать обратно в команду — сервер подставит настоящее значение локально.
Настоящие данные нужны вам — откройте клиента в панели по его ID.
Чего фильтр не может: то, что вы сами пишете в чат (например, «найди Telegram ID 123…»), в чате остаётся. Спрашивайте по ID пользователя или псевдониму, когда это возможно.
Также:
В расширении токен хранится в защищённом хранилище системы; при ручной установке — только в конфиге вашего MCP-клиента, в репозиторий не попадает.
Каждое изменение проверяется автотестами: если что-то начнёт пропускать ключи или данные клиентов, CI станет красным.
Используйте отдельный токен только на чтение, чтобы его можно было отозвать, не трогая боты и мониторинг.
Благодарности
Идея — TrackLine/mcp-remnawave (под Remnawave 2.x).
Лицензия
Available Tools
86 toolsfind_userBRead-only
Find users by any identifier: id, username, shortUuid, telegramId, email or tag. Returns full user objects. Use this instead of guessing which endpoint to call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Panel user ID | |
| tag | No | ||
| No | E-mail or its pseudonym (email~…) | ||
| username | No | Username or its pseudonym (user~…) | |
| shortUuid | No | ||
| telegramId | No | Telegram numeric ID or its pseudonym (tg~…) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering the safety profile. The description adds that it 'Returns full user objects,' which is useful output context absent from annotations, but it does not disclose authentication needs, error behavior when multiple identifiers are supplied, or whether all identifiers are mutually exclusive. This is decent 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?
Two tightly written sentences that front-load the core purpose and the key behavioral note (returns full user objects) before the usage hint. No filler; every clause 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?
The description conveys the core idea and that full user objects are returned, which helps since there is no output schema. However, for a 6-parameter optional lookup, it omits critical constraints such as requiring at least one identifier and what happens if multiple identifiers are provided or none match, leaving gaps that could lead to incorrect invocations.
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 description simply lists the same parameter names that appear in the schema (id, username, shortUuid, telegramId, email, tag) without adding meaning such as expected formats, pseudonym handling, or whether identifiers can be combined. With schema description coverage at 67%, the description does not compensate for the two undocumented parameters (tag and shortUuid).
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 clear verb (Find) and resource (users) and enumerates all supported identifier types, making it obvious that it is a unified lookup rather than a single-field getter. The phrase 'instead of guessing which endpoint to call' hints at sibling tools but does not explicitly name them, so full sibling differentiation is missing.
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 says 'Use this instead of guessing which endpoint to call,' which implies it should be used when the correct specific endpoint is unknown. However, it does not specify when to prefer the specific single-field getters (e.g., get_user_by_id) or any exclusions, leaving usage largely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_x25519BRead-only
Generate 30 X25519 keypairs [READ] GET /api/system/tools/x25519/generate
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 usefully adds that 30 keypairs are produced per call (implying a non-deterministic, regenerating output), but says nothing about whether keys are persisted, what format they take, or whether the call is expensive. With annotations carrying the safety burden, this is an adequate but thin contribution.
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?
Two short lines, front-loaded with the action and the output count. There is no filler, though the bracketed HTTP verb/path is redundant metadata rather than information the agent needs to choose or call the 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?
With zero parameters and no output schema, the description carries the burden of describing the response, and it only discloses the count ('30 keypairs') without indicating the shape (e.g. public/private fields). For a trivial, stateless utility this is minimally sufficient, but a return-shape hint would close the remaining 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?
The tool takes zero parameters, so there is no parameter meaning to convey; per the rubric this baseline is 4. The description adds nothing parameter-related, which is 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 gives a specific verb and resource ('Generate ... X25519 keypairs') plus the returned quantity ('30'), so the agent knows exactly what the call yields. No sibling tool deals with cryptographic key generation, so no differentiation statement is needed; it is only docked for being a bare name-plus-route rather than a full purpose sentence.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The '[READ] GET /api/system/tools/x25519/generate' line is an endpoint marker, not usage guidance, and none of the sibling tools are referenced or excluded.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocheck_nodeARead-only
Run GeoCheck on a node and wait for the result (how services see the node IP: country, blocks). The base64 SVG image is dropped, only the raw report is returned. Uses node traffic: repeated calls for the same node within the cooldown return the previous result.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | Optional: check from this outbound IP | |
| nodeUuid | Yes | Node UUID (see get_nodes / panel_overview) | |
| interface | No | Optional: check from this network interface | |
| timeoutSec | No | Max seconds to wait for the node to answer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only safety, but the description adds substantial behavioral detail: it waits for the result, drops the base64 SVG image and returns only the raw report, consumes node traffic, and caches/reuses results within a cooldown period for repeated calls. These are non-obvious operational traits an agent should know before calling.
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?
Three sentences, each front-loaded with a distinct piece of information: purpose, output behavior, and caching/traffic behavior. There is no filler and 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 diagnostic read-only tool with no output schema, the description adequately explains the return value (raw report with country and blocks; SVG discarded) and the notable cooldown caching behavior. It gives an agent enough context to call the tool correctly without needing to inspect structured 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?
Schema description coverage is 100%, so all four parameters are already documented in the input schema. The description refers to checking 'a node' but adds no syntax, format, or constraint details beyond what the schema provides, so the baseline of 3 is appropriate.
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 names a specific action (Run GeoCheck) on a specific resource (a node) and explains the output semantics (how services see the node IP: country, blocks). It is unambiguous and cannot be mistaken for any sibling tool in the list, none of which perform a GeoCheck diagnostic.
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?
Usage is implied by the purpose statement: this tool is for checking how a node's IP is seen externally. However, it does not explicitly say when to prefer this tool over alternatives or when not to use it, nor does it mention prerequisites beyond the cooldown behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_inboundsARead-only
Get all inbounds from all config profiles [READ] GET /api/config-profiles/inbounds
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 by structured data. The description adds only the REST endpoint path (GET /api/config-profiles/inbounds); it says nothing about pagination, ordering, or size of the returned collection for an unbounded 'all profiles' read.
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?
Two short lines, purpose front-loaded and the endpoint reference supplementary. Nothing is wasted, though the bracket-tagged endpoint line is a formatting convention rather than added meaning.
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-parameter, read-only, no-output-schema tool the description covers what the agent needs to select and invoke it. It is not quite complete on scale/ordering of the returned set, but that gap is minor given the tool's simplicity.
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 tool takes zero parameters, so the baseline is 4; the schema (additionalProperties: false, empty properties) fully documents that no inputs exist. Nothing further is needed from the description.
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 and resource ('Get all inbounds') plus the scope ('from all config profiles'), which lets an agent distinguish it from the sibling get_inbounds_by_profile_uuid without opening either schema. It does not name that sibling explicitly, so it falls short of a 5.
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 'from all config profiles' implies the selection condition — use this when you want every profile's inbounds rather than one profile's — but the description never states when to prefer it over get_inbounds_by_profile_uuid or any exclusions. Usage is inferable, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_token_scopesARead-only
Get available API token scopes Returns the catalog of scopes that can be granted to an API token, grouped by resource. Forbidden via "API-key", admin JWT only. [READ] GET /api/tokens/scopes
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true/destructiveHint=false, and the description is consistent with them while adding genuinely useful context beyond them: the admin-JWT-only auth requirement and the grouped-by-resource shape of the payload. It does not, however, describe pagination or output structure in detail.
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?
Compact and front-loaded, with the auth constraint and HTTP route kept short. Minor redundancy in restating the tool name ('Get available API token scopes' → 'Returns the catalog of scopes...'), but every line is 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?
No output schema exists, and the description compensates reasonably by saying what the return value is (a scope catalog grouped by resource) and who may call it. Complete enough for a zero-parameter read tool, though it could say more about the returned 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?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate beyond confirming that no input 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?
States a specific verb+resource ('Get available API token scopes') and clarifies what the result contains: a catalog of grantable scopes grouped by resource. It is clearly distinct from the many sibling get_* tools, though it never explicitly contrasts with any of 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?
Provides a real constraint — the endpoint is 'Forbidden via API-key, admin JWT only' — which tells the agent when the call will fail, but gives no positive guidance on when to reach for this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bandwidth_statsCRead-only
Get Bandwidth Stats [READ] GET /api/system/stats/bandwidth
| Name | Required | Description | Default |
|---|---|---|---|
| tz | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's '[READ]' tag merely repeats that. It discloses nothing extra: no return format, no rate limits, no scoping, no indication of what the bandwidth figures 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?
Extremely terse and front-loaded: the name and endpoint are given with zero padding. It is efficient, though verging on under-specification rather than true conciseness.
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 read tool there is no output schema and no return-value context, the tz parameter is unexplained, and no differentiation from the ~80 sibling get_* tools is offered. An agent cannot confidently decide when this is the right call.
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 is one optional parameter (tz) with 0% schema description coverage, and the description never mentions it. The agent receives no explanation of what the timezone parameter does or what format it expects, so the description fails to compensate for the coverage gap.
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 clear verb and resource ('Get Bandwidth Stats') and adds the concrete endpoint GET /api/system/stats/bandwidth, so the agent knows it retrieves bandwidth data. However, it never distinguishes this from near-identical siblings such as get_stats, get_http_stats, get_status, or get_stats_digest, leaving the agent to guess which stats tool fits its need.
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 when-to-use guidance, no prerequisites, and no mention of alternatives among the many sibling stats tools. The agent gets the what but no criteria for choosing this over get_stats or get_http_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_computed_config_profile_by_uuidBRead-only
Get computed config profile by uuid [READ] GET /api/config-profiles/:uuid/computed-config
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's '[READ]' tag merely restates that. It does add the underlying REST endpoint (GET /api/config-profiles/:uuid/computed-config), which is mildly useful transport context, but says nothing about whether the profile is materialized, cached, or expensive to compute.
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?
Extremely short and front-loaded, with the resource named in the first clause. The second line is largely redundant with the name and annotations, costing a little value but not much space.
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 single-parameter read tool with no output schema, the description is minimally viable: it names the resource and the route. It omits any explanation of the computed profile concept or how the return differs from the sibling endpoint, which is the main gap an agent would need filled.
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 only echoes 'by uuid' with no additional detail about what the uuid identifies (config profile, not user/node/profile-of-subscription). The schema's format/pattern constrain the value but add no domain semantics.
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 (Get) and resource (computed config profile) keyed by uuid, which distinguishes it reasonably well from the sibling get_config_profile_by_uuid by the 'computed' qualifier. However, it never explains what 'computed' means or how the returned profile differs from the plain config profile, leaving the differentiation implicit.
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?
There is no guidance on when to use this tool versus the closely named sibling get_config_profile_by_uuid or any other profile endpoint. The only context given is the HTTP route, which does not help an agent decide between alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_config_profile_by_uuidBRead-only
Get config profile by uuid [READ] GET /api/config-profiles/:uuid
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | 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 reinforces this with '[READ]' and the HTTP verb/path, adding light context but no behavioral detail such as error behavior on unknown UUIDs or whether the profile is resolvable vs. computed.
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?
Two short lines with zero waste, and the read/endpoint annotation sits compactly after the purpose. It is front-loaded and easy to scan, though the minimal content limits how much the structure can accomplish.
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?
There is no output schema, so the description could have said what a config profile contains or how it differs from the computed variant; it does not. For a simple single-parameter getter whose annotations carry the safety profile, this is adequate but leaves a real ambiguity unresolved.
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 there is one parameter, but the schema itself gives full typing (uuid format with a strict pattern), and the parameter name plus the phrase 'by uuid' is self-explanatory. The description adds no meaning beyond the schema, so a baseline 3 is appropriate.
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') and resource ('config profile by uuid'), matching the tool name exactly. However, it does not distinguish this from the closely named sibling 'get_computed_config_profile_by_uuid', leaving the agent to infer the difference between a raw profile and a computed one.
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?
There is no guidance on when to use this tool versus alternatives such as 'get_config_profiles' (list) or 'get_computed_config_profile_by_uuid'. The agent must infer that this single-UUID fetch is appropriate when a specific profile identifier is already known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_config_profilesCRead-only
Get config profiles [READ] GET /api/config-profiles/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the '[READ]' tag is pure duplication rather than added transparency. The description discloses no pagination behavior, filtering, default limits, or return shape for what is evidently a collection endpoint.
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?
Very short and front-loaded, with the operation named first and the endpoint last. The '[READ]' token is redundant with annotations, but the definition is not bloated.
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 and no output schema, the description is minimally adequate, but it never explains what a 'config profile' is, whether the result is paginated, or what fields come back. For a list endpoint among many similar siblings, a bit more scoping would materially help selection.
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 tool takes zero parameters, so there is no parameter semantics burden on the description and the baseline is 4. Nothing in the description misrepresents or contradicts the empty 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?
States a clear verb+resource ('Get config profiles') and the underlying endpoint, but gives no differentiation from closely related siblings such as get_config_profile_by_uuid, get_computed_config_profile_by_uuid, and get_subpage_configs. An agent cannot tell from the description alone whether this returns a collection or a single profile scope.
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?
There is no when-to-use guidance, no mention of alternatives, and no condition that selects this tool over the several sibling profile-retrieval tools. The endpoint string implies a list operation but nothing is made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_configurationBRead-only
Get Remnawave Configuration Returns some of the configuration values. [READ] GET /api/system/configuration
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 the endpoint annotation ('[READ] GET /api/system/configuration') and the useful caveat that only 'some' configuration values are returned, but says nothing about which values, size, or sensitivity of the payload.
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?
Three short lines, front-loaded with the operation and endpoint. The first line is essentially a restatement of the tool name and the endpoint line largely duplicates the annotation hint, so it is efficient but slightly redundant.
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-parameter read tool with annotations covering safety, the description is close to sufficient, but 'some of the configuration values' leaves ambiguity about scope and overlap with get_remnawave_settings/get_metadata. Without an output schema, a bit more detail on what is returned would help.
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 tool takes zero parameters, so there is nothing for the description to clarify; the baseline of 4 applies. The schema itself is fully described with additionalProperties: false.
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 and resource ('Get Remnawave Configuration') and pins down the underlying endpoint GET /api/system/configuration. It does not distinguish itself from the very similar sibling get_remnawave_settings, which an agent could easily confuse with this 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?
There is no guidance on when to call this versus the many sibling getters (get_remnawave_settings, get_metadata, get_stats, etc.), and no prerequisites or context are given. The agent must infer usage entirely 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_external_squad_by_uuidBRead-only
Get external squad by uuid [READ] GET /api/external-squads/:uuid
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the external squad |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description's '[READ]' tag and endpoint path restate that safety profile and add the HTTP verb/path, but nothing about error behavior (e.g. unknown UUID) or return characteristics.
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?
Two short lines, zero filler, resource stated first. It is arguably under-sized for a tool definition, but no sentence is wasted.
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 with full schema coverage and no output schema, the definition is minimally sufficient. It does not address failure modes or indicate what the returned squad object contains, leaving a modest 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 100% and the single uuid parameter is fully documented in the schema with format and pattern. The description adds no syntax or semantic detail beyond what the schema already provides, so baseline 3 applies.
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 and resource ('Get external squad by uuid') plus the REST mapping, so the agent knows this retrieves a single squad. It is distinguishable from the list sibling get_external_squads only by the 'by_uuid' phrasing rather than an explicit contrast, so it falls just short of a 5.
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?
Usage is only implied: the name and UUID parameter make clear it is for fetching one squad by identifier. There is no explicit statement of when to prefer this over get_external_squads or what happens if the UUID is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_external_squadsBRead-only
Get all external squads [READ] GET /api/external-squads/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 '[READ] GET /api/external-squads/' line merely restates that. Nothing is said about pagination, result size, or filtering behavior on a list endpoint, which is the kind of extra context that would raise this score.
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?
One short line, front-loaded with the purpose, followed by a compact HTTP hint. It is not padded, though the method/route fragment adds little beyond the annotations.
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-param read tool with annotations and no output schema, the description is minimally sufficient to call it, but it says nothing about what the list contains or its size. Adequate but with clear gaps.
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 tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool applies. No parameter semantics are missing.
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 ('Get all') and resource ('external squads'), and the plural form distinguishes it from the sibling get_external_squad_by_uuid. No further scope detail is given, but the intent is 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?
There is no when-to-use guidance, no statement of when-not to use it, and no pointer to the singular sibling for single-record lookups. The agent must infer that this is the unfiltered list endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hostBRead-only
Get a host by UUID [READ] GET /api/hosts/:uuid
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | 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 the HTTP verb and endpoint path ('GET /api/hosts/:uuid'), which confirms the read nature but discloses nothing about lookup behavior such as what happens on a missing UUID.
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?
Two short lines, front-loaded with purpose and zero filler. The endpoint line is arguably redundant with the annotations but no more than one line wasted.
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?
A simple single-parameter read tool with no output schema and annotations covering safety, so the burden is light. Still, the description never says what a 'host' is or what an absent/not-found UUID yields, which an agent would benefit from knowing.
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 single uuid parameter is heavily constrained in the schema itself (uuid format plus regex pattern). The description's 'by UUID' only maps the parameter to the purpose and adds no format or sourcing detail beyond 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?
States a specific verb and resource ('Get a host by UUID'), which distinguishes it from the list sibling get_hosts by implying single-item lookup. However, it does not explicitly name get_hosts as the alternative, so an agent must infer the singular/plural distinction.
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 when-to-use guidance, no prerequisites, and no mention of alternatives. The only hint is the implicit 'by UUID' lookup semantics, leaving the agent to infer that get_hosts is the plural counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hostsBRead-only
Get hosts [READ] GET /api/hosts/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 only the concrete HTTP method/path (a read of the hosts collection), but says nothing about pagination, filtering, or the shape/size of results. With annotations carrying the burden, this is an adequate but thin addition.
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?
Two short lines, zero padding, purpose front-loaded. It is not bloated, but it is also nearly as terse as a bare identifier, so it earns efficiency points without adding explanatory substance.
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-param, read-only listing endpoint with no output schema, the definition is minimally viable: an agent knows it returns hosts, but not whether the list is paginated, filtered, or complete, nor what a 'host' contains. Acceptable, but with visible gaps.
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 tool takes zero parameters, so there is nothing for the description to compensate for. Baseline for a no-parameter tool applies; no parameter meaning is missing because none exist.
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 gives a specific verb+resource (get hosts) and reinforces it with the actual endpoint GET /api/hosts/, so an agent can tell this is a collection-listing read. It does not differentiate from nearby siblings such as get_hosts_tags or the node/host stat tools, so it stops short of a 5.
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?
There is no when-to-use statement, no mention of prerequisites, and no reference to any alternative tool for host-related data. The agent is left to infer usage entirely from the name and the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hosts_tagsBRead-only
Get tags of hosts [READ] GET /api/hosts/tags
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds only '[READ] GET /api/hosts/tags', which repeats the read-only nature without adding new behavioral context such as return format, pagination, or auth requirements.
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 and very short. The second line duplicates the read-only annotation and includes an endpoint path that is not essential for tool invocation, but it is compact overall.
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 no-argument read endpoint with annotations covering safety and no output schema, the description adequately states what the tool does. It could add a brief note on the return content, but it is sufficient for correct selection.
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 tool has zero parameters, so the baseline for parameter semantics is 4. The description correctly does not introduce any parameter-related confusion.
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 and resource: 'Get tags of hosts' clearly identifies the operation. It does not explicitly differentiate from siblings like get_hosts or get_nodes_tags, but the resource 'hosts' and object 'tags' are 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?
There is no guidance on when to use this tool versus alternatives such as get_hosts, get_nodes_tags, or get_users_tags. The description only implies the basic purpose, with no context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_http_statsCRead-only
Get HTTP Stats [READ] GET /api/system/stats/http
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the '[READ]' tag in the description merely restates structured data and earns no credit. Beyond the endpoint path, the description discloses nothing further — no return shape, freshness, or scope of the HTTP stats.
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?
Two short lines, front-loaded with the resource and backed by the endpoint identifier — no filler or redundancy. The trade-off is that it is terse to the point of being under-informative rather than wasteful.
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 tool with no output schema, the minimum needed to call it correctly is present (it is safe and takes no args). It is still incomplete because it never says what 'HTTP stats' contains or how it differs from the other stats tools an agent could pick.
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 tool takes zero parameters, so by the rubric baseline is 4. There is nothing for the description to clarify beyond the empty schema, and it introduces no misleading parameter expectations.
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 plus resource ('Get HTTP Stats') and adds the backing endpoint (GET /api/system/stats/http), so the resource is identifiable. However, it makes no attempt to distinguish this from the many sibling stats tools (get_stats, get_bandwidth_stats, get_stats_digest, get_nodes_statistics), leaving scope ambiguous.
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?
There is no guidance on when to use this tool rather than get_stats, get_bandwidth_stats, or the other stats endpoints. No prerequisites, exclusions, or alternatives are mentioned, so the agent must infer usage purely from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hwid_devicesBRead-only
Get HWID devices Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database. [READ] GET /api/hwid/devices
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of results to return, no more than 1000 | |
| start | No | Start index (offset) of the results to return, default is 0 | |
| filters | No | ||
| sorting | No | ||
| filterModes | No | ||
| globalFilterMode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful non-obvious behavior: filters rely on expensive LIKE operators and misuse can degrade database performance, which is not derivable from the schema or 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?
Brief and front-loaded: the purpose line comes first, followed by a single targeted warning. No padding or repetition, though the first line is essentially a restatement of the tool name rather than added 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?
With 6 parameters, nested filter/sort structures, 33% schema coverage, and no output schema, the description should explain how to construct filters and sorting. Instead it only warns about performance, leaving the agent without enough information to invoke the tool correctly with filters.
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 only 33% across 6 parameters, including nested 'filters' and 'sorting' objects whose item fields are undocumented. The description acknowledges that filters exist but adds no detail on valid filter ids, values, sorting syntax, or filter modes, so it fails to compensate for the schema gap.
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 clear verb+resource ('Get HWID devices') and includes the underlying endpoint, so the operation is identifiable. However, it gives no differentiation from close siblings like get_user_hwid_devices, get_hwid_devices_stats, or get_top_users_by_hwid_devices, leaving ambiguity about which HWID-device view this returns.
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 warns that filters are primarily for frontend use and can be expensive, which implies a usage constraint. But it never says when to choose this tool over get_user_hwid_devices or the stats variants, and no prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hwid_devices_statsCRead-only
Get HWID devices stats [READ] GET /api/hwid/devices/stats
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, and the description's '[READ]' marker only restates that. It adds nothing beyond the structured data: no scope (global vs per-user), no time window, no aggregation semantics, no indication of whether the result is paginated or expensive to compute.
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?
Very short and front-loaded, with the purpose in the first clause. The second line ('[READ] GET /api/hwid/devices/stats') is largely redundant with the annotations, but it costs little and the overall entry is not padded.
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 endpoint with no output schema, the description carries the full burden of explaining what comes back, and it says nothing about the shape or contents of the stats. It is minimal but not misleading, so it clears the viability bar without being 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?
The tool takes zero parameters, so the schema-description baseline of 4 applies. There is no parameter semantics to clarify and the description does not need to compensate for any coverage gap.
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?
It states a concrete verb+resource ('Get HWID devices stats'), which separates it from the sibling get_hwid_devices that lists devices. However, 'stats' is undefined and the sibling set contains many near-identical stats endpoints (get_stats, get_stats_digest, get_nodes_statistics, get_bandwidth_stats), so an agent cannot tell what this particular stats call returns or how it differs 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?
No when-to-use guidance, no prerequisites, and no mention of the obvious alternatives (get_hwid_devices for the raw list, get_top_users_by_hwid_devices for per-user breakdowns, get_user_hwid_devices for a single user). The agent is left to infer selection 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_inbounds_by_profile_uuidARead-only
Get inbounds by profile uuid [READ] GET /api/config-profiles/:uuid/inbounds
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | UUID of the config profile |
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 '[READ]' and 'GET /api/config-profiles/:uuid/inbounds', but does not disclose auth requirements, rate limits, or other operational behavior beyond 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 extremely compact and front-loaded, with no filler. The endpoint line is brief and supports the main purpose without bloating the definition.
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 read-only getter with one documented parameter and no output schema, the description is mostly complete. It does not explain pagination or return shape, but those omissions are minor for this tool's complexity.
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 100%, and the single parameter is already documented as the config profile UUID. The description repeats the 'profile uuid' concept but adds no syntax or format detail beyond what the schema provides, so baseline 3 is appropriate.
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 and resource ('Get inbounds') scoped by profile UUID, and adds the HTTP endpoint for additional precision. It is clearly distinguishable from sibling tools like get_all_inbounds because it is limited to a single config profile.
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 when-to-use guidance and does not name or contrast alternatives such as get_all_inbounds or get_config_profile_by_uuid. The required UUID implies context, but there is no routing guidance for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_infra_billing_nodesCRead-only
Get infra billing nodes [READ] GET /api/infra-billing/nodes
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the '[READ]' tag simply restates that. The description adds no pagination behavior, response shape, scoping, or auth context beyond the bare endpoint path.
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?
Extremely terse and front-loaded with no wasted sentences. It is not under-specified to the point of being a single word, but the brevity is achieved by omitting content rather than by tight editing.
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 no output schema and no parameters, the description carries the whole burden of explaining what this read returns, and it says nothing. Among 80+ get_* siblings, an agent cannot tell what a 'billing node' is or when this result is useful.
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 tool takes zero parameters, so the schema is trivially complete at 100% coverage and there is nothing for the description to explain. Baseline 4 applies for a no-parameter tool.
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 and resource ('Get infra billing nodes') and includes the HTTP endpoint, so the basic operation is identifiable. However, 'infra billing nodes' is never disambiguated against siblings like get_infra_billing_records, get_nodes, or get_infra_providers, leaving the agent to guess what this resource actually contains.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the ~80 sibling tools. The agent gets no signal for choosing this over get_nodes or get_infra_billing_records.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_infra_billing_recordsBRead-only
Get infra billing history [READ] GET /api/infra-billing/history
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of billing records to return, no more than 500 | |
| start | No | Start index (offset) of the billing history records to return, default is 0 |
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 known. The description adds the HTTP route ([READ] GET /api/infra-billing/history), which is mildly useful context but not substantive behavioral detail such as pagination caps or ordering.
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?
It is short and front-loaded, which is good, but the '[READ] GET /api/infra-billing/history' line is largely redundant with the readOnly annotation and restates the tool name rather than adding agent-relevant 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 parameterless-required, read-only list endpoint with full schema coverage, the description is minimally adequate. With no output schema, it could have described the shape or ordering of returned records, but does not.
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 100%, so both 'size' and 'start' are fully documented in the schema itself. The description adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
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?
Names a specific verb ('Get') and resource ('infra billing history'), which is clear. It does not, however, differentiate itself from sibling infra-billing tools like get_infra_billing_nodes or get_infra_providers, so an agent must infer scope from the name alone.
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?
There is no when-to-use guidance, no exclusions, and no mention of sibling alternatives. The agent gets the resource name but no condition telling it when this is the right call versus another billing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_infra_providerCRead-only
Get infra provider by uuid [READ] GET /api/infra-billing/providers/:uuid
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's '[READ]' simply restates that. It adds the HTTP endpoint, which is routing metadata rather than behavioral context, and says nothing about not-found behavior or what the response contains.
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?
Two short lines with the purpose front-loaded and no filler. Efficient, though the bracketed route line adds little value for an agent.
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 trivial single-parameter lookup with no output schema, this is close to adequate, but the absence of any error/not-found semantics or guidance relative to the sibling list tool leaves a small but real 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 should compensate. It only says 'by uuid', adding no format, validation, or lookup semantics beyond the parameter name and the schema's own uuid pattern.
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 (get) and resource (infra provider) scoped to a single uuid lookup. The singular form plausibly distinguishes it from the sibling list tool get_infra_providers, though the description never names that sibling explicitly.
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 on when to use this tool versus get_infra_providers or the other infra-billing tools (get_infra_billing_nodes, get_infra_billing_records). The agent must infer that 'by uuid' means a single-record fetch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_infra_providersBRead-only
Get all infra providers [READ] GET /api/infra-billing/providers
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the '[READ]' tag merely repeats that. The description adds the underlying endpoint path (GET /api/infra-billing/providers), which is useful for traceability, but it says nothing about scope, pagination, or result size.
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 front-loaded sentence plus the endpoint reference; there is no filler and the purpose is immediately clear. Appropriately sized for a zero-argument read.
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 no output schema, the description does not indicate what an 'infra provider' record contains or whether the list is paginated. For a simple list endpoint this is adequate but not complete, and it could do more given the absence of a return schema.
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 tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies for a parameterless tool with an empty, well-formed 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?
States a specific verb and resource ('Get all infra providers'), which is unambiguous. It does not explicitly differentiate itself from the closely-named sibling 'get_infra_provider' (singular), leaving the plural/singular distinction for the agent to infer from naming alone.
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 on when to use this versus the sibling 'get_infra_provider' or the related 'get_infra_billing_nodes'/'get_infra_billing_records'. Usage is only implied by the name, so this is a plain no-guidance case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_internal_squadBRead-only
Get internal squad by uuid [READ] GET /api/internal-squads/:uuid
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | 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 the underlying endpoint (GET /api/internal-squads/:uuid), but says nothing about return shape, 404/error behavior, or auth requirements, so it adds only modest 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?
Two short lines, front-loaded with the action and resource; no filler. The endpoint tag is compact and useful rather than padding.
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 single-parameter read whose annotations already cover safety, this is nearly adequate, but with no output schema it omits what a squad object contains and what happens when the uuid is unknown, leaving an agent to discover the return contract by calling 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?
There is 1 parameter at 0% schema description coverage; the schema does enforce uuid format and a strict pattern, so typing is handled structurally. The description only restates 'by uuid' and adds no meaning about which squad identifier is expected or where it comes from.
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 (Get) and resource (internal squad) with the identifier qualifier 'by uuid'. It contrasts implicitly with siblings like get_internal_squads (list) and get_external_squad_by_uuid (external variant), though it never names them explicitly.
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?
Only 'by uuid' implies when this applies; there is no statement of when to use this versus get_internal_squads or get_external_squad_by_uuid, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_internal_squad_accessible_nodesCRead-only
Get internal squad accessible nodes [READ] GET /api/internal-squads/:uuid/accessible-nodes
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's '[READ]' tag merely duplicates that. It adds no behavioral context beyond the annotations: no note on what 'accessible nodes' means, whether results are paginated, or what permissions are required to read another squad's node set.
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?
Two short lines with zero preamble, so it is front-loaded and compact. The '[READ]' tag is redundant with the annotations, and the brevity reflects under-specification rather than disciplined concision.
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 single-parameter read with no output schema and annotations covering the safety profile, this is minimally adequate. It still omits any indication of what the returned node list contains or how 'accessible' is determined, which is exactly the gap an agent would need filled.
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 there is one required 'uuid' parameter. The embedded path '/api/internal-squads/:uuid/accessible-nodes' does implicitly identify the uuid as an internal squad UUID, adding a small amount of meaning over the bare schema. That is better than nothing but far short of documenting the identifier's source or 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 gives a specific verb+resource ('Get internal squad accessible nodes') plus the HTTP route, so the agent knows this returns the node set reachable by an internal squad. However, it adds little beyond restating the tool name and does not distinguish it from siblings like get_internal_squad, get_internal_squad_usage, or get_user_accessible_nodes. Purpose is identifiable but not sharpened.
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?
There is no when-to-use guidance, no conditions, and no pointer to alternatives such as get_user_accessible_nodes or get_internal_squad. The agent must infer the scenario entirely 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_internal_squadsBRead-only
Get all internal squads [READ] GET /api/internal-squads/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's '[READ] GET /api/internal-squads/' merely restates that same read-only fact rather than adding context. It says nothing about return shape, pagination, or result size for what could be a large list.
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?
It is a single short line with the operation front-loaded, so there is no wasted prose. The bracketed method and raw endpoint add little for an agent but cost minimal space.
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 no-arg list tool with no output schema and safety already covered by annotations, this is minimally viable. However, it never clarifies what an 'internal squad' is or what the list contains, which matters given the many squad-related 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?
The tool takes zero parameters, so there is nothing for the description to explain; the baseline for a parameterless tool is 4. No parameter-related gap exists.
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 all') and resource ('internal squads'), making the operation instantly identifiable. It implicitly distinguishes itself from the singular sibling get_internal_squad, though it never names it explicitly, so it falls short of a 5.
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?
There is no guidance on when to use this tool versus alternatives. With siblings like get_internal_squad, get_internal_squad_usage, and get_internal_squad_accessible_nodes in the list, the agent gets no signal about which to pick for a list vs. detail vs. usage query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_internal_squad_usageARead-only
Get internal squad users traffic usage for a period Returns users whose total usage over the period on the given nodes is >= minTotalBytes, scoped to the nodes reachable via the internal squad inbounds. Underlying usage data is flushed to the database roughly every 2 minutes. [READ] GET /api/bandwidth-stats/internal-squads/:uuid/usage
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End date (YYYY-MM-DD) | |
| uuid | Yes | Internal squad UUID | |
| limit | No | Number of users to return, no more than 1000 | |
| start | Yes | Start date (YYYY-MM-DD) | |
| cursor | No | Pass the nextCursor from the previous response. Omit on the first request. | |
| minTotalBytes | No | Only include users whose total usage over the period is >= this (bytes) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=true, destructiveHint=false), and the description adds useful behavioral context beyond them: the >= minTotalBytes threshold filter, node scoping through internal squad inbounds, and a data-freshness caveat ('flushed to the database roughly every 2 minutes'). Pagination behavior is not mentioned, but the freshness note is genuinely valuable.
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?
Three sentences plus an endpoint tag, front-loaded with the tool's purpose and filtering behavior. The endpoint citation is somewhat redundant with the tool's operation but still compact and informative; no sentence is wasted.
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 no output schema, the description is responsible for conveying what returns; it does so via the threshold and node-scoping explanation. Parameters are fully documented and the freshness caveat is included, though pagination/cursor behavior could be worth a sentence for a 6-param endpoint.
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 100%, so the schema already documents all six parameters, including minTotalBytes, cursor, limit, and dates. The description reinforces the minTotalBytes filter and node scoping but adds no syntax or format detail beyond what the schema provides, making the baseline 3 appropriate.
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 and resource ('Get internal squad users traffic usage for a period') and clarifies the filtering semantics (>= minTotalBytes, scoped to nodes reachable via internal squad inbounds). It is clear what the tool returns, but it never differentiates itself from very similar siblings like get_internal_squad_user_usage or get_stats_user_usage.
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 when-to-use or when-not-to-use guidance, and no alternative tool is named. Because get_internal_squad_user_usage is a near-identical sibling in the tool list, this omission is a meaningful gap for an agent trying to route between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_internal_squad_user_usageARead-only
Get a single user daily traffic usage on the internal squad nodes for a period Returns users whose total usage over the period on the given nodes is >= minTotalBytes, scoped to the nodes reachable via the Internal Squad inbounds. Every day in the range is present (zero-filled). Underlying usage data is flushed to the database roughly every 2 minutes. [READ] GET /api/bandwidth-stats/internal-squads/:squadUuid/users/:userId/usage
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End date (YYYY-MM-DD) | |
| start | Yes | Start date (YYYY-MM-DD) | |
| userId | Yes | ||
| squadUuid | Yes | Internal squad UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/no-destruction profile, so the bar is lower, and the description adds genuinely useful behavior: results are zero-filled for every day in the range, users below the threshold are filtered out, and data is flushed roughly every 2 minutes (latency/freshness). It does not disclose pagination or output shape, holding it below a 5.
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?
Front-loaded with the core purpose, then supporting constraints. Sentences earn their place, though the reference to a nonexistent minTotalBytes parameter and the endpoint line add minor noise. Efficient overall.
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 stats tool with no output schema and an annotation-covered safety profile, the description covers return semantics (zero-filled daily series, threshold filtering) and data freshness. The dangling minTotalBytes reference is a real gap, but overall an agent has enough to call 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 75%, so start/end and squadUuid are already documented in the schema; userId is undocumented there. The description references minTotalBytes filtering and node scoping, but minTotalBytes does not appear in the schema parameters at all, leaving a semantic mismatch and confusion about where the threshold comes from. Roughly baseline value.
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 (Get) and resource (single user daily traffic usage on internal squad nodes for a period). The scope is precise enough to distinguish it from close siblings like get_internal_squad_usage (squad-scoped), get_stats_user_usage and get_stats_node_users_usage (global scoping). The agent can identify exactly what is returned.
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 clarifies that results are restricted to nodes reachable via Internal Squad inbounds and that users with total usage >= minTotalBytes are included, which implies when to use this over broader stats tools. But it never names an alternative or states when-not to use it, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metadataBRead-only
Get Remnawave Information [READ] GET /api/system/metadata
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered and the [READ] tag is largely redundant. The only added context is the underlying endpoint path, which hints that this is a system-level read, but nothing is said about auth requirements, caching, or what the metadata contains.
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?
Two short lines with zero filler and the purpose front-loaded; the endpoint line is compact and structured. It is efficient, though arguably so terse that the header-like phrasing borders on under-specification rather than crispness.
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-param read tool with no output schema, the description is minimally sufficient but leaves the key ambiguity unresolved: what 'metadata' actually returns and why it differs from the many other system-info siblings. No return-value detail is expected given no output schema, so this lands at the minimum-viable level.
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 tool takes zero parameters, so the baseline of 4 applies. There is no parameter syntax or meaning the description could usefully add.
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?
It states the verb 'Get' and the resource loosely as 'Remnawave Information', plus the concrete endpoint [READ] GET /api/system/metadata. However, 'information' is nearly a restatement of the name 'get_metadata' and does not distinguish this tool from siblings like get_stats, get_status, or get_remnawave_health, all of which also return system-level information.
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 when-to-use guidance and names no alternatives, despite a crowded sibling set (get_stats, get_status, get_remnawave_health, get_configuration) that an agent must choose between. Nothing tells the caller what condition selects this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nodeBRead-only
Get node by UUID [READ] GET /api/nodes/:uuid Returns a compact view; pass full: true for the raw panel response.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the raw panel response (large) | |
| uuid | 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 '[READ]' tag is redundant. The genuinely useful disclosure is that the default response is a compact view while full:true returns the raw, large panel response — a real behavioral trait about payload size and shape that goes beyond 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?
Three short lines, front-loaded with the action and lookup key, then the endpoint and response-mode hint. The '[READ] GET /api/nodes/:uuid' line is mostly redundant with the tool name and annotations, but costs little and does not bury the useful content.
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 two-parameter read tool with no output schema, the description covers the key question an agent would have — what the default response looks like versus the full one. Missing are any error semantics (e.g., behavior for a nonexistent UUID) and sibling routing, but those are minor for this complexity level.
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 50%, and the description's 'pass full: true for the raw panel response' largely restates what the schema already says ('Return the raw panel response (large)'). The uuid parameter's format/pattern is fully specified by the schema, so the description adds little beyond the baseline.
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 and resource ('Get node by UUID') and pins the retrieval key, which separates it from the list-oriented sibling get_nodes. It does not, however, differentiate itself from same-resource siblings like get_node_metadata, get_node_usage, or get_node_plugins, so an agent still has to infer the boundary.
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?
There is no when-to-use or when-not-to-use guidance, and no alternative sibling is named despite a crowded set of node-related getters. The only implied context is 'you have a UUID', which comes from the schema itself rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_integrationBRead-only
Get Node Integration by uuid [READ] GET /api/node-integrations/:uuid
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | 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 the '[READ]' marker and the underlying endpoint (GET /api/node-integrations/:uuid), which is mildly useful context but not behavior beyond the annotations. It does not describe what a 'node integration' contains or how errors (missing uuid) surface.
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?
Two terse lines with the resource and key front-loaded and no filler. The endpoint line is arguably redundant with the name, but it costs little and is not padding.
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-record fetch with one well-constrained uuid and no output schema, the definition is minimally sufficient. It never says what a node integration is or what the response contains, which matters for an agent deciding between this and the plural list 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?
Schema description coverage is 0%, but the single parameter is self-documenting: 'uuid' with format=uuid and a strict regex pattern. The description's 'by uuid' phrasing confirms the lookup key but adds no format, scope, or example detail beyond 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?
States a specific verb and resource ('Get Node Integration by uuid'), so an agent knows it fetches a single integration record. However, it does not distinguish itself from the sibling 'get_node_integrations' (plural/list) beyond the singular resource name, leaving the singular-vs-collection distinction to inference.
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?
There is no guidance on when to use this tool versus 'get_node_integrations', 'get_node', or the other node-related getters in the sibling list. The HTTP route is included but no context, prerequisites, or alternative selection criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_integrationsBRead-only
Get all Node Integrations [READ] GET /api/node-integrations/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 only the underlying HTTP verb and path ('[READ] GET /api/node-integrations/'), which contributes little beyond the annotations, and it says nothing about pagination, filtering, or result size for a collection endpoint.
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?
Two short lines, front-loaded with the purpose. The trailing '[READ] GET /api/node-integrations/' is largely redundant with the readOnly annotation, but the description is not bloated.
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 no output schema, the description does not indicate what a 'Node Integration' record contains or whether results are paginated. Annotations cover safety, but for a list endpoint feeding siblings like get_node_integration, a bit more on the returned collection would help.
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 tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool is 4. No misleading parameter claims are made.
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 and resource ('Get all Node Integrations'), and the phrase 'all' signals this is a collection/list operation rather than a single-resource fetch. However, it offers no differentiation from the sibling get_node_integration (singular), so an agent must infer the list-vs-item distinction from the name alone.
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?
There is no explicit when-to-use guidance and no mention of the closely related get_node_integration sibling that selects a single integration. The agent gets no conditions or alternatives, only the implied fact that this returns a collection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_metadataCRead-only
Get node metadata [READ] GET /api/metadata/node/:uuid
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes | Path parameter uuid |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the "[READ]" tag merely restates structured data. The description adds no auth requirements, rate limits, or behavioral context, and exposes only the raw HTTP route, which is of little value to an agent.
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?
Extremely short and front-loaded with the action and resource. The appended HTTP method/path is mildly redundant with the read-only annotation but does map the tool to an endpoint.
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 tool with full schema coverage and read-only annotations, the definition is minimally adequate. It says nothing about what node metadata is returned or how it differs from sibling read tools, which is the main remaining 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 100% for the single required uuid parameter, so the schema already carries the semantics. The description adds no format or meaning beyond what is structured, making the baseline 3 appropriate.
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 and resource ("Get node metadata"), which is clearly a read of node-level metadata. However it offers no differentiation from siblings like get_node, get_metadata, or get_user_metadata, leaving the agent to infer node-vs-user-scoped metadata from the name alone.
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?
There is no guidance on when to use this tool versus get_node, get_metadata, or get_user_metadata, and no prerequisites or exclusions are stated. The only hint is the implicit node scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_pluginBRead-only
Get Node Plugin by uuid [READ] GET /api/node-plugins/:uuid
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | 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's only additional content is the '[READ] GET /api/node-plugins/:uuid' line, which merely restates the annotation and HTTP route rather than disclosing return shape, error behavior, or access requirements.
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?
Two short lines with the essential resource and identifier front-loaded and no wasted prose. The endpoint/verb line is somewhat redundant with the annotations but does not bloat the definition.
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 tool with a fully constrained schema and safety annotations already present, the definition is adequate to invoke correctly. It omits any indication of what the plugin object contains, which is a minor gap given no output schema exists.
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 single uuid parameter is heavily constrained by the schema's format=uuid and regex pattern. The description adds only 'by uuid', which is minimal; it neither expands on the identifier's origin nor compensates meaningfully for the absent prose description.
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 (Get) and resource (Node Plugin) with a scope qualifier (by uuid), which implicitly separates it from the sibling list tool get_node_plugins. However, it does not explicitly name the sibling, so the agent must infer the singular/plural distinction.
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?
Usage is only implied: retrieve a single node plugin keyed by uuid. There is no explicit when-to-use statement, no exclusion ('use get_node_plugins to list all'), and no prerequisites, but the singular resource plus required uuid makes the intent reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_pluginsBRead-only
Get all Node Plugins [READ] GET /api/node-plugins/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's '[READ]' tag merely restates that. Beyond the endpoint path, it adds no behavioral context such as whether the list is paginated, filtered, or scoped to a node.
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?
Two short lines with the purpose front-loaded and no wasted words. Size is proportionate to a simple zero-argument list endpoint.
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-param read with no output schema, the definition is minimally viable but omits anything about the shape or volume of the returned node-plugin list. Nothing is incorrect, but an agent gets no help anticipating results or pagination.
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 tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The empty schema and additionalProperties=false leave no ambiguity.
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 and resource ('Get all Node Plugins'), and the plural distinguishes it from the sibling get_node_plugin. However, it does not explain what a 'Node Plugin' is or how it relates to the node-plugin integrations siblings, so differentiation is only implied by naming.
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?
There is no guidance on when to use this versus get_node_plugin (single) or get_node_integrations. The agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nodesCRead-only
Get nodes [READ] GET /api/nodes/ Returns a compact view; pass full: true for the raw panel response.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return the raw panel response (large) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read profile is covered. The description adds modest value by noting the default is a 'compact view' and that full:true yields a 'raw panel response (large)', giving a sense of payload size, but says nothing about pagination, filtering, or result fields.
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?
Two short lines that are front-loaded with the resource and endpoint, with no wasted prose. It is terse but everything present earns its place, though the terseness borders on under-specification.
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-required-parameter read tool with annotations and a fully documented schema, this is roughly adequate, and the compact-vs-full distinction is the key behavioral fact. Still, with no output schema and dense node-related siblings, more scope clarification would help an agent call 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 100% and the single 'full' parameter already carries the description 'Return the raw panel response (large)'. The description largely restates that same semantics ('pass full: true for the raw panel response'), so it adds little beyond the schema; baseline 3 applies.
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 ('Get') and resource ('nodes') plus the underlying endpoint GET /api/nodes/, so the operation is identifiable. However, it does not differentiate this tool from close siblings like get_node (singular), get_user_accessible_nodes, or get_nodes_metrics, leaving the agent to infer scope from the name alone.
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?
There is no explicit guidance on when to use get_nodes versus get_node or the other node-related siblings. The only conditional hint ('pass full: true for the raw panel response') concerns a parameter, not tool selection, so usage guidance is essentially absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nodes_metricsCRead-only
Get Nodes Metrics [READ] GET /api/system/nodes/metrics
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the '[READ]' tag merely repeats that. Beyond the endpoint path (GET /api/system/nodes/metrics), the description discloses nothing about scope, auth, cost, or what the metrics represent.
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?
It is short and front-loaded, but the first line duplicates the tool name and the second line only supplies verb+path. Minimal waste, but also minimal value per 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?
With no output schema, the description carries the burden of saying what is returned, and it says nothing. For a read endpoint amid a dense cluster of node-metrics/statistics siblings, this leaves the agent unable to predict the result shape or choose 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?
The tool takes zero parameters, so per the rubric the baseline is 4; there is nothing for the description to clarify beyond what the empty schema already states.
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 is essentially the tool name restated ('Get Nodes Metrics') plus an HTTP verb/path hint. It never explains what metrics are returned or how this differs from near-identical siblings such as get_nodes_statistics, get_node_usage, or get_stats_nodes_usage, so an agent cannot disambiguate from the text alone.
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?
There is no guidance on when to call this versus the many overlapping node/statistics tools in the sibling list. No context, no exclusions, no alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nodes_statisticsCRead-only
Get Nodes Statistics [READ] GET /api/system/stats/nodes
| Name | Required | Description | Default |
|---|---|---|---|
| tz | No |
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 nothing beyond that: no indication of what the statistics cover, freshness, aggregation window, or response shape. The '[READ]' tag merely repeats the annotation.
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?
Two short lines with zero padding and the resource name front-loaded. However, this brevity reflects under-specification rather than disciplined conciseness; nothing meaningful was cut because nothing meaningful was present.
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 statistics endpoint with no output schema and an undocumented parameter, the description should at minimum say what data is returned and what the parameter does. It provides neither, so an agent cannot confidently invoke or interpret 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?
Schema description coverage is 0% for the single 'tz' parameter, so the description carries the full burden — but it says nothing about it. The agent cannot tell that 'tz' is a timezone affecting how statistics are bucketed.
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 is essentially the tool name restated ('Get Nodes Statistics') plus a raw HTTP route. It does not say what statistics are returned or how they differ from the many sibling stats tools (get_stats, get_nodes_metrics, get_stats_nodes_usage, get_hwid_devices_stats). Only the '/api/system/stats/nodes' path hints at system-level node stats.
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 on when to use this versus the numerous other stats/metrics endpoints. There is no statement of preconditions, scope, or alternatives, leaving the agent to guess 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_nodes_tagsCRead-only
Get nodes tags [READ] GET /api/nodes/tags
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds nothing behavioral on top of that — no mention of whether the tags are globally defined or per-node, caching, or scope. It does not contradict the annotations, but it contributes no extra 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?
One short line with no filler and the route front-loaded after the purpose. It is appropriately sized for a no-argument read endpoint, though it is arguably under-specified rather than elegant.
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?
There is no output schema and no parameter schema, so the description carries the burden of explaining what comes back. It never states the return shape (a list of tag names? objects with counts? per-node groupings?), leaving the agent unable to predict the response for an endpoint whose result is the entire point.
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 tool takes zero parameters, so per the rubric the baseline is 4. There is nothing about parameter semantics the description could usefully add, and it does not misdescribe the empty 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?
"Get nodes tags" essentially restates the tool name verbatim, with the only added information being the HTTP route (GET /api/nodes/tags) and a [READ] marker. It does not clarify what a "tag" is here, what set of nodes is covered, or how this differs from the many sibling tag/list endpoints (get_hosts_tags, get_users_tags, get_nodes).
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?
There is no when-to-use guidance, no precondition, and no mention of alternatives. The sibling list contains near-miss options such as get_nodes, get_node, and get_hosts_tags, and the description gives the agent nothing to choose between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_node_usageBRead-only
Get users exceeding a traffic threshold on the given nodes for a period Returns users whose total usage over the period on the given nodes is >= minTotalBytes. Underlying usage data is flushed to the database roughly every 2 minutes. [READ] POST /api/bandwidth-stats/nodes/usage
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End date (YYYY-MM-DD) | |
| body | Yes | JSON request body | |
| start | Yes | Start date (YYYY-MM-DD) | |
| minTotalBytes | No | Only include users whose total usage over the period is >= this (bytes) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering safety, the description adds two pieces of genuinely new context: the underlying usage data is flushed roughly every 2 minutes (so results can be stale), and the "[READ] POST" marker resolves the apparent conflict between a POST route and a read-only operation. It does not describe the shape of the returned user objects, but the annotation-relative bar is met.
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?
Three short sentences, front-loaded with the outcome before the freshness caveat, and the endpoint/method tag is compact. Slight redundancy between sentence one and sentence two (both restate the threshold condition), which keeps it from being fully waste-free.
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?
No output schema exists, so the description must carry return-value semantics; it names the returned entity and the applied filter but not the fields on each returned user (usage totals, uuid, etc.). Combined with no usage guidance among ~90 siblings, the definition is adequate but leaves real gaps.
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 100%, so start, end, body.nodesUuids and minTotalBytes are all already documented in the schema. The description only restates the minTotalBytes comparison semantics that the schema already states verbatim, adding no syntax, units or edge-case detail beyond it.
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 and resource with scope: "Get users exceeding a traffic threshold on the given nodes for a period," which precisely identifies the entity returned (users) and the filter (threshold over nodes). It is clearer than the crowded sibling set of stats tools, but it never names which sibling (e.g. get_stats_node_users_usage, get_stats_nodes_usage) to prefer, so differentiation is left to inference.
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?
There is no explicit guidance on when to use this tool versus the many adjacent stats/usage siblings (get_stats_user_usage, get_stats_node_users_usage, get_internal_squad_usage). The only usage-adjacent detail is the data-freshness caveat, which is behavioral rather than a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recapCRead-only
Get Recap [READ] GET /api/system/stats/recap
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 only the HTTP path, which conveys nothing behavioral beyond what the annotations state — no indication of what a "recap" contains, whether it is cached/aggregated, or whether it requires auth.
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?
Two very short lines, front-loaded and free of padding. The endpoint line is thin on value but does not bloat the definition and is arguably the only concrete anchor provided.
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 no output schema and no explanation of what the recap returns, a 0-param read tool still needs the description to say what data comes back and how it differs from the many other stats endpoints in the sibling list. That gap leaves the agent unable to select this tool confidently.
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 tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool is 4. No schema information is lost.
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?
"Get Recap" essentially restates the tool name; the only added information is the raw endpoint GET /api/system/stats/recap, which hints at a system-stats domain but does not state a specific verb+resource in agent-readable terms. It gives no signal that distinguishes it from siblings such as get_stats, get_status, or get_stats_digest.
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?
There is no guidance on when to call this tool, what scenario it fits, or which alternative siblings (get_stats, get_stats_digest, get_http_stats, get_bandwidth_stats) it should be preferred over. The agent is left to guess entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_remnawave_healthBRead-only
Get Remnawave Health [READ] GET /api/system/health
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 only the HTTP verb/path (GET /api/system/health), which slightly corroborates the read-only nature but discloses nothing about auth requirements, rate limits, or what 'health' actually reports.
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?
Two compact lines, front-loaded with the action and then the endpoint. The only waste is mild redundancy between the name and the first line.
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, no-output-schema health endpoint the definition is minimally sufficient, and annotations carry the safety profile. It still omits what the check evaluates (process liveness vs. downstream node health) and whether a non-200 result is surfaced as an error, which would meaningfully help an agent interpret the call.
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 tool takes zero parameters, so per the rubric the baseline is 4. The description adds nothing about parameters, but there is nothing to add.
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 and resource ('Get Remnawave Health') and even names the underlying endpoint (GET /api/system/health), so the agent knows exactly what it retrieves. It does not, however, distinguish itself from plausible siblings such as get_status or get_stats, leaving overlap ambiguous.
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?
There is no guidance on when to prefer this health check over get_status, get_stats, or get_metadata, nor any stated preconditions. The agent must infer usage entirely 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_remnawave_settingsBRead-only
Get Remnawave settings [READ] GET /api/remnawave-settings/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description only repeats the read nature with '[READ] GET /api/remnawave-settings/', adding endpoint context but no behavioral details such as authentication needs, rate limits, or what settings are affected.
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 very short and front-loaded. The '[READ]' tag is redundant with the annotations, but overall it avoids unnecessary 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?
For a simple read-only, zero-parameter endpoint, the description is minimally adequate. It does not describe what 'Remnawave settings' include or what the response looks like, and there is no output schema to compensate.
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 tool takes no parameters, so there is no parameter semantics burden. The baseline for a zero-parameter tool is 4.
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 and resource: 'Get Remnawave settings'. This is clear enough to distinguish from most siblings, though it does not explicitly differentiate from adjacent settings-oriented tools such as get_subscription_settings or get_configuration.
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?
There is no explicit guidance on when to use this tool versus alternatives. The [READ] marker and GET path imply a read operation, but no conditions or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_snippetsCRead-only
Get snippets [READ] GET /api/snippets/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description merely repeats that this is a read operation via "[READ] GET". It adds no extra behavioral context such as authentication needs, rate limits, pagination, or what the endpoint returns.
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 very short and front-loads the operation and HTTP method. It is efficient, though it is under-specified rather than optimally concise.
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 read endpoint with no parameters and no output schema, the description still omits what snippets are and when this endpoint is relevant. An agent can call it mechanically, but it is not well equipped to select it correctly among the many sibling tools.
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 tool takes zero parameters, so the baseline for parameter semantics is 4. The description does not need to explain any parameter syntax or filtering, and the empty schema is consistent with a simple no-argument GET.
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 and resource ("Get snippets") and adds the HTTP method and path ("[READ] GET /api/snippets/"). However, it does not explain what a "snippet" is in this API or distinguish this tool from any of the many sibling get_* 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?
There is no guidance about when to use this tool versus alternatives, nor any prerequisites or exclusions. The description only identifies the operation, leaving selection entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsDRead-only
Get Stats [READ] GET /api/system/stats
| Name | Required | Description | Default |
|---|---|---|---|
| tz | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, and the description's "[READ]" marker merely repeats that. Beyond confirming the HTTP verb, it adds no behavioral context such as scope of the statistics, refresh behavior, or whether the data is aggregated.
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, but the first line duplicates the tool name and the second line repeats annotation content, so it packs very little value per token despite being brief.
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 tool with no output schema and one undocumented parameter, the description should at minimum clarify the parameter and the scope of the statistics. It provides only the endpoint path, leaving the agent without enough information to call it correctly or distinguish it from 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?
The single parameter "tz" has 0% schema description coverage and is never mentioned in the description, so neither source explains what it means (presumably a timezone) or how it affects results. The description fails to compensate for the coverage gap.
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?
"Get Stats" simply restates the tool name and is a tautology; the only added information is the HTTP route GET /api/system/stats, which hints at system-level scope but does not say what stats are returned. With many siblings (get_bandwidth_stats, get_http_stats, get_status, get_nodes_statistics), there is no differentiation whatsoever.
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 contains no when-to-use guidance, no prerequisites, and no mention of any alternative sibling tool. An agent has no basis for choosing get_stats over get_bandwidth_stats or get_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stats_digestARead-only
Get Stats Digest Aggregated statistics for a datetime range [start, end): created and expired users, total traffic, traffic spent by users created within the range and new HWID devices. Per-user traffic history is stored with daily granularity (UTC), so the "traffic by new users" metric snaps to whole days at the range edges. [READ] GET /api/system/stats/digest
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End of the range, ISO 8601 datetime with timezone (e.g. 2026-07-16T00:00:00Z). Exclusive. | |
| start | Yes | Start of the range, ISO 8601 datetime with timezone (e.g. 2026-07-15T00:00:00Z). Inclusive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the '[READ]' prefix is redundant. The description nonetheless adds real behavioral context absent from the annotations: the half-open interval semantics and the daily UTC granularity caveat explaining that 'traffic by new users' snaps to whole days at the range edges. That caveat materially affects interpretation of results.
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?
Content is front-loaded and the metric list is dense and useful. The only waste is the leading 'Get Stats Digest' restatement of the tool name and the redundant '[READ] GET /api/system/stats/digest' line, both of which duplicate structured metadata.
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 no output schema, the description compensates by enumerating the returned metrics, and it documents boundary semantics and granularity caveats. An agent has enough to call and interpret it, though it lacks any hint about the response shape or size.
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 100% and both parameter descriptions already state inclusive/exclusive boundary behavior, so the description's restatement of [start, end) adds little. Baseline 3 applies when the schema carries parameter semantics.
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 names a specific verb and resource (aggregated statistics digest over a datetime range) and enumerates the exact metrics returned: created/expired users, total traffic, traffic by newly created users, and new HWID devices. This clearly distinguishes it from generic siblings like get_stats. It does not, however, explicitly contrast itself with the other stats tools (get_bandwidth_stats, get_stats_user_usage), which would have earned a 5.
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 range-based framing implies when the tool applies, but there is no explicit when-to-use, no exclusions, and no routing to the many sibling stats tools (get_stats, get_bandwidth_stats, get_hwid_devices_stats). An agent must infer selection from the metric list alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stats_nodes_usageCRead-only
Get Nodes Usage by Range [READ] GET /api/bandwidth-stats/nodes/
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End date (YYYY-MM-DD) | |
| start | Yes | Start date (YYYY-MM-DD) | |
| topNodesLimit | No | Limit of top nodes to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the '[READ]' marker and endpoint path add essentially no behavioral information. The description does not disclose aggregation semantics, pagination, default window, or what the usage figures represent.
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?
It is compact and front-loaded with the operation. The trailing endpoint line is of marginal value and edges toward redundancy with the readOnly annotation, but overall there is no wasted prose.
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 annotated read tool with full schema coverage this is minimally viable. However, with no output schema and heavy sibling overlap, the description could reasonably say what is returned (per-node bandwidth over the range) and how it differs from adjacent stats tools.
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 100%: start and end are documented as YYYY-MM-DD dates and topNodesLimit has a default and description. The description adds nothing beyond the schema (it only implies the date range), so the baseline 3 applies.
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+resource ('Get Nodes Usage') with a scoping qualifier ('by Range'). It is not a tautology, but it offers no differentiation from the many sibling stats tools such as get_node_usage, get_nodes_metrics, get_nodes_statistics, and get_stats_nodes_users_usage, so it lands at 'clear but no sibling differentiation'.
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?
There is no when-to-use or when-not-to-use guidance and no named alternative, despite a crowded sibling space of node/usage statistics tools. The agent must infer selection entirely 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_stats_nodes_users_usageCRead-only
Get Nodes Users Usage by Nodes UUIDs [READ] POST /api/bandwidth-stats/nodes/users
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End date (YYYY-MM-DD) | |
| body | Yes | JSON request body | |
| start | Yes | Start date (YYYY-MM-DD) | |
| topUsersLimit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds essentially nothing behavioral beyond reiterating readability via '[READ]', and it omits pagination/return-shape context for a stats endpoint with a topUsersLimit parameter.
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?
Very short and front-loaded, with the action leading. The trailing endpoint/method tag is marginally useful for confirming a POST-based read but borders on noise.
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 nested-body stats tool surrounded by many similar usage/stat tools, the description does too little: it neither disambiguates from siblings nor clarifies the nested nodesUuids body or the topUsersLimit cap. Read-only annotations and the schema carry most of the load, but routing context is missing.
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 75%, so most parameters (start, end, body/nodesUuids) are documented in the schema itself. The description adds no parameter meaning and leaves topUsersLimit, the undocumented 25%, unexplained in either place; baseline 3 fits given the decent coverage.
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 names a specific verb and resource ('Get Nodes Users Usage') and a scoping dimension ('by Nodes UUIDs'), which tells an agent roughly what it returns. However, it never distinguishes itself from near-identical siblings such as get_stats_node_users_usage, get_stats_nodes_usage, or get_stats_user_usage, so the agent cannot confidently pick this one over the others.
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?
There is no when-to-use guidance, no when-not-to-use, and no mention of alternatives despite several overlapping stats siblings. The '[READ] POST /api/bandwidth-stats/nodes/users' fragment is endpoint metadata, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stats_node_users_usageCRead-only
Get Node Users Usage by Node UUID [READ] GET /api/bandwidth-stats/nodes/:uuid/users
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End date (YYYY-MM-DD) | |
| uuid | Yes | ||
| start | Yes | Start date (YYYY-MM-DD) | |
| topUsersLimit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the '[READ]' tag in the description is redundant. The description adds only the raw endpoint path and no context on result size, aggregation window semantics, or what the top-users limit affects.
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?
Two short lines, front-loaded with the action and resource, no wasted prose. It is terse but not padded.
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?
A four-parameter query tool with no output schema and no annotations beyond the read-only pair needs more explanation than this: what the usage figures represent, the time-range semantics, and how the limit parameter behaves are all absent.
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 only 50%: uuid and topUsersLimit are undocumented in the schema, and the description does nothing to compensate. It only restates 'by Node UUID', adding no format, range, or meaning beyond 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 names a specific verb and resource ('Get Node Users Usage by Node UUID'), so the basic purpose is legible. However, it does not differentiate from several closely-named siblings such as get_stats_nodes_users_usage, get_stats_nodes_usage, and get_stats_user_usage, leaving an agent unclear which scope applies.
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?
There is no statement of when to use this tool versus the many sibling stats tools, nor any prerequisite or exclusion guidance. The only clue is the implied 'node UUID' scoping in the title.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stats_user_usageCRead-only
Get User Usage by Range [READ] GET /api/bandwidth-stats/users/:userId
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End date (YYYY-MM-DD) | |
| start | Yes | Start date (YYYY-MM-DD) | |
| userId | Yes | ID of the user | |
| topNodesLimit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the '[READ] GET ...' line merely restates that. The description adds no behavioral context beyond the annotations: no indication of what 'usage' is measured in, whether results are aggregated or time-bucketed, or any rate/pagination behavior.
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?
It is short and the purpose is front-loaded, but the '[READ] GET /api/bandwidth-stats/users/:userId' line largely duplicates the readOnlyHint annotation and the tool name rather than adding information, and the remaining brevity reflects under-specification more than tight writing.
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 4-parameter tool with no output schema, the description omits the meaning of 'usage', how start/end bound the aggregation, and what topNodesLimit controls. An agent can infer the call shape from the schema but not the semantics of the result.
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 75% (userId, start, end are documented; topNodesLimit is not), and the description explains none of the parameters. In particular topNodesLimit — which shapes the response — is left undefined in both schema and description, so the description does not compensate for the coverage gap.
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+resource+scope ('Get User Usage by Range') and the endpoint path /api/bandwidth-stats/users/:userId makes clear it is per-user bandwidth usage over a time window. It does not, however, distinguish itself from close siblings such as get_stats_node_users_usage, get_stats_nodes_users_usage, or get_internal_squad_user_usage.
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?
There is no when-to-use guidance and no mention of alternatives among the many usage/stats siblings. The only selection hint is the implicit [READ] marker, which does not help an agent choose between this and the other per-user or per-node usage tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusBRead-only
Get the status of the authentication [READ] GET /api/auth/status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the non-mutating nature is fully covered by structured data. The description adds only the underlying route (GET /api/auth/status) and nothing about what the status reflects (token validity, session state) or how failures are surfaced; with annotations carrying the safety profile, this is adequate but thin.
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 single sentence is front-loaded and wastes no words. The appended "[READ] GET /api/auth/status" restates what the annotations and name already imply, which is minor redundancy rather than 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?
For a zero-parameter, no-output-schema tool, the definition is functional but omits the one thing an agent would want: what the returned status actually represents. Read-only safety is covered by annotations, so the gap is moderate rather than severe.
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 tool takes zero parameters, so per the baseline there is nothing for the description to disambiguate. Schema coverage is 100% and the empty object is self-explanatory.
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 clear verb and resource ("Get the status of the authentication"), which is enough to distinguish it from data-heavy siblings like get_stats or get_subscription_info_by_short_uuid. It does not, however, contrast itself against near-neighbours such as get_remnawave_health or get_api_token_scopes, so the boundary is left to inference.
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?
There is no statement of when this tool should be used, no preconditions (e.g. whether it requires an existing token), and no named alternative. The agent must guess that this is the auth-check probe rather than a general health check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subpage_configBRead-only
Get subscription page config by uuid [READ] GET /api/subscription-page-configs/:uuid
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description corroborates with '[READ]' and adds the underlying HTTP endpoint (GET /api/subscription-page-configs/:uuid), which is real but marginal context; it says nothing about error behavior or what the returned config contains.
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?
Two short lines with zero filler, and the resource plus its key discriminator (uuid) is front-loaded. It is appropriately sized for a simple getter, though the endpoint annotation could be considered slightly redundant.
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 single-parameter read tool with annotations covering the safety profile and a self-constraining uuid schema, the description supplies the essential identity and discriminator. The only minor gap is that no output schema exists and the shape of the returned config is never hinted at.
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 schema itself carries a strict uuid format and regex pattern that fully constrain the single parameter, so the description's contribution ('by uuid' = the config's identifier) is minimal. Baseline 3 is appropriate given the schema's strong type/format constraints.
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 and resource ('Get subscription page config by uuid'), which is clearer than a bare noun. The 'by uuid' phrasing and singular form implicitly separate it from siblings get_subpage_config_by_short_uuid and get_subpage_configs, though the distinction is never made explicit.
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?
There is no when-to-use or when-not-to-use guidance, and no alternative sibling is named. An agent must infer from the tool name alone that this variant is for a full uuid while get_subpage_config_by_short_uuid takes a short uuid. No prerequisites or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subpage_config_by_short_uuidCRead-only
Get Subpage Config by Short UUID [READ] GET /api/subscriptions/subpage-config/:shortUuid
| Name | Required | Description | Default |
|---|---|---|---|
| shortUuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the '[READ]' prefix plus the GET path merely repeat that read-only fact rather than adding new context. Nothing is said about what the subpage config contains, whether it requires subscription-scoped auth, or error behavior for unknown short UUIDs. It does not contradict the annotations, but adds nothing 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?
Very short and front-loaded, with no filler, but the brevity reflects under-specification rather than disciplined concision — it is a title plus an endpoint line with no substantive content.
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 tool with no output schema and an undocumented parameter, the description should explain what the returned subpage config is and how it relates to sibling config tools. Instead it gives only a name and route, leaving the agent unable to confidently select or invoke 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?
Schema description coverage is 0% and the single required parameter 'shortUuid' is completely undocumented. The description never explains what a short UUID is, its format, or how it differs from the UUID accepted by sibling get_subpage_config, so it fails to compensate for the schema gap.
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 is essentially the tool name restated plus the HTTP endpoint: 'Get Subpage Config by Short UUID' / 'GET /api/subscriptions/subpage-config/:shortUuid'. It does not distinguish this tool from close siblings like get_subpage_config, get_subpage_configs, or get_subscription_by_short_uuid_protected, so an agent cannot tell which subpage-config variant to pick.
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?
There is no when-to-use guidance, no statement of when to prefer this over get_subpage_config (which likely takes a full UUID) or the list endpoint get_subpage_configs. The reader must infer the selection rule purely 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_subpage_configsARead-only
Get all subscription page configs [READ] GET /api/subscription-page-configs/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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's '[READ]' and endpoint path are largely redundant with that, and it adds no new behavior context such as pagination, result size, or whether full config bodies are returned. Minor added value at best.
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?
Two short lines, front-loaded with the purpose. The '[READ] GET /api/...' fragment is arguably redundant given the readOnlyHint annotation, but it is compact and does not bloat the definition.
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 parameterless list read with no output schema, the definition is mostly sufficient, but it leaves open whether pagination applies, how large the response is, and how the returned configs differ from those of the singular siblings. Adequate but with clear gaps.
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 tool takes zero parameters and the schema is empty with 100% coverage, so there is nothing for the description to explain. Baseline 4 applies; no parameter ambiguity exists.
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 and resource: 'Get all subscription page configs'. The plural 'configs' paired with 'all' implicitly distinguishes it from the singular siblings get_subpage_config and get_subpage_config_by_short_uuid, but those siblings are never named, so the differentiation is inferable rather than explicit.
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?
Usage is only implied by the word 'all' — an agent can guess this is the list-everything variant versus the single-config siblings, but there is no stated when-to-use, when-not-to-use, or named alternative. No prerequisites or filtering conditions are described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_by_idBRead-only
Get subscription by User ID [READ] GET /api/subscriptions/by-id/:userId
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's '[READ]' merely restates that. The REST path (GET /api/subscriptions/by-id/:userId) adds a little context about the underlying resource, but nothing about permissions, 404 behavior, or rate limits.
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?
Two short lines, front-loaded with the purpose. The bracketed HTTP verb/path is somewhat redundant with the annotations but costs little.
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?
A simple single-parameter read tool whose safety profile is covered by annotations and whose parameter is fully described in the schema. However, with no output schema, the description says nothing about what is returned (subscription object, link, status), leaving a small but real 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 100% and the single userId parameter is fully documented in the schema. The description reinforces that the identifier is a User ID (not a subscription ID), which is mildly useful, but adds no format or constraint detail beyond the schema. Baseline 3.
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 and resource (get subscription) plus the lookup key (User ID), which distinguishes it from siblings like get_subscription_by_short_uuid_protected and get_subscription_by_username. It does not explicitly name those alternatives, but the key difference is inferable.
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 when-to-use guidance, no prerequisites, and no mention of when to prefer this over get_subscriptions or the username/short-uuid variants. The agent must infer selection purely from the key type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_by_short_uuid_protectedCRead-only
Get subscription by short uuid (protected route) [READ] GET /api/subscriptions/by-short-uuid/:shortUuid
| Name | Required | Description | Default |
|---|---|---|---|
| shortUuid | 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's only added behavioral claim is 'protected route', which is unexplained jargon — it does not say what auth or permission is required, or what that protection means for the caller's behavior.
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?
Very short and front-loaded: purpose first, then route/HTTP method. The endpoint string is largely redundant metadata, but nothing is bloated or buried.
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 no output schema, no explanation of the return payload, no explanation of 'protected', and a completely undocumented required parameter, the description leaves too much for the agent to infer about a tool that fetches a subscription object.
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% for the single required shortUuid parameter, and the description only echoes the name ('by short uuid') without format, source, or validation details. It does not compensate for the undocumented 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 names a specific verb+resource (get subscription) plus the lookup key (short uuid), which is clearer than a bare name restatement. However, it fails to differentiate from the near-identical sibling get_subscription_info_by_short_uuid or explain what 'protected' adds, so it falls short of a 5.
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?
There is no guidance on when to use this versus get_subscription_by_id, get_subscription_by_username, or the very similar get_subscription_info_by_short_uuid. The '(protected route)' parenthetical hints at a different access context but never states when an agent should pick this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_by_usernameBRead-only
Get subscription by username [READ] GET /api/subscriptions/by-username/:username
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the '[READ]' prefix is largely redundant. Beyond that, the description says nothing about auth requirements, behavior for unknown usernames, or return shape.
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?
Two short lines, resource stated first, with no filler sentences. Minor redundancy in restating the name and the read nature, but nothing is bloated.
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 tool with no output schema, minimal documentation is defensible, but the description still omits what the returned subscription represents and how it behaves for a nonexistent username. Adequate rather than 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 100% and there is a single parameter, so the schema carries the burden entirely. The description adds no extra meaning about username format or constraints, which is the baseline 3 case.
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 clear verb (get) plus resource (subscription) and the lookup key (username), which distinguishes it from get_subscription_by_id and get_subscription_by_short_uuid_protected. It is specific but adds no scope detail beyond the name itself.
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?
Usage is implied by the required username parameter and the tool name, and the sibling set contains obvious alternatives (by id, by short uuid), but the description never states when to prefer this lookup over them. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_info_by_short_uuidDRead-only
Get Subscription Info by Short UUID [READ] GET /api/sub/:shortUuid/info
| Name | Required | Description | Default |
|---|---|---|---|
| shortUuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The '[READ] GET' prefix merely echoes the readOnlyHint=true and destructiveHint=false annotations rather than adding context. No mention of authentication requirements, whether the shortUuid is public-facing, or what happens on an unknown ID.
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?
It is short and front-loaded with the resource, with no filler sentences. However, the second line is largely redundant metadata (a verb repeat plus a raw route), so brevity here reflects under-specification rather than economy.
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 lookup with no output schema, the description should at least explain what the returned 'info' covers and how it relates to the 'protected' and subpage-config siblings. It does neither, leaving the agent unable to choose confidently among the subscription tools.
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 single parameter shortUuid is left undefined. The description only implies where it goes in the URL path; it says nothing about the expected format or that it identifies a subscription rather than a user. This does not compensate for the coverage gap.
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 only restates the tool name ('Get Subscription Info by Short UUID') and tacks on the raw HTTP route. It names the resource but gives no indication of what 'Subscription Info' contains or how it differs from near-identical siblings like get_subscription_by_short_uuid_protected or get_subpage_config_by_short_uuid.
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 whatsoever on when to use this tool, when not to, or which of the many sibling subscription lookups it should be preferred over. The only extra token, the endpoint path, is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_request_historyARead-only
Get all subscription request history Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database. [READ] GET /api/subscription-request-history/
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of results to return, no more than 1000 | |
| start | No | Start index (offset) of the results to return, default is 0 | |
| filters | No | ||
| sorting | No | ||
| filterModes | No | ||
| globalFilterMode | No |
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 genuinely useful non-obvious context beyond annotations: the filters run expensive LIKE-style operators server-side and misuse can degrade database performance. It stops short of disclosing defaults, result contents, or pagination behavior.
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?
Purpose is front-loaded in the first sentence, followed by the performance caveat and the endpoint marker. Every sentence carries information and there is no filler, though the caveat runs slightly long relative to the minimal core statement.
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, zero-required-parameter list endpoint this is passable, and annotations carry the safety burden. But with four of six parameters (including nested filter/sorting objects) undocumented anywhere and no output schema, the description leaves the agent without enough to construct a correct filters or filterModes payload.
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 only 33% – size and start are documented, while filters, sorting, filterModes, and globalFilterMode are undocumented in both schema and description. The description only tells the agent that filters are costly; it never explains the id/value filter structure, filterModes, or globalFilterMode, so it only partially compensates for the coverage gap.
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 and resource ('Get all subscription request history') and the '[READ] GET /api/subscription-request-history/' route confirms the scope. It does not explicitly distinguish itself from the sibling get_user_subscription_request_history or get_subscription_request_history_stats, so an agent must infer the 'all vs per-user' distinction.
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 an actionable caution about the filters ('primarily intended for use by the frontend', 'expensive operators such as LIKE'), which tells the agent when not to lean on filtering. However, it never states when to choose this tool over the near-identical sibling get_user_subscription_request_history, leaving the primary routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_request_history_statsCRead-only
Get subscription request history stats [READ] GET /api/subscription-request-history/stats
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's '[READ]' tag merely repeats that. It adds no behavioral detail beyond the structured data: no indication of the scope of aggregation, time-range assumptions, cost, or what the stats comprise. Redundant with annotations rather than additive.
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?
Very short and front-loaded: one functional sentence plus a route marker. Nothing is padded, though the '[READ] GET /api/...' line duplicates information already carried by the annotations, so it does not fully earn 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?
With no output schema and no parameters, the description is the only place to say what this endpoint actually returns (counts, buckets, aggregation window). It says nothing about the shape or scope of the stats, leaving a real gap for a stats-reporting 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 tool takes zero parameters, so the baseline of 4 applies per the rubric. Nothing in the description could or needs to add parameter meaning, and the empty schema is fully consistent with the description.
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 restates the tool name almost verbatim ('Get subscription request history stats') and adds only the raw HTTP route. It identifies the resource but never explains what the statistics represent or how they differ from the sibling get_subscription_request_history and get_user_subscription_request_history. Minimum-viable rather than genuinely clarifying.
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?
There is no guidance on when to use this tool versus the plainly related siblings (get_subscription_request_history, get_user_subscription_request_history, get_stats_digest). No prerequisites, no exclusions, no context. The agent must infer usage entirely 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_subscriptionsCRead-only
Get all subscriptions [READ] GET /api/subscriptions/
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of subscriptions to return, no more than 500 | |
| start | No | Start index (offset) of the users to return, default is 0 |
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 nothing beyond that — the "[READ] GET /api/subscriptions/" tag merely restates the read-only annotation and offers no detail on pagination behavior, result envelope, or access requirements.
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?
Very short and front-loaded, with the core action stated first. The bracketed endpoint tag is arguably redundant noise but does not bloat the definition.
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 no output schema, the description carries the burden of conveying what is returned, yet it says nothing about the response shape or pagination envelope. For a list tool with sibling overlap, it is under-specified.
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 100%, with both the size and start parameters fully documented in the schema, so the baseline of 3 applies. The description adds no extra meaning about pagination or ordering beyond what the schema already provides.
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 and resource ("Get all subscriptions"), and the word "all" signals a bulk-list operation as opposed to the many single-subscription siblings like get_subscription_by_id or get_subscription_by_username. It does not, however, explicitly name or differentiate itself from those siblings.
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?
There is no statement of when to use this tool versus the numerous subscription-related alternatives (get_subscription_by_id, get_subscription_by_username, get_subscription_settings, etc.). The agent must infer from the name alone that this is the list-all variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_settingsBRead-only
Get subscription settings [READ] GET /api/subscription-settings/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the '[READ]' tag adds nothing the agent did not already have. Beyond that, the description says nothing about return contents, permissions, or any behavioral trait, so it does not extend the structured data at all.
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?
Two short lines, front-loaded with the operation and resource, with no filler. It is close to minimal, though the '[READ] GET /api/...' line duplicates annotation information rather than earning 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?
With no parameters and no output schema, the description is the only source of information about what is returned, and it does not say which settings fields are included. It is minimally sufficient to invoke the call but leaves the agent guessing about the response shape.
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 tool takes zero parameters, so there is nothing for the description to clarify; the baseline for a parameterless tool applies. The schema accepts no arguments and the description correctly implies none are 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?
States a specific verb (Get) and resource (subscription settings), so the basic operation is unambiguous. However, it offers no differentiation from adjacent settings tools such as get_remnawave_settings or get_configuration, so an agent cannot tell from the text alone which settings surface this covers.
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?
There is no when-to-use guidance, no prerequisites, and no named alternative. The only routing signal is the raw endpoint path, which assumes the agent already knows the API's domain model.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_templateBRead-only
Get subscription template by uuid [READ] GET /api/subscription-templates/:uuid
| Name | Required | Description | Default |
|---|---|---|---|
| uuid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the '[READ] GET /api/...' line merely restates that safety profile plus the endpoint path. No additional behavior is disclosed (e.g., behavior on unknown uuid, permissions, or template contents).
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?
Front-loaded and brief with no filler prose. The bracketed '[READ] GET /api/...' fragment is largely redundant with the annotations, so it does not fully earn 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-param read with annotations covering safety and no output schema, the definition is minimally adequate. It omits any description of what a subscription template is, edge-case behavior, or routing relative to the list sibling.
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 single uuid parameter has 0% schema description coverage, so the description carries the burden, but 'by uuid' adds only the bare minimum. It does not state whether the uuid refers to a template id, a version, or what happens if it is malformed or not found.
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 and resource ('Get subscription template by uuid'), which is clear enough to identify the operation. It does not explicitly differentiate from the sibling get_subscription_templates (list-all), though the 'by uuid' qualifier implies single-item retrieval.
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 when-to-use guidance, no prerequisites, and no mention of the natural alternative get_subscription_templates. The agent must infer that this tool retrieves one template given its uuid rather than the full list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_templatesBRead-only
Get all subscription templates (wihout content) [READ] GET /api/subscription-templates/
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description does add genuinely useful context that the returned templates omit their content payload, which affects payload size and downstream usability, but it says nothing about auth, pagination, or result volume.
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?
Extremely short and front-loaded, with the distinguishing qualifier placed early. The appended '[READ] GET /api/subscription-templates/' is redundant with the annotations and name, and the typo detracts slightly, but there is no filler prose.
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 list endpoint with no output schema, the description covers the essential shape and flags that content is excluded. Returning pagination or ordering details would help, but the core contract is sufficiently conveyed.
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 tool takes zero parameters, so there is nothing for the description to clarify; baseline 4 applies. The '(without content)' note is the only behavioral qualifier and it is not a parameter concern.
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 and resource ('Get all subscription templates') and adds a scope qualifier ('without content') that separates it from the singular sibling get_subscription_template. The distinction is implied rather than stated explicitly, and the typo 'wihout' slightly undermines polish, but the purpose is unmistakable.
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 when-to-use guidance and no mention of the obvious alternative get_subscription_template (single template). The agent must infer from the plural noun and the parenthetical that this is the bulk-listing variant; nothing tells it when to pick one over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_users_by_hwid_devicesCRead-only
Get top users by HWID devices [READ] GET /api/hwid/devices/top-users
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of results to return, no more than 100 | |
| start | No | Start index (offset) of the results to return, default is 0 |
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 '[READ] GET /api/hwid/devices/top-users' tag only restates that read-only nature and adds no new behavioral context such as sorting rules, time window, or pagination behavior. Consistent with annotations, but adds little 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?
It is short, front-loaded, and free of bloat, so nothing is wasted. However it is under-specified rather than merely concise — the two lines add nothing an agent could not infer from the name and endpoint tag.
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 stats-style endpoint with no output schema, the description leaves key questions unanswered: what 'top' is sorted by, whether it is scoped by time, and what a returned 'user' entry contains. With no output schema to compensate and no usage context, an agent lacks enough to use it confidently against its HWID 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?
Schema description coverage is 100%, with both size and start fully documented in the schema including bounds and defaults. The description says nothing about parameters, so baseline 3 applies — the schema carries the entire burden and the description contributes nothing extra.
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 is essentially the tool name restated ('Get top users by HWID devices') plus an HTTP endpoint tag, so it does convey a verb and resource but adds no clarifying detail. It gives no differentiation from near-neighbors like get_hwid_devices_stats, get_hwid_devices, or get_user_hwid_devices. What 'top' means (ranked by device count, over what window) is left undefined.
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?
There is no when-to-use guidance, no prerequisites, and no reference to the several HWID-related sibling tools. An agent has no basis to choose this over get_hwid_devices_stats or get_user_hwid_devices from the text alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_torrent_blocker_reportsBRead-only
Get Torrent Blocker Reports Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database. [READ] GET /api/node-plugins/torrent-blocker
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of results to return, no more than 1000 | |
| start | No | Start index (offset) of the results to return, default is 0 | |
| filters | No | ||
| sorting | No | ||
| filterModes | No | ||
| globalFilterMode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive profile, so the bar is lower; the description nevertheless adds genuine behavioral context by disclosing that filter operators are expensive and can degrade database performance. This is exactly the kind of non-obvious operational trait structured fields cannot convey.
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?
Front-loads the resource and the performance warning in one tight sentence, with the endpoint line as a useful trailing cue. The leading line slightly restates the tool name, a minor redundancy.
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 6-parameter tool with nested objects, no output schema, and low schema coverage, the description leaves too much unexplained — no return-shape hint, no pagination note despite size/start, and no semantics for the filter/sort structures. The performance warning helps but is not enough.
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 only 33% across 6 parameters, and the description compensates minimally: it alludes to 'filters' being expensive but never explains filters, sorting, filterModes, or globalFilterMode structure. Since schema coverage is low, the description should carry more of this burden than it does.
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+resource (get torrent blocker reports) that maps directly to the name and the GET endpoint. It does not, however, distinguish itself from the sibling get_torrent_blocker_reports_stats, which an agent must disambiguate on its own.
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 intended usage by noting the filters are 'primarily intended for use by the frontend' and warns they rely on expensive LIKE operators, which is real guidance on when filters should not be used. But it gives no explicit when-to-use-this-vs-alternatives routing, e.g. versus the *_stats sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_torrent_blocker_reports_statsBRead-only
Get Torrent Blocker Reports Stats [READ] GET /api/node-plugins/torrent-blocker/stats
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the '[READ]' tag is consistent with that. The description adds the endpoint path but says nothing about what the stats cover, refresh cadence, or aggregation scope, so it contributes only modest context beyond 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?
Two short lines, front-loaded with the verb+resource and then the read marker and path. No filler or redundancy, though the content is minimal rather than tightly crafted.
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 tool with annotations covering the safety profile, the description is minimally adequate. It lacks any statement of what the returned stats represent or how they relate to the get_torrent_blocker_reports sibling, and no output schema exists to fill that 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?
The tool takes zero parameters, so there is nothing for the description to clarify; baseline 4 applies. Schema coverage is 100% (empty schema) and no behavioral parameter caveats are 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 largely restates the tool name ('Get Torrent Blocker Reports Stats') but the added '[READ] GET /api/node-plugins/torrent-blocker/stats' line pins down the actual resource being queried. It does not distinguish this stats endpoint from the sibling get_torrent_blocker_reports, so an agent cannot tell from the text alone which of the two to call.
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?
There is no when-to-use guidance, no mention of the sibling get_torrent_blocker_reports, and no indication of what conditions make the stats variant appropriate. The only context is the HTTP path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_accessible_nodesCRead-only
Get user accessible nodes [READ] GET /api/users/:userId/accessible-nodes
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the '[READ]' tag merely repeats that. Beyond the raw HTTP route, the description discloses nothing about ordering, pagination, empty-result behavior, or what 'accessible' means operationally, which matters for a per-user listing.
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?
It is short and front-loaded, which is good, but the '[READ] GET ...' line is redundant with the annotation and consumes half the description without adding information. Terseness here reads as under-specification rather than economy.
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 no output schema, no annotation detail beyond read-only, and 0% parameter documentation, the description carries the full burden and does not meet it. It never explains the return shape, the meaning of accessibility, or error conditions for an invalid/reserved userId.
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 schema only conveys type and exclusivity for userId. The description's route template '/api/users/:userId/...' hints that userId is a user identifier used as a path segment, but adds no format, range, or resolution guidance (e.g. whether it must come from find_user).
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 gives a clear verb+resource ('get user accessible nodes'), which is enough to distinguish it loosely from get_nodes or get_internal_squad_accessible_nodes. However, it never explicitly contrasts itself with those siblings or defines what makes a node 'accessible' to a user, leaving the scope implied rather than stated.
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?
There is no when-to-use guidance, no prerequisite (e.g. that userId must resolve to an existing user), and no mention of alternatives such as get_nodes for unfiltered node lists. The agent must infer everything 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_user_by_idBRead-only
Get user by ID [READ] GET /api/users/:userId
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's '[READ] GET' tag is consistent with that. It adds the concrete endpoint mapping but says nothing about error behavior for a nonexistent ID or what the returned user object contains.
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?
Two short lines with the operation front-loaded and no filler. It is efficient, though arguably too terse for a tool whose parameter is undocumented.
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 whose safety profile is fully covered by annotations, so the description does not need to carry much. Still, with zero schema description coverage and no output schema, it leaves the agent without the ID semantics or any sense of the return payload.
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 schema documents only the numeric type and exclusiveMinimum constraint. The description adds essentially nothing beyond 'ID' — no format, no range, no indication that it must be a positive internal user ID rather than a UUID or username.
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 and resource ('Get user by ID') and the REST route (GET /api/users/:userId) pins down the exact operation. The 'by ID' qualifier implicitly separates it from siblings like get_user_by_short_uuid and get_user_by_username, though those siblings are never named.
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 on when to choose this over find_user, resolve_user, get_users, or get_user_by_username. The only hint is the identifier implied by 'by ID', leaving the agent to infer the selection criteria 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_user_by_short_uuidBRead-only
Get user by Short UUID [READ] GET /api/users/by-short-uuid/:shortUuid
| Name | Required | Description | Default |
|---|---|---|---|
| shortUuid | 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 the HTTP surface ([READ] GET /api/users/by-short-uuid/:shortUuid), which confirms the read semantics but adds nothing about not-found behavior or return payload.
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?
Two short lines with the essential information front-loaded and zero padding. The bracketed HTTP verb is slightly redundant with the annotations but costs little.
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 with annotations covering safety, the description is adequate but thin: it omits how the short UUID is obtained and what happens on a miss. No output schema exists, so return-shape explanation is not required.
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% for the single shortUuid parameter, but the description's mention of 'Short UUID' effectively labels the identifier and its format intent. That is a marginal gain over the bare string type; no format example or validation detail is given.
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+resource (get user) and the lookup key (Short UUID), which distinguishes it from get_user_by_id and get_user_by_username among the siblings. It does not explicitly name those alternatives, so it stops short of a 5.
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 when-to-use guidance, no exclusions, and no routing to sibling lookups such as find_user or resolve_user. Usage is only inferable from the tool name and the required identifier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_by_usernameCRead-only
Get user by username [READ] GET /api/users/by-username/:username
| Name | Required | Description | Default |
|---|---|---|---|
| username | 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 '[READ]' tag adds nothing new. The remaining text is a bare REST endpoint path, which conveys no behavioral traits such as error behavior for unknown usernames, auth requirements, or response shape.
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?
Two short lines with no filler, and the operation is front-loaded in the first line. The endpoint path on the second line is arguably redundant with the tool name but costs little.
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 single-parameter read tool with read-only annotations, the description is minimally adequate. It says nothing about the returned user object or 404-style behavior, and with no output schema present there is no structured fallback for return-value expectations.
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 some burden, but it only restates the parameter name ('by username'). It adds no information about username format, case sensitivity, or URL-encoding expectations that would help an agent construct a valid call.
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 and resource (get user) and the lookup key (username), which implicitly separates it from get_user_by_id, get_user_by_short_uuid, and resolve_user. However, it never names those siblings or explains why username lookup is preferable in any situation, so differentiation is inferred rather than stated.
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?
There is no when-to-use guidance, no prerequisites, and no mention of any alternative lookup tool despite several siblings (find_user, resolve_user, get_user_by_id) that an agent could confuse this with. The agent must guess which lookup key applies to its data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_hwid_devicesCRead-only
Get user HWID devices [READ] GET /api/hwid/devices/:userId
| Name | Required | Description | Default |
|---|---|---|---|
| userId | 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 "[READ]" tag adds nothing. Beyond that, the description says nothing about return shape, pagination, or any per-user scoping/authorization behavior, so it contributes almost no behavioral 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?
Two short lines, front-loaded with the action, and nothing redundant or padded. It is efficient, though the brevity reflects under-specification rather than disciplined editing.
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 no output schema, no annotation details beyond read-only, and a completely undocumented parameter, the description leaves an agent unable to know what is returned or how the userId is sourced. The minimum needed to invoke it correctly is largely absent.
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 is expected to compensate for the single userId parameter. The route fragment ":userId" merely echoes the parameter name and does not clarify whether it accepts a numeric ID, UUID, or where the caller obtains it.
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?
"Get user HWID devices" states a verb and resource, and the route confirms it is a read of HWID devices scoped to a user. However, it essentially restates the tool name and gives no basis to distinguish it from close siblings like get_hwid_devices, get_hwid_devices_stats, or get_top_users_by_hwid_devices.
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?
There is no guidance on when to call this versus the other HWID tools (global device list, HWID stats, top-users-by-HWID). The only context is the raw endpoint, which an agent must interpret on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_metadataCRead-only
Get user metadata [READ] GET /api/metadata/user/:userId
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | Path parameter userId |
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 fully covered by structured data. The description adds only the REST route and '[READ]' tag, which restates the annotation rather than contributing new behavioral context like auth requirements or response shape.
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?
Two short lines with no padding; the resource name leads. It is tight, though the second line is essentially a restatement of the annotation.
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?
There is no output schema, so the description carries the burden of indicating what 'metadata' contains, and it says nothing. For a tool whose entire value is the payload it returns, this leaves the agent unable to judge relevance.
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 100% for the single userId parameter, so the baseline is 3. The description's ':userId' path notation adds no meaning about whether the value is a numeric id, short UUID, or username, which matters given the sibling resolve_user/get_user_by_short_uuid tools.
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 verb+resource pair 'Get user metadata' is stated plainly, but 'metadata' is never defined, so an agent cannot tell what is actually returned. It also fails to distinguish itself from close siblings such as get_user_by_id, get_metadata, or get_node_metadata.
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 when-to-use context and names no alternative, despite a very crowded sibling set containing multiple user- and metadata-oriented getters. An agent must guess between this and get_user_by_id or get_metadata.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usersBRead-only
Get all users using offset-based pagination Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database. [READ] GET /api/users/
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of results to return, no more than 1000 | |
| start | No | Start index (offset) of the results to return, default is 0 | |
| filters | No | ||
| sorting | No | ||
| filterModes | No | ||
| globalFilterMode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/non-destructive profile, and the description adds real behavioral context beyond them: the filters use expensive LIKE operators and can degrade database performance. That is exactly the kind of warning an agent needs before invoking. It still omits result size/return shape, so not a 5.
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?
Front-loaded with the core purpose, then the caveat, then the route. Three sentences with little waste; the performance warning is long but 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?
No output schema exists, yet the description says nothing about the returned user shape or total-count/pagination metadata. Combined with four undocumented parameters and no alternative-tool routing, it is only partially complete for a 6-parameter list endpoint.
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 only 33% (size and start documented), leaving filters, sorting, filterModes, and globalFilterMode unexplained. The description gestures at 'filters' but gives no structure, accepted keys, or sort semantics, so it does not compensate for the coverage gap.
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 and resource ('Get all users') plus the pagination model (offset-based), which is clear. It does not differentiate itself from close siblings such as find_user, get_user_by_id, or get_users_stream, so it stops short of a 5.
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?
It gives a genuine usage warning (filters are frontend-oriented and expensive), which is useful, but never says when to pick this tool over find_user, resolve_user, or get_users_stream. Usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_users_streamARead-only
Get all users using cursor-based (keyset) pagination with filtering options [READ] GET /api/users/stream
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag to filter users by | |
| size | No | Number of results to return, no more than 1000 | |
| No | Email to filter users by | ||
| cursor | No | Cursor for pagination — pass the nextCursor from the previous response. Omit on the first request. | |
| status | No | Status to filter users by | |
| telegramId | No | Telegram ID to filter users by | |
| externalSquadUuid | No | External squad UUID to filter users by | |
| trafficLimitStrategy | No | Traffic limit strategy to filter users by |
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 the keyset-pagination behavior and the read endpoint, but says nothing about ordering stability, rate limits, or how the stream terminates.
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?
One front-loaded sentence with the key method and scope, plus a compact endpoint marker; there is no filler. Every element (verb, resource, pagination model, filters, HTTP note) carries meaning.
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?
There is no output schema, so the description could reasonably say what the response looks like or how to continue pagination, but it only mentions cursor-based pagination and relies on the cursor parameter's schema text. For a list/stream tool with 8 optional filters, that leaves return shape and pagination termination implicit.
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 100%, so all 8 parameters are already documented, including the cursor semantics ('pass the nextCursor from the previous response'). The description only adds a generic 'filtering options' phrase and no parameter-level meaning beyond the schema, which is the expected baseline.
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 ('Get') and resource ('all users') plus the distinguishing mechanism ('cursor-based (keyset) pagination with filtering options'). An agent can infer this is the paginated/streaming variant, but the description never names or contrasts with the sibling get_users, leaving that differentiation implicit.
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 'cursor-based (keyset) pagination' implies this is for large or streaming result sets, but there is no explicit when-to-use, when-not-to-use, or alternative (e.g., get_users) guidance. Usage is only indirectly signaled by the pagination style.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_users_tagsCRead-only
Get users tags [READ] GET /api/users/tags
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description only repeats this with "[READ]", adding no new behavioral context. It says nothing about whether tags are global or per-user, whether the list is paginated, or what shape the result takes.
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?
Two short fragments with zero filler and the core intent front-loaded. It is efficient, though the brevity reflects under-specification rather than disciplined editing.
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 parameterless read endpoint with no output schema, the definition is minimally sufficient — an agent can call it — but it never states what is returned (tag identifiers, tag objects, or aggregates), which is the main ambiguity left open.
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 tool takes zero parameters, so there is nothing for the description to disambiguate and the schema is fully covered. Baseline 4 applies.
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?
"Get users tags" is essentially the tool name de-slugified with no additional specificity, so it reads as a near-tautology. The bracketed "[READ] GET /api/users/tags" is the only added information, and it does not clarify whether the tool returns tag definitions, tags applied to users, or counts, nor does it distinguish it from get_hosts_tags or get_nodes_tags.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as get_hosts_tags, get_nodes_tags, or the tag-related behavior of get_users. The agent must infer the tool's role entirely from its name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_subscription_request_historyBRead-only
Get user subscription request history, recent 24 records [READ] GET /api/users/:userId/subscription-request-history
| Name | Required | Description | Default |
|---|---|---|---|
| userId | 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 the useful behavioral constraint that only the most recent 24 records are returned, which the annotations do not convey. It stops short of explaining auth requirements, pagination, or whether truncation to 24 is fixed.
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?
Front-loaded with the payload ('recent 24 records') and kept to a single compact line. The '[READ] GET /api/...' suffix is mildly redundant with annotations but confirms the HTTP verb, so it earns its place as a low-cost addition.
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-param read tool with annotations covering safety, this is nearly adequate. However there is no output schema, so the description could reasonably say more about the returned record shape or the fixed 24-record cap's implications; the endpoint-only description leaves the consumer inferring that.
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 there is only one parameter and its meaning (a user id) is evident from the URL template and property name. The description adds the :userId path binding but no format or range detail beyond the schema's number/exclusiveMinimum constraint. Baseline 3 given the single obvious 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?
States a specific verb ('Get') plus resource ('user subscription request history') and even the result limit ('recent 24 records'). This distinguishes it from the sibling get_subscription_request_history (global) and get_subscription_request_history_stats, though it never explicitly names those 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?
No when-to-use guidance, prerequisites, or alternative routing. The reader must infer from the name that this is the per-user variant of the request-history tools. The sibling namespace is large enough that explicit routing would have helped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_connectionsARead-only
Get users currently connected to a node with their IPs and last-seen time (starts a job and waits).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeUuid | Yes | Node UUID | |
| timeoutSec | No | Max seconds to wait for the node to answer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint=true, and the description adds a genuinely non-obvious operational trait: this starts a job and blocks waiting for the node to answer, which matters given the 5-120s timeout. It still omits what happens on node timeout/failure, so it falls short of a 5.
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?
One sentence, front-loaded with the resource and payload, with the blocking-job caveat compactly bracketed at the end. Nothing is wasted or buried.
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 no output schema the description usefully names the return fields, and it discloses the job/wait behavior and latency implication. It is nearly complete for a simple read tool, lacking only failure/timeout outcome behavior.
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 100% with two fully documented parameters (nodeUuid, timeoutSec). The description adds no format, constraint, or interpretation detail beyond the schema, so the baseline 3 applies.
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 and resource — retrieving users connected to a node — plus the returned fields (IPs, last-seen time). It is clearly distinct from the sibling user_connections (which goes the other direction), though it never names that sibling to make the contrast explicit.
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?
There is no when-to-use guidance, no prerequisites, and no mention of the obvious alternative user_connections. The agent must infer usage purely from the tool name and the 'starts a job and waits' parenthetical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
panel_overviewARead-only
One-call panel summary: users by status and online, node list with online/offline state, users online and traffic per node, bandwidth (2 days / 7 days / month) and subscriptions expiring soon. Start here for "how is the panel doing" questions.
| Name | Required | Description | Default |
|---|---|---|---|
| expiringDays | No | Look-ahead for expiring subscriptions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description goes beyond that by disclosing the aggregation scope (whole-panel, one call), the bandwidth look-back windows (2 days / 7 days / month), and the expiring-subscriptions section, which helps the agent predict the payload. It doesn't discuss cost, caching, or freshness limits.
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?
Two sentences, front-loaded with the summary content and ending with the routing cue. The content list is dense but each item is a distinct section of the return, so little is wasted.
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 no output schema, the description carries the burden of telling the agent what comes back, and it enumerates every major section. No required parameters exist, and annotations cover the read-only nature, so nothing essential is missing for correct 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?
Schema description coverage is 100% and the single expiringDays parameter is documented with a default and range in the schema. The description only alludes to it via 'subscriptions expiring soon' and adds no syntax or behavioral detail beyond the schema, so baseline 3 applies.
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 concrete verb+resource ('One-call panel summary') and enumerates the exact aggregates returned: users by status/online, node list with online/offline state, per-node traffic, bandwidth over 2d/7d/month, and expiring subscriptions. This is specific enough to distinguish it from siblings like get_stats, get_recap, or get_stats_digest.
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?
It explicitly positions itself as the entry point with 'Start here for "how is the panel doing" questions,' which gives a clear usage context. It does not name a specific alternative or exclusion, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_userBRead-only
Resolve a user Resolve a user by ID, Short UUID or username. Exactly one of the fields must be provided. [READ] POST /api/users/resolve
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | JSON request body |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the "[READ] POST /api/users/resolve" line simply restates that a POST here is non-mutating. That restatement is mildly useful given POST normally implies a write, but the description says nothing about permissions, error behavior, or what is returned. Against annotation coverage, 3 is the right level.
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?
Short and front-loaded, with the identifier constraint before the endpoint marker. The opening fragment "Resolve a user" is immediately repeated by the fuller sentence, a minor redundancy that costs it a point.
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 single nested body parameter with no output schema, the description covers the essential one-of constraint but omits what resolution returns, whether the identifier types have different behavior, and how it relates to the many similarly named lookup siblings. Adequate but with clear gaps.
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 100%, so the individual fields are documented, but the schema imposes no cardinality constraint while the description supplies the critical "exactly one of" rule across id/username/shortUuid. That is genuine added meaning beyond the structured fields.
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 ("Resolve") and resource ("a user") plus the three accepted identifier forms, which is concrete. However, it does not distinguish itself from the very similar siblings find_user, get_user_by_id, get_user_by_short_uuid, and get_user_by_username, so an agent cannot tell from the description alone why it would pick this tool over those.
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 only guidance is an input constraint ("Exactly one of the fields must be provided"), not a usage rule. There is no statement of when to prefer resolve_user over find_user or the three get_user_by_* siblings, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sharing_suspectsARead-only
Find clients who probably share their subscription: many different IPs / apps in recent subscription requests, and top users by number of HWID devices. Only counts and pseudonyms are returned. Cheap: reads panel history, does not touch the nodes.
| Name | Required | Description | Default |
|---|---|---|---|
| minIps | No | Flag users with at least this many distinct IPs | |
| records | No | How many latest subscription requests to analyse |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description adds real value beyond them: 'Only counts and pseudonyms are returned' discloses the privacy-limited return shape, and 'Cheap: reads panel history, does not touch the nodes' discloses the cost/performance profile. It does not cover auth requirements or pagination, but the added behavioral context is substantive.
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?
Three tight clauses, front-loaded with the outcome and free of filler. Every sentence carries information: the detection heuristic, the return privacy, and the cost profile.
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 no output schema, the description responsibly states what is returned (counts and pseudonyms), and the two parameters are fully covered by the schema. It is complete enough to call correctly, missing only explicit alternative-tool guidance, which is a minor gap for a self-contained analytics 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?
Schema description coverage is 100%, so minIps and records are already fully documented in the schema. The description only alludes to the concept of 'many different IPs' without adding format, bounds, or interaction detail beyond what the schema provides, so the baseline 3 applies.
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 (find) and resource (clients who probably share their subscription), then spells out the two detection signals (IP/app diversity in recent requests and HWID device counts). An agent can distinguish this heuristic detector from the raw sibling getters like get_subscription_request_history or get_top_users_by_hwid_devices without opening a schema.
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 'clients who probably share their subscription' implies the use case (account-sharing detection), but no explicit when-to-use or when-not guidance is given, and no alternative sibling is named even though get_top_users_by_hwid_devices and get_subscription_request_history cover overlapping ground. Usage is inferable but not directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_srr_matcherCRead-only
Test SRR Matcher [READ] POST /api/system/testers/srr-matcher
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | JSON request body |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description's '[READ] POST' tag is a genuine addition because it resolves the POST-vs-read tension an agent would otherwise puzzle over. However, it says nothing about what the test returns, whether it only validates or also simulates matching, or any side effects.
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?
Two short lines with no filler, and the endpoint is front-loaded. But the brevity here reflects under-specification of a very complex tool rather than disciplined conciseness, so it does not merit a 4-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?
The tool wraps a large nested rule schema and has no output schema, so the description should at minimum explain what a 'test' returns (matched rule? validation result?). Given the complexity, the two-line description leaves the agent unable to predict the outcome of 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?
Schema description coverage is 100% and the deeply nested body (responseRules, rules, conditions, responseType, responseModifications) is exhaustively documented with markdownDescriptions and examples. The description adds nothing beyond the schema, so the baseline 3 applies.
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 is essentially a restatement of the tool name ('Test SRR Matcher') plus a raw HTTP route. It never says what 'SRR' stands for or what testing a matcher actually does (evaluate response rules against request headers and report the outcome). An agent cannot distinguish this from any other tester endpoint without reading the schema.
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?
There is no guidance on when to use this tool, when not to, or which sibling (e.g. get_subscription_settings, get_subscription_template) covers related territory. No preconditions, no context for the testing workflow are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_connectionsARead-only
Get a user's current connections (IPs per node) — starts a job and waits for the result.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User numeric ID | |
| timeoutSec | No | Max seconds to wait for the node to answer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover the safety profile (readOnlyHint=true), but the description adds a genuinely important behavioral trait: this read actually starts a job and blocks waiting for it, so latency and partial-failure behavior matter. It stops short of saying what happens if the wait exceeds timeoutSec (error vs. partial data) or whether concurrent calls are allowed.
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?
One sentence, front-loaded with the resource and return shape, with the job/wait caveat appended where it is most useful. 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 two-parameter async read with no output schema, the description covers what is returned (IPs per node) and the job/blocking behavior. The main residual gap is timeout semantics — whether a timeout yields an error or partial results.
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 100%, including a documented default/range for timeoutSec, so the schema carries parameter meaning on its own. The description adds nothing about userId format or the blocking role of timeoutSec beyond 'waits for the result'. Baseline 3 applies.
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?
Starts with a specific verb+resource ('Get a user's current connections') and even names the returned shape (IPs per node), which is more than the name conveys. It is implicitly distinct from node_connections (user-scoped vs node-scoped) and from get_user_by_id, but it never names those siblings explicitly.
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 statement of when this is preferable to node_connections, get_user_by_id, or get_user_hwid_devices, and no prerequisites. Usage is only inferable from the phrase 'a user's current connections'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_reportARead-only
Everything about one client in one call: subscription and status, devices (HWID), traffic per day and per node for the last N days, recent subscription requests (apps, IP pseudonyms). Identify the user by id, username, telegramId, email, shortUuid or a pseudonym.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Panel user ID | |
| tag | No | ||
| days | No | ||
| No | E-mail or its pseudonym (email~…) | ||
| username | No | Username or its pseudonym (user~…) | |
| shortUuid | No | ||
| telegramId | No | Telegram numeric ID or its pseudonym (tg~…) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so safety is covered; the description then adds real behavioral detail about what is aggregated and over what window ('traffic per day and per node for the last N days', 'recent subscription requests with apps, IP pseudonyms'). It stops short of noting the default/limit on N or any payload-size or performance implications of a multi-facet aggregation.
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 dense sentence with the headline value proposition front-loaded and the returned facets enumerated after it. No filler, no restatement of the tool name.
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 multi-facet aggregator with no output schema, the enumeration of returned sections is the right substitute for documenting returns, and identifier selection is covered. It could be complete with one clause on the days window default/maximum or on the fact that no parameter is required.
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 57%, but the description compensates by naming six of the seven identifiers (id, username, telegramId, email, shortUuid, pseudonym) and making explicit that any one of them may be used to identify the user, which the schema only implies. It omits the `tag` parameter entirely, leaving one identifier undocumented in the prose.
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+resource ('Everything about one client in one call') and then enumerates exactly which aggregates it returns: subscription/status, HWID devices, per-day and per-node traffic, and recent subscription requests. This clearly distinguishes it from narrow siblings such as get_user_by_id, get_user_hwid_devices, and get_user_subscription_request_history.
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 'in one call' framing implies this is the comprehensive-report choice rather than a targeted lookup, and the identifier list suggests how to address the user. However, it never explicitly says when to prefer this over the many narrower per-aspect siblings or whether there are prerequisites/cost tradeoffs for the heavier aggregate.
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.
7 tool updates
v1.3.0- Changed
find_user4 fields changed- added
Input schema / properties / email / descriptionAdded value: +"E-mail or its pseudonym (email~…)" - added
Input schema / properties / id / descriptionAdded value: +"Panel user ID" - changed
Input schema / properties / telegramId / descriptionPrevious value: -"Telegram numeric ID"New value: +"Telegram numeric ID or its pseudonym (tg~…)" - added
Input schema / properties / username / descriptionAdded value: +"Username or its pseudonym (user~…)"
- Changed
geocheck_node1 field changed- changed
Input schema / properties / nodeUuid / descriptionPrevious value: -"Node UUID (see get_nodes)"New value: +"Node UUID (see get_nodes / panel_overview)"
- Changed
get_node1 field changed- added
Input schema / properties / fullAdded value: +{ + "default": false, + "description": "Return the raw panel response (large)", + "type": "boolean" +}
- Changed
get_nodes1 field changed- added
Input schema / properties / fullAdded value: +{ + "default": false, + "description": "Return the raw panel response (large)", + "type": "boolean" +}
- Added
panel_overview - Added
sharing_suspects - Added
user_report
83 tool updates
v1.1.1- First observed
find_user - First observed
generate_x25519 - First observed
geocheck_node - First observed
get_all_inbounds - First observed
get_api_token_scopes - First observed
get_bandwidth_stats - First observed
get_computed_config_profile_by_uuid - First observed
get_config_profile_by_uuid - First observed
get_config_profiles - First observed
get_configuration - First observed
get_external_squad_by_uuid - First observed
get_external_squads - First observed
get_host - First observed
get_hosts - First observed
get_hosts_tags - First observed
get_http_stats - First observed
get_hwid_devices - First observed
get_hwid_devices_stats - First observed
get_inbounds_by_profile_uuid - First observed
get_infra_billing_nodes - First observed
get_infra_billing_records - First observed
get_infra_provider - First observed
get_infra_providers - First observed
get_internal_squad - First observed
get_internal_squad_accessible_nodes - First observed
get_internal_squad_usage - First observed
get_internal_squad_user_usage - First observed
get_internal_squads - First observed
get_metadata - First observed
get_node - First observed
get_node_integration - First observed
get_node_integrations - First observed
get_node_metadata - First observed
get_node_plugin - First observed
get_node_plugins - First observed
get_node_usage - First observed
get_nodes - First observed
get_nodes_metrics - First observed
get_nodes_statistics - First observed
get_nodes_tags - First observed
get_recap - First observed
get_remnawave_health - First observed
get_remnawave_settings - First observed
get_shared_list - First observed
get_shared_lists - First observed
get_snippets - First observed
get_stats - First observed
get_stats_digest - First observed
get_stats_node_users_usage - First observed
get_stats_nodes_usage - First observed
get_stats_nodes_users_usage - First observed
get_stats_user_usage - First observed
get_status - First observed
get_subpage_config - First observed
get_subpage_config_by_short_uuid - First observed
get_subpage_configs - First observed
get_subscription_by_id - First observed
get_subscription_by_short_uuid_protected - First observed
get_subscription_by_username - First observed
get_subscription_info_by_short_uuid - First observed
get_subscription_request_history - First observed
get_subscription_request_history_stats - First observed
get_subscription_settings - First observed
get_subscription_template - First observed
get_subscription_templates - First observed
get_subscriptions - First observed
get_top_users_by_hwid_devices - First observed
get_torrent_blocker_reports - First observed
get_torrent_blocker_reports_stats - First observed
get_user_accessible_nodes - First observed
get_user_by_id - First observed
get_user_by_short_uuid - First observed
get_user_by_username - First observed
get_user_hwid_devices - First observed
get_user_metadata - First observed
get_user_subscription_request_history - First observed
get_users - First observed
get_users_stream - First observed
get_users_tags - First observed
node_connections - First observed
resolve_user - First observed
test_srr_matcher - First observed
user_connections
TDQS
Scored across 86 tools
The tool set contains many closely related read endpoints, such as multiple subscription lookups by different identifiers and numerous stats/usage tools (e.g., get_stats, get_bandwidth_stats, get_stats_digest, get_node_usage). Descriptions are detailed and help distinguish some tools, but an agent still faces ambiguity in selecting the right one for a given query.
Most tools follow a consistent snake_case pattern with a get_ prefix for read operations. A few custom tools (user_report, panel_overview, find_user, geocheck_node) deviate slightly, but the overall naming is predictable and readable.
With 86 tools, the server is far beyond a well-scoped size (typically 3–15). Many are thin wrappers around individual API endpoints, which creates an overwhelming and hard-to-navigate surface.
The tool set is almost entirely read-only (GET endpoints), with no create, update, or delete operations for users, nodes, subscriptions, or other core resources. For a panel management server, this is a significant gap that will prevent agents from performing lifecycle tasks.
Maintenance
Related MCP Connectors
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
- sentinelOAuthio.rootstuff
Uptime, SSL, DNS and domain monitoring you can talk to from Claude or any MCP client.
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Related MCP Servers
AlicenseAqualityAmaintenanceLets you use Claude Desktop, or any MCP Client, to use natural language to accomplish things on your Cloudflare account.22,120 npm4,343Apache 2.0
IcePanel MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceEnables interaction with IcePanel for architectural diagram management via MCP clients, such as Claude Desktop, Cursor, and Windsurf. Deprecated in favor of a remote MCP server.59 npm15MIT- AlicenseAqualityBmaintenanceMCP server for Remnawave panel API. Manage VPN users, nodes, hosts, and system stats from Claude Code or any MCP-compatible client.34MIT
- AlicenseAqualityBmaintenanceInvestigate fraud directly from Claude, Cursor, or any MCP-compatible client. Analyze suspicious activity with clear, evidence-backed verdicts. Pivot from a single signup to every account sharing the same device, IP address, or email inbox. Check entities against a cross-operator abuse network, review linked accounts, and efficiently process your fraud review queue. Read-only by default, with no r1099 npmMIT