DeskTime MCP by usefulapi

Read tracked time and projects; create projects and start or stop timers in DeskTime.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
87%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,076Tokens (tool definitions)
~1.2 KBTypical response size
Moderate attention impact (1.62% of 128k context)

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-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools