@lewinnovation/clockify-mcp-server
Provides tools for interacting with Clockify's API, enabling AI agents to manage time tracking, workspaces, projects, tasks, and time entries.
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., "@@lewinnovation/clockify-mcp-serverlist my workspaces"
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.
@lewinnovation/clockify-mcp-server
MCP (Model Context Protocol) server for the Clockify REST API. It exposes a small set of curated tools for common workflows plus a generic clockify_request tool for other documented /v1/... endpoints.
Requirements
Node.js 20+
pnpm 10+
A Clockify API key (profile settings)
Related MCP server: clockify-mcp
Install
# via npx
npx @lewinnovation/clockify-mcp-server
# OR via pnpm globally
pnpm add -g @lewinnovation/clockify-mcp-server
# OR clone and install locally
pnpm install
pnpm run buildConfiguration
Variable | Required | Description |
| Yes | Sent as |
| No | Defaults to |
Run (stdio)
The server speaks MCP over stdio (stdout must stay clean JSON-RPC; logs go to stderr).
export CLOCKIFY_API_KEY="your-key"
pnpm startOr after pnpm run build:
node dist/index.jsMCP tool handlers are registered from src/tools/register.ts (shared helpers in src/tools/helpers.ts).
MCP client setup (popular AI agent tools)
Use this server definition in your MCP client:
{
"mcpServers": {
"clockify": {
"command": "npx",
"args": ["-y", "@lewinnovation/clockify-mcp-server"],
"env": {
"CLOCKIFY_API_KEY": "your-key"
}
}
}
}If you prefer running a local clone, use:
{
"mcpServers": {
"clockify": {
"command": "node",
"args": ["/absolute/path/to/clockify-mcp-server/dist/index.js"],
"env": {
"CLOCKIFY_API_KEY": "your-key"
}
}
}
}Cursor
Add the JSON entry above to:
Workspace config:
.cursor/mcp.jsonOr user config:
~/.cursor/mcp.json
Then reload Cursor (or restart the MCP server from Cursor settings).
Claude Desktop
Add the same mcpServers.clockify entry to Claude Desktop MCP config:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Restart Claude Desktop after saving the config.
Claude Code (CLI)
From your project directory:
claude mcp add clockify --env CLOCKIFY_API_KEY=your-key -- npx -y @lewinnovation/clockify-mcp-serverOr add the same JSON server entry to your Claude Code MCP config file if you manage MCP servers declaratively.
Other MCP-compatible agent tools
For tools such as Cline, Roo Code, and Windsurf, add the same server command/env block in that tool's MCP server settings UI or config file:
command:npxargs:["-y", "@lewinnovation/clockify-mcp-server"]env.CLOCKIFY_API_KEY: your Clockify API key
The server uses stdio transport, so no host/port configuration is required.
Tools
Curated
get_current_user—GET /v1/userlist_workspaces—GET /v1/workspaces(optional singlerolefilter; multiple roles requireclockify_request)list_projects—GET /v1/workspaces/{workspaceId}/projectswith pagination (page,page_size→page-size)list_tasks—GET /v1/workspaces/{workspaceId}/projects/{projectId}/taskslist_time_entries—GET /v1/workspaces/{workspaceId}/user/{userId}/time-entries(ifuser_idis omitted, the current API user is resolved viaGET /v1/user)create_time_entry—POST /v1/workspaces/{workspaceId}/time-entriesupdate_time_entry—PUT /v1/workspaces/{workspaceId}/time-entries/{id}(Clockify requiresstarton updates)stop_running_time_entry—PATCH /v1/workspaces/{workspaceId}/user/{userId}/time-entrieswith{ end }(optionaluser_id, default current user)
Generic
clockify_request—method,path(must start with/v1/), optionalquerymap, optional JSONbody(max 256 KiB serialized). Array query values are sent as repeated keys.
Responses wrap JSON in a text content block; when Clockify returns a Last-Page header, curated list-style tools include lastPage in the decoded JSON payload.
OpenAPI types
Types are generated from Clockify’s OpenAPI document:
pnpm run generate:openapiSource URL: https://api.clockify.me/api/v3/api-docs
Output: src/generated/clockify.d.ts
Re-run this periodically to pick up API changes, then fix any compile errors from type drift.
Scripts
Script | Purpose |
| Watch |
| Emit |
|
|
| Mocked HTTP smoke test for curated endpoints (no API key needed; uses a dummy key + mocked |
| Regenerate |
License
MIT
Available Tools
9 toolsclockify_requestB
Low-level access to any documented Clockify v1 endpoint. Path must start with /v1/. Use for endpoints not covered by curated tools.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON request body when needed. | |
| path | Yes | Absolute path on the API host, e.g. "/v1/workspaces". | |
| query | No | Query parameters. Array values are repeated as multiple keys. | |
| method | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it only states the path prefix requirement. It omits critical traits such as authentication needs, rate limits, error handling, side effects of mutating methods, and how the generic request is actually performed.
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 tightly worded sentences with zero waste; the purpose is front-loaded and the path constraint and usage guidance follow immediately. Nothing is repeated or 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?
For a low-level, multi-method API passthrough with no annotations and no output schema, the description is too thin. It does not explain how to choose methods, handle responses, authenticate, or deal with errors, leaving an agent underprepared for correct invocation beyond the path prefix.
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 75%, so the schema already documents body, path, and query. The description adds a useful path constraint ('must start with /v1/') but says nothing about method selection, body construction, or query composition, leaving the baseline 3 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?
States a clear resource (any documented Clockify v1 endpoint) and the tool's role as low-level access, distinguishing it from curated siblings by saying it is for endpoints not covered by them. However, the verb 'access' is somewhat generic and it does not name specific sibling tools or enumerate what 'curated tools' means.
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?
Explicitly says to use this for endpoints not covered by curated tools, which gives clear context for choosing it over the listed sibling tools. It adds the path constraint but stops short of stating exclusions or prerequisites like authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_time_entryC
Creates a time entry in a workspace (POST /v1/workspaces/{workspaceId}/time-entries).
| Name | Required | Description | Default |
|---|---|---|---|
| entry | Yes | Fields for the new time entry. | |
| workspace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden but only implies a write via 'Creates'. It says nothing about required permissions, whether the entry becomes a running timer, duplicate/overlap handling, or what happens on validation failure for the 8 sub-fields.
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 padding and the endpoint front-loaded is efficient, but it is under-specified rather than genuinely concise, and the URL adds little an agent can act on.
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 mutation tool with no annotations, no output schema, and a nested object parameter set, the definition is far too thin: auth requirements, success response shape, and validation rules for the nested fields are all absent.
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 only 50% and the nested entry object leaves type, tag_ids, task_id, billable, project_id, and description entirely undocumented; workspace_id has no description either. The description adds no meaning beyond restating the workspace path segment, so it fails to compensate for the gap.
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 ('Creates a time entry in a workspace') and even pins the REST endpoint, so the action is unambiguous. It does not, however, distinguish itself from update_time_entry or list_time_entries beyond the verb difference, which keeps it short of a 5.
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 when-to-use guidance is given: nothing says whether this is for manual backfill versus stopping a running timer, nor which sibling to choose instead. The endpoint string is background, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_userA
Returns the currently authenticated Clockify user (from the API key).
| Name | Required | Description | Default |
|---|---|---|---|
| include_memberships | No | When true, include workspace memberships on the user object. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses that the identity is derived from the API key (no user identifier needed), and 'Returns' safely implies a read-only operation, but it says nothing about failure modes (invalid/expired key) or the shape of the returned user.
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?
One sentence, front-loaded with the verb and resource, with the parenthetical clarifying the identity source. Nothing is wasted and nothing needs trimming.
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?
With no output schema, the description is the only source for what comes back, and it does say it returns the authenticated user object. It could say more about the returned fields and what include_memberships adds, but for a zero-required-parameter read tool this is nearly sufficient.
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 the single optional parameter 'include_memberships' is fully documented in the schema. The description adds no parameter-level meaning, so the baseline of 3 applies.
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 ('Returns'), a specific resource ('the currently authenticated Clockify user'), and the source of the identity ('from the API key'). No sibling tool (list_projects, list_workspaces, create_time_entry, etc.) does this, so the agent can distinguish it immediately.
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 rather than stated: an agent infers it should call this when it needs the identity behind the configured credentials. There is no explicit when-not guidance and no named alternative, but for a single-purpose identity lookup the implied context is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsC
Lists projects in a workspace (supports pagination and filters).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| page | No | ||
| archived | No | ||
| billable | No | ||
| hydrated | No | ||
| page_size | No | Maps to Clockify query param page-size. | |
| workspace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It discloses that pagination and filters are supported, which is useful, but omits whether results are read-only, sorted, rate-limited, or how filters interact (e.g., AND logic). For a list tool with no annotations, this is a notable gap.
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, efficient sentence that front-loads the core action. It is concise but perhaps overly terse given the missing parameter details.
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?
With no annotations, no output schema, and 7 parameters at 14% schema coverage, the description is incomplete. It should explain the filter parameters, pagination behavior, and return structure to be sufficient for correct invocation.
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 only 14% (only page_size has a description). The description says filters exist but does not map them to the specific parameters (name, archived, billable, hydrated), leaving six parameters undocumented in both schema and prose. This fails to compensate for the low coverage.
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 clear verb (Lists) and resource (projects) scoped to a workspace. It distinguishes itself from other list tools by naming 'projects', though it does not explicitly differentiate from siblings like list_tasks or list_time_entries beyond the resource name.
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 use this tool versus alternatives, nor any prerequisites or exclusions. The mention of pagination and filters is feature description, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksC
Lists tasks for a project within a workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| page | No | ||
| is_active | No | Maps to is-active. | |
| page_size | No | Maps to page-size. | |
| project_id | Yes | ||
| sort_order | No | ||
| sort_column | No | ||
| workspace_id | Yes |
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 never states that this is a read-only operation, how results are paginated, or whether filters combine, despite page/page_size/sort parameters implying paged reads.
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 no filler and the resource front-loaded. It is efficient, though the brevity comes at the cost of useful detail rather than trimming redundancy.
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 an 8-parameter, unannotated list tool with no output schema and thin schema descriptions, this definition omits pagination behavior, filtering semantics, and sort defaults. An agent cannot call it confidently without guessing.
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 only 25% across 8 parameters, so the description must compensate but does not. It implies workspace_id/project_id scoping but says nothing about the name, is_active, page, page_size, sort_column, or sort_order parameters.
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 (Lists) and resource (tasks) plus its scoping (for a project within a workspace). It does not distinguish itself from siblings like list_projects or list_time_entries beyond the resource noun.
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 indication of when to use this versus sibling list tools, no prerequisites, and no mention of pagination or filtering intent. The agent must infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_time_entriesC
Lists time entries for a user in a workspace. If user_id is omitted, the current API user is used.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Range end (yyyy-MM-ddThh:mm:ssZ). | |
| page | No | ||
| tags | No | ||
| task | No | Filter by task id. | |
| start | No | Range start (yyyy-MM-ddThh:mm:ssZ). | |
| project | No | Filter by project id. | |
| user_id | No | ||
| hydrated | No | ||
| page_size | No | ||
| description | No | ||
| in_progress | No | Maps to in-progress query flag. | |
| workspace_id | Yes |
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 notes the default user_id behavior but says nothing about pagination (page/page_size params exist), filtering behavior, permissions, or what fields are returned. For a read tool with 12 params and no annotations, this is thin.
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, front-loaded with the core purpose and the user_id default. No wasted words, though it could be slightly more informative without losing conciseness.
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 12-param list tool with no annotations and no output schema, the description is incomplete. It doesn't cover pagination, filtering capabilities beyond what's in the schema, or return structure, leaving significant gaps for an agent.
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 only 42%, so the description should compensate but doesn't. It only addresses user_id's default, leaving undocumented params like tags, hydrated, description, page, and page_size without explanation in either the schema or the description.
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 clear verb (Lists) and resource (time entries) with scope (for a user in a workspace). It's distinguishable from siblings like create_time_entry or stop_running_time_entry, but doesn't explicitly contrast with other list_* 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?
The description implies usage (listing time entries for a user/workspace) but gives no explicit when-to-use guidance or alternatives. It does clarify a default behavior for user_id omission, which is useful context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesA
Lists workspaces visible to the authenticated user. For richer role filtering (multiple roles), use clockify_request.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Optional single-role filter (matches Clockify OpenAPI typing). |
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 usefully discloses that results are scoped to the authenticated user (auth-dependent visibility) and "Lists" implies a non-mutating read, but it says nothing about pagination, ordering, or what the response contains.
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 sentences, zero waste, with the core behavior front-loaded before the alternative-tool hint. Every clause 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 one-optional-parameter read tool with no output schema and no annotations, the description covers what it does, who sees what, and the escape hatch to clockify_request. Only minor gaps (pagination/return shape) remain, and those are low-stakes here.
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 100% and the single role parameter is fully documented with its enum and the single-role limitation in the schema itself. The description's "richer role filtering" wording only implies the role parameter, adding no syntax or format detail beyond the schema, so the baseline 3 applies.
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 ("Lists workspaces") plus scope ("visible to the authenticated user"), so the operation is unambiguous. It also contrasts itself with clockify_request for the multi-role case, though it does not differentiate from the other list_* siblings.
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?
Explicitly routes the agent to clockify_request when richer/multi-role filtering is needed, which is a concrete alternative and condition. It stops short of stating when-not to use this tool or any prerequisites for the single-role path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_running_time_entryA
Stops the running timer for a user in a workspace (PATCH .../user/{userId}/time-entries with end time). If user_id is omitted, uses the current API user.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | Stop time in yyyy-MM-ddThh:mm:ssZ format. | |
| user_id | No | ||
| workspace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden. It helpfully discloses the PATCH endpoint and that it sets an end time, plus the default-user behavior when user_id is omitted. However it omits whether stopping is reversible, whether it errors when no timer is active, and any permission requirements.
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 short sentences, front-loaded with the action and resource, then the mechanism and the optional-parameter default. No filler; every clause carries information.
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 mutation with no annotations and no output schema, the description covers the action, endpoint, and user_id default, but stops short of return-value behavior, error conditions (no running timer), and workspace_id's role. Enough to call it, not enough to predict outcomes.
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 only 33%: 'end' is documented in the schema, but 'user_id' and 'workspace_id' have no schema description. The description compensates for user_id by explaining the current-user default, but adds nothing about workspace_id and no format detail beyond the schema's 'end' description.
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+resource ('Stops the running timer for a user in a workspace') plus the underlying endpoint and mechanism, which distinguishes it from siblings like create_time_entry and update_time_entry. An agent can tell this ends an existing running timer rather than creating or editing an entry.
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 'stops the running timer' and the note about omitting user_id, but there is no explicit when-to-use guidance, no mention of what happens if no timer is running, and no named alternative (e.g., update_time_entry for corrections). Adequate but leaves the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_time_entryC
Updates a time entry (PUT /v1/workspaces/{workspaceId}/time-entries/{id}). start is required by the Clockify API.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| type | No | ||
| start | Yes | ISO-8601 datetime; required by Clockify for updates. | |
| tag_ids | No | ||
| task_id | No | ||
| billable | No | ||
| project_id | No | ||
| description | No | ||
| workspace_id | Yes | ||
| time_entry_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and discloses only that PUT is used and that `start` is required. It does not say whether omitted fields are cleared or preserved, what permissions are needed, or what the response contains.
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 short sentences, front-loaded with the core action and only one extra clarifying fact. Efficient, though the second sentence is largely redundant with the schema's own note on `start`.
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 10-parameter mutation with 10% schema coverage, no annotations, and no output schema, the description is far too thin. An agent cannot tell how partial updates behave or what most parameters do.
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 only 10% across 10 parameters, so the description must compensate but largely doesn't. It explains `start`'s requirement (which the schema already notes) while leaving end, type, tag_ids, task_id, billable, project_id, and description unaddressed.
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 ('Updates a time entry') and even names the exact endpoint, which clearly separates it from create_time_entry and stop_running_time_entry by operation type. It doesn't explicitly call out the sibling alternatives, but the update semantics are unambiguous.
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 when-to-use guidance, no prerequisites, and no statement of when to prefer this over create_time_entry or stop_running_time_entry. The endpoint string is the only contextual hint.
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.
9 tool updates
v0.1.5- First observed
clockify_request - First observed
create_time_entry - First observed
get_current_user - First observed
list_projects - First observed
list_tasks - First observed
list_time_entries - First observed
list_workspaces - First observed
stop_running_time_entry - First observed
update_time_entry
TDQS
Scored across 9 tools
Most tools have distinct purposes based on resource and action. However, 'list_workspaces' and 'get_current_user' are clear, while 'clockify_request' overlaps with all others as a fallback, which could cause some ambiguity. Overall, boundaries are well-defined.
Names mostly follow a consistent verb_noun pattern (list_projects, get_current_user, create_time_entry, etc.), with one outlier: 'clockify_request' breaks the pattern. This minor deviation reduces consistency slightly.
With 9 tools, the set is well-scoped for common Clockify operations like managing projects, tasks, time entries, and workspaces. Each tool appears to earn its place without redundancy.
The surface covers essential CRUD for time entries and listing for other resources. However, there are gaps: no create/update/delete for projects, tasks, or workspaces, though 'clockify_request' provides a workaround. Minor gaps remain for full lifecycle coverage.
Maintenance
Related MCP Connectors
- 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)
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Related MCP Servers
- 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.481MIT
- AlicenseBqualityCmaintenanceMCP server for Clockify time tracking, enabling CRUD operations on workspaces, projects, tasks, clients, tags, users, and time entries.36MIT
- 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
- AlicenseAqualityAmaintenanceUnofficial MCP server for Clockify time tracking. Enables starting/stopping timers, mapping coding work to projects, and summarizing sessions in Cursor and other MCP hosts.14168 npmMIT