DeskTime MCP by usefulapi
Read tracked time and projects; create projects and start or stop timers in DeskTime.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"desktime": {
"url": "https://desktime.usefulapi.io/mcp"
}
}
}Remote endpoints
https://desktime.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (10)
🟢desktime_get_company
The DeskTime company account this API key belongs to: company name, work schedule (start, end, duration, working days), tracking window and account timezone. GET /company.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desktime_list_employees(date, period, page, page_size)
All employees of the company with their tracked time for a day, week or month: arrived/left, online, desk, at-work, productive time, productivity and efficiency, group. Starts at `date` (default today); `period` is day (default), week or month. Returned a page at a time (employee-days, sorted by date then id). Needs an admin's key. GET /employees. This is employee monitoring (personal) data: ask for one day at a time and only what the user needs.
Input Schema
{
"type": "object",
"properties": {
"date": {
"description": "The day to read, yyyy-mm-dd, in the DeskTime account's timezone. Default: today.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"period": {
"description": "Window starting at `date`: day (default), week or month.",
"type": "string",
"enum": [
"day",
"week",
"month"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"page_size": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desktime_get_employee(id, date)
One employee's summary for one day: name, email, group, arrived/left, late, online/offline/desk/at-work/productive time (seconds), productivity and efficiency. Without projects or apps; see desktime_get_employee_projects / _apps / _full for those. GET /employee/basic. This is employee monitoring (personal) data: ask for one day at a time and only what the user needs.
Input Schema
{
"type": "object",
"properties": {
"id": {
"description": "DeskTime employee id (from desktime_list_employees). Omit for the user the API key belongs to. Other employees need an admin key.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"date": {
"description": "The day to read, yyyy-mm-dd, in the DeskTime account's timezone. Default: today.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desktime_get_employee_projects(id, date)
One employee's day summary plus the projects and tasks they tracked time on that day. GET /employee/projects. This is employee monitoring (personal) data: ask for one day at a time and only what the user needs.
Input Schema
{
"type": "object",
"properties": {
"id": {
"description": "DeskTime employee id (from desktime_list_employees). Omit for the user the API key belongs to. Other employees need an admin key.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"date": {
"description": "The day to read, yyyy-mm-dd, in the DeskTime account's timezone. Default: today.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desktime_get_employee_apps(id, date)
One employee's day summary plus the apps, websites and titles they used that day, with durations and productivity class. Lists longer than 200 entries are cut. GET /employee/apps. This is employee monitoring (personal) data: ask for one day at a time and only what the user needs.
Input Schema
{
"type": "object",
"properties": {
"id": {
"description": "DeskTime employee id (from desktime_list_employees). Omit for the user the API key belongs to. Other employees need an admin key.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"date": {
"description": "The day to read, yyyy-mm-dd, in the DeskTime account's timezone. Default: today.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desktime_get_employee_full(id, date)
One employee's day summary plus both the tracked projects/tasks and the apps/websites used that day. The largest reply: prefer the narrower tools. Lists longer than 200 entries are cut. GET /employee. This is employee monitoring (personal) data: ask for one day at a time and only what the user needs.
Input Schema
{
"type": "object",
"properties": {
"id": {
"description": "DeskTime employee id (from desktime_list_employees). Omit for the user the API key belongs to. Other employees need an admin key.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"date": {
"description": "The day to read, yyyy-mm-dd, in the DeskTime account's timezone. Default: today.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢desktime_list_projects(page, page_size)
Active (not archived) projects of the company with their tasks: id, name, creation time and tasks. Returned a page at a time. GET /projects.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"page_size": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡desktime_create_project(project, task)
WRITE: create a new project (and optionally one task in it) in the company's DeskTime account. Not idempotent: a second call with the same name makes another project. Returns the new project's id, url and tasks. POST /create-project.
Input Schema
{
"type": "object",
"properties": {
"project": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Name of the new project."
},
"task": {
"description": "Optional name of a first task to create in the project.",
"type": "string",
"maxLength": 200
}
},
"required": [
"project"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴desktime_start_project(project, task)
WRITE: start tracking time on a project (and optionally a task) for the user the API key belongs to, by project name. This changes that user's tracked time and may switch away from the project currently running. Returns {started: true|false}. GET /start-project.
Input Schema
{
"type": "object",
"properties": {
"project": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Exact name of the project to start (see desktime_list_projects)."
},
"task": {
"description": "Optional exact name of the task inside the project.",
"type": "string",
"maxLength": 200
}
},
"required": [
"project"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴desktime_stop_project(project, task)
WRITE: stop tracking time on a project (and optionally a task) for the user the API key belongs to, by project name. Returns {stopped: true|false}. GET /stop-project.
Input Schema
{
"type": "object",
"properties": {
"project": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Exact name of the running project to stop."
},
"task": {
"description": "Optional exact name of the task inside the project.",
"type": "string",
"maxLength": 200
}
},
"required": [
"project"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence