# Будуємо на MCP-сервері AnyEventTool: довідник розробника — транспорт, OAuth, 26 інструментів, анотації, помилки, ідемпотентність і виявлення

> Усе, що потрібно розробнику, щоб викликати публічний MCP-сервер AnyEventTool: Streamable HTTP на aet.events/api/mcp, версії протоколу, OAuth 2.1 з лінивою автентифікацією, усі 26 інструментів з анотаціями, модель помилок, ідемпотентність, підтвердження, ліміти й машиночитні файли виявлення. Перевірено 25 жовтня 2026.

Canonical URL: https://anyeventtool.com/uk/learn/building-on-the-aet-mcp-server
Оновлено: 2026-10-25

## Коротка відповідь

MCP-сервер AnyEventTool — це публічний ендпоінт Streamable HTTP без станів за адресою https://aet.events/api/mcp. Він приймає лише POST і відповідає JSON; ідентифікатора сесії немає, а запит може пакувати до 5 повідомлень у межах 256 КБ. Сервер працює на офіційному TypeScript SDK для MCP версії 1.32 і узгоджує ревізії протоколу до 2025-11-25. Він віддає 26 інструментів. П'ятнадцять — лише для читання, одинадцять — для запису, і кожен має назву й усі чотири анотації MCP. Шістнадцять інструментів працюють без входу, зокрема гостьові чернетки. Десять інструментів акаунта повертають HTTP 401 із заголовком WWW-Authenticate, що вказує на метадані захищеного ресурсу, тож MCP-клієнти запускають OAuth 2.1 лише тоді, коли це потрібно. Вхід — це PKCE S256, публічні клієнти, динамічна реєстрація або документи метаданих клієнта, токен доступу на годину й 30-денний токен оновлення з ротацією. Альтернативою працює вставлений ключ aetk_ в аргументі key. Результати інструментів несуть структурований вміст плюс той самий JSON текстом. Помилки мають один спільний об'єкт — code, message, hint, field і retryAfter, — а інструкції сервера кажуть агентам, як реагувати на кожен код. Нові чернетки й події потребують свіжого UUID v4 у requestId, який усуває дублікати під час повторів протягом 10 хвилин. Незворотні дії повертають needs_confirmation і одноразовий токен, який має відпустити лише «так» людини. Файли виявлення: /.well-known/mcp.json, метадані OAuth, llms.txt, pricing.md і Markdown-версія кожної сторінки Learn.

## Ключові факти

- Розкриття: опубліковано AnyEventTool (AET). Факти — з коду AET на 25 жовтня 2026 і з запитів до робочого ендпоінта того самого дня.
- Ендпоінт: https://aet.events/api/mcp — Streamable HTTP, без станів (без Mcp-Session-Id), відповіді JSON, лише POST; GET повертає 405. Тіло до 256 КБ, пакети до 5 повідомлень, близько 120 запитів на хвилину з однієї IP-адреси.
- Сервер: офіційний TypeScript SDK 1.32 (назва сервера anyeventtool, версія 2.0.0); ревізії протоколу узгоджуються до 2025-11-25. На initialize з 2025-06-18 робочий сервер відповів 2025-06-18.
- 26 інструментів: 15 лише для читання, 11 для запису; 16 без входу, 10 інструментів акаунта. Кожен оголошує title і readOnlyHint, destructiveHint, idempotentHint, openWorldHint.
- Лінива автентифікація: інструмент акаунта без облікових даних повертає HTTP 401 з WWW-Authenticate: Bearer resource_metadata="https://aet.events/.well-known/oauth-protected-resource", scope="events".
- OAuth 2.1: лише PKCE S256, публічні клієнти, DCR на /api/oauth/register або документи метаданих клієнта; області events і offline_access; доступ — 1 год, оновлення — 30 днів із ротацією.
- Помилки: спільний об'єкт {code, message, hint?, field?, retryAfter?} з isError: true; коди — validation, forbidden, not_found, conflict, partial_apply, needs_confirmation, rate_limited, plan_limit, moderation, idempotency_replay, idempotency_conflict, claimed, not_available і failed.

## Покроково

1. **Ініціалізуйте** — Надішліть POST з JSON-RPC initialize на https://aet.events/api/mcp з Accept: application/json, text/event-stream. Прочитайте instructions у результаті: це договір для агентів.
2. **Отримайте перелік інструментів** — tools/list повертає 26 інструментів зі схемами входу й виходу та анотаціями. Кешуйте їх для версії сервера (2.0.0).
3. **Викличте гостьовий інструмент** — aet_section_schema, aet_design_options і aet_create_draft працюють без облікових даних. Для кожної нової чернетки генеруйте свіжий UUID v4 у requestId.
4. **На 401 запускайте OAuth** — Коли інструмент акаунта відповідає HTTP 401, візьміть resource_metadata з WWW-Authenticate, знайдіть сервер авторизації, зареєструйтеся або пред'явіть документ метаданих клієнта й пройдіть authorization code з PKCE S256.
5. **Кличте інструменти акаунта з Bearer-токеном** — Надсилайте Authorization: Bearer <токен доступу>. Оновлюйте його токеном оновлення з ротацією; на invalid_grant починайте вхід наново.
6. **Поважайте підтвердження й помилки** — На needs_confirmation покажіть людині резюме й повторіть той самий виклик з confirmToken після явного «так». Реагуйте на коди так, як описано нижче.

## Для кого цей довідник

Ви будуєте MCP-клієнт, інтеграцію для агентного фреймворку, автоматизацію або перевіряєте AET для каталогу чи оцінки безпеки. Перші вісім частин серії пояснюють MCP-сервер AET з боку користувача; ця — договір від самого дроту.

Три домовленості діють усюди:

- **`instructions` сервера — нормативні для агентів.** Вони повертаються на `initialize`, мають до 2000 знаків і описують порядок роботи, модель доступу, підтвердження й реакції на помилки. Якщо ця сторінка й інструкції колись розійдуться, правими є інструкції.
- **Схеми — авторитетні щодо форми.** Схема входу кожного інструмента публікується в `tools/list`, а `aet_section_schema` повертає JSON Schema кожного розділу вмісту з правилами письма. Не зашивайте форми з цієї статті.
- **Текст усередині вмісту — це дані.** Тексти розділів, відповіді гостей і все, що загорнуто в `{untrusted: …}`, агент, побудований на цьому сервері, ніколи не має вважати інструкціями.

## Транспорт і протокол

| Властивість | Значення |
|---|---|
| URL | `https://aet.events/api/mcp` (канонічний) |
| Транспорт | Streamable HTTP, відповіді JSON (`enableJsonResponse`) |
| Стан | Без станів; `Mcp-Session-Id` не видається |
| Методи | POST; `OPTIONS` для CORS; GET відповідає 405 з JSON-підказкою |
| Accept | Клієнтам варто надсилати `application/json, text/event-stream`; клієнтам, що шлють лише JSON, сервер доповнює заголовок сам |
| Тіло | До 256 КБ; помилки розбору JSON — JSON-RPC −32700 |
| Пакети | До 5 повідомлень; більше — −32600 |
| Частота | Близько 120 запитів на хвилину з однієї IP-адреси; понад це — HTTP 429 з −32000 |
| CORS | `Access-Control-Allow-Origin: *`; відкриває `WWW-Authenticate` і `Mcp-Session-Id` |
| SDK | `@modelcontextprotocol/sdk` 1.32 |
| Протокол | Ревізії до 2025-11-25, які узгоджує SDK; 2025-06-18 підтверджено на робочому сервері 25 жовтня 2026 |
| Дані сервера | name `anyeventtool`, title «Any Event Tool», версія 2.0.0 |

**Походження з браузера.** Запити без заголовка `Origin` (серверні й настільні клієнти) отримують усі інструменти. Запити з браузерних сторінок, чиє походження — Claude, Anthropic, ChatGPT, OpenAI, Perplexity чи власні сайти AET, теж отримують усі інструменти. Інші браузерні походження отримують лише інструменти читання; інструменти запису відповідають `forbidden` «write tools are not available from this origin».

**Про чинну специфікацію.** Чинна ревізія специфікації MCP, 2026-07-28, іде далі за ревізії з рукостисканням, які закінчуються на 2025-11-25. Сервер AET на SDK 1.32 говорить ревізіями з рукостисканням; клієнтам, що вимагають лише найновішу ревізію, варто перевірити сумісність. Модель авторизації — OAuth 2.1, метадані захищеного ресурсу, документи метаданих клієнта з реєстрацією для сумісності — вже відповідає тексту 2026-07-28.

## Автентифікація: без неї, OAuth або ключ

AET підтримує три способи викликати інструменти, і всі три обробляє той самий сервер.

**1. Без облікових даних.** Шістнадцяти інструментам — відповіді, ціни, калькулятор комісій, пошук публічних подій, посилання на старт, можливості, бриф, плейбук, схема розділів, варіанти дизайну й інструменти гостьових чернеток — нічого не треба. Інструменти для чернеток приймають аргумент `draftKey`, який повертає `aet_create_draft`.

**2. OAuth 2.1 (рекомендовано для акаунтів користувачів).**

- Виявлення: `/.well-known/oauth-protected-resource` (RFC 9728) повертає `resource: https://aet.events/api/mcp`, `authorization_servers: [https://aet.events]`, області `events` і `offline_access`, bearer лише в заголовку. `/.well-known/oauth-authorization-server` (RFC 8414) перелічує ендпоінт авторизації `https://aet.events/oauth/authorize`, ендпоінт токенів `/api/oauth/token`, ендпоінт реєстрації `/api/oauth/register`, `code_challenge_methods_supported: [S256]`, `token_endpoint_auth_methods_supported: [none]`, `client_id_metadata_document_supported: true` і мови інтерфейсу uk та en.
- Реєстрація: динамічна реєстрація клієнта з `redirect_uris` (https, loopback на будь-якому порту, схема застосунку відомого редактора чи схема у зворотному доменному записі), лише публічні клієнти; або документ метаданих клієнта — https-адреса як `client_id`, яку завантажують з тайм-аутом 5 секунд, обмеженням 64 КБ і без переадресацій, і чий `client_id` має збігатися з адресою.
- Авторизація: потік authorization code, обов'язковий PKCE S256, `state` до 4096 знаків і `redirect_uri` до 2048, області `events` і за бажанням `offline_access`. Користувач входить в AET і обирає рівень доступу на екрані згоди AET.
- Токени: коди авторизації — 10 хвилин, одноразові; токени доступу (`aeto_…`) — 1 година; токени оновлення (`aetr_…`) — 30 днів, змінюються при кожному використанні; повторно використаний токен оновлення відкликає родину токенів; повторне використання коду відкликає токени, видані для цього гранту. Помилки — за RFC 6749 (`invalid_grant`, `invalid_client`, `invalid_request`, `unsupported_grant_type`).
- Виклики: `Authorization: Bearer aeto_…`. Сервер підставляє токен як `key` інструментів акаунта; передавати його аргументом не треба.

**3. Вставлений ключ.** Користувачі можуть створювати ключі (`aetk_d_`, `aetk_s_`, `aetk_o_`, `aetk_a_` — за рівнем доступу) в AET і вставляти їх у чат. Передавайте ключ в аргументі `key` інструментів акаунта. Не кладіть його в `Authorization`: цей заголовок приймає лише токени доступу OAuth від AET, а все інше вважається відсутністю облікових даних.

**Лінива автентифікація.** Інструмент акаунта, викликаний без ключа чи чинного Bearer-токена, повертає HTTP 401 з `WWW-Authenticate: Bearer resource_metadata="https://aet.events/.well-known/oauth-protected-resource", scope="events"` і помилкою JSON-RPC −32001. Прострочений чи відкликаний токен отримує той самий 401 з повідомленням «The AET connection token is expired or revoked — reconnect AET.» Інструменти також оголошують `securitySchemes` у `_meta`: `noauth` для гостьових, `noauth` плюс `oauth2` з областю `events` — для інструментів акаунта.

## 26 інструментів та їхні анотації

RO = readOnlyHint, D = destructiveHint, I = idempotentHint, OW = openWorldHint (true означає, що інструмент змінює те, що бачить інтернет).

| Інструмент | Доступ | RO | D | I | OW | Призначення |
|---|---|---|---|---|---|---|
| `aet_answer` | без входу | ✓ | – | ✓ | – | Відповіді з AET Learn з джерелами |
| `aet_pricing` | без входу | ✓ | – | ✓ | – | Плани й комісії |
| `aet_fee_calc` | без входу | ✓ | – | ✓ | – | Порівняння комісій за квитки (ринок USD чи UAH) |
| `aet_search_events` | без входу | ✓ | – | ✓ | – | Публічні майбутні події; чернетки виключено |
| `aet_start_event` | без входу | ✓ | – | ✓ | – | Посилання, щоб створити подію вручну |
| `aet_capabilities` | без входу | ✓ | – | ✓ | – | Що AET уміє й не вміє |
| `aet_brief` | без входу | ✓ | – | ✓ | – | Що спитати перед збиранням (≤2 питання) |
| `aet_page_playbook` | без входу | ✓ | – | ✓ | – | Плейбук для типу події |
| `aet_section_schema` | без входу | ✓ | – | ✓ | – | JSON Schema й правила письма розділу |
| `aet_design_options` | без входу | ✓ | – | ✓ | – | Три доречні макети з прев'ю |
| `aet_create_draft` | без входу | – | – | – | ✓ | Створити гостьову чернетку |
| `aet_set_design` | draftKey | – | – | ✓ | ✓ | Макет, стиль, кольори чернетки |
| `aet_claim_link` | draftKey | – | ✓ | – | – | Посилання на перегляд; `rotate` видає нове посилання для забирання |
| `aet_delete_draft` | draftKey | – | ✓ | – | – | Видалити чернетку (підтвердження) |
| `aet_get_event` | draftKey чи акаунт | ✓ | – | ✓ | – | Прочитати чернетку чи живу подію |
| `aet_update_page` | draftKey чи акаунт | – | ✓ | – | ✓ | Правити розділи (до 12 чи 40 операцій) |
| `aet_access` | акаунт | ✓ | – | ✓ | – | Рівень цього підключення і його події |
| `aet_list_events` | акаунт | ✓ | – | ✓ | – | Усі події з access true/false, по 50 на сторінку |
| `aet_create_event` | акаунт | – | – | – | – | Створити приховану подію в акаунті |
| `aet_publish` | акаунт | – | ✓ | – | ✓ | Опублікувати чи сховати (підтвердження) |
| `aet_set_event_design` | акаунт | – | ✓ | ✓ | ✓ | Будь-яке налаштування дизайну, зображення за URL |
| `aet_undo` | акаунт | – | ✓ | – | ✓ | Скасувати останню правку розділу |
| `aet_event_stats` | акаунт | ✓ | – | ✓ | – | 22 метрики без персональних даних |
| `aet_dashboard_save` | акаунт | – | ✓ | ✓ | – | Створити чи оновити дашборд |
| `aet_dashboard_list` | акаунт | ✓ | – | ✓ | – | Дашборди події |
| `aet_dashboard_delete` | акаунт | – | ✓ | – | – | Видалити дашборд (підтвердження) |

Анотації звірено зі сканером каталогу ChatGPT 20 жовтня 2026: `openWorldHint` позначає інструменти, що змінюють побачене відвідувачами; `destructiveHint` — інструменти, що можуть стерти чи перезаписати дані, зокрема ротацію посилання для забирання й перезапис дашборда. Більшість інструментів також оголошує `outputSchema`; п'ять публічних інструментів читання, старших за структурований вихід, повертають текст.

## Результати й модель помилок

**Успіх.** Інструменти зі схемою виходу повертають `structuredContent` і той самий JSON, серіалізований у `content[0].text`, тож клієнти, що читають будь-що з цього, отримують ті самі дані.

**Помилки.** Збій на рівні інструмента повертає `isError: true` і об'єкт `error`:

`{ "error": { "code": "rate_limited", "message": "too many changes with this connection", "hint": "Limit: 30 changes per minute…", "retryAfter": 60 } }`

| Код | Що означає | Реакція клієнта |
|---|---|---|
| `validation` | Значення не відповідає схемі; `field` його називає | Виправити значення; прочитати `hint` |
| `moderation` | Текст не пройшов модерацію; `field` його називає | Переписати цей текст |
| `forbidden` | Немає облікових даних для цього інструмента, неправильний формат ключа чи рівень доступу його не покриває | Викликати `aet_access`; попросити людину змінити рівень |
| `not_found` | Такої чернетки чи події для цього викликача немає, або чернетка спливла | Перелічити події; запропонувати нову чернетку |
| `conflict` | Подія чи чернетка змінилися після читання | Перечитати й повторити на свіжих даних |
| `partial_apply` | Частину операцій пакета збережено; `stoppedAt` дає збій | Надіслати лише невдалу операцію й наступні |
| `needs_confirmation` | Незворотна чи зовнішня дія; додано `summary` і `confirmToken` | Показати резюме; повторити той самий виклик із токеном після явного «так» |
| `rate_limited` | Вичерпано ліміт; `retryAfter` у секундах | Повторити один раз, якщо ≤120 с; інакше зупинитися й сказати людині |
| `plan_limit` | Місячний ліміт подій чи дашбордів | Сказати людині; підказка веде на ціни |
| `idempotency_replay` | Той самий `requestId` і вміст протягом 10 хвилин (чернетки) | Скористатися поверненим посиланням на перегляд |
| `idempotency_conflict` | Той самий `requestId` з іншим вмістом | Згенерувати новий UUID v4 |
| `claimed` | Людина забрала чернетку у свій акаунт | Перейти на інструменти акаунта |
| `not_available` | Операція, якої подія не підтримує, чи скасування, що вже небезпечне | Зробити зміну новою правкою |
| `failed` | Тимчасова помилка; часто з `retryAfter` | Зачекати й повторити один раз |

**Помилки транспорту** — JSON-RPC: −32700 помилка розбору, −32600 завеликий пакет, −32000 перевищення частоти (HTTP 429), −32001 потрібна автентифікація (HTTP 401), −32603 внутрішня помилка.

## Ідемпотентність, версії й атомарні пакети

**Створення.** `aet_create_draft` і `aet_create_event` вимагають `requestId` у форматі UUID v4. Повтор протягом 10 хвилин із тим самим id і вмістом не створює другого об'єкта: для подій відповідь — наявна подія з позначкою `replay: true`; для чернеток — помилка `idempotency_replay` з посиланням на перегляд. Ключ чернетки під час повтору не повертається, тож клієнту, що його загубив, варто створити нову чернетку з новим id. Дедуплікація чернеток прив'язана до адреси викликача, подій — до підключення.

**Версії.** Живі події мають `rev`, чернетки — `version`. Передавайте останнє прочитане значення як `ifVersion` в `aet_update_page`. Якщо об'єкт змінився, відповідь — `conflict`, і нічого не записується. Без `ifVersion` AET однаково записує лише якщо поля, які він зачіпає, не змінилися від його власного читання, і кілька разів повторює всередині.

**Пакети.** `aet_update_page` приймає 1–40 операцій для живих подій і до 12 для чернеток. Для живих подій кожна операція атомарна, а пакет зупиняється на першій невдачі, зберігаючи попередні операції; модерація проходить по всіх текстах до будь-якого застосування; підтвердження оцінюються до запису; лендинг перевіряється після пакета. Операції мають вигляд `{section, op, id?, after?, value?}`, де `op` — set, clear, addItem, updateItem, removeItem чи move. Нові елементи списків отримують id під час першого запису й повертаються в `applied`.

**Підтвердження.** `needs_confirmation` повертає `confirmToken` — HMAC-SHA256 над строком дії, інструментом, подією, відбитком точних операцій і підключенням, — чинний 10 хвилин і одноразовий. Повторіть ідентичний виклик із токеном. Токен витрачається лише тоді, коли незворотна зміна записується, тож повтор після конфлікту з тими самими операціями працює.

## Ліміти, які має поважати клієнт

| Ліміт | Значення |
|---|---|
| Записи в акаунт | 30 на хвилину і 1000 на добу на підключення (закриті за замовчуванням) |
| Операцій за виклик | 40 для живих подій, 12 для чернеток |
| Гостьові чернетки | Типово 20 на добу на людину чи IP; 500 на перевірену платформу; 2000 загалом |
| Правки чернетки | 30 на хвилину, 200 на добу на чернетку |
| Ендпоінт | близько 120 запитів на хвилину з однієї IP-адреси |
| Дашборди | 20 на подію, по 12 віджетів |
| Список подій | 50 на сторінку з `nextOffset` |
| Реєстрації клієнтів | 30 на годину з IP поза перевіреними платформами |
| Ендпоінт токенів | 120 на хвилину з IP поза перевіреними платформами |
| Ключі | 10 активних, 20 створених на добу на акаунт |

Коли вичерпано добовий ліміт, `retryAfter` відраховує до півночі UTC. Будуйте відступ за `retryAfter`, а не за фіксованим розкладом, і ніколи не крутіться в циклі на добовому ліміті.

## Машиночитне виявлення

| Ресурс | Що містить |
|---|---|
| `/.well-known/mcp.json` | Картку сервера у форматі офіційного реєстру MCP: name `com.anyeventtool/aet`, назву, опис, версію 2.0.0, віддалений `streamable-http` на ендпоінті |
| `/.well-known/oauth-protected-resource` | Метадані RFC 9728 |
| `/.well-known/oauth-authorization-server` | Метадані RFC 8414 |
| `/llms.txt` | Стислий опис продукту, плани, коли AET доречний, і розділ для ШІ-асистентів з MCP-ендпоінтом |
| `/llms-full.txt`, `/llms-full-uk.txt` | Увесь вміст Learn текстом, англійською й українською |
| `/pricing.md` | Плани, ліміти й комісії в Markdown з датою оновлення |
| `/{en,uk}/learn/{slug}.md` | Кожна сторінка Learn, зокрема ця серія, у Markdown з канонічною адресою й датою оновлення |

В офіційному реєстрі MCP сервер поки не опубліковано; картка сервера для нього готова. AET подано в каталог конекторів Claude 19 жовтня 2026 і на рецензію застосунків ChatGPT 20 жовтня 2026; на дату статті обидві заявки чекали рецензії.

## Мінімальний клієнт крок за кроком

Простими HTTP-кроками — послідовність, яку MCP-клієнт проходить з AET:

1. `POST /api/mcp` з `{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-client","version":"1"}}}` і `Accept: application/json, text/event-stream`. Збережіть `instructions`.
2. `tools/list`. Закешуйте 26 інструментів.
3. `tools/call` `aet_section_schema` з `{"section":"all"}`; потім `aet_design_options` з `{"kind":"learning","mood":"calm warm handmade","language":"uk"}`.
4. `tools/call` `aet_create_draft` з `{"requestId":"<uuid v4>","content":{…}}`. Збережіть `eventId` і `draftKey`; покажіть `previewUrl`; `claimUrl` давайте лише користувачу.
5. Коли користувач хоче свій акаунт: викличте `aet_access`. Чекайте HTTP 401 з `WWW-Authenticate`. Завантажте метадані ресурсу, потім метадані сервера авторизації; зареєструйтеся через `/api/oauth/register` або скористайтеся своїм документом метаданих клієнта; відкрийте `/oauth/authorize` з PKCE S256; обміняйте код на `/api/oauth/token`.
6. Повторіть `aet_access` з `Authorization: Bearer aeto_…`; далі — `aet_list_events`, `aet_get_event`, `aet_update_page`.
7. На `needs_confirmation` покажіть `summary`, дочекайтеся явного «так», повторіть ідентичний виклик із `confirmToken`.
8. Оновлюйте токен доступу до спливу через `grant_type=refresh_token`; щоразу зберігайте новий токен оновлення.

Офіційні SDK для MCP роблять кроки 1, 2 і 5 за вас; Claude, ChatGPT, Claude Code, Cursor і Gemini CLI самі обробляють вхід ([частина 2](/uk/learn/connect-your-ai-assistant-to-aet)).

## Рішення, які варто перейняти

Деякі рішення в сервері AET корисні й поза подіями:

- **Платформа не генерує вміст.** Пише асистент; сервер перевіряє, модерує й верстає. Гранична вартість сторінки для вендора — виклик модерації й кілька записів, і саме це робить гостьові чернетки доступними ([частина 3](/uk/learn/ai-guest-drafts-explained)).
- **Лінива автентифікація.** Більша частина цінності досяжна без входу; 401 з'являється лише на першому інструменті акаунта, тож онбординг — це одна адреса.
- **Підтвердження, написані сервером.** Резюме, яке схвалює людина, сервер будує з самої зміни, а токен прив'язаний до точних операцій, тож клієнт не може переказати небезпечну дію як безневинну.
- **Поелементні операції з версіями.** Списки правляться за id з `ifVersion`, тож агенти й люди можуть правити ту саму сторінку, не перезаписуючи одне одного.
- **Позначка недовірених даних у самих даних, а не лише в тексті.** Значення, написані гостями, приходять загорнутими, тож модель бачить межу в структурі, а не лише в системній підказці.
- **Один об'єкт помилки, одна реакція на код.** Інструкції зіставляють кожен код з однією правильною реакцією, і обробка помилок стає пошуком у таблиці, а не здогадками.
- **Усе, що потрібно клієнту, — у `tools/list` та `instructions`.** Для правильного агента не потрібна жодна зовнішня документація.

## Відомі прогалини й сигнали дорожньої карти

Чесно, станом на 25 жовтня 2026:

