Skip to main content
Glama
drytrix-timetracker-mcp

drytrix-timetracker-mcp

Official
by fzl-jeroen

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

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-mcp

or install it:

uv tool install drytrix-timetracker-mcp

Configuration

Environment variables (a local .env in the working directory is also read):

Variable

Required

Default

Meaning

TT_BASE_URL

yes

—

Instance root, e.g. https://time.example.com

TIMETRACKER_API_KEY

yes

—

API token (tt_…); TT_API_TOKEN is an alias

TT_TIMEOUT

no

30

Per-request timeout (seconds)

TT_VERIFY_SSL

no

true

Verify TLS certificates

TT_ENABLE_WRITE

no

false

Register the write tools

TT_PER_PAGE

no

100

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_info

—

API version, timezone, enabled modules

whoami

read:users

The user the token authenticates as

list_projects

read:projects

List projects

list_time_entries

read:time_entries

Time entries in a date range

get_hours_summary

read:reports

Total/billable hours + per-project breakdown

hours_by_day

read:time_entries

Per-day hours — the authoritative hours figure

list_clients

read:clients

List clients

list_tasks

read:tasks

List tasks

search

read:projects

Global search

timer_status

read:time_entries

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_day is preferred over get_hours_summary. TimeTracker's /reports/summary treats a date-only end_date as midnight and silently drops the final day; this server normalizes ranges and computes hours_by_day directly from time entries, so the two can disagree. hours_by_day is right.

  • Aggregates are scoped to the token's own user. Without the read:users scope 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 tools
api_infoA

Get the TimeTracker API version, timezone, and enabled modules (no auth).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

NameRequiredDescriptionDefault
user_idNo
end_dateYes
project_idNo
start_dateYes

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

NameRequiredDescriptionDefault
user_idNo
end_dateYes
project_idNo
start_dateYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

NameRequiredDescriptionDefault
statusNo
client_idNo

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

NameRequiredDescriptionDefault
statusNo
project_idNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

NameRequiredDescriptionDefault
user_idNo
billableNo
end_dateNo
project_idNo
start_dateNo
include_activeNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

timer_statusA

Get the active timer for the token's user (needs read:time_entries).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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).

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 10 tool updatesv0.1.0
    • First observedapi_info
    • First observedget_hours_summary
    • First observedhours_by_day
    • First observedlist_clients
    • First observedlist_projects
    • First observedlist_tasks
    • First observedlist_time_entries
    • First observedsearch
    • First observedtimer_status
    • First observedwhoami

TDQS

B3.1/5.0

Scored across 10 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness2/5

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

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers