MBC Dash по MCP
Как подключить агента — Claude в чате, на телефоне или на компьютере, да и любого другого, кто говорит на Model Context Protocol — к вашим задачам.
Инструменты, которые получает агент, — это те же операции, что предлагает API, из тех же объявлений. Второй поверхности, которая отстанет, здесь нет: возможность не может существовать в одной и отсутствовать в другой. Почему сделано именно так — в описании решений; как обращаться к API напрямую — в руководстве по API.
Подключение
https://dash.mbc-apps.com/api/mcp
Добавьте этот адрес как пользовательский коннектор. Клиент зарегистрируется сам, отправит вас войти и покажет экран согласия; вставлять, кроме адреса, нечего.
Нужен доступ по HTTPS. Коннектор, работающий в приложении на телефоне, не видит ваш ноутбук, поэтому так получится только с развёрнутым экземпляром. Для локальной работы возьмите ключ (ниже).
С чем именно вы соглашаетесь
Экран согласия задаёт два вопроса, и второй стоит того, чтобы задержаться:
- Что можно делать — скоупы, которые запросил коннектор, словами: «читать задачи», «создавать и изменять задачи».
- Куда можно ходить — в какие проекты. Не выберете ничего — соединение достанет до любого проекта, доступного вам. Выберете несколько — на них и остановится, даже там, куда вас самих бы пустили.
Агенту, которого вы пробуете впервые, стоит дать один проект и право на чтение. Расширить можно потом; альтернатива — узнавать радиус поражения опытным путём.
Соединение действует от вашего имени и никогда не может больше вас. Оно появляется в Настройках → Ключи API рядом с вашими ключами, помеченное как соединение, и отзыв там останавливает его на следующем же вызове — никакого токена, который сначала должен истечь.
Без OAuth: ключ
Для агента, работающего на вашей же машине — Claude Code, редактор, скрипт, — проще ключ. Выпустите его в Настройках → Ключи API и отправляйте заголовком:
Authorization: Bearer mbc_…
Те же скоупы, та же ограда по проектам, тот же отзыв.
Что умеет агент
Инструменты, которые он видит
Пять, плюс три, чтобы дотянуться до всего остального:
| Инструмент | |
|---|---|
task_search | найти задачи по любому сочетанию фильтров |
task_get | прочитать одну, по ключу (PROD-12) или по идентификатору |
task_create | создать в проекте |
task_update | изменить название, описание, статус, приоритет, тип, срок |
comment_add | прокомментировать задачу |
list_operations | всё остальное, о чём можно попросить это рабочее пространство |
describe_operation | какие аргументы принимает одна из этих операций |
call_operation | выполнить одну |
Короткий список сделан намеренно. Двадцать два инструмента — это десятки тысяч токенов контекста в каждом сообщении и измеримо худший выбор инструмента; остальные находятся одним вопросом, и агент их находит, спросив. Хотите знать, до чего он дотягивается, — попросите перечислить операции.
Подсказки
Четыре, которые клиент предлагает выбрать, а не набирать:
| Спланировать день | что сегодня к сроку или просрочено и назначено на вас |
| Разобрать входящие | задачи без срока, приоритета или статуса, с предложениями |
| Что просрочено | вышло за срок и не сделано, по проектам, старое первым |
| Итоги недели | что изменилось за семь дней и что предстоит в следующие семь |
Каждая принимает необязательный проект, чтобы сузиться. Все четыре написаны так, чтобы предлагать, а не действовать: разбор, который потихоньку прибрался в проекте, — разбор похуже.
Ресурсы
Вид один: задача по ключу, по адресу mbc://task/PROD-12. Клиенты, которые позволяют прикреплять
контекст к разговору, могут подтянуть задачу так, вместо того чтобы просить агента её достать.
Намеренно узко. Ресурсом стоит быть тому, что уже названо и осмысленно само по себе; сделать ресурс из каждого списка — значит пересказать инструменты вторым словарём.
Чего агент не может
Ничего за пределами выданных скоупов. Отказ называет скоуп — «этому соединению не хватает
скоупа tasks:write», — поэтому, когда агент говорит, что не может, эта фраза точно сообщает, что
менять.
Ничего за пределами выбранных проектов. Огороженный проект отвечает так, будто его не существует, и то же самое агент скажет вам.
Ничего не удалит, не спросив. На разрушительный вызов клиент задаёт вопрос вам. Там, где клиент спросить не умеет, вызов отклоняется, и агенту сообщают, что вернуться можно только после вашего согласия, — деградация в сторону безопасности, а не удобства.
Удаление всё равно обратимо тридцать дней: Настройки → Корзина, где удалённая задача и её подзадачи возвращаются вместе, одним действием.
Как прочитать, что он сделал
Всё, что делает агент, записывается и помечается как таковое. Лента активности самой задачи скажет «сменил статус — через MCP»; обычное действие человека не скажет ничего лишнего, потому что замечать нужно исключения.
Журнал аудита хранит то же самое целиком — что сделано, с чем и получилось ли, — включая отклонённые вызовы. Это намеренно: коннектор, пробующий то, чего ему не разрешали, — ровно то, за чем вы придёте.
Одно замечание о том, где смотреть. Отказ из-за нехватки скоупа происходит раньше, чем вызов сообщает, о каком рабочем пространстве речь, поэтому он попадает в ваш собственный след, а не в журнал пространства. Если агент сказал, что ему не разрешили, и вы хотите увидеть попытку — она там.
Разговор напрямую
Полезно, когда что-то ведёт себя не так и хочется увидеть трафик. Это streamable HTTP с JSON-RPC:
# 1. initialize — заголовок ответа несёт Mcp-Session-Id. Без него любой следующий
# вызов получит отказ «Session ID missing»: сессия начинается здесь.
SID=$(curl -sD - -o /dev/null https://dash.mbc-apps.com/api/mcp \
-H "Authorization: Bearer $KEY" \
-H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
"protocolVersion":"2025-06-18","capabilities":{},
"clientInfo":{"name":"curl","version":"1"}}}' \
| tr -d '\r' | awk -F': ' 'tolower($1)=="mcp-session-id"{print $2}')
# 2. что предлагается
curl -s https://dash.mbc-apps.com/api/mcp \
-H "Authorization: Bearer $KEY" -H "Mcp-Session-Id: $SID" \
-H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# 3. вызвать что-нибудь
curl -s https://dash.mbc-apps.com/api/mcp \
-H "Authorization: Bearer $KEY" -H "Mcp-Session-Id: $SID" \
-H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{
"name":"task_get","arguments":{"task":"PROD-12"}}}'
Ответы приходят как text/event-stream; JSON — на строках data:.
Чтобы это вообще работало
Сервер выключен по умолчанию. Включают его две настройки, и обе уместны на развёртывании, доступном по HTTPS:
MCP_ENABLED=true | сам MCP-сервер |
OAUTH_MCP_ENABLED=true | сервер авторизации, через который входят коннекторы |
Ключу достаточно первой. Коннекторам по OAuth нужны обе.
Эндпойнт, позволяющий агенту действовать от чьего-то имени, не должен появляться в окружении, где его никто не собирался включать, — поэтому по умолчанию не включена ни одна.
Известные ограничения
- Список инструментов одинаков для всех. Соединение только на чтение всё равно видит
task_create; отказ приходит на вызове, по имени. MCP SDK для Java держит один список инструментов на сервер, без точки расширения на соединение, поэтому фильтровать его означало бы форкнуть сервер. - Повторный вызов инструмента делает работу заново. Лимиты действуют на агента так же, как на ключ, а идемпотентность — нет: вызов инструмента не несёт идентификатора, который сервер мог бы увидеть, то есть нет ничего устойчивого, к чему привязать повтор, а просить модель его придумать — это другая вещь под тем же именем. Если агент отвалился по таймауту посреди создания, проверьте результат, прежде чем просить его повторить.
- Вложения и подборки пока не выведены.
- Ничего не приходит само. Агент узнаёт об изменениях, спросив, — уведомлений нет. Просите его
проверять
updated after <когда вы смотрели в прошлый раз>, а не «следить».