Перейти к основному содержимому

chk-mcp — справочник инструментов

Версия документа: 1.0 Версия инструмента: 0.2.1 Версия API: v1 Дата: 29.04.2026 Статус: Готов к обсуждению

Назначение документа

Полный каноничный справочник по 13 инструментам MCP-сервера chk-mcp. Для каждого tool описано: каноничное назначение, обязательные и опциональные поля, требуемые scope, примеры запроса, формат ответа, типичные ошибки.

Это документ для MCP-агента, который вызывает tools напрямую, и для разработчика, который пишет код, использующий клиент ChkClient напрямую (без MCP-обёртки). Полный референс самого API смотри в External API v1 — полное руководство.

Общие правила

Формат ответа

Все tools при успехе возвращают data-часть API-envelope как JSON-строку в TextContent. То есть оригинальный API-ответ:

{"ok": true, "data": {...}, "meta": {...}}

…превращается в JSON {...} — только содержимое data. meta.request_id доступен только в ошибках (для трассировки) — в успешных ответах он отбрасывается, чтобы не засорять контекст агента.

Формат ошибки

При ошибке tool возвращает payload вида:

{
"error": {
"code": "scope_missing",
"message": "У токена нет нужного scope",
"http_status": 403,
"request_id": "req_xxxxxxxxxxxx"
}
}

Для нереалистичных ошибок (отсутствие сети, парс-ошибка JSON, отсутствие файла при upload) — поле code будет internal или non_json_response.

Идемпотентность

GET-вызовы идемпотентны — можно повторять. PATCH/POST/PUT — не повторять автоматически при сетевых ошибках, чтобы не дублировать действия (комментарии, ответы, attachments). Если ответ не пришёл, проверить состояние через chk_items_get перед повторной попыткой.

1. chk_auth_me

Назначение. Проверить токен и узнать, под каким пользователем работает сервер.

Когда вызывать. Первым после регистрации сервера, чтобы убедиться что всё работает. Не нужен для штатной работы.

Scope: auth:me.

Поля: нет.

Ответ:

{
"user": {"id": 3, "name": "Олександр Носаков", "role": "admin"},
"token": {
"label": "Claude",
"scopes": ["auth:me", "projects:read", "..."],
"expires_at": null
}
}

2. chk_projects_list

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

Когда вызывать. В начале сессии, чтобы понять какие проекты доступны и работать дальше по конкретному project_id.

Scope: projects:read.

Поля:

ПолеТипRequiredОписание
limitinteger (1–200)нетМаксимум проектов в ответе
offsetinteger (≥0)нетСдвиг для пагинации
archivedbooleanнетВключить архивные проекты (по умолчанию — без них)

Пример:

{"limit": 20, "archived": false}

Ответ: объект {projects: [...]}, где каждый проект содержит id, name, description, deadline, verdict, is_archived, archived_at, created_at, updated_at, overdue_count, due_tomorrow_count, sections_count, progress, project_wide_visibility.

3. chk_projects_get

Назначение. Получить карточку одного проекта по id.

Scope: projects:read.

Поля:

ПолеТипRequired
idintegerда

Пример: {"id": 15}

Ответ: объект проекта с теми же полями, что в chk_projects_list, плюс детализация (например, расширенная статистика).

4. chk_projects_tree

Назначение. Получить полную структуру проекта: разделы → чек-листы → пункты.

Когда вызывать. Когда нужен общий обзор структуры выбранного проекта.

Scope: projects:read.

Поля:

ПолеТипRequired
idintegerда

Замечание. Если у пользователя неполный доступ к части проекта, дерево вернётся усечённым — без скрытых разделов.

Назначение. Поиск внутри проекта по содержимому: названиям, текстам пунктов, ответам, комментариям, ссылкам.

Когда вызывать. Главный рабочий сценарий поиска нужного item_id в большом проекте: знаем project_id, ищем по ключевому слову, находим пункт, работаем дальше по точному item_id.

Scope: projects:search.

Поля:

ПолеТипRequiredОписание
idintegerдаProject_id для поиска
qstringнетТекст поискового запроса
entity_typestringнетСузить до одного типа: item / answer / comment / link
item_idintegerнетТочечный поиск по конкретному пункту (полезно для проверки наличия)
limitinteger (1–200)нетМаксимум результатов
offsetinteger (≥0)нетСдвиг для пагинации

Пример:

{"id": 15, "q": "API documentation", "entity_type": "item", "limit": 50}

6. chk_items_get

Назначение. Получить полную карточку пункта со всем содержимым.

Scope: items:read.

Поля:

ПолеТипRequired
idintegerда

Ответ. Объект пункта с полями: text, description, status, deadline, priority, requires_answer, participants, comments[], answers[], attachments[], document_links[], verdict, rework_reason, rework_deadline, status_history[], member_scopes, effective_participants, can_* флаги.

Внимание. Поля text, description, verdict, rework_* в API v1 — read-only. Их можно читать, но менять через API нельзя. См. раздел «Каноничные границы v1» ниже.

7. chk_items_status_set

Назначение. Изменить статус пункта.

Scope: items:status.write.

Поля:

ПолеТипRequiredДопустимые значения
idintegerда
statusstring (enum)даpending / in_progress / done / blocked

Пример:

{"id": 299, "status": "in_progress"}

Типичные сценарии: агент берётся за пункт → in_progress. Агент завершил работу → done. Внешняя зависимость заблокировала прогресс → blocked (с комментарием через chk_comments_create).

8. chk_items_planning_set

Назначение. Обновить плановые поля пункта: дедлайн, приоритет, флаг «требуется развёрнутый ответ».

Scope: items:planning.write.

Поля:

ПолеТипRequiredОписание
idintegerда
deadlinestring | nullнетТри каноничные формы: ISO-строка YYYY-MM-DD устанавливает; null или пустая строка "" очищают
prioritystring (enum)нетlow / medium / high
requires_answerbooleanнетТребуется ли развёрнутый ответ-артефакт

Замечание. Передаются только те поля, которые нужно изменить. Опущенные не трогаются.

Очистка дедлайна. Чтобы убрать дедлайн, передавай явный JSON null. Этот способ канонический и поддерживается JSON-Schema MCP-tool'а напрямую (тип ["string", "null"]). Пустая строка "" тоже принимается рантаймом — но null предпочтительнее.

Назначение. Полностью заменить список document_links у пункта.

Scope: items:materials.write.

Поля:

ПолеТипRequiredОписание
idintegerда
document_linksarrayдаПолный итоговый список ссылок

Каждая ссылка:

{"kind": "document", "title": "...", "url": "https://..."}

Внимание. Это не «добавить одну ссылку». Это «записать итоговый список». Если хочешь добавить ссылку к существующим — сначала вычитай текущий список через chk_items_get, затем дополни и пошли весь массив. Очистка всех ссылок: {"id": 299, "document_links": []}.

10. chk_items_attachments_upload

Назначение. Загрузить изображения в пункт.

Scope: items:materials.write.

Поля:

ПолеТипRequiredОписание
item_idintegerда
file_pathsarray of stringsдаЛокальные абсолютные пути к файлам

Замечание. Текущий runtime принимает изображения (PNG, JPG, GIF, WebP), не произвольные файлы. Текстовые файлы будут отклонены.

Минимальный рабочий размер — 16×16 пикселей. Изображения меньше отвергаются с 422 validation_error. Рантайм всегда конвертирует загруженное изображение в WebP при сохранении в Cloudflare R2. URL для отдачи файла: /api/items/file.php?id=NNN.

Замечание 2. Файлы читаются с локальной файловой системы MCP-сервера. Это работает потому что сервер запущен на той же машине, что и агент. Удалённый MCP-сервер потребует другой подход (передача через base64 или предварительная загрузка в общий storage).

11. chk_comments_create

Назначение. Добавить текстовый комментарий в пункт.

Scope: comments:write.

Поля:

ПолеТипRequiredОписание
item_idintegerда
textstringдаТекст комментария (минимум 1 символ)

Замечание. Комментарий — только текст. Файлы и ссылки в комментарии не поддерживаются. Для содержательного результата работы используй chk_answers_create (там можно прикладывать ссылки).

12. chk_answers_create

Назначение. Создать содержательный ответ-артефакт по пункту с возможным набором ссылок.

Scope: answers:write.

Поля:

ПолеТипRequiredОписание
item_idintegerда
textstringдаТекст ответа (минимум 1 символ)
document_linksarrayнетСписок ссылок (формат как в chk_items_links_set)

Пример:

{
"item_id": 299,
"text": "Готово. Документ создан в DocMap.",
"document_links": [
{"kind": "document", "title": "Архитектура", "url": "https://docs.example.com/arch.md"}
]
}

13. chk_answers_attachments_upload

Назначение. Загрузить изображения в существующий answer.

Scope: items:materials.write.

Поля:

ПолеТипRequiredОписание
answer_idintegerдаid ответа, в который грузим
file_pathsarray of stringsдаЛокальные абсолютные пути к файлам

Замечания. Идентичны chk_items_attachments_upload — только изображения, локальная FS, минимум 16×16 пикселей.

Поле status_reset в ответе. Эндпоинт возвращает status_reset: boolean. Если true — статус ответа был сброшен в pending при загрузке (например, ответ был approved/rejected, и добавление вложений требует повторного review). Если false — статус не менялся.

Каноничные границы API v1

Чтобы агент не пытался делать невозможное и не строил планы вокруг отсутствующих возможностей — список того что сознательно не входит в scope v1:

Read-only поля

Эти поля возвращаются в chk_items_get, но изменить их через API v1 нельзя:

  • text пункта — текст пункта;
  • description пункта — описание;
  • verdict, rework_reason, rework_deadline — verdict workflow.

Если агент решает, что нужно поменять эти поля — это сигнал что задача требует участия человека через веб-интерфейс. Не стоит пытаться обходить через комментарии или ответы — это создаст шум.

Структурные операции

В v1 нельзя через API:

  • создавать новые проекты, разделы, чек-листы, пункты;
  • переименовывать существующие;
  • удалять comments, answers, attachments, links (в системе нет понятия удаления — только soft-archive в roadmap post-v1);
  • управлять verdict / rework workflow.

Если задача предполагает создание новой структуры (новый раздел, новый пункт) — это вне scope v1. Просьбу к человеку добавить через веб-интерфейс, потом продолжить работу через API.

Что это значит для каноничных сценариев агента

  1. «Создать новый пункт по результатам анализа» — невозможно. Альтернатива: попросить пользователя создать пункт, потом агент возьмётся за заполнение через chk_items_status_set, chk_comments_create, chk_answers_create.
  2. «Переписать описание пункта» — невозможно. Альтернатива: добавить детальный комментарий или answer с пояснением.
  3. «Удалить ошибочно созданный комментарий» — невозможно. Подход: добавить новый комментарий с пометкой «отменяет предыдущий», ждать soft-archive в следующих версиях API.
  4. «Одобрить пункт» (verdict) — невозможно. Альтернатива: пометить done через status_set, ждать verdict-эндпоинтов в post-v1.

Полная сводка границ — в external-api-v1-full-reference.md, раздел «Каноничные правила и границы API v1».

Справочник scope → tools

ScopeTools
auth:mechk_auth_me
projects:readchk_projects_list, chk_projects_get, chk_projects_tree
projects:searchchk_projects_search
items:readchk_items_get
items:status.writechk_items_status_set
items:planning.writechk_items_planning_set
items:materials.writechk_items_links_set, chk_items_attachments_upload, chk_answers_attachments_upload
comments:writechk_comments_create
answers:writechk_answers_create

Если получаешь {error: {code: "scope_missing"}} — токен не имеет нужного scope. Перевыпустить с расширенным набором (см. документ про установку и регистрацию).

Каноничные сценарии работы агента

Сценарий 1: «обновить статус пункта по ходу работы»

  1. chk_projects_search({id: 15, q: "ключевое слово"}) — найти пункт.
  2. chk_items_get({id: <item_id>}) — прочитать карточку.
  3. chk_items_status_set({id: <item_id>, status: "in_progress"}) — взять в работу.
  4. (после выполнения) chk_comments_create({item_id: <item_id>, text: "..."}) или chk_answers_create({...}).
  5. chk_items_status_set({id: <item_id>, status: "done"}) — закрыть.

Сценарий 2: «загрузить артефакт работы»

  1. chk_answers_create({item_id: <item_id>, text: "Готово", document_links: [...]}) — создать ответ.
  2. chk_answers_attachments_upload({answer_id: <answer_id>, file_paths: ["/path/to/screenshot.png"]}) — приложить картинки.

Сценарий 3: «обзор проекта в начале сессии»

  1. chk_projects_list() — что доступно.
  2. chk_projects_get({id: <project_id>}) — детали по выбранному проекту.
  3. chk_projects_tree({id: <project_id>}) — увидеть всю структуру.

Связанная документация