Skip to content
maksim zaytsev
Проекты

2026РаботаетУтилита · Форк

TypeScript · MCP · Azure DevOps · Node.js

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'а.

Где используется

Форк — это путь записи для агентского скилла, который собирает план дня по фактам, показывает его таблицей, ждёт явного «отправляй» и только потом логирует — блок за блоком, никогда в будущее. Исправления небольшие; смысл был в том, чтобы инструмент отказывался от плохого ввода, а не тихо ломался ниже по цепочке.