- Немає вебхуків чи підписок на події; клієнти опитують через `aet_get_event` чи `aet_event_stats`.
- Не відкрито MCP prompts чи resources; усе — інструменти.
- Немає потокового прогресу; відповіді — окремі JSON-об'єкти.
- Немає часу завершення подій; `datetime.end` повертає попередження.
- Зображення приймаються лише за URL; інструмента завантаження немає.
- Платні квитки, схеми залу, квізи, магазини, спільноти й календарі налаштовує організатор в AET, а не інструменти.
- Немає серверної аналітики через кілька подій; статистика — для кожної події окремо.
- `aet_claim_link` з `rotate` тримає чинними три останні посилання для забирання, а не лише найновіше.
- Поки немає в офіційному реєстрі MCP і в каталогах Claude та ChatGPT (заявки на рецензії).

Частина 10 серії розповідає, що AET планує далі, і наводить перші числа з реального використання.

## Чекліст для розробників клієнтів

1. Надсилайте `Accept: application/json, text/event-stream`; чекайте JSON, а не SSE.
2. Не покладайтеся на `Mcp-Session-Id`; сервер без станів.
3. Читайте й виконуйте `instructions`; оновлюйте їх, коли змінюється версія сервера.
4. Генеруйте свіжий UUID v4 у `requestId` на кожне створення; повторно — лише щоб повторити той самий вміст.
5. Сприймайте HTTP 401 на інструментах акаунта як сигнал для OAuth, а не як фатальну помилку.
6. Тримайте ключі поза `Authorization`; передавайте їх як `key`.
7. Передавайте `ifVersion`; обробляйте `conflict` перечитуванням.
8. Обробляйте `partial_apply`, надсилаючи заново лише від невдалої операції.
9. Ніколи не підтверджуйте `needs_confirmation` автоматично; показуйте `summary` сервера дослівно.
10. Відступайте за `retryAfter`; ніколи не крутіться в циклі на добових лімітах.
11. Показуйте значення `{untrusted: …}` як цитований вміст користувачів.
12. Поважайте анотації: питайте перед інструментами з `destructiveHint` чи `openWorldHint`, якщо у вашому клієнті є шар підтверджень.

## Джерела (перевірено 25 жовтня 2026)

