# TimeTac MCP by usefulapi (remote · timetac.usefulapi.io)

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

- Trust score: 18/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `timetac.usefulapi.io`: 18/100 (this document), [markdown](https://verifymcp.io/servers/io-usefulapi-timetac/timetac.md), [page](https://verifymcp.io/servers/io-usefulapi-timetac/timetac)

## Channel facts

- Endpoint: `https://timetac.usefulapi.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.5.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 46/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.
  - HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Tool Safety**: 0/100
  - Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### How do I install the TimeTac MCP by usefulapi server?

TimeTac MCP by usefulapi is a hosted endpoint at https://timetac.usefulapi.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-usefulapi-timetac 'https://timetac.usefulapi.io/mcp'
```

### Cursor

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

### VS Code

```json
{
  "servers": {
    "io-usefulapi-timetac": {
      "type": "http",
      "url": "https://timetac.usefulapi.io/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-usefulapi-timetac]
url = "https://timetac.usefulapi.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-usefulapi-timetac": {
      "type": "remote",
      "url": "https://timetac.usefulapi.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-usefulapi-timetac --url 'https://timetac.usefulapi.io/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-usefulapi-timetac:
    url: "https://timetac.usefulapi.io/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-usefulapi-timetac": {
      "Transport": "http",
      "Url": "https://timetac.usefulapi.io/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-usefulapi-timetac -t streamable-http -u 'https://timetac.usefulapi.io/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-usefulapi-timetac": {
      "type": "http",
      "url": "https://timetac.usefulapi.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-02 (score 18, −47)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Tool safety: pass → unverified
- [security regression] Authorization: pass → unverified
- [security regression] Stability: 0.03 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified

### 2026-11-01 (score 65, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-31 (score 64)

First indexed and scored.

## MCP tools (16)

### `timetac_list_users` (~161 tokens)

List users

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.

Input parameters:

- `active` (boolean): Only active (true) or inactive (false) users.
- `department_id` (integer): Only users of this department id.
- `limit` (integer): Maximum rows to return (API default 100).
- `offset` (integer): Skip this many rows (paging).
- `since` (string): Only rows modified since this date-time, for example 2026-10-01 00:00:00. Dates older than 3 months return everything.

### `timetac_get_user` (~58 tokens)

Get user

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=.

Input parameters:

- `user_id` (integer, required): The TimeTac user id.

### `timetac_list_time_trackings` (~216 tokens)

List time trackings

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.

Input parameters:

- `approved_by_admin` (boolean): Only approved (true) or not approved (false) entries.
- `end_date` (string): Keep entries that start on or before this date.
- `limit` (integer): Maximum rows to return (API default 100).
- `offset` (integer): Skip this many rows (paging).
- `since` (string): Only rows modified since this date-time, for example 2026-10-01 00:00:00. Dates older than 3 months return everything.
- `start_date` (string): Keep entries that start on or after this date.
- `task_id` (integer): Only entries booked on this task id.
- `user_id` (integer): Only entries of this user id.

### `timetac_current_time_trackings` (~57 tokens)

Running timers

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

Input parameters:

- `user_id` (integer): Only the running timer of this user id.

### `timetac_list_absences` (~253 tokens)

List absences

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.

Input parameters:

- `from_date` (string): Keep requests that end on or after this date.
- `limit` (integer): Maximum rows to return (API default 100).
- `offset` (integer): Skip this many rows (paging).
- `since` (string): Only rows modified since this date-time, for example 2026-10-01 00:00:00. Dates older than 3 months return everything.
- `status` (integer): Only this status code (0 = open; see the TimeTac docs for the others).
- `subtype_id` (integer): Only this leave type inside the category (see timetac_list_absence_types).
- `to_date` (string): Keep requests that start on or before this date.
- `type_id` (integer): Only this absence category: 1 = holiday, 2 = overtime reduction, 3 = other paid leave.
- `user_id` (integer): Only requests of this user id.

### `timetac_list_absence_types` (~71 tokens)

List absence types

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

Input parameters:

- `limit` (integer): Maximum rows to return (API default 100).
- `offset` (integer): Skip this many rows (paging).

### `timetac_list_projects` (~123 tokens)

List projects

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

Input parameters:

- `is_done` (boolean): Only finished (true) or open (false) projects.
- `limit` (integer): Maximum rows to return (API default 100).
- `offset` (integer): Skip this many rows (paging).
- `since` (string): Only rows modified since this date-time, for example 2026-10-01 00:00:00. Dates older than 3 months return everything.

### `timetac_list_tasks` (~139 tokens)

List tasks

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

Input parameters:

- `is_done` (boolean): Only finished (true) or open (false) tasks.
- `limit` (integer): Maximum rows to return (API default 100).
- `mother_id` (integer): Only tasks of this project id.
- `offset` (integer): Skip this many rows (paging).
- `since` (string): Only rows modified since this date-time, for example 2026-10-01 00:00:00. Dates older than 3 months return everything.

### `timetac_list_departments` (~57 tokens)

List departments

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

Input parameters:

- `limit` (integer): Maximum rows to return (API default 100).
- `offset` (integer): Skip this many rows (paging).

### `timetac_list_teams` (~56 tokens)

List teams

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

Input parameters:

- `limit` (integer): Maximum rows to return (API default 100).
- `offset` (integer): Skip this many rows (paging).

### `timetac_start_time_tracking` (~129 tokens)

Start timer

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.

Input parameters:

- `notes` (string)
- `start_time` (string): Start date-time. Leave empty to start now.
- `start_time_timezone` (string): IANA time zone of start_time. Needed when start_time is set.
- `task_id` (integer): The task to book the time on.
- `user_id` (integer, required): The user the timer belongs to.

### `timetac_stop_time_tracking` (~97 tokens)

Stop timer

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

Input parameters:

- `end_time` (string): End date-time. Leave empty to stop now.
- `end_time_timezone` (string, required): IANA time zone, for example Europe/Vienna.
- `notes` (string)
- `user_id` (integer, required): The user whose running timer stops.

### `timetac_create_time_tracking` (~130 tokens)

Add time entry

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.

Input parameters:

- `end_time` (string, required)
- `end_time_timezone` (string, required): IANA time zone, for example Europe/Vienna.
- `notes` (string)
- `start_time` (string, required)
- `start_time_timezone` (string, required): IANA time zone, for example Europe/Vienna.
- `task_id` (integer, required): The task to book the time on.
- `user_id` (integer, required)

### `timetac_create_absence` (~203 tokens)

Request absence

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.

Input parameters:

- `duration` (number): Requested duration, in the unit of duration_unit.
- `duration_unit` (string): d = days, hs = hours.
- `from_date` (string, required)
- `request_comment` (string)
- `subtype_id` (integer): Specific leave type inside the category (for example which other paid leave). See timetac_list_absence_types.
- `to_date` (string, required)
- `type_id` (integer, required): Absence category: 1 = holiday, 2 = overtime reduction, 3 = other paid leave.
- `user_id` (integer, required)

### `timetac_approve_absence` (~72 tokens)

Approve absence

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

Input parameters:

- `absence_id` (integer, required): The absence request id (from timetac_list_absences).
- `comment` (string): Optional comment shown to the employee.

### `timetac_reject_absence` (~72 tokens)

Reject absence

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

Input parameters:

- `absence_id` (integer, required): The absence request id (from timetac_list_absences).
- `comment` (string): Optional comment shown to the employee.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-usefulapi-timetac/timetac#diagnostics

## Score history

- 2026-11-05: 18
- 2026-11-04: 18
- 2026-11-03: 18
- 2026-11-02: 18
- 2026-11-01: 65
- 2026-10-31: 64

## Common questions

### What is the TimeTac MCP by usefulapi server?

TimeTac MCP by usefulapi is listed in the public MCP registry as io.usefulapi/timetac. Read hours, absences and projects; start timers, add entries, approve leave in TimeTac. This page covers its hosted endpoint (https://timetac.usefulapi.io/mcp).

### Is the TimeTac MCP by usefulapi server safe to use?

TimeTac MCP by usefulapi scores 18 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the TimeTac MCP by usefulapi server expose?

TimeTac MCP by usefulapi exposes 16 tools: timetac_list_users, timetac_get_user, timetac_list_time_trackings, timetac_current_time_trackings, timetac_list_absences, and 11 more. Their descriptions and schemas cost roughly 1,894 tokens of context every time the server is loaded.

### Does the TimeTac MCP by usefulapi server require authentication?

Its publisher declares no required credentials for TimeTac MCP by usefulapi. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

### Is the TimeTac MCP by usefulapi server still maintained?

TimeTac MCP by usefulapi is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the TimeTac MCP by usefulapi server?

VerifyMCP ran 4 checks on TimeTac MCP by usefulapi, covering TLS certificate, HSTS header, DNSSEC and Transport. 7 items could not be completed, a gap on our side rather than a finding about TimeTac MCP by usefulapi: Authorization, HTTPS, Schema quality, Stability and 3 more. 5 categories score 0 for that reason, because we only credit what we can confirm. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://timetac.usefulapi.io/mcp
- Repository: https://github.com/m190/usefulapi-mcp
- Website: https://usefulapi.io/timetac/
- Changelog RSS feed: https://verifymcp.io/servers/io-usefulapi-timetac/timetac.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-usefulapi-timetac/timetac/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/io-usefulapi-timetac/timetac.json
- HTML version of this page: https://verifymcp.io/servers/io-usefulapi-timetac/timetac
