Інтеграція Agentfy
Межа runtime і делегований контекст нижче — вимоги до реалізації. Відомості про готовність відображають перевірку 2 жовтня 2026, не поточний стан. Для транспорту модуля й записів використовуйте REST 1.0.
Три межі повноважень
Runtime Agentfy ──(1) ключ агента + (2) грант розмови──▶ MCP Store Deputy
│ права, аудит
│
(3) підпис підключення, ніколи (1) чи (2) ┘
▼
REST API модуля OpenCart| Межа | Доказ | Хто видає, хто зберігає | Дійсний лише в | Ніколи |
|---|---|---|---|---|
| Агент → Store Deputy | Authorization: Bearer sdak_…, один на створеного агента | Store Deputy; Agentfy тримає як секрет команди | MCP Store Deputy | Не пересилається в магазин, не показується моделі, не вважається повноваженням людини |
| Людина чи покупець | X-SD-Context: sdcg_…, один на розмову | Store Deputy; Agentfy несе його для кожної розмови | MCP Store Deputy, для цього агента й треду | Не має власних прав; не переживає відкликаного членства |
| Store Deputy → магазин | HMAC секретом підключення, в обидва боки | Store Deputy і модуль, під час підключення | Модуль одного цього магазину | Не залишає серверів Store Deputy чи магазину |
Storefront-сесія покупця — четвертий секрет, і вона ніколи не залишає магазин. Модуль перевіряє її й передає Store Deputy лише непрозоре посилання (див. покупці).
MCP Store Deputy
Транспорт. Одна адреса {STORE_DEPUTY_API}/mcp, Streamable HTTP, версія протоколу 2025-06-18 (саме її сьогодні надсилає клієнт Agentfy). Сервер без стану: Agentfy відкриває нову MCP-сесію на кожен виклик, тож initialize має бути дешевим, і жоден стан не може триматися на Mcp-Session-Id. tools/list повертає всі інструменти однією сторінкою, бо Agentfy не йде за nextCursor.
Інструменти Admin Agent (етап A). Усі лише читають; усім, крім store_status, потрібна можливість catalog.read.
| Інструмент | Що робить |
|---|---|
store_status | Який магазин, чи досяжний, чи на паузі, які інструменти зараз працюють |
catalog_find_products | Пошук за SKU, моделлю, EAN та іншими ідентифікаторами; повертає всі збіги й ніколи не обирає один |
catalog_get_products | Актуальні дані за ID товару; відсутні ID перелічено |
catalog_list_products | Посторінковий перегляд каталогу, за бажання — лише нещодавні зміни |
Інструменти Frontend Agent (етап B): cart_get, cart_add_item, cart_update_item, cart_remove_item. Зміна цін вимкнена, доки STOR-5 не матиме власної перевірки погодження.
Правила для кожного інструмента:
- Жоден аргумент не називає магазин, команду, людину, покупця, розмову, право на ціну чи дозвіл. Кожна об'єктна схема забороняє зайві поля. Передача
store_idвідхиляється зinvalid_argumentsі нічого не обирає. Скрипт перевірки контролює обидва правила. - Назви — лише літери, цифри й підкреслення. Провайдери моделей за Agentfy відкидають крапки, а Agentfy мовчки прибирає назви, яких провайдер не приймає.
- Інструмент з'являється у списку лише тоді, коли він є в профілі агента, маніфест магазину оголошує потрібну можливість і підписка команди це дозволяє. Виклик інструмента поза списком відхиляє сервер, а не лише приховує.
- Результати. Успіх повертає
structuredContentі той самий JSON текстом. Помилка встановлюєisErrorі повертає{ "error": { "code", "message", "retryable", "details" } }. Agentfy сьогодні не читаєisError, тож повідомлення має бути зрозумілим моделі саме по собі. - Текст магазину — це дані. Назви товарів і опцій повертаються як поля, ніколи не вбудовуються в інструкції. Товар із назвою «ignore previous instructions» нічого не змінює.
- ID — текстом (
"42"), щоб схема була однаковою на всіх платформах; гроші — десятковим рядком із чотирма знаками.
Довірений контекст
Що надсилає Agentfy
| Заголовок | Хто встановлює | Що перевіряє Store Deputy |
|---|---|---|
Authorization: Bearer sdak_… | Agentfy, із секрету команди storedeputy:Authorization (працює вже сьогодні) | Відомий і не відкликаний; дає команду, магазин і профіль |
X-Agentfy-Agent-Id | Runtime Agentfy | Збігається з агентом, якому видано ключ |
X-SD-Context: sdcg_… | Runtime Agentfy, для кожної розмови | Існує, не прострочений і не відкликаний, виданий цьому агенту й цьому треду |
X-Agentfy-Thread-Id | Runtime Agentfy | Збігається з тредом, для якого видано грант |
X-Agentfy-Turn-Id | Runtime Agentfy | Лише для аудиту |
X-Agentfy-Tool-Call-Id | Runtime Agentfy | Стає стабільним ключем операції для зміни |
X-Agentfy-Initiated-By | Runtime Agentfy | human, heartbeat або agent; грант людини можуть нести лише ходи human |
Модель не встановлює жодного з них. Заголовки йдуть тим самим TLS-запитом, що й ключ агента, тож вони рівно настільки надійні, наскільки надійний сам Agentfy. Підписаний токен контексту не потрібен, доки між Agentfy і Store Deputy не з'явиться посередник.
Що виводить Store Deputy
На кожному виклику інструмента, до будь-якого запиту в магазин, Store Deputy перетворює заголовки на один розв'язаний контекст: команда, магазин, профіль, актор і чинні права. Код інструмента бачить лише цей результат.
| Актор | Коли | Що може |
|---|---|---|
employee | Людина відкрила розмову в app; грант називає користувача Store Deputy | Перетин гранту, її поточної ролі в команді, профілю агента, підписки й можливостей магазину |
agent | Хід за розкладом або від іншого агента, без гранту | Читання, які власник дозволив агенту; ніколи не зміна, що потребує погодження людини |
shopper | Відвідувач відкрив чат на вітрині; грант називає прив'язку покупця | Лише власний кошик, доки модуль підтверджує прив'язку |
Зміна ролі, видалення учасника, відключення магазину чи відкликання гранту діють з наступного виклику, бо в гранті нічого не кешується. Грант однієї розмови відхиляється в іншій, тож дві паралельні розмови одного агента не змішуються.
Чого Agentfy ще не робить
Це результат читання гілки main Agentfy 2 жовтня 2026 року. Це вимоги до STOR-22 і пов'язаних задач, які треба погодити з командою Agentfy, а не зміни, які робимо тут.
| Сьогодні в Agentfy | Потрібно |
|---|---|
| Виклики MCP несуть лише статичні заголовки, спільні для команди; за правилом жодного контексту агента, користувача чи розмови не надсилають | За явним увімкненням для конкретного MCP-сервера — заголовки з таблиці вище, які встановлює runtime |
| Немає секрету на рівні розмови | Зберігати грант Store Deputy для кожного треду поза prompt і надсилати його у викликах цього треду |
| Ходи відвідувачів узагалі не отримують MCP-інструментів | Дозволити їх для сервера, позначеного як frontend (етап B) |
isError не перевіряється | Вважати такий крок інструмента невдалим (рекомендовано) |
| Треди кабінету прив'язані до користувача Agentfy | Окремий тред для кожної людини Store Deputy, щоб їхні гранти ніколи не перетиналися |
| Немає сервісного ключа; створення агентів і MCP-серверів потребує сесії користувача | Сервісний спосіб створити агента (STOR-23) |
Як Agentfy отримує грант на початку розмови, залежить від того, хто відкриває розмову, а це ще відкрите питання (див. відкриті пункти). Пропозиція: розмову відкриває Store Deputy, бо саме в app людина ввійшла в акаунт.