mcpBPMSoft
The mcpBPMSoft server acts as a bridge between LLM agents and BPMSoft CRM, abstracting away OData complexities, authentication, and business logic to enable natural language interaction.
Reading & Searching Data
List, filter, sort, and paginate records from any collection (
bpm_get_records)Get a single record by UUID or count records matching a filter
Search with human-readable criteria (e.g., "contacts from Moscow") — automatically compiled into OData
$filter(bpm_search_records)Cross-entity search across Contact, Account, Lead, and Opportunity by name substring (
bpm_search_unified)
Creating & Modifying Data
Create, update (PATCH), and delete records with automatic lookup UUID resolution from human-readable text
Bulk update or delete by OData filter with a required
expected_countsafety guard to prevent accidental mass changes
Batch Operations (OData v4)
Perform bulk creates, updates, or deletes in a single
$batchrequest, with an option to continue on error
Schema & Lookup Discovery
List all available collections (EntitySets) with optional filtering
Get collection schema including field types, nullability, lookup relations, and captions
Resolve lookup UUIDs from human-readable values (with fuzzy search support)
Get all values for an enumeration/lookup field
Find fields by name fragment across loaded schemas
Get an instance overview (entity counts, custom
Usr*collections/fields)Access a workflow/scenario catalog with typical use cases and BPMSoft limitations
High-Level Workflow Tools
Register a contact — finds or creates an Account, creates a Contact, and links them in one call
Log an activity (call, meeting, task) with automatic type/owner resolution and record linking
Set a record's status by human-readable name — server resolves the correct field and UUID
Business Processes
Run BPMSoft business processes via
ProcessEngineService.svcwith parameters and optional output retrievalResume a suspended process element by its UID
File Operations
Upload/download files to/from
SysImageor any binary entity fieldClear binary fields
Social Feed
Post messages to a record's activity feed (
SocialMessage), with optional reply threading
Connection & Authentication
Initialize connection with username/password (when environment credentials are permitted)
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., "@mcpBPMSoftShow me contacts from Moscow last month."
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.
MCP-сервер для BPMSoft
Подключение BPMSoft 1.8 к LLM-агенту (Claude Desktop, Cursor, любой клиент Model Context Protocol) — чтобы спросить «найди контакты из Москвы за последний месяц» или «зарегистрируй Иванова из Ромашки», а не вручную набирать OData-фильтры.
Сервер берёт на себя всё, что обычно мешает:
авторизацию, CSRF-токены и сессии BPMSoft;
разницу между OData v3 и v4 (форматы ID, имена полей, $batch);
перевод «Город = Москва» в
CityId = <UUID>через справочники;защиту от случайного массового удаления, переполнения контекста модели и SSRF;
запуск бизнес-процессов через
ProcessEngineService.
В коробке 32 инструмента, 6 prompts, 4 ресурса — от низкоуровневого CRUD до готовых сценариев «зарегистрировать контакт + контрагента» и «найти всё про Иванова».
Содержание
Related MCP server: SAP OData to MCP Server
Что это решает
BPMSoft (форк Creatio) предоставляет OData-API, который мощный, но очень многословный. Запрос «контакты из Москвы, созданные на этой неделе» на чистом OData выглядит так:
GET /0/odata/Contact?$filter=City/Name eq 'Москва' and CreatedOn ge 2026-04-26T00:00:00Z&$select=Id,Name,Email
Cookie: BPMSESSIONID=...; BPMCSRF=...
BPMCSRF: <csrf>
ForceUseSession: trueLLM-агенту, который пытается его собрать, нужно знать:
где живёт OData (для .NET 8 —
/odata, для .NET Framework —/0/odata, для v3 — отдельный путь);что строки в одинарных кавычках, GUID-ы у v3 в
guid'…', у v4 без обёртки;что лимит ответа 20 000 строк, $batch только в v4 и не больше 100 подзапросов;
что lookup-поля у v4 заканчиваются на
Id, а у v3 — нет;что русские названия полей доступны только через системную таблицу
SysEntitySchemaColumn;и десяток других мелочей.
Этот сервер прячет всё это за человеческим интерфейсом:
Пользователь: Найди контакты из Москвы за последние 30 дней
Агент → tool: bpm_search_records
collection: "Contact"
criteria: [
{ field: "Город", op: "равно", value: "Москва" },
{ field: "Дата создания", op: "за последние N дней", value: 30 }
]
Сервер → Скомпилирует $filter, разрешит «Москва» в UUID города,
применит лимит max_records (от переполнения контекста),
вернёт сводку + первые 5 записей + cursor для следующих.Быстрый старт за 5 минут
Требуется: Node.js 18+, инстанс BPMSoft 1.8 с включённым OData (по умолчанию — да).
# 1. Склонировать репозиторий
git clone https://github.com/Catter58/mcpBPMSoft.git
cd mcpBPMSoft
# 2. Установить зависимости
npm install
# 3. Собрать
npm run build
# 4. Прописать подключение в .env (или передать переменные среды)
cp .env.example .env
# открыть .env, заполнить BPMSOFT_URL / USERNAME / PASSWORD
# 5. Запустить (с переменными среды)
npm startСервер общается через stdio — это стандартный транспорт MCP. Самостоятельный запуск нужен только для отладки; в реальной жизни сервер запускает MCP-клиент (Claude Desktop, Cursor и т.п.) — см. ниже.
Альтернатива: интерактивная инициализация
Если не хочешь хранить пароль в .env, запусти сервер без переменных и попроси LLM вызвать инструмент bpm_init:
Агент: bpm_init
url: https://mycompany.bpmsoft.com
username: Supervisor
password: ***Сервер сразу проверит подключение, и все остальные инструменты станут доступны.
Подключение к Claude Desktop
В файле ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) или %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"bpmsoft": {
"command": "node",
"args": ["/абсолютный/путь/к/mcpBPMSoft/build/index.js"],
"env": {
"BPMSOFT_URL": "https://mycompany.bpmsoft.com",
"BPMSOFT_USERNAME": "Supervisor",
"BPMSOFT_PASSWORD": "пароль",
"BPMSOFT_ODATA_VERSION": "4",
"BPMSOFT_PLATFORM": "net8"
}
}
}
}Перезапустить Claude Desktop. В чате появится бейдж bpmsoft, и список из 32 инструментов будет доступен модели.
Если предпочитаешь интерактивный логин — оставь блок env пустым и попроси Claude вызвать bpm_init в начале диалога.
Полный пример — в examples/claude_desktop_config.json.
Примеры диалогов
Пример 1 — поиск с человеческим языком
Пользователь: покажи активные сделки на сумму больше 500 тысяч,
где менеджер — Иванова
Claude → bpm_search_records
collection: "Opportunity"
criteria: [
{ field: "Сумма", op: "больше", value: 500000 },
{ field: "Owner", op: "равно", value: "Иванова" },
{ field: "Stage", op: "не равно", value: "Закрыта (выиграна)" }
]
format: "markdown"
Сервер вернёт:
Скомпилированный $filter:
Amount gt 500000 and OwnerId eq <UUID Ивановой>
and StageId ne <UUID этапа закрыта>
Получено записей: 7
| Id | Title | Amount | Stage | Owner |
|-----|--------------------|---------|------------|----------|
| ... | Поставка софта | 1200000 | В работе | Иванова |
...Пример 2 — регистрация нового контакта
Пользователь: создай контакт Петров Пётр, телефон +7-999-1234567,
работает в ООО Орбита
Claude → bpm_register_contact
name: "Петров Пётр"
phone: "+7-999-1234567"
account_name: "ООО Орбита"
Сервер:
1. Ищет Account по Name='ООО Орбита' → не нашёл → создаёт.
2. Получает accountId.
3. Создаёт Contact с подставленным AccountId.
4. Возвращает оба UUID.Пример 3 — массовое обновление со страховкой
Пользователь: закрой все мои задачи старше года
Claude → bpm_search_records (узнать сколько таких)
collection: "Activity"
criteria: [
{ field: "Owner", op: "равно", value: "<текущий пользователь>" },
{ field: "CreatedOn", op: "меньше", value: "2025-05-02T00:00:00Z" },
{ field: "Status", op: "не равно", value: "Завершено" }
]
[ответ: 12 записей]
Пользователь: ага, закрывай
Claude → bpm_update_by_filter
collection: "Activity"
filter: "OwnerId eq <UUID> and CreatedOn lt 2025-05-02T00:00:00Z and StatusId ne <UUID Завершено>"
data: { Status: "Завершено" }
expected_count: 12 # страховка: если найдено иное число — операция отменитсяПример 4 — запуск бизнес-процесса
Пользователь: запусти процесс «UsrCalculatePipeline» и покажи результат
Claude → bpm_run_process
process_name: "UsrCalculatePipeline"
parameters: { period_days: "30" }
result_parameter_name: "UsrPipelineSummary"
Сервер:
GET /ServiceModel/ProcessEngineService.svc/UsrCalculatePipeline/Execute
?period_days=30&ResultParameterName=UsrPipelineSummary
Парсит XML-обёртку <string>...</string>, JSON.parse содержимого.
Возвращает структуру в structuredContent.Пример 5 — комментарий в ленте записи
Пользователь: оставь в ленте этой сделки заметку «звонил, обещали вернуться в среду»
Claude → bpm_post_feed
collection: "Opportunity"
id: "<UUID сделки>"
message: "звонил, обещали вернуться в среду"
Сервер:
POST /odata/SocialMessage
body: { Message: "...", EntitySchemaName: "Opportunity", EntityId: "..." }Все 32 инструмента — кратко
Подключение
Инструмент | Зачем |
| Подключиться к BPMSoft (URL, логин/пароль, OData v3/v4, платформа) |
Чтение
Инструмент | Зачем |
| Получить записи коллекции с фильтром/select/expand/order/top/skip; safe-pagination + token-aware форматы (compact/full/markdown); поддерживает opaque cursor |
| Одна запись по UUID |
| Количество записей по фильтру |
| Поиск с критериями на русском — массив |
Запись
Инструмент | Зачем |
| Создать запись; lookup-поля резолвятся по тексту, ключи можно на русском |
| Обновить по UUID |
| Удалить по UUID |
| Массовое обновление с обязательным |
| Массовое удаление с обязательным |
Схема и справочники
Инструмент | Зачем |
| Список доступных EntitySet |
| Поля коллекции с русскими подписями, типами, lookup-связями |
| Найти UUID справочного значения; |
| Все значения справочника, к которому привязано lookup-поле (например, все ActivityCategory) |
| Карта типичных сценариев + связи между сущностями + ограничения BPMSoft 1.8. Хорошо вызывать в начале сессии. |
| Найти поле по фрагменту русского/английского названия в уже загруженных схемах |
| Сводка по инстансу за один вызов: главные сущности, их счётчики, кастомные коллекции/поля ( |
Пакетные операции (только OData v4)
Инструмент | Зачем |
| Создать N записей одним $batch |
| Обновить N записей одним $batch |
| Удалить N записей одним $batch |
Все три поддерживают continue_on_error.
Файлы
Инструмент | Зачем |
| Загрузить локальный файл в |
| Скачать файл из |
| PUT бинарных данных в произвольное поле сущности ( |
| GET бинарных данных из поля сущности |
| Очистить бинарное поле |
Готовые workflow-инструменты
Инструмент | Зачем |
| Создать Account (или найти) + создать Contact + привязать |
| Создать Activity с резолвом типа/владельца по тексту, опц. привязка к Contact/Account/Opportunity |
| Сменить статус по человеческому имени; сервер сам найдёт правильное status-поле и его справочник |
| Сквозной поиск по подстроке в Contact/Account/Lead/Opportunity (плоский список) |
Бизнес-процессы и лента
Инструмент | Зачем |
| Запустить БП через |
| Возобновить элемент уже выполняющегося процесса по UID |
| Опубликовать сообщение в ленту записи (через коллекцию |
Готовые сценарии (MCP prompts)
LLM-клиенты с поддержкой prompts (Claude Desktop, Cursor) могут вызвать готовый сценарий за одну команду — модель получит сразу шаблон с инструкциями и нужными tool-ами:
Prompt | Аргументы | Что делает |
| — | Обзор сервера, главные сущности, типичные сценарии |
|
| Сквозной поиск + детали при необходимости |
|
| Регистрация контакта в один заход |
|
| Отчёт: новые контакты, активные сделки, завершённые задачи |
|
| Поиск потенциальных дубликатов (без удаления) |
|
| Анализ воронки Opportunity: распределение по стадиям, средняя сумма |
Ресурсы (MCP resources)
Браузабельные URI, которые модель может «прочитать» вместо tool-вызова — дешевле по токенам, удобно для карточек:
bpmsoft://collections — список всех EntitySet
bpmsoft://collection/{name} — карточка коллекции (поля + record_count)
bpmsoft://entity/{collection}/{id} — карточка одной записи
bpmsoft://schema/{name} — только схема коллекции (быстрее, без count)Конфигурация
Все параметры — через переменные окружения. Минимально необходимы первые три, остальные имеют разумные defaults:
Переменная | По умолчанию | Описание |
| — (обязательно) | URL приложения, например |
| — (обязательно) | Логин |
| — (обязательно) | Пароль |
|
|
|
|
|
|
|
| Размер страницы при автопагинации |
|
| Лимит подзапросов в |
|
| TTL кеша lookup в секундах |
|
| Таймаут одного HTTP-запроса (мс) |
|
| Лимит размера файла (10 МБ) |
|
|
|
Без переменных среды сервер всё равно стартует, но любой инструмент кроме bpm_init ответит «сервер не инициализирован».
Скрипты
npm run build # компиляция TS -> JS в build/
npm start # запустить собранный сервер
npm run dev # tsc --watch на время разработки
npm test # vitest run (95 тестов: unit + интеграция через MSW)
npm run test:watch # тесты в watch-режиме
npm run lint # eslint (typescript-eslint, рекомендованный preset)
npm run lint:fix # автоисправление
npm run format # prettier --write
npm run format:check # prettier --check (для CI)Отладка
Самый быстрый способ увидеть, что именно уходит в BPMSoft — включить BPMSOFT_DEBUG:
BPMSOFT_DEBUG=1 npm start
# -> [HttpClient][req] GET https://.../odata/Contact?$top=10
# -> [HttpClient][res] GET .../odata/Contact -> 200 (143ms)
BPMSOFT_DEBUG=trace npm start
# -> также выводит headers и тела запросов/ответов;
# BPMCSRF/Cookie/UserPassword автоматически маскируются.Для проверки подключения без MCP-клиента можно запустить сервер напрямую — он выводит в stderr:
[Server] Configuration loaded from environment variables
Target: https://mycompany.bpmsoft.com
OData: v4, Platform: net8
MCP BPMSoft OData Server running on stdio
Registered 32 tools (bpm_init + 31 operational)
Registered 6 prompts, 4 resource templatesОграничения BPMSoft 1.8
Ограничение | Значение |
Максимум строк в OData-ответе | 20 000 |
Максимум подзапросов в | 100 |
Максимальный размер файла | 10 МБ (настраивается) |
Длина query string в OData v3 | 4 000 символов |
| не поддерживается (используйте v4) |
Создание системных пользователей | не поддерживается |
Прямой HTTP-API для EntitySchemaQuery | не предусмотрен — используйте обёртку через бизнес-процесс (см. сценарий |
Часто задаваемые вопросы
LLM путается в OData-синтаксисе. Что делать?
Используйте bpm_search_records с criteria-массивом. Он принимает поля по русской подписи, операторы по-русски, сам экранирует значения и ставит правильный синтаксис. Сырые $filter нужны только для очень специфичных случаев.
Сервер вернул 20 000 строк в одном ответе и контекст модели «лопнул».
По умолчанию bpm_get_records ограничивает выдачу max_records=1000 и пагинация выключена. Если хотите всё — передайте auto_paginate: true и увеличьте max_records. Для пошагового перебора возвращается cursor — передайте его в следующий вызов и получите следующую страницу без перенабора параметров.
Как назвать поле — «Город» или «City»?
Любым. Сервер хранит двусторонний словарь caption ↔ name (по SysSchema/SysEntitySchemaColumn) и переводит сам. Если не угадал — в ошибке будут «Похоже на: …».
Lookup-значения — UUID или текст?
Текст. Сервер сам резолвит «Москва» → <UUID> через bpm_lookup_value. Если найдено несколько кандидатов — вернёт список и попросит уточнить.
OData v3 на .NET Framework — будет работать?
Да, кроме $batch (его в v3 BPMSoft нет). При попытке bpm_batch_* на v3 получите явную ошибку, а не молчаливое 404.
Как запустить кастомный бизнес-процесс?
bpm_run_process с process_name (имя схемы процесса) и parameters. Если процесс возвращает результат — добавьте result_parameter_name. Сервер заберёт XML-обёртку и распакует JSON-payload в structuredContent.
Что если на инстансе нет коллекции SocialMessage?
bpm_post_feed вернёт ошибку 404 с понятным сообщением «На этом инстансе нет коллекции SocialMessage; функция ленты не настроена». Лента в BPMSoft может быть выключена настройками безопасности.
Архитектура (для разработчиков)
src/
client/ HttpClient (binary-aware, contentKind, SSRF, 429+Retry-After)
ODataClient (v3/v4, $batch, nextLink, бинарные поля)
process/ ProcessEngineClient (XML envelope parsing)
metadata/ MetadataManager (fast-xml-parser, caption maps, suggestions)
lookup/ LookupResolver (caption-aware, LRU, fuzzy fallback)
utils/ errors, odata, suggest, filter-compiler, render, cursor
prompts/ registry + register
resources/ 4 resource templates
tools/ init, read, write, schema, describe-instance, enum,
workflow-catalog, batch, stream, process
workflows/ register-contact, log-activity, set-status, search-unified
tests/ 95 тестов (vitest + MSW): юнит + интеграция HTTPПодробнее — в CLAUDE.md (для разработчиков, добавляющих новые tool-ы)
Лицензия
MIT — максимально свободные условия из стандартных OSS-лицензий. Использовать, изменять, распространять и встраивать в коммерческие продукты можно без ограничений; единственное требование — сохранить уведомление об авторских правах в копиях.
Дополнительно (не юридически обязательно): если планируете существенное переиспользование, интеграцию в коммерческий продукт или редистрибуцию под собственным брендом — автор будет признателен за короткое сообщение в GitHub: @Catter58. Это не требование лицензии, а просьба «дайте знать, чтобы я мог помочь и был в курсе».
Полный текст — в LICENSE.
Available Tools
32 toolsbpm_batch_createПакетное созданиеA
Создаёт несколько записей в одном $batch (только OData v4). Lookup-поля автоматически резолвятся. Поддерживает continue_on_error для пропуска ошибочных записей.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | ||
| records | Yes | Массив записей для создания (lookup-поля резолвятся) | |
| continue_on_error | No | Не прерывать batch на первой ошибке (Prefer: continue-on-error) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate openWorldHint=true, so no contradiction. The description adds behavioral details: it creates records (mutating), uses batch semantics, automatically resolves lookup fields, and supports continue_on_error. This goes beyond annotation information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that packs essential information without redundancy. All three sentences (or clauses) are non-repetitive and earn their 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 and no description of return values (e.g., success status, error details). Could also mention permissions or side effects. While core behavior is covered, missing return information reduces completeness for a batch operation.
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 adds meaning for two of three parameters: records (explains lookup resolution) and continue_on_error (explained as skipping errors). Collection is not elaborated. Schema coverage is 67% but description compensates for the key param behaviors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates multiple records in a single batch, specifies OData v4, and mentions key features like automatic lookup resolution and continue_on_error. It effectively distinguishes from sibling tools such as bpm_create_record (single record) and bpm_batch_update/delete (different operations).
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 mentions 'только OData v4', which hints at prerequisite, but does not explicitly state when to use this tool vs. alternatives (e.g., when batch is appropriate over individual creates). No exclusions or when-not-to-use guidance provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_batch_deleteПакетное удалениеADestructiveIdempotent
Удаляет несколько записей по UUID в одном $batch (только OData v4). Поддерживает continue_on_error. Действие необратимо.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | ||
| ids | Yes | Массив UUID записей для удаления | |
| continue_on_error | No | Не прерывать batch на первой ошибке |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by specifying OData v4 requirement, continue_on_error support, and irreversibility. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences covering purpose, protocol, option, and consequence with no 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?
Lacks description of return value or batch response, but annotations (destructive, idempotent) compensate partially. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% with descriptions for ids and continue_on_error. Description reiterates their purpose but adds no new parameter details 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?
Description clearly states it deletes multiple records by UUID using OData v4 batch, distinguishing it from sibling tools like bpm_delete_record (single) and bpm_delete_by_filter (by filter).
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?
Implies usage for batch deletion by UUID and warns of irreversibility, but does not explicitly state when to choose this over alternatives like bpm_delete_by_filter or single delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_batch_updateПакетное обновлениеAIdempotent
Обновляет несколько записей в одном $batch (только OData v4). Lookup-поля резолвятся автоматически. Поддерживает continue_on_error.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | ||
| updates | Yes | Массив обновлений [{id, data}] | |
| continue_on_error | No | Не прерывать batch на первой ошибке |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-destructive, non-read-only, idempotent, and open-world behavior. The description adds 'only OData v4', automatic lookup resolution, and continue_on_error support, providing useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no extraneous information. It front-loads the main purpose and includes key features efficiently.
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 covers batch operation, OData v4 restriction, automatic lookup resolution, and continue_on_error. It does not address error handling details or return format, but given the presence of continue_on_error and no output schema, it is reasonably 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 coverage is 67% with descriptions for updates and continue_on_error. The description additionally explains that lookup fields are resolved automatically, adding meaning to the data parameter. However, the collection parameter remains undescribed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates multiple records in one batch using OData v4, with automatic lookup resolution and continue_on_error support. This distinguishes it from sibling tools like bpm_update_record (single update) and bpm_batch_create/bpm_batch_delete.
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 use for batch updates but does not explicitly state when to use versus alternatives like bpm_update_record or other batch tools. It only mentions OData v4 constraint, lacking when-not or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_count_recordsКоличество записейARead-onlyIdempotent
Возвращает число записей коллекции через /$count, опционально с $filter.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Имя коллекции (EntitySet) | |
| filter | No | OData $filter выражение |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that it uses the /$count endpoint and optionally accepts a $filter, which is helpful context. However, it does not state the exact return format (number or string), though it implies a numeric count.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys all necessary information without extra words. It is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity of the tool, the rich annotations, and the clear schema, the description is complete. It explains the operation, the optional filter, and the expected result (count). No additional output schema is needed for a simple count.
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 does not add significant meaning beyond the input schema, which already has clear descriptions for both parameters (collection name and OData filter expression). Schema coverage is 100%, 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 clearly states that the tool returns the count of records in a collection, optionally filtered. It uses a specific verb ('возвращает') and resource ('число записей коллекции'), distinguishing it from siblings that return records or perform other operations.
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 explicit guidance on when to use this tool over alternatives like bpm_get_records or bpm_search_records. The purpose is clear enough to imply usage for counting, but no when-not or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_create_recordСоздать записьA
Создаёт запись в коллекции (POST). Lookup-поля можно передавать человекочитаемыми текстовыми значениями — сервер автоматически разрешит UUID. Возвращает созданную запись.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Имя коллекции (EntitySet), например: Contact, Account | |
| data | Yes | Данные записи в формате {"поле": "значение"}. Для lookup-полей можно передать текстовое значение вместо UUID — оно будет автоматически разрешено. | |
| strict_required | No | Если true, проверяет наличие всех non-nullable полей в data до отправки (по метаданным). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond annotations: it specifies the HTTP method (POST), that lookup fields can be human-readable and will be resolved, and that it returns the created record. This complements the readOnlyHint=false 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, efficient sentences. The purpose is front-loaded, and the additional detail about lookup fields is placed second. No extraneous 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 create tool with no output schema, the description covers the core behavior: creation, lookup resolution, and return value. It lacks information on error handling or prerequisites, but given annotations and context, it is fairly 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%, so the schema already explains parameters well. The description largely repeats the lookup resolution detail already in the schema's parameter description. It adds the return value, but that is not parameter-specific.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool creates a record in a collection via POST, and mentions automatic UUID resolution for lookup fields. It distinguishes from batch create by implying single record creation, but does not explicitly contrast with similar siblings like bpm_batch_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of preconditions, exclusions, or context for when to prefer it over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_delete_by_filterУдалить по фильтруADestructive
Находит записи по $filter и удаляет каждую через DELETE. Требует параметр expected_count: при несовпадении операция отменяется. Действие необратимо.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | ||
| filter | Yes | OData $filter — обязателен | |
| expected_count | Yes | Сколько записей должно совпадать; иначе откат |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but the description adds that the action is irreversible and explains the expected_count safety mechanism. This goes beyond annotations to fully disclose 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?
Two sentences efficiently convey the core action, requirement, and consequence. No wasted words; information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key aspects: operation, safety mechanism, and irreversibility. It lacks detail on return values or error handling, but for a destructive bulk delete, the provided context is sufficient.
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 67% (2 of 3 parameters described). The description reinforces the expected_count semantics but does not add new meaning for collection or filter beyond what the schema 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 clearly states it finds records by filter and deletes each one. It distinguishes from siblings like bpm_delete_record (single record) and bpm_batch_delete (batch by IDs) by specifying it operates on a filter-based selection.
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 explicitly notes that expected_count is required and that a mismatch cancels the operation, providing important usage context. However, it does not explicitly state when to use this tool versus alternatives like bpm_batch_delete or bpm_delete_record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_delete_recordУдалить записьADestructiveIdempotent
Удаляет запись из коллекции по UUID (DELETE). Действие необратимо.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Имя коллекции (EntitySet) | |
| id | Yes | UUID записи для удаления |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true and idempotentHint=true. Description adds 'irreversible' and the HTTP method DELETE, providing useful context beyond annotations. No contradictions.
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, no filler. Purpose first, then irreversibility warning. Efficiently communicates core information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete with 2 required params and no output schema, the description covers the action and irreversibility. Could mention permissions or side effects, but openWorldHint reduces penalty.
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%; both parameters have descriptions. The description's mention of 'by UUID' and 'from a collection' echoes schema info without adding new details. 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?
Description states 'Deletes a record from a collection by UUID (DELETE). The action is irreversible.' This clearly identifies the verb (delete), resource (record), and method (by UUID), distinguishing it from siblings like bpm_delete_by_filter or bpm_create_record.
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 explicit when-to-use or when-not-to-use guidance. The description implies use when you have a UUID, but does not contrast with other delete tools or mention prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_describe_instanceКраткая сводка по инстансу BPMSoftARead-onlyIdempotent
Возвращает обзор инстанса: число коллекций, главные бизнес-сущности (Contact, Account, Activity, Lead, Opportunity, Order, Case — те, что реально присутствуют), счётчики записей в них, число пользовательских (Usr*) коллекций и кастомных полей в основных сущностях. Кеширует результат на 5 минут. Полезен в самом начале диалога с новым инстансом.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds valuable behavioral context: the result is cached for 5 minutes, which is critical for an agent to know to expect stale data on repeated calls. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long: first sentence describes output, second adds caching behavior, third provides usage recommendation. No unnecessary words, and the most important information comes first.
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?
Despite no output schema, the description fully explains what the tool returns (collections, entities, counts, custom fields) and adds caching behavior and usage context. For a zero-parameter summary tool, this is complete and actionable.
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 no parameters, so the schema coverage is 100% trivially. With 0 parameters, baseline is 4. The description does not need to add parameter semantics, and it correctly omits any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a summary overview of the instance, listing collections, main business entities, record counts, user collections, and custom fields. It specifies which entities are included (Contact, Account, etc.) and distinguishes itself from sibling tools like bpm_get_collections by focusing on a high-level summary useful at the start of a dialog.
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 includes a usage tip: 'useful at the very beginning of a dialog with a new instance.' This provides clear context for when to use the tool. It does not explicitly exclude alternatives, but the suggestion is sufficient given the tool's high-level nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_download_fileСкачать файл из SysImageARead-onlyIdempotent
Скачивает бинарные данные из SysImage по UUID и сохраняет в файл (если указан save_path).
| Name | Required | Description | Default |
|---|---|---|---|
| image_id | Yes | UUID записи в SysImage | |
| save_path | No | Путь для сохранения файла |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds that it saves binary data to a file, but does not disclose additional behaviors like overwrite behavior, authentication needs, or what happens when save_path is omitted. Annotations already provide safety profile, but description adds minimal value.
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?
Single sentence, no wasted words. However, it could be better structured with separate details for required vs optional parameters.
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?
Adequate for a simple download tool with annotations and full schema coverage. Missing details on return behavior when save_path is not provided, or any file size limits. Not a critical gap but could be more comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage; image_id is described as UUID and save_path as string. The description reiterates these names but adds no new semantic 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?
Description clearly states the tool downloads binary data from SysImage by UUID and optionally saves to a file. It uses a specific verb (download), resource (SysImage), and action (save to file), distinguishing it from sibling tools like bpm_field_download.
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 explicit guidance on when to use this tool versus alternatives. Sibling tools like bpm_field_download or bpm_upload_file exist but no comparison or prerequisites provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_exec_process_elementЗапустить элемент процессаA
Вызывает ProcessEngineService.svc/ExecProcElByUId с UID элемента. Используется для возобновления приостановленных элементов (например, пользовательских задач) уже выполняющегося процесса.
| Name | Required | Description | Default |
|---|---|---|---|
| element_uid | Yes | UID элемента процесса (GUID 8-4-4-4-12) для возобновления. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate not read-only, not destructive, not idempotent. Description adds the service endpoint and use case, but does not disclose potential side effects (e.g., state changes on failure) or error behavior. This is adequate given annotations cover safety.
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 sentences, no fluff. First sentence states the action and endpoint, second explains the use case. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and full schema coverage, the description and annotations together provide sufficient context. Could mention what the tool returns or fails, but no output schema exists, so it's 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?
The input schema fully describes the single parameter (element_uid) with a detailed explanation of its format and purpose. The description does not add new semantics beyond what the schema already provides, meeting the baseline for high schema 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?
Description clearly states the tool resumes suspended process elements by calling a specific service endpoint, distinguishing it from sibling tools that start new processes (e.g., bpm_run_process). The verb 'resume' and noun 'suspended elements' are specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for resuming suspended elements in an already executing process, but does not explicitly contrast with alternatives or state when not to use it (e.g., if process is completed). There's no 'when-not' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_field_deleteОчистить бинарное полеCDestructiveIdempotent
DELETE бинарных данных в поле сущности.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | ||
| id | Yes | ||
| field | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description confirms the destructive nature but adds no additional behavioral details beyond what annotations provide.
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 overly brief. While concise, it lacks essential details and is too short to be useful, sacrificing completeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with three parameters and no output schema, the description fails to provide a complete picture. It does not explain effects, permissions, or result of the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%. The description does not explain the meaning or usage of any parameters (collection, id, field), leaving the agent without semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it deletes binary data in an entity field. However, it does not differentiate this tool from siblings like bpm_delete_record or bpm_field_upload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites or context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_field_downloadСкачать бинарь из поляBRead-onlyIdempotent
GET бинарных данных напрямую из поля сущности по схеме {Collection}({id})/{FieldName}. Сохраняет в save_path или возвращает размер.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | ||
| id | Yes | ||
| field | Yes | ||
| save_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds that data can be saved to a path or returned as size, which is useful but lacks details about error handling or response format.
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 concise two-sentence description with front-loaded purpose. Every word adds value without 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?
Covers the basic download operation and conditional return of size, but omits details like what the size value represents, error conditions, and output schema (none provided). Given the complexity of the tool (4 parameters, no output schema), more context would be beneficial.
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 has 0% coverage (no descriptions). The description explains the role of collection, id, field via the path pattern, and mentions save_path as optional. However, it does not elaborate on allowed formats or constraints for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it downloads binary data from a field using a specific path pattern. It distinguishes the tool from general file downloads (bpm_download_file) but does not explicitly contrast with siblings like bpm_field_upload.
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 alternatives such as bpm_download_file or bpm_get_record. The description only explains the operation itself without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_field_uploadЗагрузить бинарь в полеAIdempotent
PUT бинарных данных напрямую в поле сущности по схеме {Collection}({id})/{FieldName}. Используйте для произвольных бинарных полей (не только SysImage).
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | ||
| id | Yes | UUID записи | |
| field | Yes | Имя бинарного поля сущности | |
| file_path | Yes | Локальный путь к файлу |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutability (readOnlyHint=false) and idempotency. The description adds that it's a direct PUT, but no further behavioral traits beyond what annotations provide.
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 concise sentences, no wasted words. Front-loaded with the key verb and resource.
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 upload tool with 4 parameters and no output schema, the description covers essential context. Could mention file size limits or that the file must exist locally, but still adequate.
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 explains the URL pattern ({Collection}({id})/{FieldName}), adding context for collection, id, and field. Schema coverage is 75% (collection missing description), so description partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it uploads binary data directly to a field of an entity using a URL pattern. It specifies the target as arbitrary binary fields, not just SysImage, distinguishing it from other upload 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?
The description says to use for arbitrary binary fields, but does not explicitly contrast with siblings like bpm_upload_file or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_find_fieldПоиск поля по подписиARead-onlyIdempotent
Находит поля по фрагменту русского/английского названия среди уже загруженных схем коллекций. Полезно когда пользователь оперирует «ИНН», «Город» и т.п.
| Name | Required | Description | Default |
|---|---|---|---|
| search | Yes | Текст для поиска по русскому или английскому названию | |
| collection | No | Коллекция для поиска (если опущена — по уже загруженным схемам) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint, covering safety and behavior. The description adds that it searches among 'already loaded schemas', which is a useful contextual detail, but does not elaborate on edge cases like empty results or performance. With strong annotations, this is sufficient.
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 concise with two sentences. The first sentence states the core action and scope, and the second provides a practical use case. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (two parameters, no output schema, clear annotations), the description covers the essential context. It explains what the tool does and when to use it. The only minor omission is what exactly is returned, but that is implicitly understood from the purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters completely (100% coverage). The description adds no additional semantic information beyond what the schema provides, so the baseline score of 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 clearly states that the tool finds fields by a fragment of their Russian/English name among already loaded collection schemas. The example with 'ИНН' and 'Город' reinforces the purpose. This tool is distinct from sibling tools, which focus on records, batch operations, or processes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case (when the user is dealing with terms like 'ИНН', 'Город') but does not explicitly state when not to use it or mention alternatives. However, given the tool's focused purpose and lack of similar siblings, the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_get_collectionsСписок коллекцийARead-onlyIdempotent
Возвращает доступные EntitySet (коллекции) BPMSoft из $metadata. Поддерживает фильтр-подстроку по имени.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | Фильтр по имени (поиск подстроки, регистронезависимый) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds that it accesses $metadata and supports substring filtering. No contradictions.
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 concise sentences, front-loaded with key action and result. No wasted words.
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?
Simple read-only tool with one optional parameter and no output schema. The description sufficiently covers source and filtering capability. No additional details needed.
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 description for the pattern parameter. The description repeats the filter concept but adds 'substring' detail. Baseline score as schema already documents the 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?
Clearly states the tool returns available EntitySet (collections) from $metadata, with optional filter by name. Distinguishes well from sibling tools like bpm_get_schema or bpm_describe_instance.
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 alternatives (e.g., bpm_get_schema for metadata, bpm_search_records for data). Lacks context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_get_enum_valuesЗначения справочника поляARead-onlyIdempotent
Возвращает значения справочника, к которому привязано lookup-поле указанной коллекции. Например, для Activity.ActivityCategory вернёт список всех категорий активностей с UUID и названиями. Полезно перед bpm_create_record/bpm_update_record для перечисления вариантов или поиска UUID по точному имени.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Имя коллекции (EntitySet), например: Activity, Lead, Opportunity | |
| field | Yes | Имя или caption lookup-поля. Например: ActivityCategory, Status, «Тип активности», «Статус». | |
| top | No | Максимум значений (по умолчанию 200, ограничено лимитами BPMSoft) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds useful context about return format (list with UUID and names) and mentions default limit and BPMSoft constraints for 'top' parameter. No contradictions.
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 main action, followed by example and usage guidance. No extraneous information. 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?
Given no output schema, the description explains return values and limit behavior. Provides usage context and example. Adequately complete for a simple lookup 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 coverage is 100%, so params are well-documented. Description adds value through an illustrative example and explains the relationship between collection and field, aiding understanding.
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?
Description clearly states the tool returns lookup field values from a reference dictionary, with a concrete example (Activity.ActivityCategory). It uses specific verbs and resources, distinguishing it from siblings like bpm_create_record/bpm_update_record.
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?
Explicitly says 'Полезно перед bpm_create_record/bpm_update_record для перечисления вариантов или поиска UUID по точному имени', providing clear context for when to use and what for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_get_recordЗапись по IDARead-onlyIdempotent
Возвращает одну запись коллекции по UUID с опциональными $select и $expand.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Имя коллекции (EntitySet) | |
| id | Yes | UUID записи | |
| select | No | Поля для выборки через запятую | |
| expand | No | Развернуть связанные сущности |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, covering safety and idempotency. The description adds that it returns one record with optional parameters, but does not provide additional behavioral context like error scenarios or rate limits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with key action and resource, no redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with rich annotations and no output schema, the description is sufficient. It covers the core functionality and optional parameters. Could mention return format but not essential.
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 schema documents all parameters. Description adds that 'id' is a UUID and highlights optional $select and $expand, but does not explain their syntax or allowed values 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 clearly states the tool returns a single record by UUID, with optional $select and $expand parameters. It uses specific verb and resource, and distinguishes from sibling tool bpm_get_records which returns multiple records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching a single record by ID but does not explicitly state when to use this tool over alternatives like bpm_get_records or bpm_search_records. No when-not or alternative names are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_get_recordsСписок записей коллекцииARead-onlyIdempotent
Возвращает записи указанной OData-коллекции с фильтрацией ($filter), выборкой полей ($select), сортировкой ($orderby), $expand и $top/$skip. По умолчанию автопагинация выключена и применяется лимит max_records (избегаем переполнения контекста LLM). Установите auto_paginate=true и/или увеличьте max_records если нужен полный набор.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | No | Имя коллекции (EntitySet), например: Contact, Account, City. Не нужно если передан cursor. | |
| filter | No | OData $filter, например: Name eq 'Иванов' | |
| select | No | Поля для выборки через запятую | |
| top | No | Максимум записей за один запрос (по умолчанию 100) | |
| skip | No | Пропустить N записей (для пагинации) | |
| orderby | No | Сортировка, например: Name asc, CreatedOn desc | |
| expand | No | Развернуть связанные сущности | |
| count | No | Включить общее количество записей в ответ | |
| auto_paginate | No | Следовать @odata.nextLink до исчерпания (по умолчанию false). Используйте с max_records. | |
| max_records | No | Жёсткий потолок числа записей в ответе (по умолчанию 1000) | |
| format | No | Формат текстовой выдачи: 'compact' (по умолчанию) — сводка + первые 5 записей; 'full' — полный JSON; 'markdown' — таблица для ≤20 записей. structuredContent всегда полный. | |
| cursor | No | Opaque-курсор предыдущего ответа для получения следующей страницы. При его передаче все остальные параметры запроса наследуются от того ответа. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds beyond these by detailing pagination defaults, context overflow prevention, format options, and the fact that auto_paginate is off by default. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every sentence provides essential information. No unnecessary words or 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?
Given the tool's complexity (12 parameters, OData features, pagination, output formatting), the description covers the main behavioral aspects. It lacks explicit mention of output structure (though format parameter hints at it) and could elaborate on cursor usage, but overall it provides sufficient context for an agent.
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 baseline is 3. The description provides a high-level summary of OData capabilities but does not add significant new meaning beyond the schema descriptions for individual parameters. It does not deepen understanding of any single 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 clearly states the tool retrieves records from an OData collection with support for filtering, selecting, sorting, expand, and pagination. It distinguishes itself from siblings like bpm_get_record (single record) and bpm_search_records (search) by focusing on list retrieval with OData query options.
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 explains default pagination behavior (auto_paginate off, max_records limit) and provides guidance on when to enable auto_paginate or increase max_records. It also mentions avoiding LLM context overflow. However, it does not explicitly compare to other tools for when to use 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.
bpm_get_schemaСхема коллекцииARead-onlyIdempotent
Возвращает схему коллекции: поля, типы, обязательность, lookup-связи. По возможности включает локализованные подписи (рус. названия) полей из SysSchema/SysEntitySchemaColumn.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Имя коллекции (EntitySet) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so the behavior is safe and idempotent. The description adds that localized names may be included, which is a minor additional trait. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, concise and directly to the point. No unnecessary words. Front-loaded with the core purpose.
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?
While the description lists what the schema includes (fields, types, mandatory, links), it does not explain the output format or structure. No output schema exists to compensate. Error conditions are not mentioned. Adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers the single parameter 'collection' with a clear description. The description repeats that it returns schema for the collection but adds no new semantic detail about the parameter itself. With 100% schema coverage, 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 clearly states the tool returns the schema of a collection (metadata including fields, types, mandatory, lookup links) and mentions inclusion of localized names. It distinguishes from sibling tools like bpm_get_collections which list collections.
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 does not explicitly state when to use or not use this tool versus alternatives. The purpose is clear from the description and name, but no guidance is given on prerequisites or when another tool might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_initПодключиться к BPMSoftAIdempotent
Инициализирует подключение к BPMSoft (URL, логин, пароль, версия OData, платформа) и проверяет учётные данные. Должен быть вызван первым, если сервер запущен без переменных окружения BPMSOFT_URL/USERNAME/PASSWORD. После успешного вызова все остальные инструменты становятся работоспособными.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL приложения BPMSoft (например: https://mycompany.bpmsoft.com) | |
| username | Yes | Имя пользователя для входа | |
| password | Yes | Пароль пользователя | |
| odata_version | No | Версия OData протокола: 4 (по умолчанию) или 3 | |
| platform | No | Платформа: "net8" (по умолчанию) или "netframework" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations. It reveals that the tool validates credentials and that it is a prerequisite for other tools. Annotations already indicate idempotentHint=true and readOnlyHint=false, which are consistent. The behavioral context of 'проверяет учётные данные' (checks credentials) is a key disclosure not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action and key constraints. Every word is necessary; no repetition or fluff. It efficiently conveys purpose, prerequisites, and effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters, critical prerequisite role) and the absence of output schema, the description covers all necessary aspects: what it does, when to call it, and its impact on sibling tools. It is self-contained and sufficient for an AI agent to understand its role in the overall workflow.
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%; all parameters have descriptions. The description lists the parameters (URL, login, password, OData version, platform) and adds that they are validated. It also implies defaults for odata_version and platform. This adds meaning beyond the schema by emphasizing credential checking.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool initializes a connection to BPMSoft with parameters (URL, login, password, OData version, platform) and verifies credentials. It explicitly says it must be called first, distinguishing it from sibling tools that require an active connection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: it must be called first if the server is not started with environment variables BPMSOFT_URL/USERNAME/PASSWORD. It also notes that after successful call, all other tools become functional. However, it does not mention cases where env vars are present and the tool should be skipped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_log_activityЗафиксировать активностьA
Зафиксировать активность (задача, звонок, встреча) с привязкой к записи. Тип активности и владелец резолвятся по тексту через справочники. Поддерживает связь с Contact/Account/Opportunity.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Заголовок активности (обязательное поле) | |
| type | No | Тип активности (например, "Звонок", "Email", "Встреча"). Резолвится через справочник. | |
| owner_name | No | ФИО владельца — будет найден в Contact.Name и подставлен в OwnerId. | |
| related_collection | No | Коллекция связанной записи (Account, Contact, Opportunity, Lead и т.п.). | |
| related_id | No | UUID связанной записи. | |
| due_date | No | Срок выполнения (ISO-8601). | |
| notes | No | Заметки (Notes/Description). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutability and non-destructiveness; the description adds valuable context about automatic resolution of activity type and owner via reference books, and support for linking to common entities. This goes beyond the annotations, though details on error handling or side effects are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with clear front-loading: the first sentence states the core action and linking, the second adds resolution and supported entities. No extraneous information, 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?
Given the tool has 7 parameters, no output schema, and openWorldHint, the description covers main behavior but lacks details on error handling, default behavior when resolution fails, returned output (e.g., activity ID), and handling of optional fields. It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all parameters with 100% coverage. The description adds overall context about resolution of type and owner, but this is mostly redundant with the schema. The description does not clarify parameter semantics further, so a 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 clearly states the tool logs an activity (task, call, meeting) linked to a record. The verb 'зафиксировать' and resource 'активность' are specific, but the description does not explicitly distinguish this tool from siblings like bpm_create_record or bpm_post_feed, though its specialization is evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as bpm_create_record for generic record creation or bpm_post_feed for feeds. It does not mention prerequisites or contexts where another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_lookup_valueНайти UUID по значениюARead-onlyIdempotent
Резолвит UUID записи справочника по человекочитаемому значению (точное совпадение eq). При fuzzy=true и пустом результате повторяет поиск через contains() и возвращает кандидатов.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Коллекция-справочник для поиска | |
| field | No | Поле для поиска (по умолчанию Name) | |
| value | Yes | Искомое значение | |
| fuzzy | No | При отсутствии точного совпадения повторять поиск через contains() (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Аннотации уже указывают на безопасность (readOnlyHint, destructiveHint), а описание добавляет детали поведения: повторный поиск через contains() при fuzzy=true. Не указаны ограничения по количеству результатов или авторизации, но для простого инструмента это приемлемо.
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?
Описание состоит из двух предложений без лишних слов, ключевая информация представлена в первом предложении. Идеальная структура для краткого описания.
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?
Учитывая простоту инструмента, наличие полной схемы и аннотаций, описание достаточно полно: объясняет основное действие и нечеткий поиск. Выходная схема не требуется, так как возвращается UUID, что очевидно.
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?
Схема входных данных имеет 100% покрытие описания параметров, и описание параметров в схеме уже передает семантику. Описание инструмента не добавляет существенной информации помимо того, что уже есть в схеме, поэтому оценка базовая.
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?
Статья четко определяет действие (резолвит UUID) и ресурс (запись справочника по человекочитаемому значению), а также отличает от поисковых инструментов, таких как bpm_search_records, за счет указания точного совпадения с возможностью нечеткого поиска.
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?
Описание указывает, когда использовать нечеткий поиск (при пустом результате точного совпадения), что дает контекст использования. Однако отсутствует явное указание, когда не следует использовать этот инструмент в пользу альтернатив, таких как bpm_search_records.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_post_feedОпубликовать сообщение в ленту записиA
Создаёт запись в коллекции SocialMessage для целевой записи (entity+id). Лента — основной канал комментариев BPMSoft. Параметры: collection (имя сущности), id (UUID записи), message (текст). Опционально: parent_id для ответа на сообщение.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Имя коллекции записи, к которой публикуется сообщение (например: Contact). | |
| id | Yes | UUID записи, в ленте которой публикуется сообщение. | |
| message | Yes | Текст сообщения. | |
| parent_id | No | UUID родительского сообщения (если это ответ на существующее). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds that it creates a record and mentions optional parent_id for replies, but does not disclose additional behavioral traits beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, efficiently conveying the purpose, parameters, and optional usage. Every sentence adds value, and it is well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with full annotation coverage and no output schema, the description adequately covers the core function, required parameters, and optional parent_id. It lacks details on return behavior but is sufficient for most use cases.
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 schema already documents all parameters. The description restates the parameters with brief labels (e.g., 'collection (имя сущности)') and explains parent_id is for replies, adding marginal value 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 clearly states it creates a SocialMessage record for a target record (entity+id), specifying the exact resource and action. It distinguishes from sibling tools like bpm_create_record by targeting the feed.
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 explains that the feed is the main comment channel for BPMSoft, implying this tool is for feed comments. However, it does not explicitly state when not to use it or mention alternative tools, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_register_contactЗарегистрировать контактA
Зарегистрировать контакт. Опционально создаёт/находит контрагента (Account) по имени и привязывает к нему контакт. Один вызов вместо create_record(Account)+create_record(Contact)+update_record. Все имена полей могут быть переданы на русском (caption) или латинице.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ФИО контакта (обязательное поле Name) | |
| No | Email контакта | ||
| phone | No | Телефон контакта | |
| account_name | No | Название контрагента. Если указано — будет найден или создан Account и привязан к контакту. | |
| position | No | Должность контакта (Job) | |
| extra | No | Дополнительные поля контакта. Имена полей могут быть на русском (caption) или латинице. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutability (readOnlyHint=false) and openness (openWorldHint=true). The description adds concrete behavioral details: optional creation/finding of an Account and support for Russian field names. It does not mention potential side effects (e.g., idempotency issues) but sufficiently complements 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 sentences with no redundant words. The first sentence states the core action; the second provides the key usage context (alternative to multiple calls) and a useful detail (field name flexibility). Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main functionality but lacks details on return value (no output schema), error handling, and precise behavior of the 'extra' parameter. Given the tool's complexity (6 parameters, nested objects, composite operation), more context on outcomes and edge cases would improve completeness.
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 baseline is 3. The description adds value by explaining that field names (in 'extra') can be in Russian or Latin, and that 'account_name' triggers account lookup/creation. This enriches the schema beyond mere parameter lists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('зарегистрировать контакт') and explains the optional account creation/linking, which distinguishes it from sibling tools like bpm_create_record that create a single record. The composite nature is explicit, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly compares this tool to a three-step alternative (create_record(Account)+create_record(Contact)+update_record), indicating when it should be used for combined operations. However, it does not specify when not to use it (e.g., for contacts without account linking) or provide explicit alternatives, leaving room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_run_processЗапустить бизнес-процессA
Вызывает ProcessEngineService.svc/{ProcessName}/Execute. Передаёт входные параметры через query-string. Опционально возвращает результат указанного выходного параметра. Используется для запуска кастомных БП, обёртывающих сложную логику (например, ESQ-запросы с агрегацией, массовые операции, бизнес-логика).
| Name | Required | Description | Default |
|---|---|---|---|
| process_name | Yes | Имя процесса (схема), например: UsrCalculateLeadScore | |
| parameters | No | Входные параметры процесса (передаются как query-string). | |
| result_parameter_name | No | Имя выходного параметра процесса. Если задано — сервер вернёт его значение в поле result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, indicating mutation but not destruction. Description adds that it executes a process and passes parameters via query string, but doesn't detail side effects or idempotency. The openWorldHint=true suggests unknown effects, but description doesn't compensate.
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?
Description is extremely concise, with only three sentences covering the core action, parameter passing mechanism, and optional result. No redundancy or 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?
Given no output schema, description partially explains return (optional result parameter). However, it does not cover error handling, response format, or potential side effects for complex processes, leaving gaps for an agent.
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?
Input schema has 100% coverage with descriptions for all three parameters. Description adds that parameters are passed via query string and result_parameter_name returns the specified output, but this is not a significant addition beyond 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?
Description clearly states it runs custom business processes via ProcessEngineService.svc/{ProcessName}/Execute, with query-string parameters and optional result return. It distinguishes from CRUD tools by mentioning custom processes for complex logic, but could better differentiate from siblings like bpm_exec_process_element.
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?
Indicates the tool is for custom business processes wrapping complex logic, giving some context on when to use. However, it lacks explicit exclusions or comparisons to alternatives (e.g., bpm_exec_process_element), so guidance is limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_search_recordsПоиск с критериями (рус.)ARead-onlyIdempotent
Альтернатива bpm_get_records с человекочитаемыми критериями. Принимает массив criteria вида [{field, op, value}], где field может быть на русском (caption), op — на русском («содержит», «равно», «за последние 7 дней», «между») или OData (eq/contains/...). Сервер сам соберёт $filter. Полезен, когда LLM не хочет писать OData синтаксис вручную.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Имя коллекции (EntitySet) | |
| criteria | Yes | Массив критериев — компилируется в OData $filter | |
| join | No | Как соединять критерии: and (по умолчанию) или or | |
| select | No | Поля для выборки через запятую | |
| orderby | No | Сортировка | |
| top | No | Максимум за один запрос (по умолчанию 100) | |
| skip | No | Пропустить N записей | |
| expand | No | Развернуть связанные сущности | |
| count | No | Включить общее количество записей в ответ | |
| auto_paginate | No | Следовать @odata.nextLink до исчерпания (по умолчанию false) | |
| max_records | No | Жёсткий потолок числа записей в ответе (по умолчанию 1000) | |
| format | No | Формат выдачи: 'compact' (по умолчанию) — превью; 'full' — полный JSON; 'markdown' — таблица. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, non-destructive, idempotent, and open-world. Description adds value by explaining that the server compiles criteria into an OData $filter, which clarifies internal behavior beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with front-loaded purpose. Every sentence contributes essential information: alternative to sibling, input format, and use case. No wasted words.
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 search tool with 12 parameters and no output schema, the description adequately explains the core criteria mechanism. It could mention pagination or rate limits, but those are covered by parameter descriptions. The 'format' parameter indicates output variants, reducing the need to describe return values.
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 covers 100% of parameters, so baseline is 3. Description enhances with examples of Russian operator strings ('содержит', 'равно', etc.) and explains the criteria array structure, adding meaning beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it is an alternative to bpm_get_records with human-readable criteria, specifies input format (array of {field, op, value}) and operator options (Russian or OData). This differentiates it from the sibling tool and provides a specific verb+resource.
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?
Explicitly identifies when to use (when LLM does not want to write OData syntax) and references the alternative bpm_get_records. Lacks explicit when-not conditions, but context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_search_unifiedСквозной поискARead-onlyIdempotent
Сквозной поиск по подстроке Name в основных коллекциях (Contact, Account, Lead, Opportunity). Возвращает плоский список совпадений с указанием коллекции и UUID. Подходит для запросов вида «найди всё про Иванова».
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Текст для поиска (подстрока в Name) | |
| collections | No | Список коллекций для поиска (по умолчанию: Contact, Account, Lead, Opportunity). Несуществующие пропускаются. | |
| top | No | Сколько записей выбирать в каждой коллекции (по умолчанию 5). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, covering safety and idempotency. The description adds that the tool returns a flat list with collection and UUID, which is useful behavioral detail. No further constraints (e.g., rate limits, pagination) are disclosed, but annotations reduce the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with focused, front-loaded information. The first sentence conveys the core functionality, and the second provides a usage example. No extraneous words or 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?
The tool has 3 parameters, no output schema, and strong annotations. The description covers the return format (flat list with collection and UUID), default collections, and usage context. Missing details like error behavior or sorting are minor given the simplicity. Overall, it sufficiently informs an agent's decision.
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?
Input schema has 100% description coverage for all three parameters. The description adds value by stating default collections (Contact, Account, Lead, Opportunity) and that non-existent collections are ignored, as well as the default value of 'top' (5). These details are not in the schema, enhancing parameter understanding.
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 explicitly states the tool does substring search across Name fields in specific collections (Contact, Account, Lead, Opportunity) and returns a flat list with collection and UUID. It also gives a concrete example query context. This clearly differentiates it from sibling tools like bpm_search_records, though not directly 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?
The description provides a clear usage scenario (e.g., 'найди всё про Иванова'), which helps an agent understand when to invoke this tool. However, it does not specify when not to use it or mention alternative tools like bpm_search_records, which could be more appropriate for specific searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_set_statusУстановить статус записиAIdempotent
Установить статус записи по человекочитаемому имени. Сервер сам найдёт поле-статус в коллекции (StatusId/StageId) и разрешит UUID статуса в его справочнике.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Имя коллекции (EntitySet), например: Opportunity, Lead, Activity | |
| id | Yes | UUID записи, у которой меняется статус | |
| status | Yes | Человекочитаемое имя статуса (Name справочника) | |
| status_field | No | Явное имя поля-статуса (если в коллекции несколько кандидатов: StatusId, StageId и т.п.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint and openWorldHint. Description adds that the server resolves the human-readable name to a UUID, which clarifies the underlying lookup. No contradictions.
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, no redundancy, conveys all necessary information efficiently.
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, but for a status setter, the description is mostly sufficient. Could mention return value (success/error) but not critical given tool 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?
Schema covers all parameters with descriptions. Description adds that status is a human-readable name (not UUID) and explains when status_field is needed, augmenting 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?
Description clearly states the tool sets a record status by human-readable name, and explains the server resolves the status field automatically. This distinguishes it from generic update tools like bpm_update_record.
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?
Description implies usage when setting status by name, and notes the optional status_field parameter for ambiguous cases. However, it does not explicitly state when not to use or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_update_by_filterОбновить по фильтруA
Находит записи по $filter и обновляет каждую через PATCH. Требует параметр expected_count: если найдено иное число записей — операция отменяется (защита от случайного массового обновления).
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | ||
| filter | Yes | OData $filter — обязателен, не должен быть пустым | |
| data | Yes | Поля для обновления (lookup резолвятся) | |
| expected_count | Yes | Сколько записей должен вернуть фильтр; иначе откат |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-readonly, non-destructive, not idempotent. The description adds that the operation aborts if the count does not match, providing extra safety context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that are front-loaded with the core action and safety mechanism. No wasted words.
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 covers the main behavior but lacks information about return values, which is not provided by an output schema. It also does not address partial failures or idempotency.
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%, so baseline is 3. The description adds meaning for expected_count as a guard and notes lookup resolution for data, but collection and filter are not elaborated beyond 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 clearly states it finds records by a filter and updates each via PATCH, distinguishing it from single-record update or batch update tools among 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?
The description explains when to use this tool (mass update with filter) and includes a safety guard with expected_count. It does not explicitly compare to alternatives like bpm_batch_update, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_update_recordОбновить записьAIdempotent
Обновляет поля записи по UUID (PATCH). Lookup-поля с текстовыми значениями разрешаются автоматически. Идемпотентно при одинаковых данных.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | Yes | Имя коллекции (EntitySet) | |
| id | Yes | UUID записи для обновления | |
| data | Yes | Поля для обновления. Lookup-поля с текстовыми значениями разрешаются автоматически. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotent and non-destructive hints; the description adds key behaviors: PATCH method for partial updates, automatic resolution of lookup fields with text values, and idempotency with identical data, enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each adding essential information: purpose, a key behavior (lookup resolution), and idempotency. No wasted words; information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core update functionality, idempotency, and lookup handling. With no output schema, return value details are not expected, but mentioning potential error conditions or prerequisites would improve completeness.
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?
Input schema covers all three parameters with descriptions (100% coverage), so baseline is 3. The description does not add parameter-specific details beyond what is already in the schema, aside from the overall PATCH context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates record fields by UUID using PATCH, and distinguishes itself from create/delete/batch siblings by specifying the partial update method and automatic lookup resolution.
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 indicates when to use (updating specific fields of a known record) and mentions idempotency, but does not explicitly exclude alternative tools like bpm_batch_update for bulk operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_upload_fileЗагрузить файл в SysImageA
Загружает локальный файл в SysImage: создаёт запись метаданных и кладёт бинарные данные. Опционально привязывает к указанной записи по полю-ссылке.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Путь к файлу для загрузки на сервер | |
| name | No | Имя файла в системе (по умолчанию — из пути) | |
| target_collection | No | ||
| target_id | No | ||
| target_field | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: creates metadata record, stores binary data, optional linking. But does not disclose error handling, size limits, or authentication needs. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence, no filler, front-loaded with key action. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Missing details on return value, error conditions, and file size limits. For a 5-parameter tool with no output schema, the description is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description hints at optional linking parameters but does not name them explicitly. With only 40% schema coverage, description partially compensates but lacks detail on each parameter's role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool uploads a local file to SysImage, creates metadata, and stores binary data, with optional linking. It distinguishes from siblings like bpm_download_file and bpm_create_record.
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 explicit guidance on when to use this tool vs alternatives. No mention of prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bpm_workflow_catalogКаталог типичных сценариевARead-onlyIdempotent
Возвращает каталог типичных пользовательских сценариев работы с BPMSoft и какие tool-ы для них вызывать. Карта основных сущностей и их связей. Ограничения BPMSoft 1.8. Используйте в начале сессии, когда LLM-агент не знает с чего начать.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | No | Если указан — вернуть детали только этого сценария (id из общего каталога). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. Description adds context about being a catalog/guide, which is consistent but doesn't add new behavioral traits beyond purpose.
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, front-loaded with core purpose, no wasted words. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (one optional param, no output schema), description adequately indicates returned content (catalog, entity map). Could specify output structure more, but sufficient for its role.
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?
Input schema has 100% description coverage for the single parameter. Description does not add information beyond schema's parameter 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?
Description explicitly states it returns a catalog of typical user scenarios and maps entities/relationships, distinguishing it from sibling CRUD tools. Purpose is specific and actionable.
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?
Clear guidance 'use at the beginning of a session when the agent doesn't know where to start.' Explicit context provided, though no mention of when not to use or alternatives.
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.
32 tool updates
v0.2.0- First observed
bpm_batch_create - First observed
bpm_batch_delete - First observed
bpm_batch_update - First observed
bpm_count_records - First observed
bpm_create_record - First observed
bpm_delete_by_filter - First observed
bpm_delete_record - First observed
bpm_describe_instance - First observed
bpm_download_file - First observed
bpm_exec_process_element - First observed
bpm_field_delete - First observed
bpm_field_download - First observed
bpm_field_upload - First observed
bpm_find_field - First observed
bpm_get_collections - First observed
bpm_get_enum_values - First observed
bpm_get_record - First observed
bpm_get_records - First observed
bpm_get_schema - First observed
bpm_init - First observed
bpm_log_activity - First observed
bpm_lookup_value - First observed
bpm_post_feed - First observed
bpm_register_contact - First observed
bpm_run_process - First observed
bpm_search_records - First observed
bpm_search_unified - First observed
bpm_set_status - First observed
bpm_update_by_filter - First observed
bpm_update_record - First observed
bpm_upload_file - First observed
bpm_workflow_catalog
TDQS
Scored across 32 tools
Tools have distinct purposes, but some overlap exists between bpm_get_records, bpm_search_records, and bpm_search_unified. However, descriptions clarify differences.
All tools use a consistent bpm_verb_noun pattern in snake_case, making it easy to predict tool names.
32 tools is high, but the server covers a complex domain (BPMSoft). While slightly above ideal, each tool serves a distinct purpose.
The tool set covers CRUD, batch, search, file handling, processes, and more. Minor gaps like lacking process management tools, but overall comprehensive.
Maintenance
Related MCP Connectors
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server enabling AI agents to manage Bitrix24 features via standardized protocol
Let AI agents query data and act across all your business apps via MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceTransforms SAP S/4HANA or ECC systems into conversational AI interfaces by exposing all OData services as dynamic MCP tools. Enables natural language interactions with ERP data for querying, creating, updating, and deleting business entities through SAP BTP integration.26 npm132MIT
- AlicenseCqualityDmaintenanceTransforms SAP S/4HANA or ECC systems into conversational AI interfaces by exposing all OData services as dynamic MCP tools. Enables natural language interactions with ERP data including querying, creating, updating, and deleting entities through SAP BTP integration.1926 npm6MIT
- AlicenseNot gradedqualityDmaintenanceTransforms SAP S/4HANA or ECC systems into conversational AI interfaces by exposing OData services as dynamic MCP tools. Enables natural language interactions with ERP data for querying, creating, updating, and deleting business entities.26 npm1MIT
- AlicenseAqualityBmaintenanceMCP server for Creatio CRM that enables AI assistants to read, create, update, delete records, execute business processes, and manage settings via OData and REST APIs.1830 npm6MIT