# MCP-сервер pnl-bro

pnl-bro — управленческий учёт малого бизнеса: операции по счетам, остатки, статьи, контрагенты, зарплата, ОПиУ, налоги, кредиты и имущество. MCP-сервер даёт ИИ-агенту те же возможности, что у человека в интерфейсе. Инструментов: 70.

## Подключение

- Адрес: `https://pnl-bro.ru/api/mcp` — Streamable HTTP, без сессий.
- Авторизация: заголовок `Authorization: Bearer <MCP-токен>`. Токен выпускается в pnl-bro: «Настройки → MCP для ИИ-агентов». Он привязан к одной организации и к правам, выбранным при выпуске; агент видит только инструменты разделов из тарифа и прав токена.
- Claude Code: `claude mcp add --transport http pnl-bro https://pnl-bro.ru/api/mcp --header "Authorization: Bearer <токен>"`.
- Claude Desktop, Cursor и другие клиенты с JSON-конфигом:

```json
{
  "mcpServers": {
    "pnl-bro": {
      "type": "http",
      "url": "https://pnl-bro.ru/api/mcp",
      "headers": {
        "Authorization": "Bearer <токен>"
      }
    }
  }
}
```

## Правила работы

- Начинай с `get_overview`: организация, доступные токену модули, счета и итоги месяца.
- Деньги — строки в рублях с точкой: `"1500"`, `"1500.50"`. В ответах — так же. Знак суммы задаёт тип операции, а не минус в строке.
- Даты — `YYYY-MM-DD`, месяцы — `YYYY-MM`. Время — московское.
- Списки отдаются страницами: если в ответе есть `nextCursor`, передай его в следующий вызов.
- Лимиты: 60 запросов в минуту на токен, 20 изменений в минуту на организацию. Массовые инструменты стоят дороже обычных.
- Ошибка инструмента приходит текстом в `error` — это ответ для тебя: исправь параметры и повтори.

## Журнал и отмена

- Каждое изменение пишется в журнал действий с состоянием «до» и «после» и отмечается именем токена.
- Все изменения одного вызова инструмента — один пакет (`batchId`). `list_activity` показывает события, `undo_activity` отменяет событие или весь пакет: целиком в обратном порядке или не отменяет ничего.
- Отмена отказывает, если запись изменили после события, — сначала отмени более поздние.
- Человек видит те же события в «Журнале действий» и может отменить их кнопкой.

## Чего через MCP нет

- Управление командой и ролями, выпуск и отзыв MCP-токенов, ввод ключей интеграций (ЮKassa, ZenMoney) и загрузка файлов выписок — только в интерфейсе. Загруженными импортами агент управлять может.

# Инструменты

## Дашборд

### `get_overview` — Обзор организации

Только чтение. Доступ: Дашборд или Счета бизнеса или Операции — просмотр.

Сводка: организация, модули, доступные этому токену, балансы счетов и доходы/расходы текущего месяца (кассовым методом, без переводов). Начни с этого инструмента.

Параметры:

Без параметров.

## Операции

### `list_transactions` — Операции

Только чтение. Доступ: Операции — просмотр.

Лента операций с фильтрами, новые сверху. Суммы в рублях: поступления положительные, списания отрицательные. До 200 строк за вызов; если есть nextCursor — передай его для следующей страницы. Без периода вызов считается тяжёлым.

Параметры:

- `from` (необязательный): string — Начало периода, YYYY-MM-DD
- `to` (необязательный): string — Конец периода, YYYY-MM-DD
- `type` (необязательный): "income" | "expense" | "transfer"
- `accountId` (необязательный): string — Счёт (источник или получатель)
- `articleId` (необязательный): string
- `counterparty` (необязательный): string — Точное имя контрагента
- `query` (необязательный): string — Поиск по описанию, контрагенту и статье
- `unallocated` (необязательный): boolean — Только неразнесённые (без статьи)
- `limit` (необязательный): integer (≥ 1, ≤ 200)
- `cursor` (необязательный): string — nextCursor из прошлого ответа

### `get_transaction` — Операция

Только чтение. Доступ: Операции — просмотр.

Одна операция по id, включая строки разбивки по статьям.

Параметры:

- `id`: string — id операции

### `create_transaction` — Создать операцию

Изменяет данные. Доступ: Операции — управление.

Создаёт поступление (income), списание (expense) или перевод (transfer) и пересчитывает балансы. Без articleId операция получает статью «Неразнесенное…» и к ней применяются автоправила. Для перевода нужен transferAccountId. payrollMonth (YYYY-MM) учитывается для выплаты З/П активному сотруднику. Расход за несколько месяцев (аренда, подписка за год) распределяй через accrualMonth + accrualMonths, иначе он весь ляжет в один месяц ОПиУ.

Параметры:

- `type`: "income" | "expense" | "transfer"
- `date`: string — Дата операции, YYYY-MM-DD
- `amount`: string — Сумма в рублях, положительная: "1500" или "1500.50"
- `accountId`: string — Счёт: для перевода — счёт списания
- `transferAccountId` (необязательный): string — Счёт получателя перевода
- `articleId` (необязательный): string — Статья из list_articles
- `counterparty` (необязательный): string
- `description` (необязательный): string
- `payrollMonth` (необязательный): string — Месяц З/П, YYYY-MM
- `accrualMonth` (необязательный): string — Месяц начисления расхода, YYYY-MM
- `accrualMonths` (необязательный): integer (≥ 1, ≤ 120) — На сколько месяцев распределить расход в ОПиУ начиная с accrualMonth (годовая подписка 120 000 на 12 → по 10 000 в месяц). Только для списаний; у выплат З/П всегда 1
- `loanId` (необязательный): string — Кредит — для статей платежей по кредиту

