MCP server for Clockify time tracking API - track time, manage projects, and generate reports
The Clockify MCP server defines 19 tools with consistent verb-noun naming (get_, create_, update_, delete_, start_, stop_). All tools have descriptions and input schemas are present with type definitions. However, several critical gaps reduce quality: (1) Descriptions are generally short (average ~50 chars) and lack LLM-specific guidance on WHEN to call each tool vs. alternatives; (2) Output schemas are not documented, the code provides no schema declarations for response structures, forcing LLMs to infer what fields they will receive; (3) Parameters lack validation guidance, format constraints, ranges, and dependencies are missing from descriptions; (4) Error handling is minimal, no actionable error messages or recovery guidance visible in tool definitions; (5) Tool composition reveals potential gaps, no batch tools despite many sequential operations, and some tools have overlapping functionality (get_running_timer vs start_timer intent). The codebase shows well-structured Zod schemas for inputs and helper validation functions (validateStartTime, parseDurationToEndTime), but these are implementation details not exposed in tool definitions. Security is handled server-side (API key injection expected), which is correct. Overall: solid technical foundation but descriptions are too terse and output contracts undefined.
Create a new project in a workspace
Create a new tag in a workspace
Create a new task in a project
Create a new time entry or start a timer
Delete a time entry
Get all clients in a workspace
Get information about the current authenticated user
Output schemas not documented. Tool definitions provide no schema for response structures. LLMs cannot predict what fields they will receive, forcing trial-and-error reasoning about downstream tool chaining.
Descriptions too brief and lack LLM-specific guidance. Most descriptions are 30-50 chars ('Get all X in a workspace') with no context on WHEN to call each tool, prerequisites, or how they differ from similar tools. Pattern baseline is 194 chars average for production tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Get a detailed report of time entries
Get all tasks in a project
Get all projects in a workspace
Get the currently running timer for a user
Get a summary report of time tracking data
Get all tags in a workspace
Get time entries for a user in a workspace
Get all users in a workspace
Get all workspaces for the current user
Start a new timer for the current user
Stop the currently running timer for a user
Update a time entry
No actionable error handling. Tool definitions provide no guidance on error categories (retryable vs. user-fixable vs. fatal), recovery steps, or example invalid inputs. Implementation may validate, but users see no recovery hints in tool descriptions.
Parameter descriptions lack validation constraints. Descriptions do not specify ranges, enums, or formats. E.g., 'color' in create_project says '(hex code like #FF5733)' but is a string with no enum or pattern constraint. LLMs may pass invalid values.
Overlapping tool functionality without clear distinction. get_running_timer and start_timer both relate to timers; no description clarifies when to use each. Similarly, get_time_entries + period parameter vs. get_summary_report suggests redundancy.
No output field chaining documentation. If create_project returns a project_id, that ID name must be documented so agents know they can pass it to get_project_tasks. Response structures are invisible in tool definitions.
No pagination documentation. get_projects, get_time_entries, get_summary_report, and get_detailed_report may return large result sets but no limit, offset, or next_cursor parameters are visible. Tool descriptions do not mention result capping.
Destructive operations (delete_time_entry) lack confirmation/dry-run pattern. No mention of whether deletions are reversible, whether a confirmation step exists, or what happens on error.