7pace MCP server (fork)
Fork of an MCP server for 7pace Timetracker, fixed until an AI agent could log a real workday through it.
What it does
7pace Timetracker is the time-tracking add-on for Azure DevOps my team uses. The upstream project, turnono/7pace-mcp-server, exposes it to AI assistants through the Model Context Protocol: list activity types, read worklogs, log time. I wanted an agent to reconstruct my workday from commits, pull requests and the calendar and file it for me. Against our 7pace instance the upstream server couldn't log a single entry, so I forked it and fixed what was in the way.
What I changed and why
- Activity-type parser. Our instance returns activity types as tuples of name and colour, not as
{ id, name }objects, so the server saw no activity types at all and sent worklogs without one — which the API rejected. The parser now deep-scans the response for anything that looks like an activity type, and an unknown name fails loudly with the list of available ones instead of silently dropping the field. - Hours math. The API returns seconds consistently; a heuristic that guessed minutes for small numbers reported a 15-minute entry as 15 hours.
- Worklog filters. The list endpoint ignores its work-item and date parameters and always returns the most recent page, so filtering happens client-side now, and each entry shows its activity.
- Billable length. Some organisations reject an explicit billable length with a 409 because billing is managed server-side. It's now omitted unless you opt in with an environment variable.
- Sequential entries.
log_timegained an optional start time and made the work item optional: internal meetings have no parent work item, and a start time lets an agent lay the day out as a sequence of non-overlapping blocks. The no-overlap rule is stated in the tool description, where the model actually reads it. - A read-only smoke test against the real API, so the next person can check the fixes without creating any worklogs.
Where it's used
The fork is the write path of an agent skill that builds the day's plan from evidence, shows it as a table, waits for an explicit “go”, and only then logs it — one block after another, never into the future. The fixes are small; the point was to make the tool refuse bad input instead of failing quietly downstream.