### `update_transaction` — Изменить операцию

Изменяет данные. Доступ: Операции — управление.

Меняет переданные поля операции (остальные остаются как есть) и пересчитывает балансы. Тип операции менять нельзя. У операции с разбивкой нельзя менять сумму (сначала убери разбивку через set_transaction_splits). При смене статьи снимает отметку автоправила. accrualMonth/accrualMonths меняют распределение расхода по месяцам ОПиУ (у строк разбивки оно своё — set_transaction_splits). Отменяется из журнала действий.

Параметры:

- `id`: string — id операции
- `date` (необязательный): string
- `amount` (необязательный): string — Сумма в рублях, положительная: "1500" или "1500.50"
- `accountId` (необязательный): string — Счёт
- `transferAccountId` (необязательный): string — Счёт получателя перевода
- `articleId` (необязательный): string — Статья из list_articles
- `counterparty` (необязательный): string | null — null — убрать контрагента
- `description` (необязательный): string
- `payrollMonth` (необязательный): string | null
- `accrualMonth` (необязательный): string
- `accrualMonths` (необязательный): integer (≥ 1, ≤ 120) — На сколько месяцев распределить расход в ОПиУ начиная с accrualMonth (годовая подписка 120 000 на 12 → по 10 000 в месяц). Только для списаний; у выплат З/П всегда 1
- `loanId` (необязательный): string | null

### `set_transactions_article` — Разнести статью

Изменяет данные. Доступ: Операции — управление.

Назначает статью нескольким операциям (до 100). Статья должна подходить к типу каждой операции; неподходящие операции пропускаются с объяснением.

Параметры:

- `ids`: string[] (до 100) — id операций
- `articleId`: string — Статья из list_articles

### `delete_transaction` — Удалить операцию

Изменяет данные, удаляющий. Доступ: Операции — управление.

Удаляет операцию и откатывает её влияние на балансы. Восстановить можно из журнала действий в интерфейсе.

Параметры:

- `id`: string — id операции

### `update_transactions` — Изменить несколько операций

Изменяет данные. Доступ: Операции — управление.

Массово меняет у операций (до 100) статью, контрагента и/или описание — передай хотя бы одно поле. Статья должна подходить к типу операции; операции с разбивкой при смене статьи и переводы при смене контрагента пропускаются с объяснением в failed. Новый контрагент создаётся в справочнике. Все изменения — один пакет: отменяются вместе из журнала действий (undo_activity).

Параметры:

- `ids`: string[] (до 100) — id операций из list_transactions
- `articleId` (необязательный): string — Статья из list_articles
- `counterparty` (необязательный): string | null — Имя контрагента; null или пустая строка — убрать
- `description` (необязательный): string

### `delete_transactions` — Удалить несколько операций

Изменяет данные, удаляющий. Доступ: Операции — управление.

Удаляет операции (до 100) вместе с их разбивкой и откатывает влияние на балансы. Все удаления — один пакет: восстанавливаются вместе из журнала действий (undo_activity). Ненайденные id возвращаются в missing.

Параметры:

- `ids`: string[] (до 100) — id операций из list_transactions

### `set_transaction_splits` — Разбить операцию по статьям

Изменяет данные. Доступ: Операции — управление.

Заменяет строки разбивки поступления или списания: одна операция делится на несколько статей (до 50 строк). Сумма строк должна равняться сумме операции; суммы положительные, знак берётся из типа операции. Статьи — того же типа (list_articles). Для статей «Выплата тела кредита» и «Проценты по кредиту» нужен loanId. Пустой список splits убирает разбивку. Переводы и выплаты З/П не разбиваются. Текущая разбивка видна в get_transaction.

Параметры:

- `id`: string — id операции
- `splits`: ({ articleId: string; amount: string; counterparty?: string; accrualMonth?: string; accrualMonths?: integer (≥ 1, ≤ 120); loanId?: string })[] (до 50)

### `combine_into_transfer` — Объединить в перевод

Изменяет данные. Доступ: Операции — управление.

Объединяет списание с одного счёта и поступление на другой счёт с одинаковой суммой (например, две стороны перевода из выписок разных банков) в один перевод между счетами. Списание становится переводом, поступление удаляется; балансы не меняются. Операции с разбивкой не объединяются. Отменяется из журнала действий одним пакетом.

Параметры:

- `ids`: string[] (до 2) — id списания и поступления из list_transactions

## Импорт выписок

### `list_imports` — Импорты выписок

Только чтение. Доступ: Импорт выписок — просмотр.

Загруженные выписки и файлы операций, новые сверху: имя файла, счета, дата загрузки, сколько операций в импорте сейчас и их сумма в рублях (поступления минус списания, без переводов). Файлы загружает человек в интерфейсе; агент может смотреть операции импорта (get_import), править их инструментами операций и удалять импорт целиком (delete_import). До 200 строк за вызов, дальше — nextCursor.

Параметры:

- `limit` (необязательный): integer (≥ 1, ≤ 200)
- `cursor` (необязательный): string — nextCursor из прошлого ответа

### `get_import` — Операции импорта

