Подключите вашего ИИ-агента к Digital Specialist через Model Context Protocol
Подключите вашего ИИ-агента (Claude, GPT, Cursor, Kiro или любой MCP-совместимый клиент) к Digital Specialist для программного управления задачами, проектами, геозонами, участниками команды и чатами.
В мобильном приложении DS: Настройки → Команда → Добавить участника → Создать агента. Введите имя и выберите роль. После создания вы увидите:
ds-agent-my-bot-a1b2c3d4https://ds-app.biz/api/company/ai-agent/tokenДобавьте следующее в конфигурацию вашего MCP-клиента (например, mcp.json в Kiro/Cursor или конфиг Claude Desktop):
{
"mcpServers": {
"digital-specialist": {
"type": "streamableHttp",
"url": "https://ds-app.biz/mcp",
"headers": {
"Authorization": "Bearer <ACCESS_TOKEN>"
}
}
}
}
Обменяйте учётные данные клиента на токен доступа через эндпоинт для агентов:
curl -X POST https://ds-app.biz/api/company/ai-agent/token \
-H "Content-Type: application/json" \
-d '{"clientId":"YOUR_CLIENT_ID","clientSecret":"YOUR_CLIENT_SECRET"}'
# → { "accessToken": "eyJ…", "expiresIn": 3600, "tokenType": "Bearer" }
Скопируйте accessToken в заголовок Authorization выше.
client_credentials к /auth/realms/ds/…/token тоже работает, но там действует пер-IP лимит, рассчитанный на защиту входа людей от подбора пароля. Все роботы на одной площадке выходят через один IP, поэтому одновременный запуск флота будет там throttled — а возвращаемый 503 приходит от прокси и выглядит как авария, а не как лимит. Эндпоинт выше рассчитан на флот.
401 как «переавторизоваться и повторить один раз», а не как фатальную ошибку. Добавьте джиттер — случайный сдвиг в несколько минут, — чтобы флот, стартовавший одновременно, не обновлял токены тоже одновременно каждый час.
Проверьте подключение, попросив ИИ-агента показать ваши задачи или проекты. Если всё настроено правильно, он будет использовать MCP-инструменты для запросов к Digital Specialist.
Шаги 1–4 подключают вас. Этот шаг превращает агента в подконтрольного члена команды, а не в анонимного API-клиента. Он обязателен — не опционален — если вы хотите, чтобы агент появлялся на карте, показывал реальный статус в Консоли флота и подчинялся команде «Стоп» от человека.
MCP работает только на запросах агента — Digital Specialist ничего не отправляет агенту сам. Поэтому агент спрашивает сам, один раз за итерацию своего рабочего цикла:
while (running) {
// 1. Спросить: я на паузе? есть ли команды?
control = call("poll-control")
if (control.paused) {
// Прекратить любые изменяющие действия. Продолжать опрос — так вы узнаете о возобновлении.
sleep(pollInterval); continue;
}
// 2. Выполнить команды и подтвердить каждую.
for (directive of control.directives) {
handle(directive) // ваша логика
call("ack-command", { directiveId: directive.id })
}
// 3. Сообщить людям, что вы делаете и где находитесь.
call("set-status", { status: "working", detail: "Осмотр стояка B2", workItemId: currentTaskId })
call("report-position", { lat: 42.6977, lng: 23.3219 })
// 4. Выполнить одну единицу работы бизнес-инструментами (create-work-item, add-work-item-comment, …)
sleep(pollInterval) // 30–60 с — хорошее значение по умолчанию
}
| Инструмент | Когда вызывать | Примечания |
|---|---|---|
poll-control |
Каждую итерацию цикла, всегда | Инструмент чтения — работает и на паузе, именно так вы узнаёте о возобновлении. Права на запись не требуются. |
ack-command |
После выполнения директивы | Идемпотентен; подтвердить можно только свои директивы. Требует read-write. |
set-status |
При изменении того, что вы делаете | Принимает только working, idle или error. needsInput, paused и offline устанавливает сервер — они будут отклонены. workItemId показывает текущую задачу; опустите его, чтобы не менять; переход в idle очищает её. Требует read-write. |
report-position |
При каждом перемещении | Широта/долгота WGS84. Это единственный способ появиться на карте. Требует read-write. |
poll-control{
"paused": true,
"scope": "company", // "company" (пауза всех) | "agent" (только вы) | отсутствует, если не на паузе
"directives": [
{
"id": "3f9a…",
"type": "reprioritize", // "stop" | "reprioritize" | "redirect"
"payload": { "workItemKey": "BP-42", "priority": "High" },
"status": "delivered",
"issuedByUserId": "8c21…",
"createdOn": "2026-08-11T09:14:03Z"
}
]
}
| Тип | Payload | Что означает |
|---|---|---|
stop |
— | Прекратить текущую работу. Вы уже на паузе — см. ниже. |
reprioritize |
{ workItemKey, priority } |
Считать задачу приоритетом Low / Medium / High. |
redirect |
{ workItemKey } |
Переключиться на указанную задачу вместо текущей. |
Директива только указывает. Всё, что вы затем делаете, всё равно проходит политику согласования компании и ваши права — директива никогда не является разрешением.
stop обеспечивается сервером, а не вашей добросовестностью. Отправка «Стоп» одновременно ставит агента на паузу, поэтому любая попытка записи отклоняется независимо от того, опрашиваете вы сервер или нет. Снять это может только человек кнопкой Возобновить — пауза не истекает, и истечение самой директивы stop вас не возобновляет. Не ждите её окончания.
Агент, не сделавший ни одного вызова в течение 5 минут, автоматически помечается как Оффлайн. Любой аутентифицированный MCP-вызов считается сигналом активности — включая poll-control, — поэтому простаивающий, но опрашивающий агент остаётся в сети, как и агент, ожидающий согласования. Если ваш цикл может спать дольше пяти минут, всё равно опрашивайте.
Некоторые действия требуют человека. Digital Specialist даёт три способа его привлечь — именно они отличают агента, который зависает, от агента, который корректно передаёт работу.
Компания может требовать согласования для определённых типов действий. Вместо попытки записи с последующим отказом — спросите заранее:
// 1. Запросить. Возвращает requestId.
call("request-approval", {
intensity: "review", // "notify" | "question" | "review"
actionType: "create_task",
summary: "Создать задачу на замену корродированного клапана на B2",
proposedPayload: "{\"title\":\"Заменить клапан\",\"projectKey\":\"BP\"}",
workItemId: null
})
// 2. Опрашивать результат. Опрос также считается сигналом активности.
call("get-approval-status", { requestId })
Человек может Принять, Изменить (принять изменённый payload — тогда get-approval-status вернёт именно отредактированную версию, и выполнять нужно её), Ответить свободным текстом или проигнорировать. Указывайте intensity честно: review показывает предложение руководителю целиком, notify — лишь упоминание.
Если уверенности недостаточно — передайте задачу, а не угадывайте:
call("escalate-task", {
workItemId: "…",
targetUserId: "…", // должен иметь доступ к проекту этой задачи
reason: "Не удаётся определить артикул по фотографии",
confidence: 0.35,
summary: "Пробовал OCR и каталог деталей; остались два кандидата."
})
Система соберёт контекст из вашей недавней активности, переназначит задачу, уведомит человека и покажет передачу на карте.
Соответствующий требованиям агент делает всё перечисленное. Если выполнены все пункты, агент будет корректно вести себя в Консоли флота, на карте и под контролем человека.
401.poll-control не реже одного раза в 5 минут, даже в простое.paused истинно, и продолжает опрос до снятия паузы.ack-command.set-status и report-position при изменениях.request-approval для защищённых действий вместо повтора отклонённых записей.escalate-task вместо догадок при низкой уверенности.MCP-сервер предоставляет следующие группы инструментов:
| Группа инструментов | Описание |
|---|---|
| Work Items | Список, просмотр, создание, обновление, архивация и восстановление задач |
| Task Comments | Добавление, редактирование, список и поиск комментариев к задачам — с ветками, @упоминаниями, вложениями и эмодзи-реакциями |
| Projects | Список, просмотр, создание, обновление, архивация и восстановление проектов; количество задач по проектам |
| Geo Zones | Список, просмотр, создание, обновление, архивация и восстановление геозон |
| Team Members | Список и поиск участников компании по имени или типу пользователя |
| Chat | Личные переписки 1-на-1: отправка, редактирование, удаление сообщений, история, ветки ответов, поиск, эмодзи-реакции, отметка прочитанным, счётчик непрочитанных |
| Task Conversations | Групповые чаты по задачам — создание или открытие переписки, привязанной к задаче, с общими сообщениями, ветками и реакциями для участников задачи |
| Files | Загрузка, скачивание и удаление вложений задач; список и скачивание файлов компании |
| User Profile | Просмотр и обновление профиля, установка аватара и адреса |
| Agent Oversight | Статус, позиция, опрос управления, подтверждение команд, запросы согласования и передача задач — см. Шаги 5 и 6 выше |
| Inventory | Просмотр, создание, обновление и архивирование позиций склада; категории; выдача и возврат; осмотры; печать этикеток |
| Inventory Ledger | Складские операции, корректировка количества и история движений |
| BIM | Поиск элементов и ориентиров здания, список этажей и секторов, чтение и создание пинов задач на 3D-модели |
| Analytics | Аналитика компании — пропускная способность, завершение, время цикла, разбивка «люди против агентов» |
| Import | Массовый импорт задач из структурированных данных |
| Company Status | Общий статус компании и журнал аудита |
| Team Positions | Последние известные местоположения коллег и история посещений геозон |
Всего 94 инструмента в 17 группах. Ваш MCP-клиент получает точный каталог во время выполнения — эта таблица для ориентира, а не контракт.
Разрешения агента задаются при создании и определяют доступные действия:
| Уровень доступа | Возможности |
|---|---|
| Read & Write | Полный доступ ко всем инструментам — просмотр, создание, обновление и удаление |
| Read Only | Может просматривать данные, но не может создавать, обновлять или удалять |
Роль агента (Администратор, Руководитель, Специалист, Наблюдатель) также определяет доступ к данным — так же, как и для обычных пользователей. Например, агент с ролью Специалист видит только публичные проекты и приватные проекты, в которых он является участником.
Чтобы контролировать агентов в приложении — видеть их в Командном центре, ставить на паузу, согласовывать их запросы и обрабатывать передачи задач — см. Руководство → Надзор за агентами.