chk-mcp — версионирование и план развития
Версия документа: 1.0 Версия инструмента: 0.2.1 Дата: 29.04.2026 Статус: Готов к обсуждению
Назначение документа
Документ фиксирует политику версионирования инструмента chk-mcp, его соотношение с версиями External API системы analytics.vitrip.store, и план развития (roadmap). Нужен для команд, которые планируют разрабатывать инструмент дальше или переходить на следующие версии API без потери совместимости.
Две оси версионирования
У chk-mcp две независимые оси версии:
- Версия инструмента — semver
x.y.z(сейчас0.2.1). Меняется при изменениях самого пакета: новые tools, рефакторинг клиента, изменение конфигурации, исправления багов. - Версия API —
v1,v2, … Меняется когдаanalytics.vitrip.storeвыпускает следующую мажорную версию External API.
Эти две оси связаны, но не зависят друг от друга. Например:
0.2.0может добавить новые tools для существующегоv1(без изменений со стороны API).0.3.0может добавить поддержкуv2параллельно с уже поддерживаемымv1.1.0.0— стабилизация после набора production-опыта;v1иv2поддерживаются параллельно.
Политика поддержки версий API
Соответствует политике External API: v1 и v2 живут параллельно. chk-mcp следует тому же принципу:
-
Старые версии не удаляются. Когда мы добавим поддержку
v2, ничего изv1-инструментов не исчезнет. Агент, написанный подv1, продолжит работать. -
Каждая версия API — отдельный namespace внутри пакета. Структура папок (план):
chk_mcp/├── server.py # маршрутизация всех tools — vN_*├── v1/│ ├── client.py # ChkClientV1│ ├── errors.py│ └── tools.py # описание tools для v1└── v2/ # будет добавлено когда API v2 выйдет├── client.py├── errors.py└── tools.pyСейчас (версия
0.1.0) для упрощения кодаclient.py,errors.pyлежат в корне пакета. При появленииv2мы перенесём их вchk_mcp/v1/без поломки совместимости (импорт-shim сохранит публичные имена). -
Префикс tool-ов содержит версию API. Сейчас tools называются
chk_*(без префикса версии — потому что только v1). При появленииv2мы переименуем tools первой версии вchk_v1_*и добавимchk_v2_*. Альтернатива — оставитьchk_*для v1 как алиас дляchk_v1_*ещё на одну минорную версию для плавного перехода. Решение принимается перед выпуском поддержки v2. -
Конфиг поддерживает обе версии одновременно. Через переменные
CHK_TOKEN_V1,CHK_TOKEN_V2или раздельный config.toml:[v1]token = "chk_..."base_url = "https://analytics.vitrip.store/api/external/v1/"[v2]token = "chk_..."base_url = "https://analytics.vitrip.store/api/external/v2/" -
Deprecation объявляется заблаговременно. Когда
v1будет признан устаревшим со стороны API,chk-mcpначнёт возвращать deprecation-warning в ответы tools первой версии (поле_deprecation_noticeв ответе). За 6 месяцев до окончания поддержкиv1будет помеченDeprecationWarningв Python-коде, ещё за 3 месяца — выпущена мажорная версияchk-mcp, в которойv1удалён.
Roadmap
Roadmap фиксирует план, а не обязательство. Конкретные сроки появятся когда задачи станут активными.
Версия 0.1.0 — 29.04.2026 (выпущена)
Готово:
- 13 tools 1:1 с эндпоинтами External API v1.
- Async httpx клиент.
- Типизированные ошибки (5 классов).
- Конфиг через env + config.toml.
- Документация в DocMap (4 документа).
Версия 0.2.0 — 29.04.2026 (выпущена)
Цель: production-ready состояние с автоматическими тестами и базовой телеметрией.
Готово:
- Pytest suite: 55 тестов покрывают все 13 методов клиента, маппинг 5 типов ошибок, конфиг (env + toml + дефолты), регистрацию MCP tools, dispatch, retry-поведение. Запускается через
pytest tests/. - Структурное логирование (
chk_mcp/_logging.py) в stderr, уровень настраивается черезCHK_LOG_LEVEL. Запросы/ответы логируются без раскрытия токена. - Retry на сетевых ошибках для GET-запросов (3 попытки, экспоненциальный backoff 0.5s/1s/2s, перехватываются
ConnectError/ConnectTimeout/ReadTimeout/RemoteProtocolError). Write-методы (PATCH/POST/PUT) не ретраятся для предотвращения дублирования. - Sentinel для explicit null deadline в
items_planning_set— клиент различает «поле не передано» и «поле передано как null», корректно пробрасывает JSON null до API. - JSON-Schema deadline теперь принимает
["string", "null"]— соответствует документации API. - Описания enum значений для
priority(low/medium/high) иstatus(pending/in_progress/done/blocked). - Безопасное хранение токена: токен вынесен из
~/.claude.jsonв~/.config/chk-mcp/config.tomlс правамиchmod 600. Backup-файл с токеном удалён. - Network errors оборачиваются в
ChkAPIError(code="network_error")вместо raw httpx-исключений — единообразная структура ошибок. - CHANGELOG.md в корне проекта.
Отложено в 0.3.0:
- CI пайплайн (GitHub Actions или локальный): lint + tests на push.
- Опциональный rate-limit guard со стороны клиента (через
httpx.AsyncBaseTransportс задержками при 429). - Pydantic-модели для всех успешных ответов API (сейчас работаем с
dict[str, Any]).
Версия 0.2.1 — текущая (29.04.2026)
Цель: документационный patch-релиз — выравнивание DocMap-документации под подтверждённые границы API v1, полученные от разработчика API 29.04.2026.
Готово:
- Раздел «Каноничные правила и границы API v1» в
external-api-v1-full-reference.md— переоформлен из «Наблюдения работы рантайма»; gap'ы переоформлены как сознательные решения первой версии, не недоработки. - Новый раздел «Roadmap post-v1» с 4 подтверждёнными направлениями: запись
description, verdict / rework слой, soft-archive / inactive (вместо delete), structural editing layer (создание/переименование). - Quick-start (
external-api-v1-quick-start.md) — три формыdeadline(ISO / null /""), минимум 16×16 px для attachments, полеstatus_resetна answer attachments, новый раздел «Каноничные границы v1 — что НЕЛЬЗЯ через API». - Tools-reference (
chk-mcp-tools-reference.md) — read-only поля помечены явно (text,description,verdict,rework_*); новый раздел «Каноничные границы API v1» с альтернативными подходами для 4 типичных «невозможных» задач агента. - CHANGELOG.md запись 0.2.1 с подтверждениями разработчика API.
Без изменений в коде — это чисто документационный релиз для согласования терминологии и ожиданий агента с подтверждённой v1-моделью.
Версия 0.3.0 — расширения для удобства агента
Цель: высокоуровневые композиции без нарушения принципа «один tool — один эндпоинт».
- Композитный tool
chk_items_close_with_answer(создаёт answer + меняет статус на done одним вызовом). Только если практика покажет, что агент часто делает эту пару подряд и хочет атомарного API. - Tool
chk_session_overview— список проектов + краткая сводка по каждому (active items, overdue, recently updated). Один dashboard-запрос вместо нескольких. - Кеширование read-only ответов на короткое окно (5 секунд) — снижает нагрузку при последовательных вызовах одного и того же
chk_items_get.
Версия 0.4.0 — поддержка следующей версии API
Активируется при выходе External API v2.
- Реструктуризация в
chk_mcp/v1/+chk_mcp/v2/. - Tools
chk_v2_*рядом с существующимиchk_v1_*(алиасыchk_*для v1 сохраняются). - Документация v2-специфики (отдельный документ
chk-mcp-tools-reference-v2.mdрядом с текущим).
Версия 1.0.0 — стабилизация
Условия для 1.0.0:
- Минимум 6 месяцев production-эксплуатации без серьёзных багов.
- Покрытие тестов более 80%.
- Поддержка минимум одного перехода на следующую версию API (v1 → v2).
- Зафиксированный публичный API клиента (методы
ChkClient).
Что считается breaking change
Для версии инструмента (semver):
- Major — удаление или переименование tool, изменение типов полей, удаление публичных методов
ChkClient. Например — removalchk_items_status_setили сменаidс integer на string. - Minor — добавление новых tools, новых опциональных полей, новых ошибок, расширение enum (новый разрешённый статус).
- Patch — исправление багов без изменения публичного интерфейса.
Для версии API (v1/v2/…) — определяется политикой analytics.vitrip.store, см. раздел «Версионирование API» в External API v1 — полное руководство.
Принципы развития
-
Не агрегировать без необходимости. Соблазн сделать «удобный» tool, объединяющий несколько вызовов API, велик. Сопротивляемся: агент должен видеть прозрачное соответствие документации API. Композитные tools допускаются только если многократно подтверждённый паттерн использования (Версия 0.3.0).
-
Не прятать ошибки. Если API вернул
forbidden— агент должен это видеть, не получая сглаженный успешный ответ с пустыми полями. Ошибка — это информация, не помеха. -
Не блокировать агента ради «корректности». Сервер не делает retry за агента, не пытается ротировать токен, не сглаживает rate-limit. Эти решения принадлежат агенту, который видит контекст происходящего.
-
Безопасность токена — превыше удобства. Если выбор между «удобно положить токен в args MCP-конфига» и «требовать config.toml с правами 600» — выбираем второе.
-
Открытые стандарты. MCP — открытый протокол. httpx — стандарт для async HTTP в Python. pydantic — стандарт для типизации. Не используем замкнутые на одного провайдера решения.
Открытые вопросы и развилки
- Префиксование версий tools. Сохранить
chk_*как алиас дляchk_v1_*после появления v2 или сразу переименовать? Решение — перед началом работы над 0.4.0. - Хранение токена. Сейчас env + config.toml. Стоит ли поддержать системные secret-стораджи (gnome-keyring на Linux, Keychain на macOS)? Зависит от целевой аудитории — пока агент работает один на машине, файловая защита достаточна.
- Логирование. Куда писать структурные логи запросов? stderr (попадает в логи MCP-клиента), отдельный файл
~/.local/state/chk-mcp/log.jsonl, syslog? Решение — перед 0.2.0. - Удалённый запуск. Сейчас сервер ожидается на той же машине, что и агент (для multipart-загрузок с локальной FS). Если понадобится удалённый запуск — нужен механизм передачи файлов (presigned upload URL или base64 в args).
Связанная документация
- chk-mcp — архитектура
- Установка и регистрация в Claude MCP
- Справочник tools
- External API v1 — полное руководство, раздел «Версионирование API»