Только чтение. Доступ: Импорт выписок — просмотр.

Импорт и его операции, новые сверху, в формате list_transactions (суммы в рублях: поступления положительные, списания отрицательные). До 200 операций за вызов, дальше — nextCursor. id импорта — из list_imports.

Параметры:

- `id`: string — id импорта из list_imports
- `limit` (необязательный): integer (≥ 1, ≤ 200)
- `cursor` (необязательный): string — nextCursor из прошлого ответа

### `delete_import` — Удалить импорт

Изменяет данные, удаляющий. Доступ: Импорт выписок — управление.

Удаляет импорт целиком: все его операции (балансы счетов откатываются) и сам импорт, после чего тот же файл можно загрузить заново. Счета, статьи и контрагенты, созданные при загрузке, остаются. Всё удаление — один пакет: восстанавливается из журнала действий (undo_activity).

Параметры:

- `id`: string — id импорта из list_imports

## Автоправила

### `list_auto_rules` — Автоправила

Только чтение. Доступ: Автоправила — просмотр.

Правила автоматической разноски статей в порядке применения (первое совпавшее побеждает).

Параметры:

Без параметров.

### `create_auto_rule` — Создать автоправило

Изменяет данные. Доступ: Автоправила — управление.

Добавляет правило автоматической разноски в конец списка: для операций раздела section с указанным контрагентом (точное совпадение) и/или фрагментом описания (без учета регистра) назначается articleId. К уже существующим операциям правило не применяется — для этого preview_auto_rule и apply_auto_rule.

Параметры:

- `section`: "income" | "expense"
- `counterparty` (необязательный): string
- `descriptionContains` (необязательный): string
- `articleId`: string — Статья из list_articles

### `update_auto_rule` — Изменить автоправило

Изменяет данные. Доступ: Автоправила — управление.

Меняет условия или статью правила; непереданные поля не меняются, пустая строка в counterparty/descriptionContains снимает условие (хотя бы одно должно остаться). Уже разнесенные операции не меняются.

Параметры:

- `id`: string — Автоправило из list_auto_rules
- `section` (необязательный): "income" | "expense"
- `counterparty` (необязательный): string
- `descriptionContains` (необязательный): string
- `articleId` (необязательный): string — Статья из list_articles

### `set_auto_rule_enabled` — Включить или выключить автоправило

Изменяет данные. Доступ: Автоправила — управление.

Включает (enabled: true) или выключает правило. Выключенное правило не применяется к новым операциям и через apply_auto_rule.

Параметры:

- `id`: string — Автоправило из list_auto_rules
- `enabled`: boolean

### `delete_auto_rule` — Удалить автоправило

Изменяет данные, удаляющий. Доступ: Автоправила — управление.

Удаляет правило. Статьи уже разнесенных им операций остаются, снимается только отметка «Авто». Вернуть правило — отмена пакета в журнале действий.

Параметры:

- `id`: string — Автоправило из list_auto_rules

### `reorder_auto_rules` — Изменить порядок автоправил

Изменяет данные. Доступ: Автоправила — управление.

Задает порядок применения правил: ids — все правила организации из list_auto_rules ровно по одному разу, сверху вниз. Первое совпавшее правило побеждает.

Параметры:

- `ids`: string[] (до 1000)

### `preview_auto_rule` — Что изменит автоправило

Только чтение. Доступ: Автоправила — просмотр.

Операции, которым apply_auto_rule назначит статью правила: только неразнесенные («Неразнесенное поступление/списание»), совпавшие с условиями. count — сколько всего; список постранично, до 200 за вызов (cursor из nextCursor). Для выключенного правила показывает, что изменилось бы после включения.

Параметры:

- `id`: string — Автоправило из list_auto_rules
- `limit` (необязательный): integer (≥ 1, ≤ 200)
- `cursor` (необязательный): string

### `apply_auto_rule` — Применить автоправило к операциям

Изменяет данные. Доступ: Автоправила — управление.

Назначает статью включенного правила всем совпавшим неразнесенным операциям (их список — preview_auto_rule); остальные операции не трогает. Каждая измененная операция пишется в журнал, все вместе отменяются кнопкой «Пакет».

Параметры:

- `id`: string — Автоправило из list_auto_rules

## Счета бизнеса

### `list_accounts` — Счета

Только чтение. Доступ: Счета бизнеса — просмотр.

Счета и кассы организации с текущими балансами в рублях.

Параметры:

Без параметров.

### `list_archived_accounts` — Счета в архиве

Только чтение. Доступ: Счета бизнеса — просмотр.

Счета и кассы, перемещённые в архив (archive_account). Вернуть счёт из архива — restore_account с id отсюда.

Параметры:

Без параметров.

### `create_account` — Создать счёт

Изменяет данные. Доступ: Счета бизнеса — управление.

Добавляет счёт или кассу с начальным остатком на дату. Текущий баланс = начальный остаток + операции после этой даты. Подключение ЮKassa/ZenMoney (ключи) делается только в интерфейсе.

Параметры:

- `name`: string
- `type`: "bank_accounts" | "bank_cards" | "acquiring" | "cash" — Тип счета: bank_accounts — Расчётные счета в банках; bank_cards — Банковские карты; acquiring — Эквайринг; cash — Наличные и кассы
- `group`: string — Группа счетов в справочнике, например «Счета» или «Касса»
- `accountNumber` (необязательный): string — Номер счёта в банке
- `initialBalance` (необязательный): string — Начальный остаток в рублях, по умолчанию 0
- `initialBalanceDate` (необязательный): string — Дата начального остатка, YYYY-MM-DD: операции после неё меняют баланс. По умолчанию сегодня

### `update_account` — Изменить счёт

Изменяет данные. Доступ: Счета бизнеса — управление.

Меняет переданные поля счёта (название, номер, группу, тип); остальные остаются как есть. Переименование меняет название счёта и в уже записанных операциях. Начальный остаток — set_account_initial_balance. Счёт в архиве менять нельзя.

Параметры:

- `id`: string — id счёта из list_accounts
- `name` (необязательный): string
- `type` (необязательный): "bank_accounts" | "bank_cards" | "acquiring" | "cash" — Тип счета: bank_accounts — Расчётные счета в банках; bank_cards — Банковские карты; acquiring — Эквайринг; cash — Наличные и кассы
- `group` (необязательный): string
- `accountNumber` (необязательный): string — Номер счёта; пустая строка — убрать

### `set_account_initial_balance` — Начальный остаток счёта

Изменяет данные. Доступ: Счета бизнеса — управление.

Задаёт начальный остаток счёта на дату и пересчитывает текущий баланс: начальный остаток + все операции счёта после этой даты. Операции в эту дату и раньше в баланс не входят.

Параметры:

- `id`: string — id счёта из list_accounts
- `initialBalance`: string — Сумма в рублях, может быть отрицательной: "1500", "-200.50"
- `initialBalanceDate`: string — Дата остатка, YYYY-MM-DD

### `archive_account` — Счёт в архив

Изменяет данные, удаляющий. Доступ: Счета бизнеса — управление.

Перемещает счёт в архив: он пропадает из списков, операции и их суммы остаются. Вернуть — restore_account.

Параметры:

- `id`: string — id счёта из list_accounts

### `restore_account` — Вернуть счёт из архива

Изменяет данные. Доступ: Счета бизнеса — управление.

Возвращает счёт из архива. id — из list_archived_accounts.

Параметры:

- `id`: string — id счёта из list_archived_accounts

## Статьи операций

### `list_articles` — Статьи операций

Только чтение. Доступ: Статьи операций или Операции — просмотр.

Справочник статей. Статьи «Неразнесенное поступление/списание» означают отсутствие статьи. articleId из этого списка используется в create_transaction и set_transactions_article. section manual_opiu — ручные статьи ОПиУ (значения задаёт set_manual_opiu_entry). locked: true — системная статья, её нельзя менять и архивировать; system: true — общая для всех организаций. parentId годится для create_article.

Параметры:

- `section` (необязательный): "income" | "expense" | "transfer" | "manual_opiu"

### `list_archived_articles` — Статьи в архиве

Только чтение. Доступ: Статьи операций — просмотр.

Статьи организации, перемещённые в архив (archive_article). Вернуть — restore_article с id отсюда.

Параметры:

Без параметров.

### `create_article` — Создать статью

Изменяет данные. Доступ: Статьи операций — управление.

Добавляет статью операций организации. section: income (поступления), expense (списания), transfer (переводы), manual_opiu (ручной ввод в ОПиУ). parentId — статья верхнего уровня того же раздела из list_articles, тогда новая станет её субстатьёй. activityType для income/expense/transfer: Операционная, Финансовая, Инвестиционная. opiuType для income: Выручка, Доходы ниже EBITDA; для expense: Общепроизводственные, Производственные / Прямые переменные, Административные, Коммерческие, Расходы ниже EBITDA, Расходы ниже чистой прибыли; у transfer нет. Для manual_opiu activityType — тип, opiuType — категория этого типа (обязательны): Доход: Выручка | Доходы ниже EBITDA; Себестоимость: Прямые переменные [Производственные расходы]; Расход: Производственные / Прямые Переменные | Производственные / Прямые Производственные | Производственные / Общепроизводственные | Административные | Коммерческие | Расходы ниже EBITDA | Расходы ниже чистой прибыли; Возврат: Возврат.

Параметры:

- `section`: "income" | "expense" | "transfer" | "manual_opiu"
- `name`: string
- `parentId` (необязательный): string — Родительская статья из list_articles
- `activityType` (необязательный): string — Вид деятельности, для manual_opiu — тип
- `opiuType` (необязательный): string — Тип ОПиУ, для manual_opiu — категория
- `description` (необязательный): string

### `update_article` — Изменить статью

Изменяет данные. Доступ: Статьи операций — управление.

Меняет описание, вид деятельности и/или тип ОПиУ статьи организации; не переданные поля остаются как есть. Системные статьи (общие для всех, в том числе «Неразнесенное…») менять нельзя. Название и раздел не меняются. activityType для income/expense/transfer: Операционная, Финансовая, Инвестиционная. opiuType для income: Выручка, Доходы ниже EBITDA; для expense: Общепроизводственные, Производственные / Прямые переменные, Административные, Коммерческие, Расходы ниже EBITDA, Расходы ниже чистой прибыли; у transfer нет. Для manual_opiu activityType — тип, opiuType — категория этого типа (обязательны): Доход: Выручка | Доходы ниже EBITDA; Себестоимость: Прямые переменные [Производственные расходы]; Расход: Производственные / Прямые Переменные | Производственные / Прямые Производственные | Производственные / Общепроизводственные | Административные | Коммерческие | Расходы ниже EBITDA | Расходы ниже чистой прибыли; Возврат: Возврат. Для manual_opiu смена типа сбрасывает несовместимую категорию на первую категорию типа.

Параметры:

- `id`: string — id статьи из list_articles
- `description` (необязательный): string | null — null или пустая строка — убрать описание
- `activityType` (необязательный): string
- `opiuType` (необязательный): string | null — null — убрать тип ОПиУ (кроме manual_opiu)

### `archive_article` — Статью в архив

Изменяет данные, удаляющий. Доступ: Статьи операций — управление.

Перемещает статью организации в архив: её больше нельзя выбрать, операции с ней остаются. Субстатьи становятся статьями верхнего уровня (отмена пакета в журнале привяжет их обратно). Системные статьи удалить нельзя. Вернуть — restore_article.

Параметры:

- `id`: string — id статьи из list_articles

### `restore_article` — Вернуть статью из архива

Изменяет данные. Доступ: Статьи операций — управление.

Возвращает статью из архива. Субстатьи, отвязанные при архивации, этим не привязываются — для этого отмени пакет архивации в журнале (undo_activity).

Параметры:

- `id`: string — id статьи из list_archived_articles

## Контрагенты

### `list_counterparties` — Контрагенты

Только чтение. Доступ: Контрагенты — просмотр.

Справочник контрагентов с поиском по названию или ИНН, до 200 строк.

Параметры:

- `query` (необязательный): string
- `limit` (необязательный): integer (≥ 1, ≤ 200)

### `create_counterparty` — Создать контрагента

Изменяет данные. Доступ: Контрагенты — управление.

Добавляет контрагента. Если активный контрагент с таким названием уже есть — возвращает его (created: false). Группу «Сотрудники» назначить нельзя: сотрудники заводятся через create_employee. Отменяется в журнале действий.

Параметры:

- `name`: string
- `group` (необязательный): string
- `inn` (необязательный): string
- `comment` (необязательный): string

### `update_counterparty` — Изменить контрагента

Изменяет данные. Доступ: Контрагенты — управление.

Меняет название, группу, ИНН или комментарий активного контрагента (id из list_counterparties); непереданные поля не меняются, пустая строка в group/inn/comment очищает поле. Переименование меняет контрагента и во всех его операциях. Если новое название совпадает с другим активным контрагентом — это объединение: операции переходят к тому контрагенту, а этот уходит в архив (mergedIntoId). Группу «Сотрудники» назначить нельзя (станет пустой), у контрагента-сотрудника она сохраняется. Всё отменяется одним пакетом в журнале действий.

Параметры:

- `id`: string — Контрагент из list_counterparties
- `name` (необязательный): string
- `group` (необязательный): string
- `inn` (необязательный): string
- `comment` (необязательный): string

### `archive_counterparty` — Убрать контрагента в архив

Изменяет данные, удаляющий. Доступ: Контрагенты — управление.

Перемещает контрагента в архив (мягкое удаление). Операции с ним не меняются. Вернуть — restore_counterparty или отмена в журнале действий.

Параметры:

- `id`: string — Контрагент из list_counterparties

### `restore_counterparty` — Вернуть контрагента из архива

Изменяет данные. Доступ: Контрагенты — управление.

Возвращает контрагента из архива (id из list_archived_counterparties).

Параметры:

- `id`: string — Контрагент из list_archived_counterparties

### `list_archived_counterparties` — Архив контрагентов

Только чтение. Доступ: Контрагенты — просмотр.

Контрагенты в архиве, сначала недавно убранные, с поиском по названию или ИНН, до 200 строк.

Параметры:

- `query` (необязательный): string
- `limit` (необязательный): integer (≥ 1, ≤ 200)

## Зарплата

### `get_payroll_statement` — Ведомость З/П

Только чтение. Доступ: Зарплата — просмотр.

Зарплатная ведомость за месяц: начислено, выплачено (по операциям с этим месяцем З/П), долг за месяц и накопленный долг по каждому активному сотруднику.

Параметры:

- `month`: string — Месяц, YYYY-MM

### `list_employees` — Сотрудники

Только чтение. Доступ: Зарплата — просмотр.

Справочник сотрудников: должность, категория, оклад (fixedSalary, рубли), месяцы приема и увольнения (YYYY-MM), связанный контрагент. Уволенные (dismissedAt) остаются в списке. includeArchived=true добавляет удаленных (archived: true).

Параметры:

- `includeArchived` (необязательный): boolean

### `create_employee` — Добавить сотрудника

Изменяет данные. Доступ: Зарплата — управление.

Добавляет сотрудника в справочник З/П. Контрагент для выплат подбирается сам: counterpartyId (контрагент группы «Сотрудники» без сотрудника) или активный контрагент с тем же именем, иначе создается новый; он переводится в группу «Сотрудники». Имя должно быть уникальным среди активных сотрудников. Отменяется одним пакетом в журнале действий (вместе с изменением контрагента).

Параметры:

- `name`: string
- `position`: string
- `category`: "Производственный" | "Административный" | "Коммерческий" — Категория: Производственный, Административный, Коммерческий
- `fixedSalary`: string — Оклад в месяц, рубли
- `hiredAt`: string — Месяц приема, YYYY-MM
- `dismissedAt` (необязательный): string — Месяц увольнения, YYYY-MM
- `comment` (необязательный): string
- `counterpartyId` (необязательный): string — Необязательно: контрагент группы «Сотрудники» из list_counterparties

