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 | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It usefully discloses that the call requires no authentication and lists the returned metadata, but it does not explicitly state read-only/non-destructive behavior, error behavior, or whether any side effects can occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. The key purpose and returned fields are front-loaded, and the "no auth" caveat is appended efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter metadata tool with no output schema, the description is largely complete: it states what is returned and that no auth is needed. It could explicitly note read-only behavior or error conditions, but the core information an agent needs is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameters requiring semantic explanation. The baseline for a no-parameter tool applies appropriately here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Get") and names the exact resource and returned fields: TimeTracker API version, timezone, and enabled modules. This clearly distinguishes it as a metadata/info endpoint from sibling data tools, though it does not explicitly name or route to any alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that no auth is required, which is useful context, but it gives no guidance on when to use this tool versus other API-discovery or account tools. There are no explicit exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden alone; it does disclose the required 'read:reports' scope, which is genuinely useful. It omits whether null user_id/project_id means aggregate over all, and how the per-project breakdown is grouped or ordered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause carries information. Slightly under-specified rather than padded, which is the right failure mode for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations, and four undocumented parameters mean the description should explain filtering and return shape but does not. An agent knows the tool's general output but not how to parameterize it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description adds no meaning for any of the four parameters — it never says that user_id or project_id act as filters or what date format start_date/end_date expect. The phrase 'per-project breakdown' hints that project_id groups rather than filters, but that is inference rather than documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete resource and result shape ('Total and billable hours plus per-project breakdown'), which tells an agent exactly what comes back. It stops short of naming the sibling hours_by_day, so the distinction from that tool must be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to pick this over hours_by_day or list_time_entries, both of which plausibly overlap. The only parenthetical is a permission requirement, not a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does add a genuinely useful behavioral fact — the read:time_entries permission requirement — which no structured field provides. However it says nothing about default scoping (all users vs. one), date format expectations, timezone/boundary handling, or aggregation semantics, which are the traits an agent most needs here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the core purpose front-loaded and the permission caveat trailing. Nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Placeholder.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description is the only place meaning could be added, and it adds almost none — it never mentions user_id, project_id, start_date, or end_date. The only hint is that hours are grouped by day, which the name already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and shape: per-day hours derived from time entries, plus the claim that it is the authoritative hours source. That distinguishes it from get_hours_summary, though the differentiation is left implicit rather than naming the sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is a soft steer via 'the authoritative hours source', implying this should be preferred over get_hours_summary, but no explicit when-to-use/when-not or conditions under which the other aggregation should be selected. Usage is implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_clientsA
List clients (needs read:clients).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does add valuable auth context (read:clients scope required), but says nothing about pagination, result size, ordering, or whether filtering is possible — meaningful gaps for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the action and resource, with the permission scope appended. Nothing is wasted, though the extreme terseness leaves gaps that a slightly longer sentence could have closed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no params, no output schema), so the description needn't document parameters or return shape in detail. Still, for a list operation it should convey whether results are paginated, capped, or sorted, which it omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. There is nothing parameter-wise for the description to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("List clients"), so the operation is unambiguous. It doesn't explicitly distinguish itself from siblings like list_projects or search, but since those operate on different resources, minimal differentiation is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical "needs read:clients" communicates a prerequisite (required permission scope), which is useful usage context. However, it gives no guidance on when to prefer this over search or other listing tools, and no exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsC
List projects (needs read:projects).
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| client_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full behavioral burden, but it only discloses the required auth scope. It says nothing about pagination, ordering, filtering behavior, or what project fields are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted words, which is structurally efficient. However, it is under-specified rather than appropriately complete for a tool with two undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool this is nearly complete at the name level, but it omits how filters work and, since there is no output schema, what a project listing returns. An agent would need to guess at parameter values and result shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the two optional parameters, and the description does not mention them at all. It does not explain what values 'status' accepts or what 'client_id' filters by, leaving both parameters semantically opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List projects'), and adds an auth scope ('needs read:projects'), so the basic operation is clear. It does not explicitly distinguish this from sibling tools like search or list_clients, but the resource name does most of that work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical only states a permission prerequisite; it gives no guidance on when to use this tool versus search, list_clients, or other siblings. There are no exclusions or alternative-selection conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksC
List tasks (needs read:tasks).
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full load; it does disclose the required auth scope, which is genuinely useful context an agent cannot get from the schema. It says nothing about whether the result set is paginated, capped, or ordered, and doesn't clarify what happens when both filters are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the core action front-loaded and no filler. Its brevity is appropriate, though the same brevity is what leaves the filter semantics unexplained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter listing tool with no annotations and no output schema, the description should explain filter behavior and result shape, and it does neither. Only the permission requirement is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does not — neither 'status' nor 'project_id' is mentioned. The agent must infer that status is a task-state name/code and that project_id scopes to a single project, with no hint about accepted string values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource ("List tasks") plus the required permission scope, so an agent knows exactly what the call retrieves. It does not distinguish itself from siblings such as list_projects or list_time_entries, though the noun 'tasks' is reasonably distinctive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is the prerequisite permission ("needs read:tasks"); there is no statement of when to prefer this over sibling listing tools or how the optional filters change scope. Nothing tells the agent when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a real behavioral constraint: the read:time_entries permission scope. However, it omits pagination/result limits, what happens when start_date or end_date is null, and whether filters combine with AND semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its brevity is partly achieved by omitting information the agent needs rather than by tight editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter list tool with no annotations and no output schema, the description leaves most of the call contract undocumented. An agent cannot tell how results are ordered, whether they are paginated, or how the optional filters affect the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and six parameters exist, so the description must compensate; instead it only references the date range. Filters like user_id, project_id, billable, and include_active are left entirely unexplained, including what null defaults mean.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("List time entries") plus the scoping dimension (date range), so the agent knows exactly what operation this performs. It does not distinguish itself from related siblings like hours_by_day or get_hours_summary, which also surface time data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this over hours_by_day or get_hours_summary, nor on required prerequisites beyond the scope. The date-range phrase only implies usage, and nothing is said about when-not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchC
Search projects, tasks, clients, and entries (needs read:projects).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | ||
| limit | No | ||
| types | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses one useful fact — the required read:projects scope — but says nothing about matching semantics, default result count, ordering, truncation, or what a result record looks like for each of the four entity types.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, and the resource scope is front-loaded before the permission note. It is efficient, though the terseness is partly the cause of the coverage gaps rather than a virtue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter search with no annotations, no output schema, and zero schema descriptions, the definition is too thin. An agent cannot know how to format `types`, what the default limit is, or what shape the mixed-entity results take.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain q, limit, and types. It only obliquely hints at `types` through the enumeration of entity types and says nothing about the query string syntax or the limit's default/ceiling, leaving all three parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Search) and enumerates the four resources it covers (projects, tasks, clients, entries), which is meaningfully distinct from the single-resource list_* siblings. It stops short of explicitly contrasting itself with list_projects or list_time_entries, but the cross-entity scope does the differentiating work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"needs read:projects" gives a prerequisite scope hint, and the multi-type coverage implies this is the tool for cross-entity lookup rather than enumerated listing. However, it never states when to prefer this over list_projects/list_tasks/list_clients, nor when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timer_statusA
Get the active timer for the token's user (needs read:time_entries).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It usefully discloses the required read:time_entries scope and implies a read-only 'get' operation, but it does not state what happens when no timer is active, what the return value looks like, or other behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. The scope and permission requirement are conveyed efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read tool, the description covers the essential purpose and authorization scope. It could be stronger by noting empty-state behavior, but given the tool's low complexity, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to explain. The baseline for a zero-parameter tool is 4, and no additional parameter detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get the active timer' scoped to the token's user. This is clearly distinguishable from sibling tools like list_time_entries, which lists entries rather than retrieving the currently active timer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance or comparison to alternatives such as list_time_entries. It only states a required permission, which is a prerequisite rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiA
Get the user this token authenticates as (needs read:users).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the required scope (read:users), which is real behavioral context an agent needs before calling, but it says nothing about failure modes when the scope is absent or about the shape of the returned user object. Read-only nature is only implied by 'Get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the core action first and the prerequisite trailing in parentheses. Nothing extraneous and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param identity lookup with no output schema, the description gives enough: what it returns conceptually (the user) and the auth requirement. A brief note on what the return contains or what happens on missing scope would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies for a no-argument tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieve the user identity bound to the current token. No sibling tool does anything similar (list_projects, timer_status, api_info are all distinct), so the agent can route unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the resource (identify the authenticated account) but not spelled out, and no alternatives or when-not conditions are offered. The parenthetical permission hint is the only operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.4834 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.-