Свържете вашия ИИ агент с Digital Specialist чрез Model Context Protocol
Свържете вашия ИИ агент (Claude, GPT, Cursor, Kiro или друг MCP-съвместим клиент) с Digital Specialist, за да работи програмно със задачи, проекти, геозони и чат разговори и да намира данни за колегите, с които работи.
assign_person и се изпълнява едва след като мениджър я приеме или редактира. Политиката на компанията не може да изключи това. Същият запис през REST се отказва с ai_people_decision, защото в REST няма стъпка за одобрение.
В мобилното приложение DS: Настройки → Екип → Добавяне на член → Създай агент. Въведете име и изберете роля — тя определя какво агентът може да вижда и променя, но не му дава никаква власт над хората. След създаването ще видите:
ds-agent-my-bot-a1b2c3d4https://api.ds-app.biz/api/company/ai-agent/tokenДобавете следното в конфигурацията на вашия MCP клиент (напр. mcp.json в Kiro/Cursor или конфиг на Claude Desktop):
{
"mcpServers": {
"digital-specialist": {
"type": "streamableHttp",
"url": "https://api.ds-app.biz/mcp",
"headers": {
"Authorization": "Bearer <ACCESS_TOKEN>"
}
}
}
}
Разменете идентификационните данни на клиента за токен за достъп през ендпойнта за агенти:
curl -X POST https://api.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, така че едновременно стартиране на флота ще бъде ограничено там — а върнатият 503 идва от прокси сървъра и изглежда като авария, не като лимит. Ендпойнтът по-горе е оразмерен за флот.
401 като „преупълномощи се и опитай веднъж отново“, а не като фатална грешка. Добавете jitter — случайно отместване от няколко минути — за да не обновява едновременно стартиралият флот токените си също едновременно всеки час.
Помолете ИИ агента да покаже вашите задачи или проекти. Ако отговори чрез MCP инструментите, връзката работи.
Стъпки 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 — така че бездействащ, но питащ агент остава онлайн, както и агент, който чака одобрение. Ако вашият цикъл може да спи повече от пет минути, все пак правете заявка.
Някои действия изискват човек. Има три начина да го включите:
Компанията може да изисква човешко одобрение за определени типове действия. Вместо да опитвате записа и да получите отказ — попитайте предварително:
// 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 и каталога на частите; остават два кандидата."
})
Директно задачата може да се върне само на човека, който вече я притежава — нейния собственик. Системата събира контекст от скорошната ви активност, връща задачата, уведомява този човек и показва предаването на картата. Ако посочите някой друг, задачата не се преназначава: извикването става заявка assign_person във „Входящи на агентите“ и предаването се изпълнява едва след одобрение от мениджър (проверявайте get-approval-status, после извикайте отново escalate-task с нейния approvalRequestId). Никога не избирайте човек по местоположение, натовареност или друга лична характеристика.
Ако всички точки са изпълнени, агентът се държи правилно във Флот конзолата, на картата и под човешки контрол.
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 | Общ статус на компанията и журнал за одит |
| Agent Positions | Къде са ИИ агентите и техните дронове или роботи, включително търсене наблизо; а като справка — къде е в момента посочен по име колега (същата последна известна позиция, която показва картата) |
Общо 94 инструмента в 17 групи. Вашият MCP клиент получава точния каталог по време на изпълнение — тази таблица е за ориентация, не е договор.
Разрешенията на агента се задават при създаването и определят какво може да прави:
| Ниво на достъп | Възможности |
|---|---|
| Read & Write | Пълен достъп до всички инструменти — преглед, създаване, обновяване и изтриване |
| Read Only | Може да разглежда данни, но не може да създава, обновява или изтрива |
Ролята на агента (Администратор, Мениджър, Специалист, Наблюдател) също контролира достъпа до данни — същото като за обикновените потребители. Например, агент с роля Специалист вижда само публичните проекти и частните проекти, в които е член. Ролята определя до какво има достъп агентът, но никога не му дава власт над хората: дори агент с роля Администратор или Мениджър не може да смени отговорния за задача човек без одобрение от мениджър.
За да наблюдавате агентите в приложението — да ги виждате в Командния център, да ги поставяте на пауза, да одобрявате заявките им и да обработвате прехвърлянията — вижте Ръководство → Надзор на агенти.