7pace MCP server (форк)
Форк MCP-сервера для 7pace Timetracker, доведённый до того, что AI-агент может залогировать через него настоящий рабочий день.
Что делает
7pace Timetracker — дополнение для учёта времени в Azure DevOps, которым пользуется моя команда. Исходный проект, turnono/7pace-mcp-server, открывает его AI-ассистентам через Model Context Protocol: список типов активности, чтение worklog'ов, логирование времени. Я хотел, чтобы агент восстанавливал мой рабочий день по коммитам, pull request'ам и календарю и заполнял его за меня. На нашем инстансе 7pace исходный сервер не мог залогировать ни одной записи, поэтому я сделал форк и починил то, что мешало.
Что изменил и зачем
- Парсер типов активности. Наш инстанс возвращает типы активности как кортежи «имя и цвет», а не объекты
{ id, name }, поэтому сервер не видел ни одного типа и отправлял worklog'и без него — API их отклонял. Теперь парсер обходит весь ответ и собирает всё, что похоже на тип активности, а неизвестное имя падает с понятной ошибкой и списком доступных вместо того, чтобы молча выбросить поле. - Математика часов. API стабильно возвращает секунды; эвристика, которая для маленьких чисел угадывала минуты, показывала 15-минутную запись как 15 часов.
- Фильтры worklog'ов. Эндпоинт списка игнорирует параметры по work item и датам и всегда отдаёт последнюю страницу, поэтому фильтрация теперь на клиенте, а у каждой записи виден её тип активности.
- Billable length. Некоторые организации отклоняют явную billable-длительность с 409, потому что биллинг управляется на стороне сервера. Теперь поле не отправляется, пока его не включить переменной окружения.
- Последовательные записи. У
log_timeпоявилось необязательное время начала, а work item стал необязательным: у внутренних встреч нет родительского work item, а время начала позволяет агенту выложить день как цепочку непересекающихся блоков. Правило «без пересечений» записано в описании инструмента — там, где модель его действительно читает. - Read-only smoke-тест против настоящего API, чтобы следующий человек мог проверить исправления, не создавая ни одного worklog'а.
Где используется
Форк — это путь записи для агентского скилла, который собирает план дня по фактам, показывает его таблицей, ждёт явного «отправляй» и только потом логирует — блок за блоком, никогда в будущее. Исправления небольшие; смысл был в том, чтобы инструмент отказывался от плохого ввода, а не тихо ломался ниже по цепочке.