### `update_employee` — Изменить сотрудника

Изменяет данные. Доступ: Зарплата — управление.

Меняет поля активного сотрудника (id из list_employees); непереданные поля не меняются. dismissedAt: "YYYY-MM" — уволить с месяца, null — снять увольнение. Переименование меняет и связанного контрагента, и контрагента в его операциях. Оклад здесь — значение справочника; начисления конкретного месяца меняет set_payroll_entries. Отменяется в журнале действий.

Параметры:

- `id`: string — Сотрудник из list_employees
- `name` (необязательный): string
- `position` (необязательный): string
- `category` (необязательный): "Производственный" | "Административный" | "Коммерческий" — Категория: Производственный, Административный, Коммерческий
- `fixedSalary` (необязательный): string — Оклад в месяц, рубли
- `hiredAt` (необязательный): string — Месяц приема, YYYY-MM
- `dismissedAt` (необязательный): string | null — Месяц увольнения YYYY-MM или null
- `comment` (необязательный): string

### `archive_employee` — Удалить сотрудника

Изменяет данные, удаляющий. Доступ: Зарплата — управление.

Убирает сотрудника из справочника и ведомости (мягкое удаление). Если сотрудник просто ушел — лучше update_employee с dismissedAt. Связанный контрагент и операции не меняются. Вернуть — отмена в журнале действий.

Параметры:

- `id`: string — Сотрудник из list_employees

### `set_payroll_entries` — Изменить начисления в ведомости З/П

Изменяет данные. Доступ: Зарплата — управление.

Меняет начисления в зарплатной ведомости: фикс (fixedSalary), премию (bonus) и удержания (deductions) сотрудника за месяц, до 36 строк за вызов. Непереданные поля остаются как есть. Выплачено считается по операциям и здесь не меняется. Каждое изменение пишется в журнал действий и отменяется там кнопкой «Отменить». employeeId — из get_payroll_statement.

Параметры:

- `entries`: ({ employeeId: string; month: string; fixedSalary?: string; bonus?: string; deductions?: string })[] (до 36)

## Прибыли и убытки

### `get_profit_loss` — Доходы и расходы по статьям

Только чтение. Доступ: Прибыли и убытки — просмотр.

Агрегаты поступлений и списаний по статьям за период по дате операции (кассовый метод; строки разбивки учитываются по своим статьям, переводы исключены). Это не полный ОПиУ: месяцы начисления и ручные статьи ОПиУ не применяются.

Параметры:

- `from`: string — Начало периода, YYYY-MM-DD
- `to`: string — Конец периода, YYYY-MM-DD

### `list_manual_opiu_entries` — Ручные статьи ОПиУ

Только чтение. Доступ: Прибыли и убытки — просмотр.

Ручные статьи отчёта ОПиУ (раздел manual_opiu: начисления, которых нет в движении денег, — например, выручка по актам или амортизация вне модуля имущества) и их значения в рублях по периодам выбранного типа. Без periodKey — все периоды этого типа. Значения вносятся через set_manual_opiu_entry.

Параметры:

- `periodType`: "month" | "quarter" | "year" — Период: month, quarter или year
- `periodKey` (необязательный): string — Ключ периода: месяц YYYY-MM, квартал YYYY-Q1…YYYY-Q4, год YYYY

### `set_manual_opiu_entry` — Внести значение ручной статьи ОПиУ

Изменяет данные. Доступ: Прибыли и убытки — управление.

Записывает сумму ручной статьи ОПиУ за период (месяц, квартал или год). amount — рубли; "0" удаляет значение. Статья — из list_manual_opiu_entries. Отменяется из журнала действий (undo_activity).

Параметры:

- `articleId`: string — Ручная статья из list_manual_opiu_entries
- `periodType`: "month" | "quarter" | "year" — Период: month, quarter или year
- `periodKey`: string — Ключ периода: месяц YYYY-MM, квартал YYYY-Q1…YYYY-Q4, год YYYY
- `amount`: string — Сумма в рублях, "0" — удалить значение

## Налоги

### `get_taxes` — Налоги за год

Только чтение. Доступ: Налоги — просмотр.

Налоги на прибыль за год по месяцам — как на странице «Налоги»: начисленный налог (вводится вручную, set_tax_accrual) и оплаты — операции-списания со статьёй «Налоги на доходы (прибыль)» по дате платежа, с итогами. Оплаты — обычные операции: менять их через update_transaction, удалять через delete_transaction (id в payments).

Параметры:

- `year`: integer (≥ 2000, ≤ 2100) — Год, например 2026

### `set_tax_accrual` — Задать начисленный налог

Изменяет данные. Доступ: Налоги — управление.

Задаёт начисленный налог на прибыль за месяц года (заменяет прежнее значение; "0" — обнулить). Оплаты налога здесь не меняются — это операции (create_transaction со статьёй налога). Отменяется из журнала действий.

Параметры:

- `year`: integer (≥ 2000, ≤ 2100) — Год, например 2026
- `month`: integer (≥ 1, ≤ 12) — Месяц, 1–12
- `amount`: string — Начисленный налог в рублях

## Кредиты

### `list_loans` — Кредиты

Только чтение. Доступ: Кредиты — просмотр.

Список кредитов организации: сумма кредита (тело), начисленные проценты, даты получения и последнего платежа, срок в месяцах, а также выплачено тела и процентов — по операциям и разбивкам со статьями «Выплата тела кредита» / «Проценты по кредиту», привязанным к кредиту (loanId). По умолчанию только действующие; archived=true — только архивные. id кредита нужен для update_loan, archive_loan/restore_loan и как loanId в операциях платежей.