- Код AnyEventTool на 25 жовтня 2026: `pages/api/mcp.ts` (транспорт, інструкції, інструменти, анотації, походження, лінива автентифікація), `pages/api/oauth/metadata.ts`, `register.ts`, `authorize.ts`, `token.ts` (сервер авторизації), `lib/aiops/access.ts` (підключення, правила переадресації, токени), `lib/aiops/actor.ts` і `lib/aiops/limits.ts` (ліміти), `lib/aiops/draft.ts`, `account.ts`, `live.ts`, `sections.ts` (ідемпотентність, версії, пакети, підтвердження), `public/.well-known/mcp.json` (картка сервера), `node_modules/@modelcontextprotocol/sdk` 1.32.1 (версії протоколу).
- Запити до робочого сервера 25 жовтня 2026: `initialize` з протоколом 2025-06-18; `tools/call aet_list_events` без облікових даних → HTTP 401 з `WWW-Authenticate`; `/.well-known/oauth-protected-resource`.
- Model Context Protocol: [версії специфікації](https://modelcontextprotocol.io/specification/versioning) і [авторизація](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization), перевірено 20 жовтня 2026.
- [MCP-ендпоінт](https://aet.events/api/mcp), [картка сервера](https://aet.events/.well-known/mcp.json), [llms.txt](https://anyeventtool.com/llms.txt), [pricing.md](https://anyeventtool.com/pricing.md).

Знайшли розбіжність чи баг? Напишіть на support@anyeventtool.com — виправимо з датою.

## Ця серія: десять статей про ШІ-агентів в AnyEventTool

Це частина 9 з 10. Назва останньої частини може змінитися.

1. [Івент-менеджер, який не спить](/uk/learn/ai-assistant-as-your-event-manager) — ландшафт, три нулі, запобіжники (19 жовтня) · 2. [Підключаємо асистента до AET](/uk/learn/connect-your-ai-assistant-to-aet) — Claude, ChatGPT, Claude Code, Cursor, Gemini (20 жовтня) · 3. [Гостьові чернетки зсередини](/uk/learn/ai-guest-drafts-explained) (22 жовтня) · 4. [Сторінка, якою агент пишається](/uk/learn/how-ai-agents-write-a-better-event-page) (22 жовтня) · 5. [Дизайн від агента](/uk/learn/event-page-design-by-ai-agent) (23 жовтня) · 6. [Жива подія за ключем](/uk/learn/managing-a-live-event-with-an-ai-key) (24 жовтня) · 7. [Довіра за задумом](/uk/learn/trust-by-design-ai-agents-and-events) (25 жовтня) · 8. [Числа без імен](/uk/learn/event-statistics-for-ai-agents-without-personal-data) (25 жовтня) · 9. Для розробників: MCP-сервер AET — ця стаття (25 жовтня) · 10. [Плейбуки для десяти типів подій і що далі](/uk/learn/ai-agent-playbooks-for-ten-event-types) (25 жовтня).

## Питання й відповіді

**Яка адреса й транспорт MCP-сервера AnyEventTool?**

https://aet.events/api/mcp — Streamable HTTP з відповідями JSON, без станів (без ідентифікатора сесії), лише POST. Запит може пакувати до 5 повідомлень у межах 256 КБ.

**Які версії протоколу MCP підтримує AET?**

Сервер працює на офіційному TypeScript SDK 1.32 і узгоджує ревізії з рукостисканням до 2025-11-25; 2025-06-18 підтверджено на робочому сервері 25 жовтня 2026.

**Як працює автентифікація на MCP-сервері AET?**

Гостьовим інструментам вона не потрібна. Інструменти акаунта використовують OAuth 2.1 з PKCE S256, публічні клієнти, динамічну реєстрацію чи документи метаданих клієнта — або вставлений ключ aetk_ в аргументі key. Без облікових даних вони повертають HTTP 401 з WWW-Authenticate, що вказує на метадані захищеного ресурсу.

**Скільки інструментів відкриває MCP-сервер AET?**

26: 15 лише для читання і 11 для запису. 16 працюють без входу (зокрема гостьові чернетки); 10 потребують акаунта користувача. Кожен інструмент оголошує назву й усі чотири анотації MCP.

**Як уникнути дублікатів чернеток чи подій під час повторів?**

Надсилайте свіжий UUID v4 у requestId з кожним створенням. Повтор із тим самим id і вмістом протягом 10 хвилин повертає наявний об'єкт замість створення нового.

**Як клієнту обробляти needs_confirmation?**

Показати людині резюме сервера, дочекатися явного «так» і повторити ідентичний виклик із поверненим confirmToken. Токен прив'язаний до точних операцій, діє 10 хвилин і використовується один раз.

**Чи підтримує MCP-сервер AET вебхуки чи потокову передачу?**

Станом на 25 жовтня 2026 — ні. Відповіді — окремі JSON-об'єкти, а клієнти опитують через aet_get_event чи aet_event_stats. MCP prompts чи resources немає; усе — інструменти.

**Чи є AET в офіційному реєстрі MCP?**

Поки ні. Картку сервера у форматі реєстру опубліковано на /.well-known/mcp.json. Заявки в каталоги Claude (19 жовтня 2026) і ChatGPT (20 жовтня 2026) на 25 жовтня 2026 чекали рецензії.

## Пов'язані відповіді

- [Довіра за задумом: як AnyEventTool тримає ШІ-агентів у безпеці на ваших сторінках подій](https://anyeventtool.com/uk/learn/trust-by-design-ai-agents-and-events.md)
- [Плейбуки ШІ-агента для десяти типів подій — і що далі для ШІ-агентів в AnyEventTool](https://anyeventtool.com/uk/learn/ai-agent-playbooks-for-ten-event-types.md)
- [Як підключити Claude, ChatGPT, Claude Code, Cursor чи Gemini до AnyEventTool — для людей і їхніх ШІ-агентів](https://anyeventtool.com/uk/learn/connect-your-ai-assistant-to-aet.md)
- [Жива подія в руках ШІ-агента: поелементні правки, реєстрація, матеріали, підтвердження і скасування в AnyEventTool](https://anyeventtool.com/uk/learn/managing-a-live-event-with-an-ai-key.md)
- [Числа без імен: статистика й дашборди події, які ШІ-агент читає в AnyEventTool, — без персональних даних гостей](https://anyeventtool.com/uk/learn/event-statistics-for-ai-agents-without-personal-data.md)
- [Івент-менеджер, який не спить: що змінюється, коли ваш ШІ-асистент може зібрати, оформити й вести сторінку події](https://anyeventtool.com/uk/learn/ai-assistant-as-your-event-manager.md)
