Ошибки и ограничения
Когда операция отклонена или завершилась ошибкой, TalkBar отвечает коротким кодом и предложением о том, что нужно изменить. Ассистентам и скриптам следует ориентироваться на код; предложение предназначено для людей. На этой странице перечислены все коды и правила, которые за ними стоят.
Формат ошибки
В MCP отклонённая или неудачная операция — это обычный результат инструмента с isError: true. В пакете это поле error записи. В talkbar-cli --output json ошибка выводится на стандартный вывод. Формат везде одинаковый:
{
"error": {
"code": "invalid_arguments",
"message": "notes.create does not take `content`. Note text goes in markdown. It takes: markdown, pinned, projectId, sessionIds, title, workspaceId. Arguments: talkbar_tools {\"tool\":\"notes.create\"}"
}
}
Некоторые коды добавляют поля, перечисленные ниже. Ошибку протокола JSON-RPC вместо этого получают только вызов инструмента с именем, отличным от пяти инструментов MCP, и вызов, отменённый вашим клиентом.
Коды ошибок
| Код | Что означает | Что делать |
|---|---|---|
invalid_arguments | Неверен сам запрос: неизвестный аргумент, неверный тип, значение вне диапазона или не из списка допустимых, отсутствует обязательный аргумент, пустой идентификатор. | Измените запрос. В сообщении назван аргумент; talkbar_tools {"tool": "<id>"} или talkbar-cli tools info <id> показывает, что принимает операция. |
not_found | Идентификатор неизвестен, относится к другому пространству или элемент находится в корзине. Также неизвестное имя операции. | Найдите нужный идентификатор с помощью talkbar_find или списка. Если элемент в корзине, в сообщении будет «… is in the Trash; restore it first». |
turned_off | Вы выключили операцию в разделе Настройки → Доступ по MCP, или MCP выключен. Только для MCP. | Попросите пользователя включить её. Повтор вызова не поможет. |
failed | Запрос составлен правильно, но текущее состояние элемента не позволяет его выполнить (например, «A topic with this name already exists»), его блокирует правило администратора или внутри TalkBar что-то пошло не так. | Прочитайте сообщение. Измените состояние элемента или запрос; не повторяйте тот же вызов без изменений. |
declined | Пользователь не подтвердил вызов talkbar_delete или не ответил в течение 5 минут. Ничего не выполнено. | Не повторяйте сами. Спросите пользователя, чего он хочет. |
confirmation_unavailable | Вызов talkbar_delete пришёл от клиента, который не умеет спрашивать пользователя, а Разрешить удаление без подтверждения выключено. Ничего не выполнено. | Используйте клиент, который поддерживает запросы к пользователю по MCP (elicitation), или попросите пользователя изменить параметр. |
busy | Другое изменение успело обратиться к базе данных раньше, или уже идёт выполнение экспорта. Содержит "retryable": true и retryAfterMs. | Подождите retryAfterMs и отправьте тот же вызов снова. Если вызов что-то создавал, сначала проверьте, что этого ещё нет. |
conflict | notes.update отправлен с expectedUpdatedAt, которого у заметки уже нет: кто-то изменил её после того, как вы её прочитали. Содержит текущий updatedAt заметки. | Прочитайте заметку заново с помощью notes.get и внесите правку в её текущее содержимое. |
session_recording | Сессия ещё записывается. Возвращается для sessions.trash, изменений участников (sessions.speakers.rename, .link, .unlink) и exports.enqueue. | Повторите после окончания записи, когда sessions.recording перестанет её возвращать. |
limit_reached | Фиксированное ограничение самого элемента, а не тарифа. Содержит limit и max. Сейчас это: в сессии не больше 24 карточек знаний ("limit": "sessionCards"). | Сначала освободите место, например уберите карточку с помощью sessions.cards.detach. |
plan_limit | Ваш тариф TalkBar этого не позволяет. Содержит limit, а для лимитов по количеству — max, used и plan. | Освободите место или перейдите на тариф выше в приложении. Повтор не поможет. См. Лимиты тарифа. |
invalid_arguments или failed?
invalid_argumentsозначает, что нужно изменить запрос: неверное значение, неизвестный тип или цвет, пустое название.failedозначает, что запрос в порядке, но текущее состояние элемента не позволяет его выполнить: «A topic with this name already exists», «A series with this id already exists; use another id or change the existing one», «Archived series cannot take new sessions».
busy и повторные попытки
{
"error": {
"code": "busy",
"message": "TalkBar's database was busy with another write. Try the same call again; if it created something, check first that it is not already there.",
"retryable": true,
"retryAfterMs": 1000
}
}
retryAfterMs равен 1 000 мс, если база данных была занята, и 5 000 мс, если уже идёт выполнение экспорта.
Лимиты тарифа
Большинство действий ассистента тарифом не ограничены. Ограничены эти операции, потому что они увеличивают количество, которое ограничивает ваш тариф:
| Операция | limit | Что учитывается |
|---|---|---|
projects.create, projects.restore | projects | Проекты в пространстве, с которым работает вызов |
sessions.restore | sessions | Хранящиеся сессии в этом пространстве |
При достижении лимита вызов отклоняется:
{
"error": {
"code": "plan_limit",
"limit": "projects",
"max": 1,
"used": 1,
"plan": "free",
"message": "Project limit reached (1 of 1 on Free): your plan includes 1 project, and this workspace already has 1. Move a project to Trash or upgrade the plan in TalkBar, then try again; plan.get lists the plans above Free."
}
}
- Тариф определяется лицензией, активированной в приложении. Ассистент не может его изменить.
plan.getсообщает тариф, каждый лимит с текущим использованием и тарифы выше текущего.- На Business, самом старшем тарифе, сообщение заканчивается фразой «Move a project to Trash, then try again.».
Что входит в каждый тариф, см. в разделе Тарифы и лицензия.
Параллельная работа
- Изменения выполняются по одному внутри одного MCP-сервера или процесса
talkbar-cli, поэтому параллельные вызовы одного ассистента никогда не конфликтуют. Чтение выполняется параллельно. - Другие процессы: когда записывает другая программа (приложение во время записи сессии или второй MCP-сервер), изменение ждёт её до 5 секунд, а затем отвечает
busy. - Экспорт:
exports.runвыполняется вне этой очереди, потому что доставка может занимать много времени и не должна задерживатьexports.cancel. На одном сервере одновременно выполняется только один экспорт; второй отвечаетbusy. - До четырёх вызовов одновременно: одно MCP-подключение выполняет не больше четырёх вызовов инструментов одновременно. Ответы могут приходить не в том порядке, что запросы.
- Отменённые запросы: когда клиент отменяет вызов, он получает ошибку JSON-RPC (
-32603, «Request cancelled by the client»), а не код ошибки с этой страницы. Запрос, отменённый до начала, не выполняется, а изменение, которое ещё ждало своей очереди, отбрасывается. Если вы выключите операцию, пока изменение ждёт, оно ответитturned_off.
Одно долго работающее MCP-подключение быстрее, чем запуск talkbar-cli для каждого вызова. В командной строке лучше использовать tools batch.
Правила для аргументов
TalkBar строго проверяет аргументы, поэтому ошибка называется явно, а не игнорируется молча:
- Неизвестные аргументы отклоняются с указанием имени и списка аргументов, которые принимает операция. Если текст заметки передан в
content,textилиbody, приходит подсказка «Note text goes in markdown.». Неизвестные ключи внутри вложенного объекта, описанного в схеме, тоже отклоняются. - Неверные значения отклоняются до поиска. Неверный тип, значение не из списка допустимых или вне диапазона либо неверный элемент массива дают
invalid_argumentsещё до того, как TalkBar начнёт искать идентификаторы. Поэтому при неизвестном идентификаторе и неверном значении будет названо значение; при верном значении и неизвестном идентификаторе —not_found. - Отсутствующие обязательные аргументы называются следующими (
noteId is required), тоже до поиска. - Точные значения. Допустимые значения должны совпадать точно:
"Note"или" any "отклоняются там, где ожидаетсяnoteилиany. - Диапазоны не подгоняются.
limit,maxCharsилиoffsetвне диапазона из схемы отклоняются. - Идентификаторы не могут быть пустыми. Аргумент, имя которого оканчивается на
Id, если он передан, не может быть""; чтобы очистить необязательный, используйтеnull. Список, имя которого оканчивается наIds, не может содержать пустой идентификатор. - Никаких управляющих символов ни в одном аргументе, кроме табуляции и переводов строки.
args— это объект. Если аргументов нет, не передавайте его или передайтеnull; массив, число или строка отклоняются с сообщением «arguments must be an object».- Названия, которые не могут быть пустыми, проверяются после удаления пробелов по краям, поэтому
" "считается пустым. Заметки, названия чатов и имя в профиле могут быть пустыми, как в приложении. - Время в прошлом принимается там, где его принимает приложение, например при добавлении встречи, которая уже прошла.
- Пять инструментов MCP отклоняют ключи, которых не принимают.
talkbar_read,talkbar_changeиtalkbar_deleteпринимаютtool(сargs) илиcalls, но не оба сразу, аstopOnErrorдолжен бытьtrueилиfalse.
Безопасное повторение изменений
Отправить одно и то же изменение дважды безопасно. Повторный вызов тоже завершается успешно и сообщает текущее состояние:
- Перемещение в корзину того, что уже в корзине, или восстановление того, что не в корзине.
- Архивация того, что уже в архиве, или разархивация того, что не в архиве.
- Закрепление того, что уже закреплено.
Сохраняется дата первого перемещения в корзину или архивации. Неизвестный идентификатор по-прежнему даёт not_found.
Исключение — action_items.remove: эта операция удаляет задачу окончательно (добавленная вами задача удаляется, задача из итогов скрывается), поэтому повторное удаление даёт not_found.
Создание повторять небезопасно: два вызова notes.create создадут две заметки. Если на создание пришёл ответ busy, проверьте результат, прежде чем отправлять вызов снова.
Что недоступно никогда
Что бы вы ни включили, ассистент не может вести запись или управлять текущей сессией, изменять транскрипт, подводить итоги, запускать ИИ-функции TalkBar, менять настройки, удалять что-либо навсегда, очищать корзину, добавлять или переиндексировать документы. Кода ошибки для этого нет: таких операций просто не существует.
См. также
talkbar-cli
Операции TalkBar из терминала и скриптов с talkbar-cli — той же программой, что обслуживает MCP: команды, параметры, ввод, вывод и коды завершения.
Примеры
Практические сценарии работы с TalkBar через MCP и CLI с настоящими запросами и ответами — от вопроса о сессиях прошлой недели до закладки во время записи.