drytrix-timetracker-mcp
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@drytrix-timetracker-mcphow many hours did I log today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
drytrix-timetracker-mcp
A Model Context Protocol (MCP) server for
DRYTRIX/TimeTracker — the
self-hosted, open-source time-tracking app. It exposes your tracked hours,
projects, and reports as MCP tools over TimeTracker's stable /api/v1 REST
API, so any MCP client (OpenCode, Claude Desktop, …) can query your time data
in natural language.
It is configured entirely through environment variables; nothing is baked in.
Requirements
Python 3.11+
A running TimeTracker instance (tested on v5.13.4; targets v5.13+)
An API token created in TimeTracker under Admin → Security & Access → Api-tokens
Recommended token scopes
read:time_entries, read:projects, read:reports, read:clients,
read:tasks — or simply read:* to grant all read access in one checkbox.
whoami and per-user scoping need read:users. On instances that do not list
that scope, read:* covers it — the app treats read:* as matching any
read:<resource>. Add write:time_entries only if you enable the write tools.
Missing scopes degrade gracefully: a tool that lacks its scope returns a clear
403 naming the scope.
Related MCP server: Clockify Time Tracking
Install & run
uvx drytrix-timetracker-mcpor install it:
uv tool install drytrix-timetracker-mcpConfiguration
Environment variables (a local .env in the working directory is also read):
Variable | Required | Default | Meaning |
| yes | — | Instance root, e.g. |
| yes | — | API token ( |
| no |
| Per-request timeout (seconds) |
| no |
| Verify TLS certificates |
| no |
| Register the write tools |
| no |
| Page size for paginated reads |
MCP client config
{
"mcpServers": {
"timetracker": {
"command": "uvx",
"args": ["drytrix-timetracker-mcp"],
"env": {
"TT_BASE_URL": "https://time.example.com",
"TIMETRACKER_API_KEY": "tt_your_token_here"
}
}
}
}Tools
Read (always available)
Tool | Scope | What it does |
| — | API version, timezone, enabled modules |
|
| The user the token authenticates as |
|
| List projects |
|
| Time entries in a date range |
|
| Total/billable hours + per-project breakdown |
|
| Per-day hours — the authoritative hours figure |
|
| List clients |
|
| List tasks |
|
| Global search |
|
| The active timer |
Write (only when TT_ENABLE_WRITE=true, scope write:time_entries)
start_timer, stop_timer, pause_timer, resume_timer, create_time_entry
Notes
hours_by_dayis preferred overget_hours_summary. TimeTracker's/reports/summarytreats a date-onlyend_dateas midnight and silently drops the final day; this server normalizes ranges and computeshours_by_daydirectly from time entries, so the two can disagree.hours_by_dayis right.Aggregates are scoped to the token's own user. Without the
read:usersscope the user cannot be resolved, and the result carries a note that it may span users.Endpoints that don't exist on your version return a clear error rather than a stack trace.
License
MIT
Available Tools
10 toolsapi_infoA
Get the TimeTracker API version, timezone, and enabled modules (no auth).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
get_hours_summaryC
Total and billable hours plus per-project breakdown (needs read:reports).
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | ||
| end_date | Yes | ||
| project_id | No | ||
| start_date | Yes |
hours_by_dayB
Per-day hours from time entries, the authoritative hours source (needs read:time_entries).
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | ||
| end_date | Yes | ||
| project_id | No | ||
| start_date | Yes |
list_clientsA
List clients (needs read:clients).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_projectsC
List projects (needs read:projects).
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| client_id | No |
list_tasksC
List tasks (needs read:tasks).
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| project_id | No |
list_time_entriesC
List time entries in a date range (needs read:time_entries).
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | ||
| billable | No | ||
| end_date | No | ||
| project_id | No | ||
| start_date | No | ||
| include_active | No |
searchC
Search projects, tasks, clients, and entries (needs read:projects).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | ||
| limit | No | ||
| types | No |
timer_statusA
Get the active timer for the token's user (needs read:time_entries).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
whoamiA
Get the user this token authenticates as (needs read:users).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
api_info - First observed
get_hours_summary - First observed
hours_by_day - First observed
list_clients - First observed
list_projects - First observed
list_tasks - First observed
list_time_entries - First observed
search - First observed
timer_status - First observed
whoami
TDQS
Scored across 10 tools
Most tools target clearly distinct resources: clients, projects, tasks, users, timer status, and API metadata. The one genuine overlap is get_hours_summary vs hours_by_day, both reporting hours, though the descriptions clarify that one is a billable/total rollup and the other is the authoritative per-day source. search also lightly overlaps with the list_* tools but is framed as a cross-entity search.
Five tools follow a clean list_noun pattern (list_projects, list_clients, list_tasks, list_time_entries), but the rest deviate: bare nouns (whoami, api_info, timer_status), a bare verb (search), a get_ prefix (get_hours_summary), and a noun_phrase (hours_by_day). The names are individually readable but there is no single predictable convention an agent can rely on.
Ten tools is well within the sweet spot for a time-tracking server, and each covers a distinct slice of the domain (metadata, identity, projects, clients, tasks, entries, summaries, timer, search). Nothing feels padded or redundant in count.
The surface is entirely read-only: there is no way to start/stop a timer, log or edit a time entry, or create projects/tasks/clients, even though timer_status implies an active-timer lifecycle exists. For a time tracker, the inability to record time is a significant gap that will block common agent workflows.
Maintenance
Related MCP Connectors
Read your tracked time and projects, pause tracking or add a note, from Claude or ChatGPT.
Connects AI assistants to TrackingTime for querying time entries, projects, tasks, customers, and team data using natural language.
Manage Timequip projects, tasks, comments, members, and dashboards through MCP.
timesheet.io MCP server - manage timers, projects, tasks and reports
Related MCP Servers
AlicenseBqualityBmaintenanceEnables natural language control of the Timesheet API for timer management, task tracking, and project management through MCP tools.50103 npm1MIT- AlicenseCqualityCmaintenanceEnables interacting with Clockify time-tracking data through natural language, providing tools to manage workspaces, projects, time entries, reports, and more via the MCP protocol.4843 PyPI1MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language time tracking and booking for WorkTracker via MCP tools, allowing users to assign time, list projects, and manage daily schedules through conversational commands.MIT
- FlicenseNot gradedqualityCmaintenanceExposes the full public TSheets REST API v1 as MCP tools, enabling time tracking, scheduling, and PTO management operations via natural language.-