clockify-mcp
Provides tools to manage Clockify time tracking, including starting and stopping timers, logging time entries, listing time entries, and retrieving projects, tasks, and tags.
Click 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., "@clockify-mcpclock 2 hours on the launcher bug"
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.
clockify-mcp
A local MCP server that lets Claude start, stop, and log Clockify time entries.
It runs as a child process over stdio — no port, nothing listening, no inbound
network surface. Claude spawns it, they exchange JSON-RPC over stdin/stdout, and
the server talks to api.clockify.me over HTTPS on your behalf.
Claude Code ──JSON-RPC/stdio──► clockify-mcp ──HTTPS + x-api-key──► ClockifySetup
1. Get a Clockify API key. In the Clockify web app: Preferences → Advanced → API → generate. It's a static personal key — no OAuth, no expiry — and it carries exactly your own permissions.
2. Configure.
cp .env.example .env
# then edit .env and paste the key after CLOCKIFY_API_KEY=.env is gitignored. The server reads it from its own directory, so the key
stays out of ~/.claude.json.
CLOCKIFY_WORKSPACE_ID is optional — the server reads your active workspace
from GET /v1/user on first use. Only set it if you belong to several
workspaces and want to pin one.
3. Build.
npm install
npm run build4. Register with Claude Code (user scope makes it available in every project):
claude mcp add clockify --scope user -- node D:/UniqProject/clockify-mcp/dist/index.js
claude mcp list # expect: clockify: ... ✔ ConnectedIf you would rather keep the key in Claude's config than in .env, add
-e CLOCKIFY_API_KEY=<key> before the --.
Related MCP server: Claude-LMStudio-Bridge
Tools
Tool | Arguments | What it does |
|
| Find a |
|
| Find a |
| — | Find |
| — | What's running, and for how long. |
|
| Start a timer. |
|
| Stop the running timer, report the duration. |
|
| Back-fill a finished entry. |
|
| Entries for a period with a total. Defaults to today. |
In practice you don't call these by name — you say "clock 2 hours on the launcher bug" and Claude looks up the project, then logs it.
Times
Every time argument accepts:
You write | Interpreted as |
| 09:30 local time |
| same |
| 09:30 UTC |
| as written |
| local midnight |
Output is shown in your Clockify account's timezone (read from your profile,
e.g. Asia/Saigon), so it matches what the Clockify web UI shows. Clockify
stores UTC; the conversion happens here.
Gotcha: the list endpoint filters by wall clock, not UTC
GET /v1/workspaces/{ws}/user/{id}/time-entries takes start/end in a format
ending in Z, but it does not compare them as UTC — it compares them
against wall-clock time in the account's timezone. Verified against the live API
on an Asia/Saigon (UTC+7) account:
| Result |
| returns Jul 31's entries |
| returns Aug 1's entries ✓ |
Entry timestamps in POST/PUT bodies are ordinary UTC — the quirk is
filter-only, which makes it easy to miss. toZoneFilter in src/time.ts is the
one place that compensates; don't "fix" it back to UTC.
Notes
Clockify permits only one running timer.
start_timertherefore stops any timer already running — the tool reports this explicitly rather than letting it happen silently.stop_timerwith nothing running answers "No timer was running." rather than erroring.There is deliberately no update or delete tool, so the server cannot modify or destroy existing entries. The worst case is a spurious new entry you can remove in the web UI.
Development
npm run watch # tsc --watchSmoke-test the protocol without involving Claude:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"t","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | node dist/index.jsOnly protocol messages go to stdout — anything else would corrupt the stream, so logs go to stderr.
Security
The API key is a bearer credential with full access to your Clockify time data.
It sits in plaintext in .env, readable by anything running as your user; there
is no OS keychain integration here.
The key never leaves your machine — it goes into an outbound header and is not sent to Anthropic. Tool results (project names, entry descriptions, durations) do become part of the conversation, so they reach the model like any other tool output.
Layout
src/time.ts local <-> UTC conversion, ISO-8601 durations
src/clockify.ts HTTP client, error mapping, cached identity lookup
src/tools.ts the 8 tool registrations
src/index.ts env loading, McpServer, stdio transportBuilt on @modelcontextprotocol/server v2. Requires Node >= 20.
Available Tools
8 toolscurrent_timerShow the running timerARead-only
Show the currently running Clockify timer, with elapsed time so far. Returns a plain message when nothing is running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as read-only and open-world, and the description adds a useful behavioral detail: it returns a plain message when no timer is running. This provides transparency about the empty-result case without contradicting the annotations.
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 two concise sentences with no redundant wording. The core purpose is front-loaded, and the empty-state behavior is stated 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?
Given the tool's simplicity, zero parameters, read-only annotations, and clear description covering both running and not-running states, nothing meaningful is missing for an agent to select and invoke this tool 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?
The tool has zero parameters, so parameter semantics are not a concern. The baseline of 4 applies because there is nothing for the description to add beyond the empty schema.
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 ('Show'), a clear resource ('currently running Clockify timer'), and adds useful detail ('with elapsed time so far'). This clearly distinguishes it from sibling tools like start_timer, stop_timer, and list_time_entries.
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 intended use is implied by the name and description: call this when you need the active timer's status. However, there is no explicit guidance about when to prefer this over alternatives, nor any exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList Clockify projectsARead-only
List projects in the Clockify workspace. Use this to find the projectId needed by start_timer and log_time. Active projects only unless includeArchived is set.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by project name (substring match). | |
| includeArchived | No | Include archived projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation is present and the description adds filter behavior (active by default) without contradiction. It does not mention output fields or pagination, but the read-only nature is already annotated.
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?
Two concise sentences deliver the purpose, usage, and filter behavior without redundant wording.
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?
While no output schema is provided, the description is sufficient for an agent to know the tool lists projects, returns projectId, and applies filters. Minor gap: it does not describe the response structure, but this is common for list endpoints.
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 schema covers both parameters with descriptions, and the description adds extra context for includeArchived ('Active projects only unless...'), but the name filter semantics are not further expanded.
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 clearly states it lists projects in the Clockify workspace and explicitly connects to the projectId needed by start_timer and log_time, distinguishing it from sibling tools.
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?
It explicitly says 'Use this to find the projectId needed by start_timer and log_time' and clarifies the archived filter behavior with 'Active projects only unless includeArchived is set.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsList Clockify tagsARead-only
List tags in the workspace, for the tagIds argument of start_timer / log_time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only nature is covered. The description adds no new behavioral details beyond the list scope and intended consumer, which is acceptable but not rich.
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 sentence with no filler. It front-loads the core action and immediately gives the practical reason to use the tool.
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 read-only list tool, this description is complete. It states what is listed, where, and why the result is needed. No output schema is present, but the description gives enough context for an agent to call and use the result 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?
The tool has zero parameters, so the input schema is trivially complete. The description adds useful semantic context about how the returned tags relate to the tagIds argument in start_timer/log_time.
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 the specific action ('List tags'), the scope ('in the workspace'), and the intended purpose ('for the tagIds argument of start_timer / log_time'). This clearly distinguishes it from sibling tools like list_projects and list_tasks.
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 gives explicit context for when to use this tool: when you need tag IDs to pass into start_timer or log_time. It does not explicitly list exclusions or alternatives, but the targeted use case is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksList tasks in a projectARead-only
List active tasks belonging to a Clockify project. Use this to find the taskId for start_timer and log_time. Requires a projectId from list_projects.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by task name (substring match). | |
| projectId | Yes | Project id from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and open-world, so the safety profile is covered. The description adds meaningful scope detail: it lists only 'active tasks' and clarifies that tasks belong to a specifc Clockify project. It doesn't discuss pagination or ordering, but this is a minor gap for a simple read-only list.
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 two focused sentences with zero filler. The first sentence delivers the core action and scope, while the second provides the use case and prerequisite. This is an efficient, well-structured description.
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 read-only list operation with fully documented parameters and no output schema, the description covers the core action, the active-task scope, the required input source, and the downstream purpose. The mention of taskId gives enough signal for an agent to invoke the tool and use its result correctly, though an explicit return-shape note 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?
Schema description coverage is 100%, so the schema already fully documents projectId and name. The description adds only the note that projectId comes from list_projects, which is largely restating the schema property's origin rather than adding new semantic meaning.
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 action ('List'), a scoped resource ('active tasks belonging to a Clockify project'), and a concrete downstream use ('find the taskId for start_timer and log_time'). This clearly distinguishes it from siblings like list_time_entries, which return time entries rather than tasks.
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 explicitly says to use this tool to find taskId for start_timer and log_time, and states the prerequisite ('Requires a projectId from list_projects'). It doesn't list alternatives or exclusions, but the use-case and prerequisite make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_time_entriesList logged time entriesARead-only
List your Clockify time entries for a period, with a total. Defaults to today. Times are shown in local time.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End of the period. Defaults to now. | |
| start | No | Start of the period. Defaults to today's midnight. | |
| pageSize | No | Max entries (default 50). | |
| projectId | No | Only entries on this project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation readOnly, and the description adds useful behavior: defaults to today, returns a total, and shows times in local time. This goes beyond the structured data meaningfully.
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?
Three short sentences with no filler. The action, default range, and display behavior are presented directly and front-loaded.
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 read-only listing tool with all optional parameters and no output schema, the description covers the key facts: scope, defaults, total, and local time. Minor gap: the format for start/end strings is not described, but the schema already provides string type and parameter purposes.
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 100%, and each parameter is already documented. The tool description does not add extra parameter-level meaning beyond the existing schema, so baseline 3 is appropriate.
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 and resource: 'List your Clockify time entries for a period, with a total.' It clearly distinguishes this tool from sibling list_* tools (tags, projects, tasks) and timer-related tools (current_timer, log_time).
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 clear context: use this tool when you need to view logged time entries over a period. It does not explicitly name alternatives or exclusion conditions, but the resource ('time entries') is obvious against siblings like current_timer or list_projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_timeLog a finished time entryA
Create a completed Clockify time entry for a past interval. Use this to back-fill work you did not time live. Does not touch the running timer.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | When the work ended. | |
| start | Yes | When the work started. | |
| tagIds | No | Tag ids from list_tags. | |
| taskId | No | Task id from list_tasks. | |
| billable | No | Mark the entry billable. | |
| projectId | No | Project id from list_projects. | |
| description | Yes | What the work was. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations indicate a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false), the description adds critical behavioral detail about side effects: it explicitly states the tool does not interact with the running timer, which is beyond the annotation scope and informs the agent about concurrent state changes.
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 two concise sentences that directly state the purpose, usage context, and a key side-effect. There is no extraneous information, making it highly efficient and well-structured for rapid comprehension.
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 description provides essential context (back-filling and non-interference with the running timer) and is sufficient given the simple schema. It does not mention prerequisites or fallback behavior, but those are not necessary for this straightforward create operation, so it is nearly 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?
Schema description coverage is 100%, with each parameter having a brief but clear description. The tool description itself does not add extra insight into parameter meanings or relationships beyond what the schema already provides, so it meets the baseline but does not exceed it.
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 clearly states the verb ('Create') and the resource ('completed Clockify time entry for a past interval'), and explicitly contrasts with the running timer, making it distinct from sibling tools like start_timer and current_timer. The phrase 'back-fill work you did not time live' unambiguously captures the intended use.
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 explicit guidance on when to use the tool ('to back-fill work you did not time live') and explicitly states what it does not do ('Does not touch the running timer'), which helps an agent decide when it is appropriate and when to use alternatives like start_timer or stop_timer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_timerStart a Clockify timerA
Start a running Clockify timer. Clockify allows only one running timer at a time, so this stops any timer already running. Use list_projects / list_tasks first if you need ids.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | When the timer should start. Defaults to now. | |
| tagIds | No | Tag ids from list_tags. | |
| taskId | No | Task id from list_tasks. | |
| billable | No | Mark the entry billable. | |
| projectId | No | Project id from list_projects. | |
| description | Yes | What you are working on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses an important behavioral trait not visible in the annotations: starting a timer automatically stops any currently running timer. This is a meaningful side effect that could surprise an agent. The annotations already indicate a write operation (readOnlyHint=false), and the description adds context beyond that.
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?
Two tight sentences with no filler. The main action is front-loaded, followed by a critical behavioral warning and a practical prerequisite. Every sentence earns its place.
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 tool with a simple action, 6 parameters, and a high coverage schema, the description is complete enough. It captures the one non-obvious behavior (stopping an existing timer) and tells the agent where to source IDs. The lack of an output schema is acceptable because return values are not necessary to invoke the tool 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?
The input schema already provides 100% coverage, describing each parameter (including provenance like 'Project id from list_projects'). The description adds a general reminder to fetch IDs first, but this is redundant with the schema's own per-parameter notes. No meaningful new parameter semantics are introduced beyond what the schema already says.
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 and resource: 'Start a running Clockify timer.' It also clarifies the key side effect (stops any timer already running), which distinguishes this tool from siblings like stop_timer and current_timer. This is unambiguous and immediately scopes what the tool does.
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 clear context for use: it starts a running timer and warns that only one timer can run at a time. It also gives a direct prerequisite instruction: use list_projects / list_tasks first if IDs are needed. It stops short of explicitly comparing against log_time or declaring when not to use it, but the context is clear enough for an agent to decide confidently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_timerStop the running Clockify timerAIdempotent
Stop the currently running Clockify timer and report the logged duration. Reports plainly when no timer was running.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | When the timer should stop. Defaults to now. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a mutating but non-destructive, idempotent operation. The description adds useful behavioral detail by stating it reports the logged duration and gives a plain response when no timer was running, which aligns with the idempotent annotation.
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 two short sentences with no filler. The primary action is stated first, followed by the return behavior, making it easy to scan.
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 tool with one optional parameter and no output schema, the description covers the core behavior, the no-timer case, and what the caller can expect in the response. It is sufficient for an agent to select and invoke the tool 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 description coverage is 100% for the single optional parameter 'end.' The description does not add any additional meaning beyond the schema, so the baseline of 3 is appropriate.
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 and resource: 'Stop the currently running Clockify timer.' It clearly differentiates from siblings like start_timer and current_timer, and adds the reporting behavior so the agent knows what the tool returns.
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 makes it clear the tool applies to a currently running timer and that it handles the no-timer case gracefully. It does not explicitly name alternatives, but the context signals and sibling names make the usage context obvious.
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.
8 tool updates
v1.0.0- First observed
current_timer - First observed
list_projects - First observed
list_tags - First observed
list_tasks - First observed
list_time_entries - First observed
log_time - First observed
start_timer - First observed
stop_timer
TDQS
Scored across 8 tools
Each tool targets a distinct resource or action: live timer controls, historical entry listing/creation, and reference lookups. start_timer and log_time are clearly separated by live vs. past work, and current_timer is clearly distinct from list_time_entries.
Seven of eight tools follow a consistent verb_noun pattern (start_timer, stop_timer, log_time, list_*). current_timer is the only outlier, using a noun phrase instead of a verb-led name.
Eight tools is well-scoped for a focused Clockify time-tracking server. Each tool earns its place: timer state, entry creation/listing, and ID lookups for projects, tasks, and tags.
The core timer loop and time listing are well covered, but updating or deleting time entries is missing. An agent cannot correct or remove a mistakenly logged entry, which is a notable workflow dead end.
Maintenance
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
- mcp-serverOAuthio.klokin
MCP server exposing klokin time-tracking operations (employees, time entries, stores) to AI clients.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP Server for the Notion API, enabling Claude to interact with Notion workspaces.314,626922MIT
- AlicenseNot gradedqualityFmaintenanceA simple MCP server that enables Claude to communicate with locally running LLM models via LM Studio.9MIT
- AlicenseAqualityBmaintenanceA standalone MCP server that exposes the ATimeLogger REST API to Claude Desktop/Code over stdio, enabling activity tracking (start/stop/pause/log), reports/history, and activity type management.8341MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that lets LLMs interact with your Clockify workspace for time-tracking automation and reporting, enabling natural language logging of time entries, querying entries, and generating reports.MIT