---
name: shtab-mcp
description: Работа с таск-трекером Shtab через его MCP-сервер — задачи, проекты, цели, страницы, уведомления и учёт времени. Используй, когда пользователь просит что-то найти, посчитать, создать или поменять в Shtab (задачи, доски, проекты, OKR, сроки, исполнители, комментарии, отчёт по времени), или когда подключены инструменты Shtab (fetch_tasks, create_task, list_views и др.).
---

# Shtab через MCP

Shtab — таск-трекер с проектами, досками, целями (OKR) и базой знаний. MCP-сервер отдаёт ассистенту те же данные и действия, что видит пользователь в интерфейсе: каждый вызов выполняется от его имени, с его правами и видимостью.

## Подключение

Если инструментов Shtab в сессии нет, предложи подключить сервер:

- Адрес сервера: `https://my.shtab.app/api/mcp/rpc`
- claude.ai, Claude Desktop, ChatGPT, Cursor: добавить коннектор по этому адресу, дальше вход и выбор прав (только чтение или чтение и запись) через OAuth.
- Claude Code: `claude mcp add --transport http shtab https://my.shtab.app/api/mcp/rpc` (OAuth), либо с заголовком `--header "Authorization: Bearer <токен>"`.
- Токен выпускается в Shtab, раздел «ИИ-агенты и MCP»: https://my.shtab.app/connect/mcp. Токен показывается один раз. Никогда не проси пользователя вставить токен в чат и не записывай его в файлы проекта.

Доступ к MCP есть на платных тарифах и только при праве роли «Подключение внешнего ИИ (MCP)» в команде; если подключение не проходит, причина обычно в одном из них. У команды есть часовой лимит запросов (обычно 300 в час, на старшем тарифе 1000). Не делай лишних вызовов: сначала подумай, какой инструмент ответит за один раз.

## Как найти нужное

ID берутся только из ответов инструментов, никогда не угадывай их.

1. Проект, доска или папка по названию → `list_views`. В каждой строке есть ID представления и `datasource_id` (ID проекта, где живут задачи).
2. Задача, цель, страница или человек по слову → `global_search`. Результаты помечены как `[task #123]`, этот ID и передавай дальше.
3. Люди → `search_users` (ID для исполнителей и ответственных). «Я», «мои» → `get_current_user`.
4. Статусы, метки, типы задач, роли, этапы → `list_directory(entity_type=...)`. Фильтры по статусу и `status` при создании принимают ID статуса, а не название.

## Чтение

- Список задач: `fetch_tasks`. Нужен хотя бы один из `view_id`, `datasource_id`, `user_id`, `search`. Для `deadline` и `date_start` передаются пресеты (`expired`, `today`, `current_week`…), точные даты — в `deadline_after` / `deadline_before` в формате `YYYY-MM-DD`. Страницы — через `offset` и `limit`.
- Сколько задач, разбивка по статусам или исполнителям: `count_tasks` с `group_by`, а не перелистывание `fetch_tasks`. Просроченные: `deadline=["expired"]`.
- Одна задача целиком: `get_task` (поля, чек-листы с ID пунктов, подзадачи, последние комментарии). Описание в списках обрезано, полный текст — `get_task_description`, вся переписка — `get_task_comments`.
- Цели: `get_goals_structure` (дерево), `get_goal_detail` (ключевые результаты, связи), `get_key_result_detail` (история прогресса).
- Страницы и вкладки: `get_page_content` отдаёт полный текст в markdown; `get_view_detail` и `list_tabs` — настройки представления и его вкладки.
- Время: `get_worktime_report` за период с разбивкой по людям, задачам, проектам или дням.
- Уведомления: `fetch_notifications`.

## Изменения

Инструменты записи доступны, только если при подключении выдано право на запись. Если их нет, скажи об этом и предложи переподключиться с записью, а не обходи ограничение.

- Перед любым изменением коротко покажи, что именно сделаешь (какие задачи, какие поля), и дождись согласия. Для массовых правок сначала покажи список.
- Всё, что удаляет, отвязывает или заменяет целиком, — только после явного «да». Например: `delete_stage`, `delete_tab`, `delete_task_schedule`, `detach_from_view`, `remove` в `manage_form_fields` и `manage_task_type_fields`, `update_task` с `checklist_items_to_delete`, `delete_connections` или `delete_dependencies`, `update_goal` с `remove_*_ids`, а также полная замена: `update_tab` с `description` (переписывает страницу) или `task_filter`, `update_sla_policy` с `rules`, `update_task_type` с `modules`.
- Задачи: `create_task` (обязательны `name` и `datasource`), `update_task` (передаются только меняемые поля; `0` в `parent`, `status`, `stage` очищает поле). Даты `YYYY-MM-DD`, время `HH:MM:SS`, описание в HTML.
- Чек-листы: новые пункты — `update_task` с `checklists`; `get_task` даёт ID существующих пунктов, дальше `checklist_items_to_update` (отметить, переименовать) или `checklist_items_to_delete`.
- Комментарии: `create_comment` (автором остаётся пользователь, ассистент помечается соавтором).
- Цели: `create_goal`, `update_goal` (связи с проектами и задачами — через `add_*_ids` / `remove_*_ids`).
- Представления и вкладки: `create_view`, `update_view`, `configure_view`, `manage_view_access`, `create_tab`, `update_tab`.
- Справочники и этапы: сначала `list_directory`, чтобы не плодить дубли, потом `create_directory_entry`, `attach_to_view`, `create_stage`.
- Шаблоны и повторы: `list_task_templates`, `create_task_from_template`, `set_task_schedule`.
- Остальное по названию: формы (`create_form`, `configure_form`, `manage_form_fields`), SLA (`create_sla_policy`), типы задач (`create_task_type`, `manage_task_type_fields`, `clone_task_type`).

После изменения ответь, что сделано, со ссылкой на номер задачи или ID, и не повторяй вызов, если инструмент вернул успех.

## Ошибки

- Ошибка «нет доступа» или «не найдено» по известному ID обычно значит, что у пользователя нет прав на этот объект. Скажи об этом, не перебирай соседние ID. Пустой список — это просто «ничего не нашлось», а не признак прав.
- Ошибка лимита: остановись и предложи продолжить позже, не повторяй запрос в цикле.
- Ошибка валидации: прочитай, какое поле не так (чаще всего формат даты или название вместо ID), исправь один раз.

## Примеры запросов

- «Что у меня горит?» → `get_current_user`, затем `fetch_tasks(executors=[…], deadline=["expired", "current_week"], completed=false)`. `user_id` отдаёт ещё и задачи, где человек ответственный или автор.
- «Сколько просроченных задач по исполнителям в проекте Маркетинг?» → `list_views`, затем `count_tasks(datasource_id=…, deadline=["expired"], group_by="executor")`.
- «Создай задачу Ивану на пятницу: подготовить отчёт» → `list_views`, `search_users("Иван")`, показать черновик, после согласия `create_task`.
- «Перескажи страницу Регламент релизов» → `global_search`, затем `get_page_content`.