Параметры:

- `archived` (необязательный): boolean — true — показать кредиты в архиве вместо действующих

### `create_loan` — Добавить кредит

Изменяет данные. Доступ: Кредиты — управление.

Добавляет кредитный договор. Срок задаётся либо датой последнего платежа lastPaymentAt (срок считается по месяцам от receivedAt включительно), либо termMonths (0–600; тогда lastPaymentAt = receivedAt + termMonths − 1 мес.). Платежи по кредиту — обычные операции-списания со статьёй «Выплата тела кредита» или «Проценты по кредиту» и loanId (create_transaction). Отменяется из журнала действий.

Параметры:

- `name`: string — Название кредита
- `principalAmount`: string — Сумма кредита (тело) в рублях
- `accruedInterestAmount` (необязательный): string — Начисленные проценты за весь срок, в рублях
- `receivedAt` (необязательный): string — Дата получения, YYYY-MM-DD
- `lastPaymentAt` (необязательный): string — Дата последнего платежа, YYYY-MM-DD
- `termMonths` (необязательный): integer (≥ 0, ≤ 600) — Срок в месяцах, если не задан lastPaymentAt

### `update_loan` — Изменить кредит

Изменяет данные. Доступ: Кредиты — управление.

Меняет переданные поля действующего (не архивного) кредита, остальные остаются как есть. Изменение receivedAt или lastPaymentAt пересчитывает срок в месяцах; null очищает дату. id — из list_loans. Отменяется из журнала действий.

Параметры:

- `id`: string — id кредита из list_loans
- `name` (необязательный): string
- `principalAmount` (необязательный): string — Сумма кредита в рублях
- `accruedInterestAmount` (необязательный): string — Начисленные проценты в рублях
- `receivedAt` (необязательный): string | null — Дата получения, YYYY-MM-DD; null — очистить
- `lastPaymentAt` (необязательный): string | null — Дата последнего платежа, YYYY-MM-DD; null — очистить

### `archive_loan` — Убрать кредит в архив

Изменяет данные, удаляющий. Доступ: Кредиты — управление.

Перемещает кредит в архив (мягкое удаление): он пропадает из списка кредитов, операции платежей остаются как есть. Вернуть — restore_loan или отменой в журнале действий.

Параметры:

- `id`: string — id кредита из list_loans

### `restore_loan` — Восстановить кредит

Изменяет данные. Доступ: Кредиты — управление.

Возвращает кредит из архива. id — из list_loans с archived=true.

Параметры:

- `id`: string — id архивного кредита

## Имущество

### `list_property_assets` — Имущество

Только чтение. Доступ: Имущество — просмотр.

Список имущества (основных средств) с линейной амортизацией: стоимость, месяц начала и окончания амортизации, срок, амортизация в месяц и в текущем месяце, самортизировано на сегодня, остаточная стоимость, признак полной амортизации. Амортизация попадает в ОПиУ. По умолчанию только действующее; archived=true — только архивное.

Параметры:

- `archived` (необязательный): boolean — true — показать имущество в архиве вместо действующего

### `create_property_asset` — Добавить имущество

Изменяет данные. Доступ: Имущество — управление.

Добавляет имущество (основное средство). Стоимость амортизируется равными долями по месяцам начиная с depreciationStartMonth в течение usefulLifeMonths. Отменяется из журнала действий.

Параметры:

- `name`: string
- `cost`: string — Стоимость в рублях, больше нуля
- `depreciationStartMonth`: string — Месяц начала амортизации, YYYY-MM
- `usefulLifeMonths`: integer (≥ 1, ≤ 600) — Срок полезного использования в месяцах, 1–600
- `comment` (необязательный): string

### `update_property_asset` — Изменить имущество

Изменяет данные. Доступ: Имущество — управление.

Меняет переданные поля действующего (не архивного) имущества, остальные остаются как есть. id — из list_property_assets. Отменяется из журнала действий.

Параметры:

- `id`: string — id имущества из list_property_assets
- `name` (необязательный): string
- `cost` (необязательный): string — Стоимость в рублях
- `depreciationStartMonth` (необязательный): string — Месяц начала амортизации, YYYY-MM
- `usefulLifeMonths` (необязательный): integer (≥ 1, ≤ 600) — Срок полезного использования в месяцах, 1–600
- `comment` (необязательный): string

### `archive_property_asset` — Убрать имущество в архив

Изменяет данные, удаляющий. Доступ: Имущество — управление.

Перемещает имущество в архив (мягкое удаление): его амортизация перестаёт попадать в ОПиУ. Вернуть — restore_property_asset или отменой в журнале действий.

Параметры:

- `id`: string — id имущества из list_property_assets

### `restore_property_asset` — Восстановить имущество

Изменяет данные. Доступ: Имущество — управление.

Возвращает имущество из архива. id — из list_property_assets с archived=true.

Параметры:

- `id`: string — id архивного имущества

## Дзен-мани

### `sync_zenmoney` — Синхронизировать ZenMoney

Изменяет данные. Доступ: Дзен-мани — управление.

Загружает новые операции выбранной карты ZenMoney в счёт банковской карты (тип bank_cards), к которому ZenMoney уже подключён в интерфейсе. Уже загруженные операции пропускаются, статьи назначаются автоправилами. Вся синхронизация — один пакет в журнале, отменяется целиком.

