fortytimer-mcp
OfficialClick on "Install 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-mcpWhat'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 |
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).
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | As-of date in YYYY-MM-DD format | |
| user_id | No | User ID (from fortytimer_list_users). Omitted: the token owner. Visibility is enforced server-side (admin: all users, supervisor: own approver groups, employee: self only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds relevant behavioral details: the default as-of date is yesterday, the value matches the dashboard, and the response contains a signed hours:minutes string. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler: purpose, default behavior, and response format. The most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description compensates by stating the response contains the exact balance as a signed hours:minutes string. Parameter behavior is fully covered by the input schema, including visibility rules and defaults. For a simple read-only balance query, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, so the baseline is 3. The description adds meaning for as_of by stating it defaults to yesterday, and for user_id by framing it as 'of a user' while the schema already documents visibility and defaulting to the token owner.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as 'Flextime balance (Gleitzeit/overtime account) of a user as of a given date' and uses a specific verb 'get' via the tool name. It also distinguishes itself from sibling fortytimer_get_vacation_balance by naming the overtime account and referencing the dashboard figure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly tells when to use this tool: to retrieve the flextime/overtime balance as of a date, with yesterday as the default matching the dashboard. It does not explicitly name alternatives or exclusion cases, but the resource is clearly scoped enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Vacation year, default: current year | |
| user_id | No | User ID (from fortytimer_list_users). Omitted: the token owner. Visibility is enforced server-side (admin: all users, supervisor: own approver groups, employee: self only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral details: default year behavior, day-count units, half-day validity, and the precise meaning of 'pending' as requested-but-not-approved. This goes beyond what annotations provide without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the account components, the default year behavior, and the day-count/half-day clarification. The information is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well by enumerating the reported values and their units. It also clarifies default year and relies on the schema for user_id authorization semantics, leaving no major gap for an agent deciding whether and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers both parameters with descriptions, including the year default and user_id visibility rules, so schema coverage is 100%. The description mostly restates the year default and adds output-unit context rather than new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: a user's vacation account for a year, with concrete components such as entitlement, carry-over, used, and remaining days. The tool name includes 'get_vacation_balance', and the sibling list shows a distinct overtime-balance alternative, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context: this is the vacation-balance read for a user in a given year, defaulting to the current year. It does not explicitly mention when not to use it or name alternatives, but the resource and sibling names make the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fortytimer_list_projectsProject listARead-only
All projects with ID, name and active status (source of project_id values for project time filters).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, read-only, non-destructive operation, so the description does not need to repeat that. It adds useful context about the output fields and the tool's role as an ID source, but it does not disclose details like pagination, ordering, or whether the project list is exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence delivers the core purpose and the key detail about returned fields. There is no redundant phrasing or repetition of the title or schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool, the description is complete: it states what is returned and why an agent would use it. The absence of an output schema is mitigated by naming the expected fields, and annotations cover the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter ambiguity to resolve. The description still adds value by explaining that the returned project IDs are meaningful inputs for project time filters, which is the closest relevant semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as listing all projects and specifies the returned fields: ID, name, and active status. It also distinguishes itself from sibling time-entry tools by framing the output as the source of project_id values for time filters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a concrete use case: use this tool to obtain project_id values before applying project time filters. It does not explicitly list exclusions or alternatives, but the stated purpose is clear enough for an agent to know when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page (50 entries per page) | |
| date_to | No | To date in YYYY-MM-DD format | |
| user_id | No | User ID (from fortytimer_list_users). Omitted: the token owner. Visibility is enforced server-side (admin: all users, supervisor: own approver groups, employee: self only). | |
| billable | No | true = billable only, false = non-billable only | |
| date_from | No | From date in YYYY-MM-DD format | |
| project_id | No | Project ID (from fortytimer_list_projects) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, and the description adds valuable behavioral context: default 30-day windows up to 366 days, 50-per-page pagination, and a warning that minute-exact fields are authoritative to avoid decimal rounding errors. These details go beyond the structured annotations and help the agent know exactly what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences contain the entire behavior contract with no filler or repetition. The operation and scope are front-loaded, and the clarification about minute-exact durations is placed at the end as an important caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no required parameters and a fully documented schema, the description covers scope, filters, defaults, limits, pagination, and an output precision caveat. Nothing essential for selecting or invoking the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description earns a higher score by tying parameters to behavior, stating the default date range, the maximum allowed range, optional filters, and page size. Individual parameter meanings are already fully covered by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource, Project time bookings of a user, a list operation, and the scoping dimensions (date range, filters, pagination). It is clear and self-contained, but it does not explicitly differentiate this tool from the similarly named sibling fortytimer_list_time_entries, so it stops short of full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implied when to use the tool:retrieve a user's project time bookings within a date range, optionally filtered by project and billability. However, it provides no explicit when-not-to-use guidance or comparison to alternatives such as fortytimer_list_time_entries, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page (50 entries per page) | |
| type | No | Request type | |
| status | No | Request status | |
| date_to | No | To date in YYYY-MM-DD format | |
| user_id | No | User ID (from fortytimer_list_users). Omitted: the token owner. Visibility is enforced server-side (admin: all users, supervisor: own approver groups, employee: self only). | |
| date_from | No | From date in YYYY-MM-DD format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation read-only and non-destructive, so the bar is lower. The description adds genuine behavioral context beyond that: visibility scoping of results, the overlap semantics for date-range filters, and a meaningful caveat that sick-leave free-text fields are never returned for data-protection reasons. These prepare the agent for response-shape gotchas. It is not exhaustive (no ordering or pagination behavior beyond the schema), hence 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The first front-loads the resource, scope, and filter capabilities; the second carries the data-protection caveat. Every clause earns its place and the description is easily scanned by an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the response structure is unspecified, but the description flags the one important ommission (sick-lave free-text fields) and covers the filter semantics and result scoping. The schema supplies page size, parameter formats, and the admin/supervisor/emplyee visability enforcement for user_id. Remaining gaps such as response ordering are minor for a filtered-list tool whose safety profile is already annotated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description contributes 'overlap semantics' for date ranges, which adds meaning the schema's 'From/To date in YYYY-MM-DD format' descriptions lack. That is a single useful concept rather than substatial compensation, and the remaining parameter meanings are already fully carried by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (leave requests), enumerates its subtypes (vacation, flextime, sick leave), scopes it to the token owner's visibility, and lists the filter dimensions. The description reads as a noun phrase rather than an explicit 'Lists...', but the tool name supplies the verb and the content clearly distinguishes it from sibling list tools by resource. It stops short of a 5 because it never explicitly contrasts itself with a sibling like fortytimer_list_time_entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: the resource type and the visible sibling domains (balances, time entries, projects, users) make it reasonably clear this tool is for retrieving leave requests. However, there is no explicit when-to-use or when-not-to-use guidance, no alternative routing, and no statement about how this relates to the balance tools. The agent must infer the choice from the tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page (50 entries per page) | |
| date_to | No | To date in YYYY-MM-DD format | |
| user_id | No | User ID (from fortytimer_list_users). Omitted: the token owner. Visibility is enforced server-side (admin: all users, supervisor: own approver groups, employee: self only). | |
| date_from | No | From date in YYYY-MM-DD format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and non-destructive behavior. The description adds valuable behavioral details: 50-entry pagination, a 366-day maximum range, and the critical caveat that minute-exact durations are authoritative over preformatted strings to avoid rounding errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence establishes scope, date range, and pagination; the second sentence explains the authoritative duration fields and rounding risk. Every sentence adds necessary information without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated list, the description covers the key invocation details: date range defaults, pagination, and response semantics for durations. It does not describe the full return envelope or ordering, but the annotations and schema cover safety and parameters well, making it sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all four parameters, so the baseline is 3. The description adds operational meaning beyond the schema by stating the default last-30-days range, the maximum range, and the page size, which helps agents set date_from, date_to, and page correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope: a user's work time entries filtered by date range, with pagination. It distinguishes itself from sibling tools by focusing on time entries and user/date filtering, so an agent can select it correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: retrieve work time entries for a user within a date range, with default and maximum range values. It does not explicitly contrast with alternatives like list_project_times, but the scope is unambiguous and no misleading exclusions are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| include_inactive | No | Also list inactive users |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and destructiveHint, so the safety profile is covered. The description adds useful context about visibility scope and the active/inactive default, but does not disclose return format, pagination, or fields included in the response. This is similar to other list tools where annotations cover safety but response details remain unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the tool's purpose, scope, relationship to other tools, and the single parameter's behavior with no wasted wording. The key usage context is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one optional parameter, the description covers the essential invocation details: visibility scope, default active-only behavior, and how to include inactive users. It does not describe the response shape beyond mentioning user_id values, and there is no output schema, so a little more detail about returned fields could make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes include_inactive, but the description adds the crucial default behavior ('Active users by default') and clarifies that include_inactive = true includes deactivated users. This goes beyond the schema's brief 'Also list inactive users'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a user-listing operation with a specific scope ('visibility scope of the token owner') and explicitly frames it as the source of user_id values for other tools. This makes its purpose distinct from sibling tools that list time entries, projects, or requests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use the tool: as the source of user_id values for other tools, and clarifies the default behavior for active users versus the include_inactive flag for deactivated users. It does not explicitly name alternative tools for exclusion, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds useful behavioral context about role scope and data ownership, but does not detail the output shape or whether the role list is exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core purpose and then adds practical usage context. No redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless identity/scope tool with rich annotations, the description covers the essential use case and clarifies its role in a workflow. Minor omission is the lack of explicit return format, but this is not critical for a read-only token introspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description does not need to explain parameter behavior. The baseline of 4 applies, and the description adds contextual value about how this tool relates to user_id in other calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning the token owner's identity and visibility scope, including the three role values. It is distinct from the sibling tools that operate on balances, entries, or users, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete guidance: use it as a first call to understand whose data will be returned when no user_id is provided. It does not explicitly state when not to use it, but the context of a self-identity lookup is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
8 tool updates
v0.2.2- First observed
fortytimer_get_overtime_balance - First observed
fortytimer_get_vacation_balance - First observed
fortytimer_list_project_times - First observed
fortytimer_list_projects - First observed
fortytimer_list_requests - First observed
fortytimer_list_time_entries - First observed
fortytimer_list_users - First observed
fortytimer_me
TDQS
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server providing attendance data queries via the CloudTime API.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
- mcp-serverOAuthio.klokin
MCP server exposing klokin time-tracking operations (employees, time entries, stores) to AI clients.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA TypeScript-based MCP server that integrates with the Clockodo time tracking API, enabling access to users, time entries, and projects.-
- 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.1MIT
- AlicenseAqualityBmaintenanceMCP server for Kimai time-tracking that provides read access to the full API and guarded write tools for timesheets, with explicit authorization and backups.28197AGPL 3.0
- AlicenseAqualityBmaintenanceAn unofficial MCP server that exposes the Timetastic API to enable querying and managing absence & leave data.39MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/fortytimer/fortytimer-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server