TimeTac MCP by usefulapi

Read hours, absences and projects; start timers, add entries, approve leave in TimeTac.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
92%
命名质量
80%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~3,606token 数(工具定义)
~1.8 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 2.82%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "timetac": {
      "url": "https://timetac.usefulapi.io/mcp"
    }
  }
}

远程端点

https://timetac.usefulapi.io/mcpstreamable-http

它能做什么

工具清单

工具(16)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢timetac_list_users(active, department_id, limit, offset, since)

List employees (users) of the TimeTac account: id, name, department, active flag, entry/exit dates. Only work-related fields are returned (no credentials, payroll, address or birth data). TimeTac API: GET users/read.

输入模式

{
  "type": "object",
  "properties": {
    "active": {
      "description": "Only active (true) or inactive (false) users.",
      "type": "boolean"
    },
    "department_id": {
      "description": "Only users of this department id.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "description": "Maximum rows to return (API default 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 500
    },
    "offset": {
      "description": "Skip this many rows (paging).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "since": {
      "description": "Only rows modified since this date-time, for example 2026-10-01 00:00:00. Dates older than 3 months return everything.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢timetac_get_user(user_id)

Get one employee by user id. Only work-related fields are returned (no credentials, payroll, address or birth data). TimeTac API: GET users/read?id=.

输入模式

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The TimeTac user id."
    }
  },
  "required": [
    "user_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢timetac_list_time_trackings(user_id, task_id, approved_by_admin, start_date, end_date, ...)

List time entries (start, end, duration, task, notes, approval), newest first. Filter by user, task or approval. start_date/end_date filter the returned page only; page with offset. TimeTac API: GET timeTrackings/read.

输入模式

{
  "type": "object",
  "properties": {
    "user_id": {
      "description": "Only entries of this user id.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "task_id": {
      "description": "Only entries booked on this task id.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "approved_by_admin": {
      "description": "Only approved (true) or not approved (false) entries.",
      "type": "boolean"
    },
    "start_date": {
      "description": "Keep entries that start on or after this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "end_date": {
      "description": "Keep entries that start on or before this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "limit": {
      "description": "Maximum rows to return (API default 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 500
    },
    "offset": {
      "description": "Skip this many rows (paging).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "since": {
      "description": "Only rows modified since this date-time, for example 2026-10-01 00:00:00. Dates older than 3 months return everything.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢timetac_current_time_trackings(user_id)

List the timers that run right now (who is clocked in, on which task). TimeTac API: GET timeTrackings/current.

输入模式

{
  "type": "object",
  "properties": {
    "user_id": {
      "description": "Only the running timer of this user id.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢timetac_list_absences(user_id, type_id, subtype_id, status, from_date, ...)

List absence and leave requests (holiday, sick leave and others) with dates, duration and approval status. from_date/to_date keep requests that overlap the range, on the returned page only. TimeTac API: GET absences/read.

输入模式

{
  "type": "object",
  "properties": {
    "user_id": {
      "description": "Only requests of this user id.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "type_id": {
      "description": "Only this absence category: 1 = holiday, 2 = overtime reduction, 3 = other paid leave.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "subtype_id": {
      "description": "Only this leave type inside the category (see timetac_list_absence_types).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "status": {
      "description": "Only this status code (0 = open; see the TimeTac docs for the others).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "from_date": {
      "description": "Keep requests that end on or after this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "to_date": {
      "description": "Keep requests that start on or before this date.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "limit": {
      "description": "Maximum rows to return (API default 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 500
    },
    "offset": {
      "description": "Skip this many rows (paging).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "since": {
      "description": "Only rows modified since this date-time, for example 2026-10-01 00:00:00. Dates older than 3 months return everything.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢timetac_list_absence_types(limit, offset)

List the absence types of the account (holiday, sick leave, special leave) with their ids. TimeTac API: GET absenceTypes/read.

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Maximum rows to return (API default 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 500
    },
    "offset": {
      "description": "Skip this many rows (paging).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢timetac_list_projects(is_done, limit, offset, since)

List projects (task tree nodes that group tasks) with ids, deadlines and status. TimeTac API: GET projects/read.

输入模式

{
  "type": "object",
  "properties": {
    "is_done": {
      "description": "Only finished (true) or open (false) projects.",
      "type": "boolean"
    },
    "limit": {
      "description": "Maximum rows to return (API default 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 500
    },
    "offset": {
      "description": "Skip this many rows (paging).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "since": {
      "description": "Only rows modified since this date-time, for example 2026-10-01 00:00:00. Dates older than 3 months return everything.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢timetac_list_tasks(mother_id, is_done, limit, offset, since)

List tasks that time can be booked on, with their project (mother_id) and status. TimeTac API: GET tasks/read.

输入模式

{
  "type": "object",
  "properties": {
    "mother_id": {
      "description": "Only tasks of this project id.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "is_done": {
      "description": "Only finished (true) or open (false) tasks.",
      "type": "boolean"
    },
    "limit": {
      "description": "Maximum rows to return (API default 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 500
    },
    "offset": {
      "description": "Skip this many rows (paging).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "since": {
      "description": "Only rows modified since this date-time, for example 2026-10-01 00:00:00. Dates older than 3 months return everything.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢timetac_list_departments(limit, offset)

List departments with ids and parent departments. TimeTac API: GET departments/read.

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Maximum rows to return (API default 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 500
    },
    "offset": {
      "description": "Skip this many rows (paging).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢timetac_list_teams(limit, offset)

List teams with ids and names. TimeTac API: GET teams/read.

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Maximum rows to return (API default 100).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 500
    },
    "offset": {
      "description": "Skip this many rows (paging).",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴timetac_start_time_tracking(user_id, task_id, notes, start_time, start_time_timezone)

WRITE: start a timer for a user, now or at a given time. Each call can create a new running entry, so do not repeat it. TimeTac API: POST timeTrackings/start.

输入模式

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The user the timer belongs to."
    },
    "task_id": {
      "description": "The task to book the time on.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "notes": {
      "type": "string",
      "maxLength": 2000
    },
    "start_time": {
      "description": "Start date-time. Leave empty to start now.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}[ T]\\d{2}:\\d{2}(:\\d{2})?$"
    },
    "start_time_timezone": {
      "description": "IANA time zone of start_time. Needed when start_time is set.",
      "type": "string",
      "minLength": 3,
      "maxLength": 64
    }
  },
  "required": [
    "user_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡timetac_stop_time_tracking(user_id, end_time_timezone, end_time, notes)

WRITE: stop the running timer of a user, now or at a given time. TimeTac API: PUT timeTrackings/stop.

输入模式

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The user whose running timer stops."
    },
    "end_time_timezone": {
      "type": "string",
      "minLength": 3,
      "maxLength": 64,
      "description": "IANA time zone, for example Europe/Vienna."
    },
    "end_time": {
      "description": "End date-time. Leave empty to stop now.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}[ T]\\d{2}:\\d{2}(:\\d{2})?$"
    },
    "notes": {
      "type": "string",
      "maxLength": 2000
    }
  },
  "required": [
    "user_id",
    "end_time_timezone"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴timetac_create_time_tracking(user_id, task_id, start_time, end_time, start_time_timezone, ...)

WRITE: add a finished time entry for a user. Each call creates a new entry, so do not repeat it. TimeTac API: POST timeTrackings/create.

输入模式

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "task_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The task to book the time on."
    },
    "start_time": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}[ T]\\d{2}:\\d{2}(:\\d{2})?$"
    },
    "end_time": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}[ T]\\d{2}:\\d{2}(:\\d{2})?$"
    },
    "start_time_timezone": {
      "type": "string",
      "minLength": 3,
      "maxLength": 64,
      "description": "IANA time zone, for example Europe/Vienna."
    },
    "end_time_timezone": {
      "type": "string",
      "minLength": 3,
      "maxLength": 64,
      "description": "IANA time zone, for example Europe/Vienna."
    },
    "notes": {
      "type": "string",
      "maxLength": 2000
    }
  },
  "required": [
    "user_id",
    "task_id",
    "start_time",
    "end_time",
    "start_time_timezone",
    "end_time_timezone"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴timetac_create_absence(user_id, type_id, subtype_id, from_date, to_date, ...)

WRITE: create an absence or leave request for a user. Each call creates a new request, so do not repeat it. type_id is the category (1 holiday, 2 overtime reduction, 3 other paid leave); subtype_id picks the leave type from timetac_list_absence_types. TimeTac API: POST absences/create.

输入模式

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "type_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Absence category: 1 = holiday, 2 = overtime reduction, 3 = other paid leave."
    },
    "subtype_id": {
      "description": "Specific leave type inside the category (for example which other paid leave). See timetac_list_absence_types.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "from_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "to_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "request_comment": {
      "type": "string",
      "maxLength": 2000
    },
    "duration": {
      "description": "Requested duration, in the unit of duration_unit.",
      "type": "number",
      "exclusiveMinimum": 0
    },
    "duration_unit": {
      "description": "d = days, hs = hours.",
      "type": "string",
      "enum": [
        "d",
        "hs"
      ]
    }
  },
  "required": [
    "user_id",
    "type_id",
    "from_date",
    "to_date"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴timetac_approve_absence(absence_id, comment)

WRITE: approve an open absence request. The employee is notified by TimeTac. TimeTac API: PUT absences/approve.

输入模式

{
  "type": "object",
  "properties": {
    "absence_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The absence request id (from timetac_list_absences)."
    },
    "comment": {
      "description": "Optional comment shown to the employee.",
      "type": "string",
      "maxLength": 2000
    }
  },
  "required": [
    "absence_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴timetac_reject_absence(absence_id, comment)

WRITE: reject an open absence request. The employee is notified by TimeTac. TimeTac API: PUT absences/reject.

输入模式

{
  "type": "object",
  "properties": {
    "absence_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "The absence request id (from timetac_list_absences)."
    },
    "comment": {
      "description": "Optional comment shown to the employee.",
      "type": "string",
      "maxLength": 2000
    }
  },
  "required": [
    "absence_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

社区

评价此服务器

证据

最近观测

已验证未记录版本16 个工具