Параметры:

- `accountId`: string — id счёта банковской карты из list_accounts

## ЮKassa

### `sync_yookassa` — Синхронизировать ЮKassa

Изменяет данные. Доступ: ЮKassa — управление.

Загружает успешные платежи ЮKassa в счёт эквайринга (тип acquiring) с уже подключённой и проверенной в интерфейсе ЮKassa: поступление на сумму платежа и списание комиссии. Уже загруженные платежи пропускаются, статьи назначаются автоправилами. mode=new — с прошлой синхронизации (или за 90 дней), mode=all — вся история (долго). Вся синхронизация — один пакет в журнале, отменяется целиком.

Параметры:

- `accountId`: string — id счёта эквайринга из list_accounts
- `mode` (необязательный): "new" | "all" — По умолчанию new

### `set_integration_auto_sync` — Автообновление интеграции

Изменяет данные. Доступ: ЮKassa или Альфа-Банк API — управление.

Включает или выключает фоновое автообновление интеграции счёта (ЮKassa на счёте эквайринга, Альфа-Банк API на расчётном счёте). Включённое автообновление забирает новые операции каждые 5 минут; при включении первое обновление — в течение минуты. Статус виден в list_integrations и list_accounts (поле sync).

Параметры:

- `accountId`: string — id счёта из list_accounts
- `enabled`: boolean — true — включить, false — выключить

### `list_integrations` — Интеграции

Только чтение. Доступ: ЮKassa или Альфа-Банк API или Дзен-мани — просмотр.

Подключённые интеграции счетов: ЮKassa (эквайринг), Альфа-Банк API (расчётный счёт), ZenMoney (карта). Для каждой — счёт, включена ли (ключ проверен), автообновление (null — только ручная загрузка), строка статуса, время последнего обновления и проверки, последняя ошибка; для Альфы — остаток по данным банка на дату, наш остаток и срок сертификата. Ключи и ссылка вебхука не выдаются. Загрузить сейчас — sync_yookassa / sync_alfabank / sync_zenmoney, проверить ключ — check_integration, автообновление — set_integration_auto_sync.

Параметры:

Без параметров.

### `check_integration` — Проверить подключение интеграции

Изменяет данные. Доступ: ЮKassa или Альфа-Банк API — управление.

Проверяет сохранённый в интерфейсе ключ интеграции счёта пробным запросом: ЮKassa — запрос к API магазина, Альфа-Банк — остаток за вчера. Провайдер определяется по счёту. Принятый ключ включает интеграцию и снимает паузу автообновления; отклонённый — выключает её до следующей успешной проверки. ZenMoney проверки не имеет. Ключи через MCP не вводятся.

Параметры:

- `accountId`: string — id счёта из list_integrations

## Альфа-Банк API

### `sync_alfabank` — Синхронизировать Альфа-Банк

Изменяет данные. Доступ: Альфа-Банк API — управление.

Загружает выписку Альфа-Банка (Alfa API) в расчётный счёт, к которому интеграция уже подключена и проверена в интерфейсе. Берёт дни с прошлой синхронизации до сегодня (не раньше даты начала, не больше 31 дня за вызов), раз в сутки перепроверяет неделю. Уже загруженные операции пропускаются, статьи — автоправилами, новые контрагенты создаются с ИНН. Вся синхронизация — один пакет в журнале, отменяется целиком. Обычно не нужен: автообновление и так идёт каждые 5 минут.

Параметры:

- `accountId`: string — id расчётного счёта из list_accounts

## Журнал действий

### `list_activity` — Журнал действий

Только чтение. Доступ: Журнал действий — просмотр.

События журнала действий, новые сверху, до 100 за вызов (nextCursor — следующая страница). Каждое изменение данных — из интерфейса и через MCP — пишется сюда. batchId объединяет изменения одного действия: одного вызова MCP-инструмента или одной массовой операции. undoable — можно ли отменить через undo_activity. Фильтры: период, тип объекта (transaction, account, article, counterparty, employee, auto_rule, loan, property_asset, tax_entry, manual_opiu_entry, statement_import, payroll_entry), id объекта, batchId, только через MCP.

Параметры:

- `from` (необязательный): string — С даты, YYYY-MM-DD
- `to` (необязательный): string — По дату включительно, YYYY-MM-DD
- `entityType` (необязательный): string
- `entityId` (необязательный): string
- `batchId` (необязательный): string
- `onlyMcp` (необязательный): boolean — Только изменения, сделанные через MCP
- `includeUndone` (необязательный): boolean — Показывать и отменённые события (по умолчанию да)
- `limit` (необязательный): integer (≥ 1, ≤ 100)
- `cursor` (необязательный): string — nextCursor из прошлого ответа

### `undo_activity` — Отменить действие

Изменяет данные, удаляющий. Доступ: Журнал действий — управление.

Отменяет событие журнала (eventId) или все события одного действия (batchId — например, всё, что сделал один вызов MCP-инструмента). Пакет отменяется целиком в обратном порядке или не отменяется вовсе. Отмена отказывает, если запись изменили после события: тогда сначала отмени более поздние события. Отмена сама пишется в журнал и её тоже можно отменить. Используй, чтобы исправить собственную ошибку; id бери из list_activity.

Параметры:

- `eventId` (необязательный): string
- `batchId` (необязательный): string
