Управление betool из Claude (MCP-сервер)
betool предоставляет MCP-сервер (Model Context Protocol): внешний MCP-клиент — Claude Code, Claude Desktop или любое совместимое приложение — может читать конфигурацию вашей организации и предлагать изменения на естественном языке (создать/отредактировать pipeline, роль, миссию, оценку…). Это как ассистент, настраивающий betool вместе с вами, полностью под контролем.
Два способа подключения к одной и той же точке https://platform.betool.ai/mcp:
- API-ключ MCP в заголовке
Authorization— проще всего для Claude Code; - OAuth 2.1 + PKCE — для сторонних приложений, без обращения с секретами.
Ничего не применяется без явного согласия. Каждое изменение проходит через предложение. С областью Чтение + предложения вы утверждаете его кнопкой Принять внутри betool. С областью Полная приложение может разрешать свои собственные предложения — после вашего согласия в его собственной переписке; это машинный эквивалент той же кнопки, доступный только для этой области и фиксируемый в аудите, как всё остальное. Выбирайте Чтение + предложения, если хотите, чтобы утверждение происходило в betool и больше нигде.
Что может Claude
- Читать: инвентарь моделей, граф и узлы pipeline, контракты конфигурации узлов, роли/миссии, доступные инструменты, базу знаний.
- Читать ваши данные: no-code базы данных вашей организации — базы, таблицы, колонки и строки. Клиент обнаруживает их сам; ключ нельзя ограничить подмножеством баз.
- Предлагать: через инструмент
proposals.create— ожидающее предложение изменения, которое вы принимаете или отклоняете в интерфейсе. - Записывать данные (полная область): создать, обновить или занять строку в одной из ваших баз — после вашего явного согласия в переписке. В отличие от конфигурации, запись данных не версионируется — восстановить её нельзя.
- Говорить с вашими моделями (полная область): вести многоходовой диалог с моделью, которую вы явно открыли для внешних агентов — см. ниже.
Claude определяет точный контракт каждого узла (поля, допустимые значения) перед тем, как предложить: без догадок, без некорректной конфигурации.
Создание MCP-ключа
Только для администраторов организации: ключ несёт полномочия в отношении всей организации.
- В betool откройте Настройки → MCP.
- Назовите ключ и выберите его область:
- Только чтение — читает конфигурацию и данные ваших баз, перечитывает диалоги, открытые через этот канал, ничего не предлагает;
- Чтение + предложения (рекомендуется) — читает и отправляет предложения, которые вы утверждаете в betool;
- Полная — может также разрешать свои предложения, записывать в ваши базы данных и вести диалог с вашими моделями, после вашего согласия в переписке клиента.
- Необработанный ключ показывается только один раз — скопируйте его немедленно (прочитать его снова невозможно). Вы можете отозвать ключ в любой момент.
Те же три области существуют и для OAuth; там вы выбираете их на экране согласия.
Подключение Claude Code
Добавьте MCP-сервер betool в Claude Code (ключ помещается в заголовок Authorization):
claude mcp add betool \
--transport http \
--header "Authorization: Bearer <your-mcp-key>" \
https://platform.betool.ai/mcp
Затем попросите Claude на естественном языке: «проинспектируй мой pipeline X и предложи шаг, который резюмирует тикет перед отправкой». Claude читает конфигурацию, составляет предложение, а вы утверждаете его в betool.
Никогда не вставляйте секреты в открытом виде в чат. Возможности Claude ограничены областью ключа, и каждый вызов инструмента логируется в разделе Настройки → MCP → журнал (GDPR ст. 15).
Говорить с вашими моделями
Чтение и предложения — это настройка betool. Внешний ИИ может им и пользоваться: вести настоящий диалог с одной из ваших моделей, реплика за репликой, точно как любой посетитель вашего чата. Пригодится, чтобы другой ИИ проверил вашего ассистента, чтобы поставить betool за партнёрским агентом или чтобы внутренний инструмент обращался к одному из ваших процессов на естественном языке.
Четыре инструмента: conversation.open открывает или находит диалог, conversation.send отправляет реплику и возвращает ответ, conversation.poll забирает ответ, который занял время, conversation.history перечитывает диалог. Этот диалог — обычный контекст betool: он виден среди ваших переписок, модель видит предыдущие реплики, а вы всё перечитываете в интерфейсе.
Разрешение даёт модель, а не ключ. На узле Start модели нужно объявить приёмник Внешний агент: без этого вызов отклоняется — даже с ключом области Полная. Модели, созданные после этого выпуска, объявляют его по умолчанию (обычный путь — он же простой); более старым его нужно добавить, а у любой модели его можно убрать. Значит, решает модель, а не ключ — и приёмник должен присутствовать в опубликованной версии, той, которая работает. И поскольку реплика может вызвать реальные последствия — уйдёт письмо, создастся запись, — она расходует кредиты организации и фиксируется в журнале, как любой вызов инструмента.
Ответ никогда не теряется: если модель работает дольше отведённого ожидания, вызов возвращает талон, а обработка продолжается на сервере — она переживает даже переразвёртывание. Затем приложение забирает ответ через conversation.poll. Повторная отправка сообщения ничего не ускорит — а пока реплика обрабатывается, отправка отклоняется.
Наконец, этот канал читает только свои собственные диалоги. Идентификатор переписки из другого входа — публичный чат, телефон, почта — здесь недоступен: переписки ваших клиентов не становятся доступными для чтения только потому, что подключено MCP-приложение.
Уже существующая модель работает без переделок. Этот канал выставляет те же ключи, что и чат: сообщение приходит в user_message, а событие — обычное on_message, поэтому ваши фильтры и выборки агентов продолжают работать. Если целевая модель написана под другой вход (читает telegram.text, цель, переменную страницы…), приложение может само передать эти ключи через variables: они попадут в поток туда же, куда их положил бы тот вход. Чего оно подделать не может — это личность реплики: кто говорил и по какому каналу. Эти ключи выставляет сервер, а любая попытка отклоняется и сообщается в ответе.
Если модель молчит, посмотрите на её маршрутизацию. Модель, обслуживающая несколько каналов, обычно ветвится по входу (filter input.entry_kind == chat_widget…): реплика со входом « внешний агент » не попадает ни в одну ветку, и никто не отвечает — при этом никакой ошибки не возникает. Передайте as_entry_kind, чтобы вас маршрутизировали как этот канал. Меняется только ключ маршрутизации: описатель канала и журнал аудита по-прежнему говорят, что реплика пришла от внешнего ИИ, и действуют настоящие возможности канала.
В одном диалоге обрабатывается одна реплика за раз. Пока предыдущая реплика не вернула ответ, следующая отклоняется — с указанием, какую реплику прочитать. Это не произвольное ограничение: ответ связан со своим вопросом положением в диалоге, поэтому две реплики в полёте сделали бы привязку неоднозначной — лучше внятный отказ, чем правдоподобный неверный ответ.
Подключение сторонних приложений (OAuth 2.1)
Ключ в заголовке подходит для Claude Code. Остальные клиенты — Claude Desktop, ChatGPT, редактор, ваше собственное приложение — подключаются через OAuth 2.1 + PKCE, и никому не приходится обращаться с секретом. Готовить ничего не нужно: никакого клиента не надо объявлять и никакого идентификатора у нас запрашивать.
Для пользователя путь — это три экрана:
- В приложении добавьте MCP-сервер
https://platform.betool.ai/mcp. - Браузер открывает экран согласия betool: на нём указано приложение, запрашивающее доступ, затронутая организация и куда произойдёт возврат. Проверьте эти три вещи — особенно если вы входите в несколько организаций.
- Выберите область, которую вы предоставляете, и нажмите Разрешить. Приложение никогда не получает больше того, что вы отметили, даже если запрашивало больше.
Разрешить приложение может только администратор организации. Подключение приложения создаёт долгосрочные полномочия в отношении всей организации — ровно то, чем является MCP-ключ. Поэтому участник с ограниченными правами не может обойти свои ограничения этим путём.
Для интеграторов обнаружение полностью автоматическое и соответствует стандартам: неаутентифицированный вызов /mcp возвращает 401 с заголовком WWW-Authenticate, содержащим адрес наших метаданных (RFC 9728), которые в свою очередь указывают на авторизацию, обмен токенов, динамическую регистрацию клиента (RFC 7591) и отзыв (RFC 7009). PKCE S256 обязателен, токены доступа живут один час, а токен обновления меняется при каждом использовании.
# То, что клиент делает сам — удобно проверить из терминала.
curl -i -X POST https://platform.betool.ai/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize"}'
# -> 401 + WWW-Authenticate: Bearer ... resource_metadata="..."
curl -s https://platform.betool.ai/.well-known/oauth-authorization-server
Токен действителен только для betool: при использовании в другом месте он отклоняется (RFC 8707). А если уже израсходованный токен обновления предъявлен во второй раз — признак похищенного токена — отзывается вся сессия, и пользователю нужно разрешить доступ заново.
Подключённые приложения: посмотреть и отключить
В разделе Настройки → MCP блок Подключённые приложения перечисляет то, что подключено к вашей организации: название приложения, предоставленную область, кто его разрешил и дату последнего использования. Кнопка Отключить немедленно прекращает доступ — все токены этого приложения, только для вашей организации.
Одно и то же приложение может быть подключено несколькими организациями: отключение у вас не затрагивает никого другого. Приложение также может отключиться само.
Область и изоляция
- По умолчанию ключ работает только с вашей собственной организацией — целевая организация задаётся принудительно на стороне сервера; вы никогда не передаёте id организации в качестве аргумента.
- Vendor-ключи (организация backoffice) могут нацеливаться на другую организацию — при явном согласии этой организации и с полным аудитом; это полезно для мультитенантного сценария использования vendor.
Журнал аудита
Каждый вызов инструмента (внешний через MCP и внутренний) записывает строку аудита: кто, какой инструмент, какой канал, какая область, результат, задержка. Доступно в разделе Настройки → MCP, строго ограничено вашей организацией.
Скоро
- Тонкий, поинструментный контроль поверхности, предоставляемой через MCP.
- Поток «сервер→клиент» (SSE) для уведомлений сервера.
См. также
- Административный API — автоматизируйте betool из ваших собственных систем.
- Безопасность и соответствие требованиям — модель управления предложениями.