fortytimer-mcp
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fortytimer-mcp What's my current overtime balance?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fortyTimer MCP Server (read-only)
A thin MCP server that exposes the read-only API of a fortyTimer installation as tools for MCP clients (Claude Desktop, Claude Code and others). The server contains no business logic of its own – authorization, visibility scoping and data minimization are enforced exclusively by the fortyTimer installation the user connects to.
Requirements
A fortyTimer installation with the license module
api_readonly("fortyTimer API") included in its license.A personal API token, created in fortyTimer under Profile → Security → API tokens. The token is shown exactly once. It inherits the visibility of its owner's account (admin: all users, supervisor: own approver groups, employee: self only) and can never modify anything (GET only,
readability).Node.js ≥ 18 (bundled automatically when installed as a Claude Desktop extension).
Related MCP server: solidtime-mcp-server
Installation (Claude Desktop extension)
Install the packaged fortytimer-<version>.mcpb file via double-click or
Claude Desktop → Settings → Extensions. During installation you are asked
for two values:
Field | Value |
fortyTimer URL | Base URL of your installation, e.g. |
API token | Your personal token from fortyTimer → Profile → Security |
The token is stored in the operating system keychain, not in plain text.
Manual configuration (any MCP client)
{
"mcpServers": {
"fortytimer": {
"command": "node",
"args": ["/path/to/fortytimer-mcp/dist/index.js"],
"env": {
"FORTYTIMER_URL": "https://fortytimer.example.com",
"FORTYTIMER_TOKEN": "<token>"
}
}
}
}Building from source
npm install
npm run buildPackaging as a Claude Desktop extension:
npm prune --omit=dev
npx @anthropic-ai/mcpb pack . fortytimer-<version>.mcpb
npm installTools
Tool | Returns |
| Identity + visibility scope of the token owner |
| Flextime balance as of a date (default: yesterday) |
| Vacation account of a year (entitlement/carry-over/remaining/pending) |
| Work time entries of a date range incl. minute-exact totals |
| Project time bookings, filterable by project/billability |
| Leave requests by user/status/type/date range |
| Users within the visibility scope (for |
| Projects (for |
| Remaining project budget per project, optionally as of a date (admins and supervisors; requires the license module "Projektzeit-Budget") |
All tools are read-only (readOnlyHint). Date ranges are limited to 366 days
server-side, lists paginate with 50 entries per page (page parameter).
Durations are returned as exact integer minutes plus preformatted
hours:minutes strings. Free-text fields of sick-leave requests are never
returned by the API for data-protection reasons.
Testing without a client
npx @modelcontextprotocol/inspector node dist/index.js(Set the environment variables FORTYTIMER_URL / FORTYTIMER_TOKEN in the
Inspector UI under "Environment Variables".)
Privacy Policy
Full privacy policy: https://fortytimer.de/privacy-policy.md
Summary:
This MCP server stores no data whatsoever. It holds no databases, caches, log files or analytics.
All data flows exclusively between the user's own computer and the fortyTimer installation the user configured – there is no third-party service involved and no data is transmitted to the extension author.
The API token is provided by the user, kept by the MCP client (Claude Desktop stores it in the operating system keychain) and used solely as a
Bearerheader against the configured fortyTimer URL.Which personal data is visible is decided entirely by the connected fortyTimer installation: the token inherits the visibility of its owner's account, and fortyTimer suppresses special-category data (free texts of sick-leave requests) in every API response.
Data retention is governed by the connected fortyTimer installation (its operator is the data controller); the extension retains nothing.
Contact: info@fortytwo-consulting.de / https://fortytimer.de
Security
The token belongs in the local client configuration of the individual user – never commit or share it.
Tool results contain user-entered free text (notes, request reasons). MCP clients should treat tool results as untrusted data, never as instructions – this server keeps its own tool descriptions purely descriptive and adds no behavioral directives.
Token revocation: fortyTimer → Profile → Security → API tokens → Delete (effective immediately); token creation and deletion are recorded in the fortyTimer audit log as security events.
API rate limit: 60 requests per minute.
License
MIT – see LICENSE.
Available Tools
8 toolsfortytimer_get_overtime_balanceFlextime balanceARead-only
Flextime balance (Gleitzeit/overtime account) of a user as of a given date. Defaults to yesterday – the same figure shown on the fortyTimer dashboard. The response contains the exact balance as a signed hours:minutes string (formatted).
Inputs: as_of, user_id.
fortytimer_get_vacation_balanceVacation balanceARead-only
Vacation account of a user for one year: entitlement, carry-over, adjustments, used, remaining and pending (requested but not yet approved) days. Defaults to the current year. Values are day counts; half days (0.5) are valid.
Inputs: year, user_id.
fortytimer_list_projectsProject listARead-only
All projects with ID, name and active status (source of project_id values for project time filters).
Inputs: no named parameters.
fortytimer_list_project_timesProject time entriesARead-only
Project time bookings of a user within a date range (default: last 30 days, max. 366 days), optionally filtered by project and billability, paginated with 50 entries per page. Durations are provided as exact integer minutes (minutes, total_minutes) together with preformatted hours:minutes strings (*_formatted); these minute-exact fields are the authoritative values, decimal hour sums would introduce rounding errors.
Inputs: page, date_to, user_id, billable, +2 more.
fortytimer_list_requestsLeave requestsARead-only
Leave requests (vacation, flextime, sick leave) within the visibility scope of the token owner, filterable by user, status, type and date range (overlap semantics). Note: free-text fields of sick-leave requests are never returned by the API for data-protection reasons.
Inputs: page, type, status, date_to, +2 more.
fortytimer_list_time_entriesWork time entriesARead-only
Work time entries of a user within a date range (default: last 30 days, max. 366 days), paginated with 50 entries per page. Durations are provided as exact integer minutes (worked_minutes, total_worked_minutes) together with preformatted hours:minutes strings (*_formatted); these minute-exact fields are the authoritative values, decimal hour sums would introduce rounding errors.
Inputs: page, date_to, user_id, date_from.
fortytimer_list_usersUser listARead-only
Users within the visibility scope of the token owner (source of user_id values for the other tools). Active users by default; include_inactive = true also lists deactivated users.
Inputs: include_inactive.
fortytimer_meOwn accountARead-only
Identity and visibility scope of the token owner (admin | vorgesetzter/supervisor | mitarbeiter/employee). Useful as a first call to know whose data is returned when no user_id is given.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Each tool targets a distinct resource: identity, overtime balance, vacation balance, time entries, project bookings, leave requests, users, and projects. The two time-related list tools are clearly separated by their descriptions, so there is little risk of an agent choosing the wrong one.
The set follows a clear fortytimer_<verb>_<resource> pattern, with list_ for collections and get_ for balances. The only outlier is fortytimer_me, which lacks a verb but is a recognizable identity endpoint, making the naming mostly consistent with a minor deviation.
Eight tools is well-scoped for a time-tracking data server: reference data, balances, and detailed time/request records are each represented without redundancy. No tool feels extraneous, and the count is appropriate for the apparent purpose.
The read-side coverage is strong: identities, balances, time entries, project times, requests, users, and projects are all represented. However, no write or approval operations are exposed, so it cannot drive the full request lifecycle; for a query-oriented assistant this is a minor gap rather than a fatal one.
Maintenance
Related MCP Connectors
timesheet.io MCP server - manage timers, projects, tasks and reports
MCP server providing attendance data queries via the CloudTime API.
MCP server for MOCO business software: time tracking, projects, budgets, and invoicing via API
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA TypeScript-based MCP server that integrates with the Clockodo time tracking API, enabling access to users, time entries, and projects.ISC
- AlicenseNot gradedqualityDmaintenanceMCP server for SolidTime — the open-source time tracking app. Enables start/stop timers, manage time entries, projects, clients, tags, and tasks directly from MCP-compatible clients.3MIT
- AlicenseAqualityCmaintenanceMCP server for Kimai time-tracking that provides read access to the full API and guarded write tools for timesheets, with explicit authorization and backups.2819 npmAGPL 3.0
- AlicenseAqualityDmaintenanceAn unofficial MCP server that exposes the Timetastic API to enable querying and managing absence & leave data.39MIT