MCP-сервер для Timepad API: создание и управление событиями, регистрациями и вебхуками
Server has 21 tools with complete JSON schemas and descriptions in Russian. Naming follows verb_noun pattern (list_*, get_*, create_*, update_*, delete_*, call_api). Descriptions are detailed and include API endpoint references, constraints, and usage notes. However, descriptions are lengthy (200-400+ chars, exceeding the 10-200 char baseline for LLM optimization), and several parameters lack type constraints (enums, min/max). The `call_api` tool is a generic escape hatch that bypasses schema validation. Error handling exists but lacks recovery guidance. Tool annotations (readOnlyHint, destructiveHint) are present and correctly applied.
Одобрить регистрацию (POST /v1/orders/{order_id}/approve). Только для событий с модерацией.
Универсальный вызов API Timepad (GET, POST, PATCH, DELETE). Используйте для методов, которые не покрыты отдельными инструментами.
Создать событие (POST /v1/events). Событие создаётся как черновик (access_status=draft). Обязательные поля: name, starts_at, ends_at, categories, city, address. Даты в ISO 8601, например 2026-09-15T19:00:00+0300. Суммы в ticket_types указываются в копейках (10000 = 100 рублей). Возрастное ограничение: 0, 6, 12, 16 или 18.
Создать организацию (POST /v1/organizations).
Создать вебхук (POST /v1/organizations/{organization_id}/webhooks).
Удалить регистрацию (DELETE /v1/orders/{order_id}). Только для своих регистраций.
Descriptions exceed LLM-optimized length (200-400+ chars vs. 50-200 baseline). Verbose Russian text with API endpoint details and caveats wastes tokens and buries key intent signals. Example: list_events description is ~380 chars with nested caveats about draft events.
call_api tool is a generic escape hatch that bypasses schema validation and tool-specific error handling. LLMs cannot reason about what call_api does without trying it. Violates single-responsibility principle.
Parameters lack enum constraints for known-value fields. Examples: access_status in list_events and create_event accepts strings but no enum list; sort parameter accepts array of strings with no format guidance; event_types in webhooks has no enum.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Удалить вебхук (DELETE /v1/organizations/{organization_id}/webhooks/{webhook_id}).
Карточка события по id (GET /v1/events/{event_id}). Свои непубличные события видны только со scope view_private_events.
Карточка регистрации по id (GET /v1/orders/{order_id}).
Карточка организации по id (GET /v1/organizations/{organization_id}).
Карточка вебхука (GET /v1/organizations/{organization_id}/webhooks/{webhook_id}).
Справочник категорий событий (GET /v1/event_categories).
Найти события (GET /v1/events). Возвращает {'total': N, 'values': [...]}. Важно: поиск ходит по опубликованным событиям. Черновик не находится ни по organization_ids, ни по прямому event_ids, даже с access_statuses=['draft'], Таймпад молча отдаёт total=0. Своё только что созданное событие читайте через get_event по id, который вернул create_event.
Список регистраций на события (GET /v1/orders). Возвращает {'total': N, 'values': [...]}.
Список организаций, где владелец токена админ (GET /v1/organizations).
Список вебхуков организации (GET /v1/organizations/{organization_id}/webhooks).
Отклонить регистрацию (POST /v1/orders/{order_id}/reject). Только для событий с модерацией.
Обновить событие (PATCH /v1/events/{event_id}). Можно обновлять только черновики и свои события.
Обновить регистрацию (PATCH /v1/orders/{order_id}). Можно менять только свои регистрации.
Обновить вебхук (PATCH /v1/organizations/{organization_id}/webhooks/{webhook_id}).
Проверить токен: чей он и какие scope выданы (GET /introspect). Первый инструмент при отладке доступа: если Таймпад отвечает 403, здесь видно, какого scope не хватает. Заодно показывает организации, где владелец токена админ.
No output schema documentation. Tools return API responses directly (e.g., {'total': N, 'values': [...]}) but LLMs cannot see the structure of returned objects. Downstream tool chaining is implicit and error-prone.
Error handling returns raw TimepadError strings without recovery guidance. Example: 'Не указана организация' (Russian) tells LLM nothing about next steps. No categorization of retryable vs. fatal errors.