Clockify MCP
Servidor MCP de Clockify
Este servidor MCP permite que los LLM (como Cursor o Claude) interactúen con su espacio de trabajo de Clockify, lo que permite la automatización avanzada del seguimiento del tiempo y la generación de informes. Con este servidor, puede:
Enumere todos los proyectos en su espacio de trabajo
Enumere todos los usuarios en su espacio de trabajo
Agregue y busque entradas de tiempo para usted o cualquier usuario (si tiene permisos)
Extraer hojas de horas de cualquier usuario en todos los proyectos
Genere desgloses de fechas mensuales o personalizados de horas por usuario y proyecto utilizando la API de informes de resumen de Clockify
Integre con LLM para automatizar, resumir o analizar sus datos de seguimiento de tiempo
Características
listProjects: enumera todos los proyectos del usuario autenticado
getTimeEntries: enumera las entradas de tiempo del usuario autenticado (con filtros de fecha opcionales)
addTimeEntry: Agregar entradas de tiempo a un proyecto
listUsers: enumera todos los usuarios en el espacio de trabajo
getUserTimeEntries: enumera las entradas de tiempo de cualquier usuario (con filtros de fecha opcionales)
getSummaryReport: Obtiene un informe resumido de horas por usuario/proyecto para un rango de fechas (opcionalmente, se puede filtrar por ID de usuario/ID de proyecto). Permite desgloses mensuales/por hora para cualquier usuario o proyecto.
Related MCP server: clockify-mcp
Inicio rápido (Docker: Preferible)
Configuración del servidor MCP para Cursor/Claude
Agregue lo siguiente a su archivo Cursor o Claude settings.json (reemplace YOUR_API_KEY ):
{
"mcpServers": {
"clockify-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "CLOCKIFY_API_KEY=<YOUR_API_KEY>",
"ghcr.io/inakianduaga/clockify-mcp:latest"
],
"disabled": false,
"autoApprove": []
}
}
}Cómo obtener una clave API de Clockify
Inicie sesión en su cuenta de Clockify .
Haz clic en el icono de tu perfil (arriba a la derecha) y selecciona Perfil .
Desplácese hacia abajo hasta la sección API .
Haga clic en Generar si no tiene una clave API o copie su clave existente.
Contribución y CI/CD
Este proyecto utiliza GitHub Actions para crear y publicar automáticamente la imagen de Docker en GitHub Container Registry (GHCR) en cada envío a main .
URL de la imagen:
ghcr.io/inakianduaga/clockify-mcp:latestCómo extraer la imagen:
docker pull ghcr.io/inakianduaga/clockify-mcp:latest
Puedes ver las imágenes publicadas en la sección "Paquetes" de tu perfil o repositorio de GitHub.
Banco de memoria y optimizaciones
El desarrollo se realizó con cursor y reglas optimizadas. Véase: https://github.com/Bhartendu-Kumar/rules\_template
Licencia
Este proyecto está licenciado bajo la Licencia MIT. Consulte el archivo de LICENCIA para más detalles.
Available Tools
7 toolsaddTimeEntryC
Add a time entry to a project.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Clockify project ID | |
| description | Yes | Description of the time entry | |
| start | Yes | Start time (ISO8601) | |
| end | Yes | End time (ISO8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Add' implies a write operation, the description doesn't disclose whether this requires authentication, what permissions are needed, whether the operation is idempotent, what happens on failure, or what the response contains. For a mutation tool with zero annotation coverage, this represents significant gaps in behavioral transparency.
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 extremely concise at just one sentence with no wasted words. It's front-loaded with the core action and resource, making it immediately scannable. Every word earns its place, and there's no redundancy or unnecessary elaboration. This represents optimal conciseness for a basic tool 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?
Given this is a mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't address what happens after the time entry is added, what the return value might be, error conditions, authentication requirements, or how this tool relates to the sibling retrieval tools. For a tool that presumably modifies data in a time tracking system, more contextual information would be expected.
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?
With 100% schema description coverage, the input schema already documents all four parameters thoroughly. The description adds no additional semantic context about the parameters beyond what's in the schema. It doesn't explain relationships between parameters (e.g., that 'end' should be after 'start'), format expectations beyond ISO8601, or constraints on values. The baseline score of 3 reflects adequate but minimal value addition.
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 action ('Add') and resource ('time entry to a project'), making the purpose immediately understandable. It distinguishes from sibling tools like getTimeEntries or listProjects by focusing on creation rather than retrieval. However, it doesn't specify what constitutes a 'time entry' in this context, leaving some ambiguity about the resource being manipulated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like getTimeEntries and getUserTimeEntries that retrieve time entries, there's no indication whether this tool should be used for creating new entries versus updating existing ones, or what prerequisites might be needed. The description offers no context about appropriate use cases or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getSummaryReportC
Get a summary report of hours by user/project for a date range. Optional: userIds, projectIds.
| Name | Required | Description | Default |
|---|---|---|---|
| start | Yes | Start date (ISO8601) | |
| end | Yes | End date (ISO8601) | |
| userIds | No | Array of user IDs (optional) | |
| projectIds | No | Array of project IDs (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool retrieves a summary report but does not disclose behavioral traits like whether it's read-only, requires authentication, has rate limits, or what the output format is. This is a significant gap for a tool with no annotation coverage.
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, efficient sentence that front-loads the core purpose and includes key optional parameters. There is no wasted text, making it appropriately sized and easy to parse.
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 complexity of a reporting tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects, output format, and usage context, which are crucial for an AI agent to effectively invoke the tool without additional assumptions.
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 documents all parameters (start, end, userIds, projectIds) with descriptions. The description adds marginal value by mentioning the optional nature of userIds and projectIds, but does not provide additional semantics beyond what the schema specifies, aligning with the baseline for high 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?
The description clearly states the verb ('Get') and resource ('summary report of hours by user/project'), specifying what the tool does. However, it does not explicitly differentiate from sibling tools like 'getTimeEntries' or 'getUserTimeEntries', which might also retrieve time-related data, so it misses full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'getTimeEntries' or 'getUserTimeEntries'. It mentions optional parameters but does not specify contexts, prerequisites, or exclusions for usage, leaving the agent without clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTimeEntriesC
List time entries for the authenticated user. Optional: start, end (ISO8601).
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | Start date (ISO8601, optional) | |
| end | No | End date (ISO8601, optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states it lists time entries for the authenticated user, implying a read-only operation, but doesn't disclose behavioral traits such as authentication requirements, rate limits, pagination, or error handling. This leaves significant gaps in understanding how the tool behaves.
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 concise and front-loaded, stating the main purpose in the first sentence and adding parameter details in the second. There's no wasted text, making it efficient, though it could be slightly more structured for clarity.
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 lack of annotations and output schema, the description is incomplete. It doesn't explain what the return values look like (e.g., format, fields), authentication needs, or error cases. For a tool with no structured support, this leaves the agent under-informed about critical usage aspects.
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 description coverage is 100%, so the input schema already documents both parameters with descriptions. The description adds minimal value by mentioning the parameters are optional and in ISO8601 format, but this doesn't go beyond what the schema provides, aligning with the baseline for high schema 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?
The description clearly states the verb ('List') and resource ('time entries for the authenticated user'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'getUserTimeEntries' or 'getUserTimeEntriesByName', which appear similar, so it doesn't fully distinguish from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'getUserTimeEntries' or 'getUserTimeEntriesByName'. It mentions optional parameters but doesn't specify contexts or exclusions for usage, leaving the agent with minimal direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getUserTimeEntriesB
List time entries for a specified user. Optional: start, end (ISO8601).
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User ID | |
| start | No | Start date (ISO8601, optional) | |
| end | No | End date (ISO8601, optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool lists time entries and mentions optional date parameters, but it doesn't disclose behavioral traits such as pagination, rate limits, authentication needs, error handling, or what the return format looks like. For a read operation with no annotation coverage, this is a significant gap in transparency.
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 concise and front-loaded: the first sentence states the core purpose, and the second adds optional parameter details. Every sentence earns its place with no wasted words, making it efficient and easy to parse.
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 complexity (a read operation with 3 parameters) and lack of annotations and output schema, the description is incomplete. It doesn't explain return values, error cases, or behavioral constraints, which are crucial for an AI agent to use the tool correctly. The description should provide more context to compensate for the missing structured data.
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 documents all parameters (userId, start, end) with descriptions. The description adds minimal value by noting that start and end are optional and in ISO8601 format, but this is redundant with the schema. Baseline 3 is appropriate as the schema does the heavy lifting.
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 tool's purpose: 'List time entries for a specified user.' It specifies the verb ('List'), resource ('time entries'), and target ('specified user'), making the function unambiguous. However, it doesn't distinguish this tool from its sibling 'getTimeEntries' (which likely lists all time entries vs. user-specific), missing full differentiation.
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 by mentioning 'for a specified user,' suggesting this is for user-specific queries, but it doesn't explicitly state when to use this tool versus alternatives like 'getTimeEntries' or 'getUserTimeEntriesByName.' No guidance on prerequisites, exclusions, or specific contexts is provided, leaving usage somewhat inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getUserTimeEntriesByNameB
List time entries for a user by name (case-insensitive, partial match allowed). Optional: start, end (ISO8601).
| Name | Required | Description | Default |
|---|---|---|---|
| userName | Yes | User name (partial/case-insensitive) | |
| start | No | Start date (ISO8601, optional) | |
| end | No | End date (ISO8601, optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context about the matching behavior ('case-insensitive, partial match allowed') and date format ('ISO8601'), which aren't in the schema. However, it doesn't describe critical behaviors like pagination, rate limits, authentication needs, error conditions, or what the return format looks like (especially problematic since there's no output schema).
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 extremely concise and front-loaded: the first clause states the core purpose, followed by key behavioral details and parameter notes. Every sentence earns its place with no wasted words. The structure efficiently communicates essential information in minimal space.
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 moderate complexity (filtered listing with partial matching), lack of annotations, and absence of an output schema, the description is incomplete. It doesn't explain what the return values look like (structure, fields, pagination), error conditions, or authentication requirements. While it covers the basic operation and parameters, critical context for proper tool invocation is missing.
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 documents all three parameters thoroughly. The description adds marginal value by reiterating that 'start' and 'end' are optional and specifying the ISO8601 format (which is already in the schema descriptions). It doesn't provide additional semantic context beyond what's in the schema, meeting the baseline for high schema 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?
The description clearly states the tool's purpose: 'List time entries for a user by name' - a specific verb ('List') and resource ('time entries') with a key constraint ('by name'). It distinguishes from sibling tools like 'getTimeEntries' (which likely lacks user filtering) and 'getUserTimeEntries' (which might use user ID instead of name), though this differentiation isn't explicitly stated.
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 context through the 'by name' specification and optional date parameters, suggesting this tool is for filtering time entries by user name rather than ID. However, it doesn't explicitly state when to use this vs. alternatives like 'getUserTimeEntries' (which might use user ID) or 'getTimeEntries' (which might list all entries). No explicit when-not-to-use guidance or prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listProjectsB
List all projects for the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It implies a read-only operation ('List') but doesn't disclose behavioral traits such as pagination, sorting, rate limits, error conditions, or what 'authenticated user' entails. This is a significant gap for a tool with zero annotation coverage.
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, efficient sentence that front-loads the core action ('List all projects') and adds essential scope ('for the authenticated user'). There is zero waste, making it appropriately sized and well-structured.
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 no annotations, no output schema, and a simple tool with 0 parameters, the description is incomplete. It lacks details on return format (e.g., list structure, fields), error handling, or authentication requirements, which are crucial for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so no parameter information is needed. The description appropriately doesn't add param details, earning a baseline score of 4 for not overloading with unnecessary information.
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 ('List') and resource ('projects'), specifying scope ('all projects for the authenticated user'). It distinguishes from siblings like 'getTimeEntries' or 'listUsers' by focusing on projects, but doesn't explicitly differentiate from potential similar tools like 'getProjects'.
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 is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), exclusions, or compare to siblings like 'getSummaryReport' or 'addTimeEntry' for project-related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listUsersB
List all users in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool lists users but doesn't describe any behavioral traits such as pagination, rate limits, authentication needs, or what the output format looks like. This is a significant gap for a tool with no annotation coverage.
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, efficient sentence that directly states the tool's purpose without any unnecessary words. It is appropriately sized and front-loaded, making it easy to parse quickly.
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 (0 parameters) but lack of annotations and output schema, the description is incomplete. It doesn't provide enough context about behavioral aspects like output format or usage constraints, which are necessary for the agent to use the tool effectively.
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 has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate, earning a baseline score of 4 as it doesn't need to compensate for any schema gaps.
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 action ('List') and resource ('all users in the workspace'), making the tool's purpose immediately understandable. It doesn't distinguish from sibling tools like 'getUserTimeEntries' or 'getUserTimeEntriesByName', which focus on time entries rather than user listings, so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context for usage, or exclusions, leaving the agent to infer usage based on the tool name alone.
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.
7 tool updates
- First observed
addTimeEntry - First observed
getSummaryReport - First observed
getTimeEntries - First observed
getUserTimeEntries - First observed
getUserTimeEntriesByName - First observed
listProjects - First observed
listUsers
TDQS
Scored across 7 tools
Most tools have distinct purposes, but there is notable overlap between getTimeEntries, getUserTimeEntries, and getUserTimeEntriesByName, which all retrieve time entries with slight variations in filtering. This could cause confusion for an agent trying to select the right tool for listing time entries, as the boundaries between these three tools are not entirely clear.
The naming follows a consistent verb_noun pattern throughout, such as addTimeEntry, getSummaryReport, and listProjects. However, there is a minor deviation with getUserTimeEntriesByName, which includes an extra descriptor in the name, slightly breaking the pattern compared to the others.
With 7 tools, the count is well-scoped for a time-tracking server like Clockify. Each tool serves a specific function in managing time entries, projects, and users, and none appear redundant or out of place for the domain.
The toolset covers core time-tracking operations well, including adding time entries, retrieving reports, and listing projects and users. However, there are minor gaps, such as no tools for updating or deleting time entries, which could limit full lifecycle management but are not critical for basic workflows.
Maintenance
Related MCP Connectors
timesheet.io MCP server - manage timers, projects, tasks and reports
Model Context Protocol server for Studex tools, notifications, and profile integrations
Model Context Protocol server for todo.vu task management and time tracking.
- MOCOOAuthcom.mocoapp.api
MCP server for MOCO business software: time tracking, projects, budgets, and invoicing via API
1
Related MCP Servers
AlicenseNot gradedqualityFmaintenanceModel Context Protocol (MCP) server for OpsLevel12MIT- AlicenseBqualityDmaintenanceMCP server for Clockify time tracking, enabling CRUD operations on workspaces, projects, tasks, clients, tags, users, and time entries.36MIT
- FlicenseNot gradedqualityCmaintenanceA scoped MCP server for managing Clockify workspaces, offering read/write tools for clients, projects, tasks, tags, and time entries, with idempotent structure scaffolding and gated deletion.-
- 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