mcpBPMSoft
Connect an MCP client to BPMSoft to read, search, modify, and automate CRM data via OData and ready-made scenarios.
Read, search, count, and paginate records using OData filters or Russian-language criteria (fields, operators, lookups).
Inspect collections, schemas, field labels, lookup/enum values, and entity relationships.
Create, update, and delete single records; resolve lookup values from text; validate required fields.
Bulk update/delete by filter with
expected_countpreview, confirmation tokens, and ETag concurrency checks.Batch create, update, and delete multiple records (OData v4
$batchor sequential fallback).Run analytics, aggregations, duplicate detection/check/merge, record cards, and user agenda queries.
Upload, download, and delete files (SysImage or binary fields) with per-user storage isolation.
Execute business processes and process elements; post feed messages; use ready scenarios for contacts, activities, and statuses.
Authenticate via HTTP session cookies/BPMCSRF or local stdio env credentials; inspect health and operation journal.
Benefit from idempotency keys, safe retry guidance, structured error codes, and operation audit trails.
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., "@mcpBPMSoft Show 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 для пропуска ошибочных записей.
Inputs: collection (required), records (required), continue_on_error.
bpm_batch_deleteПакетное удалениеADestructiveIdempotent
Удаляет несколько записей по UUID в одном $batch (только OData v4). Поддерживает continue_on_error. Действие необратимо.
Inputs: collection (required), ids (required), continue_on_error.
bpm_batch_updateПакетное обновлениеAIdempotent
Обновляет несколько записей в одном $batch (только OData v4). Lookup-поля резолвятся автоматически. Поддерживает continue_on_error.
Inputs: collection (required), updates (required), continue_on_error.
bpm_count_recordsКоличество записейARead-onlyIdempotent
Возвращает число записей коллекции через /$count, опционально с $filter.
Inputs: collection (required), filter.
bpm_create_recordСоздать записьA
Создаёт запись в коллекции (POST). Lookup-поля можно передавать человекочитаемыми текстовыми значениями — сервер автоматически разрешит UUID. Возвращает созданную запись.
Inputs: collection (required), data (required), strict_required.
bpm_delete_by_filterУдалить по фильтруADestructive
Находит записи по $filter и удаляет каждую через DELETE. Требует параметр expected_count: при несовпадении операция отменяется. Действие необратимо.
Inputs: collection (required), filter (required), expected_count (required).
bpm_delete_recordУдалить записьADestructiveIdempotent
Удаляет запись из коллекции по UUID (DELETE). Действие необратимо.
Inputs: collection (required), id (required).
bpm_describe_instanceКраткая сводка по инстансу BPMSoftARead-onlyIdempotent
Возвращает обзор инстанса: число коллекций, главные бизнес-сущности (Contact, Account, Activity, Lead, Opportunity, Order, Case — те, что реально присутствуют), счётчики записей в них, число пользовательских (Usr*) коллекций и кастомных полей в основных сущностях. Кеширует результат на 5 минут. Полезен в самом начале диалога с новым инстансом.
Inputs: no named parameters.
bpm_download_fileСкачать файл из SysImageARead-onlyIdempotent
Скачивает бинарные данные из SysImage по UUID и сохраняет в файл (если указан save_path).
Inputs: image_id (required), save_path.
bpm_exec_process_elementЗапустить элемент процессаA
Вызывает ProcessEngineService.svc/ExecProcElByUId с UID элемента. Используется для возобновления приостановленных элементов (например, пользовательских задач) уже выполняющегося процесса.
Inputs: element_uid (required).
bpm_field_deleteОчистить бинарное полеCDestructiveIdempotent
DELETE бинарных данных в поле сущности.
Inputs: collection (required), id (required), field (required).
bpm_field_downloadСкачать бинарь из поляBRead-onlyIdempotent
GET бинарных данных напрямую из поля сущности по схеме {Collection}({id})/{FieldName}. Сохраняет в save_path или возвращает размер.
Inputs: collection (required), id (required), field (required), save_path.
bpm_field_uploadЗагрузить бинарь в полеAIdempotent
PUT бинарных данных напрямую в поле сущности по схеме {Collection}({id})/{FieldName}. Используйте для произвольных бинарных полей (не только SysImage).
Inputs: collection (required), id (required), field (required), file_path (required).
bpm_find_fieldПоиск поля по подписиARead-onlyIdempotent
Находит поля по фрагменту русского/английского названия среди уже загруженных схем коллекций. Полезно когда пользователь оперирует «ИНН», «Город» и т.п.
Inputs: search (required), collection.
bpm_get_collectionsСписок коллекцийARead-onlyIdempotent
Возвращает доступные EntitySet (коллекции) BPMSoft из $metadata. Поддерживает фильтр-подстроку по имени.
Inputs: pattern.
bpm_get_enum_valuesЗначения справочника поляARead-onlyIdempotent
Возвращает значения справочника, к которому привязано lookup-поле указанной коллекции. Например, для Activity.ActivityCategory вернёт список всех категорий активностей с UUID и названиями. Полезно перед bpm_create_record/bpm_update_record для перечисления вариантов или поиска UUID по точному имени.
Inputs: collection (required), field (required), top.
bpm_get_recordЗапись по IDARead-onlyIdempotent
Возвращает одну запись коллекции по UUID с опциональными $select и $expand.
Inputs: collection (required), id (required), select, expand.
bpm_get_recordsСписок записей коллекцииARead-onlyIdempotent
Возвращает записи указанной OData-коллекции с фильтрацией ($filter), выборкой полей ($select), сортировкой ($orderby), $expand и $top/$skip. По умолчанию автопагинация выключена и применяется лимит max_records (избегаем переполнения контекста LLM). Установите auto_paginate=true и/или увеличьте max_records если нужен полный набор.
Inputs: collection, filter, select, top, +8 more.
bpm_get_schemaСхема коллекцииARead-onlyIdempotent
Возвращает схему коллекции: поля, типы, обязательность, lookup-связи. По возможности включает локализованные подписи (рус. названия) полей из SysSchema/SysEntitySchemaColumn.
Inputs: collection (required).
bpm_initПодключиться к BPMSoftAIdempotent
Инициализирует подключение к BPMSoft (URL, логин, пароль, версия OData, платформа) и проверяет учётные данные. Должен быть вызван первым, если сервер запущен без переменных окружения BPMSOFT_URL/USERNAME/PASSWORD. После успешного вызова все остальные инструменты становятся работоспособными.
Inputs: url (required), username (required), password (required), odata_version, +1 more.
bpm_log_activityЗафиксировать активностьA
Зафиксировать активность (задача, звонок, встреча) с привязкой к записи. Тип активности и владелец резолвятся по тексту через справочники. Поддерживает связь с Contact/Account/Opportunity.
Inputs: title (required), type, owner_name, related_collection, +3 more.
bpm_lookup_valueНайти UUID по значениюARead-onlyIdempotent
Резолвит UUID записи справочника по человекочитаемому значению (точное совпадение eq). При fuzzy=true и пустом результате повторяет поиск через contains() и возвращает кандидатов.
Inputs: collection (required), value (required), field, fuzzy.
bpm_post_feedОпубликовать сообщение в ленту записиA
Создаёт запись в коллекции SocialMessage для целевой записи (entity+id). Лента — основной канал комментариев BPMSoft. Параметры: collection (имя сущности), id (UUID записи), message (текст). Опционально: parent_id для ответа на сообщение.
Inputs: collection (required), id (required), message (required), parent_id.
bpm_register_contactЗарегистрировать контактA
Зарегистрировать контакт. Опционально создаёт/находит контрагента (Account) по имени и привязывает к нему контакт. Один вызов вместо create_record(Account)+create_record(Contact)+update_record. Все имена полей могут быть переданы на русском (caption) или латинице.
Inputs: name (required), email, phone, account_name, +2 more.
bpm_run_processЗапустить бизнес-процессA
Вызывает ProcessEngineService.svc/{ProcessName}/Execute. Передаёт входные параметры через query-string. Опционально возвращает результат указанного выходного параметра. Используется для запуска кастомных БП, обёртывающих сложную логику (например, ESQ-запросы с агрегацией, массовые операции, бизнес-логика).
Inputs: process_name (required), parameters, result_parameter_name.
bpm_search_recordsПоиск с критериями (рус.)ARead-onlyIdempotent
Альтернатива bpm_get_records с человекочитаемыми критериями. Принимает массив criteria вида [{field, op, value}], где field может быть на русском (caption), op — на русском («содержит», «равно», «за последние 7 дней», «между») или OData (eq/contains/...). Сервер сам соберёт $filter. Полезен, когда LLM не хочет писать OData синтаксис вручную.
Inputs: collection (required), criteria (required), join, select, +8 more.
bpm_search_unifiedСквозной поискARead-onlyIdempotent
Сквозной поиск по подстроке Name в основных коллекциях (Contact, Account, Lead, Opportunity). Возвращает плоский список совпадений с указанием коллекции и UUID. Подходит для запросов вида «найди всё про Иванова».
Inputs: query (required), collections, top.
bpm_set_statusУстановить статус записиAIdempotent
Установить статус записи по человекочитаемому имени. Сервер сам найдёт поле-статус в коллекции (StatusId/StageId) и разрешит UUID статуса в его справочнике.
Inputs: collection (required), id (required), status (required), status_field.
bpm_update_by_filterОбновить по фильтруA
Находит записи по $filter и обновляет каждую через PATCH. Требует параметр expected_count: если найдено иное число записей — операция отменяется (защита от случайного массового обновления).
Inputs: collection (required), filter (required), data (required), expected_count (required).
bpm_update_recordОбновить записьAIdempotent
Обновляет поля записи по UUID (PATCH). Lookup-поля с текстовыми значениями разрешаются автоматически. Идемпотентно при одинаковых данных.
Inputs: collection (required), id (required), data (required).
bpm_upload_fileЗагрузить файл в SysImageA
Загружает локальный файл в SysImage: создаёт запись метаданных и кладёт бинарные данные. Опционально привязывает к указанной записи по полю-ссылке.
Inputs: file_path (required), name, target_collection, target_id, +1 more.
bpm_workflow_catalogКаталог типичных сценариевARead-onlyIdempotent
Возвращает каталог типичных пользовательских сценариев работы с BPMSoft и какие tool-ы для них вызывать. Карта основных сущностей и их связей. Ограничения BPMSoft 1.8. Используйте в начале сессии, когда LLM-агент не знает с чего начать.
Inputs: scenario_id.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
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.
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.
A CRM you talk to: leads, deals and a pipeline board inside ChatGPT, Grok and other MCP clients.
MCP server enabling AI agents to manage Bitrix24 features via standardized protocol
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceTransforms 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.54 npm143MIT
- 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.1954 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.54 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.2477 npm6MIT