# AOA: venues, tables and events in Ukraine

> Find cafés, bars, coworkings and events in Ukraine, book a table or register for an event.

- name: ua.com.aoa/mcp
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 87/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ua.com.aoa%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/ua.com.aoa%2Fmcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "aoa": {
      "type": "http",
      "url": "https://aoa.com.ua/api/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-10d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 87/100 (good)

### protocol: 100 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- pass `protocol.list_ttl`: tool list is cacheable (ttlMs 300000)

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 94 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 10 of 10 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 6 of 10 tools declare all four hints; missing: confirm_reservation (idempotentHint); restaurant_reservation (idempotentHint); cancel_reservation (idempotentHint); …
- pass `tools.token_cost`: about 2,871 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 50 (weight 15)

- warn `stability.changes`: 18 tool changes in 30 days
- fail `stability.rug_pull`: 9 tools kept their name but changed most of their description in 30 days; review before trusting them
- pass `stability.new_links`: no tool change named a new site

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 10, about 2,871 tokens to load them all
- tool set hash: 2d1e78b44066e5341d3e0de8c32d5533
- tools last changed: 2026-11-12T11:57:02.677Z
- badge: [![protogrid quality](https://protogrid.dev/badge/ua.com.aoa/mcp.svg)](https://protogrid.dev/servers/ua.com.aoa/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-12 `register_for_event` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Реєструє користувача на подію AOA. Для безкоштовних подій завершує реєстрацію одразу, для платних — повертає посилання на оплату. Потребує підключеного акаунта AOA. Події з вибором місця, віковою перевіркою чи ручним підтвердженням оформлюються лише на сайті — тул поверне посилання.
  - after: Реєструє користувача на подію AOA. Викликай, коли людина прямо попросила записати її на конкретну подію і event_id відомий. Для безкоштовних подій завершує реєстрацію одразу (status registered), для платних резервує квиток і повертає посилання на оплату (payment_required). Потребує підключеного акаунта AOA. Події з вибором місця, віковою перевіркою чи ручним підтвердженням оформлюються лише на сайті - тул поверне посилання (handoff). Не викликай, щоб дізнатися ціну чи деталі: це get_event.
- 2026-11-12 `get_event` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Повертає деталі події: опис, час, місце, ціну квитків і чи можна зареєструватися прямо в чаті.
  - after: Повертає картку однієї події AOA: опис, початок і кінець, заклад з адресою, мінімальну ціну квитка, чи відкрита реєстрація і чи можна зареєструватися прямо в чаті (handoffReason = null) або лише на сайті. Викликай, коли event_id вже відомий і людина питає подробиці або збирається йти. Не викликай для пошуку подій за темою чи датою: це search_events.
- 2026-11-12 `search_events` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Знаходить майбутні події на AOA: концерти, лекції, вечірки, нетворкінг, знайомства, майстеркласи, кінопокази. Викликай, коли людина питає, що робити на вихідних, куди піти ввечері, які є події в місті, де познайомитися з людьми або чим зайнятись у конкретну дату. Повертає дату, місце, ціну і чи відкрита реєстрація.
  - after: Знаходить майбутні події на AOA: концерти, лекції, вечірки, нетворкінг, знайомства, майстеркласи, кінопокази. Викликай, коли людина питає, що робити на вихідних, куди піти ввечері, які є події в місті, де познайомитися з людьми або чим зайнятись у конкретну дату. Повертає до 20 подій: event_id, дату, місце, ціну і чи відкрита реєстрація. Не потрібен, якщо event_id уже відомий (тоді get_event); для закладів без події є search_venues.
- 2026-11-12 `cancel_reservation` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Скасовує бронювання столика. Потрібен підключений акаунт AOA або токен гостьової броні.
  - after: Скасовує бронювання столика і повідомляє заклад. Викликай лише тоді, коли людина явно попросила скасувати конкретну бронь і reservation_id відомий (з list_my_reservations чи підтвердження). Потрібен підключений акаунт AOA або токен гостьової броні. Повертає reservationId і статус cancelled; відвідану бронь скасувати не можна. Не викликай, щоб змінити час: скасування незворотне.
- 2026-11-12 `list_my_reservations` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Повертає бронювання столиків користувача на AOA. Потребує підключеного акаунта AOA.
  - after: Повертає бронювання столиків користувача на AOA (до 20, за датою від найближчої): заклад з адресою, дату, час, кількість гостей, статус (pending, confirmed, cancelled, visited) і reservation_id. Викликай, коли людина питає про свої броні, хоче нагадати собі час чи збирається скасувати бронь і id невідомий. Потребує підключеного акаунта AOA; гостьові броні без акаунта тут не видно.
- 2026-11-12 `confirm_reservation` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Створює бронювання столика за даними, підтвердженими людиною в картці. Викликається лише інтерфейсом картки бронювання.
  - after: Створює бронювання столика за даними, які людина сама перевірила й підтвердила в картці бронювання. Викликає лише інтерфейс картки після кліку людини, не модель: для броні з чату використовуй restaurant_reservation. Повертає бронь зі статусом pending (заклад підтверджує її сам), датою, часом, кількістю гостей і reservation_id.
- 2026-11-12 `restaurant_reservation` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Відкриває картку бронювання столика у закладі AOA: показує вільний час і форму підтвердження. Викликай, коли людина хоче забронювати столик і відомий id закладу. Тул НЕ створює бронювання — людина підтверджує його сама в картці. Дату, час і кількість гостей передавай, лише якщо людина їх назвала.
  - after: Відкриває картку бронювання столика у закладі AOA: показує вільний час і форму підтвердження. Викликай, коли людина хоче забронювати столик і відомий id закладу. Тул НЕ створює бронювання — людина підтверджує його сама в картці. Повертає заклад, вільні слоти на дату і префіл картки; якщо клієнт не малює картку, у тексті є посилання на сторінку закладу. Дату, час і кількість гостей передавай, лише якщо людина їх назвала. Не викликай, щоб лише перевірити вільний час: це check_table_availability.
- 2026-11-12 `check_table_availability` changed (inputSchema, outputSchema)
- 2026-11-12 `get_venue` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Повертає деталі закладу: адресу, години роботи, телефон, чи приймає бронювання столиків і максимальну кількість гостей на бронь.
  - after: Повертає картку одного закладу AOA: адресу, місто, години роботи, телефон закладу, координати, посилання на сторінку, чи приймає онлайн-бронювання столиків і максимум гостей на бронь. Викликай, коли venue_id вже відомий (з search_venues) і людина питає деталі: коли відкрито, як подзвонити, де це, чи можна прийти компанією. Не викликай для пошуку за назвою (це search_venues) і перед бронюванням без потреби: restaurant_reservation сам покаже вільний час.
- 2026-11-12 `search_venues` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Знаходить місця на платформі AOA: кавʼярні, бари, ресторани, коворкінги, книгарні, культурні простори. Викликай, коли людина питає, куди піти, де випити кави чи повечеряти, де попрацювати з ноутбуком, де зустрітися з друзями або провести побачення — а також коли вона називає конкретний заклад і треба отримати його id для бронювання. Повертає актуальні дані з бази AOA: адресу, години роботи і чи приймає заклад бронювання. Не потрібен, якщо id закладу вже відомий з попереднього кроку.
  - after: Знаходить місця на платформі AOA: кавʼярні, бари, ресторани, коворкінги, книгарні, культурні простори. Викликай, коли людина питає, куди піти, де випити кави чи повечеряти, де попрацювати з ноутбуком, де зустрітися з друзями або провести побачення — а також коли вона називає конкретний заклад і треба отримати його id для бронювання. Повертає до 20 закладів з бази AOA: venue_id, адресу, місто, години роботи, координати і чи приймає заклад бронювання. Не потрібен, якщо id закладу вже відомий з попереднього кроку; для подій є search_events.

Full history: https://api.protogrid.dev/v1/servers/ua.com.aoa%2Fmcp/changes

## Remotes

- https://aoa.com.ua/api/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (10)

- `cancel_reservation`: Скасовує бронювання столика і повідомляє заклад. Викликай лише тоді, коли людина явно попросила скасувати конкретну бронь і reservation_id відомий (з list_my_reservations чи підтвердження). Потрібен підключений акаунт AOA або токен гостьової броні. Повертає reservationId і статус cancelled; відвідану бронь скасувати не можна. Не викликай, щоб змінити час: скасування незворотне.
- `check_table_availability`: Повертає вільні слоти для бронювання столика на конкретну дату. Викликай, коли треба відповісти «чи є місце о 19:00» без відкриття картки бронювання.
- `confirm_reservation`: Створює бронювання столика за даними, які людина сама перевірила й підтвердила в картці бронювання. Викликає лише інтерфейс картки після кліку людини, не модель: для броні з чату використовуй restaurant_reservation. Повертає бронь зі статусом pending (заклад підтверджує її сам), датою, часом, кількістю гостей і reservation_id.
- `get_event`: Повертає картку однієї події AOA: опис, початок і кінець, заклад з адресою, мінімальну ціну квитка, чи відкрита реєстрація і чи можна зареєструватися прямо в чаті (handoffReason = null) або лише на сайті. Викликай, коли event_id вже відомий і людина питає подробиці або збирається йти. Не викликай для пошуку подій за темою чи датою: це search_events.
- `get_venue`: Повертає картку одного закладу AOA: адресу, місто, години роботи, телефон закладу, координати, посилання на сторінку, чи приймає онлайн-бронювання столиків і максимум гостей на бронь. Викликай, коли venue_id вже відомий (з search_venues) і людина питає деталі: коли відкрито, як подзвонити, де це, чи можна прийти компанією. Не викликай для пошуку за назвою (це search_venues) і перед бронюванням без потреби: restaurant_reservation сам покаже вільний час.
- `list_my_reservations`: Повертає бронювання столиків користувача на AOA (до 20, за датою від найближчої): заклад з адресою, дату, час, кількість гостей, статус (pending, confirmed, cancelled, visited) і reservation_id. Викликай, коли людина питає про свої броні, хоче нагадати собі час чи збирається скасувати бронь і id невідомий. Потребує підключеного акаунта AOA; гостьові броні без акаунта тут не видно.
- `register_for_event`: Реєструє користувача на подію AOA. Викликай, коли людина прямо попросила записати її на конкретну подію і event_id відомий. Для безкоштовних подій завершує реєстрацію одразу (status registered), для платних резервує квиток і повертає посилання на оплату (payment_required). Потребує підключеного акаунта AOA. Події з вибором місця, віковою перевіркою чи ручним підтвердженням оформлюються лише на сайті - тул поверне посилання (handoff). Не викликай, щоб дізнатися ціну чи деталі: це get_event.
- `restaurant_reservation`: Відкриває картку бронювання столика у закладі AOA: показує вільний час і форму підтвердження. Викликай, коли людина хоче забронювати столик і відомий id закладу. Тул НЕ створює бронювання — людина підтверджує його сама в картці. Повертає заклад, вільні слоти на дату і префіл картки; якщо клієнт не малює картку, у тексті є посилання на сторінку закладу. Дату, час і кількість гостей передавай, лише якщо людина їх назвала. Не викликай, щоб лише перевірити вільний час: це check_table_availability.
- `search_events`: Знаходить майбутні події на AOA: концерти, лекції, вечірки, нетворкінг, знайомства, майстеркласи, кінопокази. Викликай, коли людина питає, що робити на вихідних, куди піти ввечері, які є події в місті, де познайомитися з людьми або чим зайнятись у конкретну дату. Повертає до 20 подій: event_id, дату, місце, ціну і чи відкрита реєстрація. Не потрібен, якщо event_id уже відомий (тоді get_event); для закладів без події є search_venues.
- `search_venues`: Знаходить місця на платформі AOA: кавʼярні, бари, ресторани, коворкінги, книгарні, культурні простори. Викликай, коли людина питає, куди піти, де випити кави чи повечеряти, де попрацювати з ноутбуком, де зустрітися з друзями або провести побачення — а також коли вона називає конкретний заклад і треба отримати його id для бронювання. Повертає до 20 закладів з бази AOA: venue_id, адресу, місто, години роботи, координати і чи приймає заклад бронювання. Не потрібен, якщо id закладу вже відомий з попереднього кроку; для подій є search_events.
