kimai-timelog-mcp
Click 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., "@kimai-timelog-mcpLog 9:00 to 12:30 today on Portal Revamp, fixing login redirect"
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.
kimai-timelog-mcp
An MCP server that lets Claude (or any MCP-capable LLM client) read and write your Kimai timesheets. You say "log 9 to 12:30 on the portal revamp, fixing the login redirect" and the entry appears in Kimai.
Every request is made as you — it uses your personal Kimai API token, so it can only see and change what your Kimai account is allowed to.
1. Get a Kimai API token
Open Kimai → click your name (top right) → My profile → API access tab.
Create a token, give it a name like
claude, and copy it immediately — Kimai shows it exactly once.
Related MCP server: Kimai MCP Server
2. Install
You need uv (recommended) or Python 3.10+.
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"Then either:
A. From a shared folder / git repo (what colleagues will do)
uvx --from git+https://github.com/Alpha101Code/kimai-timelog-mcp kimai-mcp --checkB. From a local copy
cd /path/to/kimai-timelog-mcp
uv run kimai-mcp --check--check verifies the URL and token and prints your visible projects. Set the two
environment variables first:
export KIMAI_URL=https://timesheet-sd.maccs.mu
export KIMAI_API_TOKEN=your-token-here3. Wire it into your client
Claude Desktop
Settings → Developer → Edit Config, then add:
{
"mcpServers": {
"kimai": {
"command": "uvx",
"args": ["--from", "git+https://github.com/Alpha101Code/kimai-timelog-mcp", "kimai-mcp"],
"env": {
"KIMAI_URL": "https://timesheet-sd.maccs.mu",
"KIMAI_API_TOKEN": "your-token-here"
}
}
}
}Restart Claude Desktop. On Windows use uvx.exe if uvx is not found on PATH.
Claude Code
claude mcp add kimai \
--env KIMAI_URL=https://timesheet-sd.maccs.mu \
--env KIMAI_API_TOKEN=your-token-here \
-- uvx --from git+https://github.com/Alpha101Code/kimai-timelog-mcp kimai-mcpCursor / Windsurf / Cline / Zed
Same JSON shape as Claude Desktop, in that client's MCP config file
(~/.cursor/mcp.json for Cursor).
Anything else
It is a standard stdio MCP server. Command: kimai-mcp. Config: the two
environment variables above.
Tools
Tool | What it does |
| Who the token belongs to, their timezone, today's date |
| Projects you can book against, searchable by name |
| Activities valid for a project (project-specific + global) |
| Customers you can see |
| Tag names configured in Kimai |
| Your entries for a date range, with totals |
| Your most recent project/activity/description combos |
| Hours totalled by project, activity or day |
| Write a finished entry |
| Start a running entry |
| What is currently running |
| Stop the running entry |
| Clone an old entry as a new running one |
| Change an existing entry |
| Delete an entry (requires an explicit confirm) |
Design choices worth knowing
Names, not IDs.
project: "Portal Revamp"works; so does a unique partial like"portal". Ambiguous names come back as an error listing the candidates, which the model can put to you as a question.Loose time input.
date:today,yesterday,monday,3 days ago,2026-08-24,25/08/2026.start/end:09:00,9am,5.30pm,0930.duration:1h30m,90m,1.5h,1:30.Your timezone. Kimai reports the token owner's timezone; everything is resolved against that, not the server's clock.
No invented hours.
log_timeneeds start+end, start+duration, or duration — if none is given it returns an error telling the model to ask you rather than guessing.Delete is two-step. The first call returns what would be deleted; only a second call with
confirm: trueremoves it.
Example prompts
Log 9:00–12:30 today on Portal Revamp, development, "fixed the login redirect".
What did I log this week? Break it down by project.
Same as yesterday afternoon, but for today.
Start a timer on Internal Tools / Admin.
I forgot Monday — 4 hours on Mobile App, release testing.
Move entry 512 to start at 10:15 instead.Rolling it out to colleagues
Everyone needs three things: uv installed, their own Kimai token, and the config
block above. Nothing is shared between users — no server to run, no central token.
If you later want a single hosted server instead of a per-machine install, the tool
layer stays as-is; only the transport in __main__.py changes.
Security
The token is a password equivalent. It lives in your client's config file on your own machine — do not commit it, do not paste it into a shared doc.
Give tokens an expiry date in Kimai and rotate them.
The server talks only to
KIMAI_URL. It has no other network access, no filesystem access, and no shell.If your Kimai is internal-only, this must run on a machine that can reach it (VPN or office network).
Development
src/kimai_mcp/
client.py Kimai REST client — auth, errors, name→id resolution, caching
timeutil.py parsing for human dates, times and durations
server.py the MCP tools
__main__.py stdio entrypoint + --check
tests/
mock_kimai.py a stand-in Kimai instance
test_e2e.py drives the real server over stdio against itRun the suite (no Kimai instance needed):
uv run --with mcp --with httpx python tests/test_e2e.pyCompatibility
Works with both major versions of the Python MCP SDK: mcp 1.x (FastMCP) and
2.x (MCPServer). The server picks the right one at import time, and anticipated
failures subclass the SDK's ToolError so the message reaches the model instead of
a generic "error executing tool". The suite is run against both in CI.
The distribution is named kimai-timelog-mcp (matching the repo); the command it
installs is kimai-mcp.
Built against the Kimai 2 REST API (/api, Authorization: Bearer <token>).
Endpoint reference: https://www.kimai.org/documentation/rest-api.html and your own
instance's /api/doc.
Available Tools
15 toolsactive_timersB
Any currently running time entries for this user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full behavioral burden. It conveys that only active timers scoped to the current user are returned, which implies a read-only listing operation, but it never explicitly states that there are no side effects or what happens when no timers are active.
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 short phrase with no wasted words, and it front-loads the key concept of currently running entries. It could be stronger as a full sentence with an explicit verb like 'Returns', but it is appropriately sized for a zero-parameter listing tool.
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 tool with no parameters and an output schema, the description provides enough information to understand the tool's purpose and scope: active timers belonging to the current user. It does not discuss alternatives or edge cases, but those are less critical given the tool's simplicity.
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 is empty and schema description coverage is 100%, so there are no parameters to document. The 'for this user' qualifier adds implicit auth-scoping context beyond the schema, which is useful, and the 0-parameter baseline applies.
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 'currently running time entries' for the current user, which maps directly to the tool name and distinguishes it from historical entries. It uses a noun phrase rather than a verb+resource form, and it doesn't explicitly name sibling tools, so it is clear but not maximally directive.
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?
No guidance is provided about when to use this tool versus siblings like recent_entries, start_timer, stop_timer, or restart_timer. The phrase 'currently running' implies a listing use case, but there is no explicit when-to-use or when-not-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_timesheetA
Permanently delete a time entry.
Args: timesheet_id: the entry to delete. confirm: must be true. Show the user what will be deleted first.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| timesheet_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of safety disclosure and does it well: 'Permanently delete' signals irreversibility, and 'confirm must be true. Show the user what will be deleted first' adds an important user-consent safety step. It could add more details about permissions or cascading effects, but the core destructive behavior is clearly disclosed.
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 well-structured: a one-sentence action statement followed by two argument bullets. Every sentence adds necessary meaning, the destructive intent 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?
For a simple two-parameter deletion tool with an existing output schema, the description covers purpose, destructive impact, required confirmation workflow, and both parameters. The confirm/schema mismatch and the lack of alternative-tool routing leave a minor completeness gap, but the description is otherwise sufficient.
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 0%, so the description must compensate; it explains timesheet_id as the entry to delete and confirm as a mandatory-to-be-true consent flag. However, the description's 'must be true' conflicts with the schema's non-required status and default false, creating ambiguity about whether confirm must always be explicitly set.
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 opens with a specific destructive verb and resource: 'Permanently delete a time entry.' This clearly identifies what the tool does and inherently distinguishes it from siblings like update_timesheet or list_timesheets, since deletion is a distinct operation.
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?
There is no explicit 'when to use' guidance or reference to alternatives; the intended context is only implied by the verb 'delete.' The confirm instruction is procedural invocation guidance, not a usage-rule comparing this tool to update_timesheet or list_timesheets, so it lands at the 'implied usage' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_activitiesA
List activities, optionally the ones valid for a given project.
Args: project: project name or id. Omit to list every activity. search: optional substring filter on the activity name.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It discloses filtering behavior via 'project' and 'search', but does not mention auth requirements, ordering, pagination, or side effects—though 'List' implies a read operation.
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, with the core action in the first sentence and parameter details in a clean list. Every sentence earns its place and there is no fluff.
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?
Given an output schema exists and both parameters are fully described, the description is largely complete. Minor ambiguity remains around what 'valid for a given project' means and no usage guidance is given relative to siblings, but nothing critical 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?
The description adds meaningful detail beyond the schema's bare type/default information: 'project: project name or id. Omit to list every activity' and 'search: optional substring filter on the activity name.' This fully compensates for the 0% schema coverage.
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 clear action and resource: 'List activities' with an optional project filter. It does not explicitly distinguish itself from sibling list_* tools beyond the resource name, so it stops short of a 5.
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 parameter guidance is clear, especially 'Omit to list every activity' and 'optional substring filter on the activity name.' However, it offers no explicit when-to-use or when-not-to-use guidance relative to sibling tools like list_projects or list_timesheets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customersA
List customers visible to this user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that results are scoped by user visibility, which is useful behavioral context. However, it omits any mention of pagination, ordering, or whether it is a read-only operation. For a simple list tool, these gaps are acceptable but prevent a higher score.
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, front-loaded sentence with no filler. It states the action and the visibility constraint efficiently, perfectly sized for the tool's simplicity.
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?
Given the tool has no parameters and an output schema (which handles return structure), the description provides sufficient context: what it returns and for whom. It lacks any note on ordering or filtering, but for a simple list operation this is acceptable. A 4 is appropriate given the presence of an output schema and the straightforward nature of the 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 0 parameters, and schema coverage is 100% (trivially). Per the guidelines, the baseline is 4 for 0-parameter tools. The description adds no parameter-specific meaning because there are none to describe.
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 verb ('List') and resource ('customers'), and adds the scoping 'visible to this user,' which clearly distinguishes it from sibling tools like list_projects or list_activities. It is unambiguous and not a tautology.
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 usage (when you need a list of customers) but provides no explicit when-to-use vs. alternative guidance. Sibling tools are obviously different resources, so the context is understood by name, but there is no explicit mention of exclusions or alternatives, as required for a higher score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List the projects this user can book time against.
Args: search: optional substring to filter project or customer names. customer: optional customer name or id to scope the list.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | ||
| customer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It does add useful context by stating results are scoped to projects the user can book time against, but it omits details about ordering, pagination, case sensitivity, or whether inactive/archived projects are included.
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: a clear one-sentence purpose followed by a terse Args block. No words are wasted, and all provided information is necessary for correct invocation.
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?
The tool is simple with two optional parameters and an output schema, so the description does not need to explain return values. It covers the core purpose and both argument semantics adequately; the absence of pagination/ordering notes is a minor gap but not critical for this list operation.
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 0%, and the description fully compensates by documenting both parameters: 'search' as an optional substring filter over project or customer names, and 'customer' as an optional name-or-id scope. This adds meaning that the bare schema entirely lacks.
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 verb ('List') and resource ('projects'), with the meaningful qualifier 'this user can book time against' that clarifies the permission scope. It is distinct from sibling tools like list_customers or list_timesheets, though it does not explicitly name them for contrast.
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 purpose sentence implies the tool is used to discover bookable projects before logging time, but no explicit when-to-use guidance or alternative routing is provided. There are no exclusions mentioned, leaving the agent to infer the appropriate context from the phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsA
Tag names configured in this Kimai instance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states what is returned ('tag names configured in this Kimai instance') but does not disclose whether the operation is read-only, whether ordering is defined, whether hidden or archived tags are included, or any other behavioral traits. The 'list' verb suggests non-mutating behavior, but the description itself does not confirm it.
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 sentence with no filler. It front-loads the resource and the expected output, and every word contributes meaning. For a simple tool, this is appropriately concise.
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?
The tool has no parameters and an output schema is present, so the description's job is mainly to state what resource is being accessed. 'Tag names configured in this Kimai instance' is sufficient for an agent to invoke the tool correctly. It lacks minor contextual details like whether the result is sorted or includes all tag metadata, but these are not essential for a zero-parameter list operation.
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 zero parameters and schema description coverage is 100% (vacuously). Per the baseline rule for zero-parameter tools, the description does not need to explain parameters. It adds no parameter semantics, but none are needed.
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 a clear resource ('tags') and a clear output ('tag names'), and the tool name provides the verb 'list'. While it doesn't explicitly differentiate from sibling list_* tools, the tag resource is unique among them, so there is no ambiguity about the target resource.
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 that the tool is used when an agent needs the tag names configured in the Kimai instance, but it does not explicitly state when to use this tool versus alternatives or provide any exclusion criteria. For a zero-parameter list tool, this implied usage is adequate but not exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_timesheetsA
The user's own time entries for a date range, newest first.
Defaults to the last 7 days. Use this before writing an entry to avoid duplicates, and to answer "what did I log this week".
Args: from_date: 'today', 'monday', '2026-08-24', '3 days ago'. to_date: same formats; defaults to today. project: optional project name or id to filter by. search: optional free-text search over descriptions. limit: maximum entries to return (max 500).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No | ||
| project | No | ||
| to_date | No | ||
| from_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses meaningful behavior: it scopes results to the user's own entries, orders newest first, and defaults to the last 7 days. It does not disclose potential rate limits or timezone behavior, but the core behavioral traits an agent needs are present.
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 tight and well-structured: a one-line core statement, a usage sentence, then an Args block. Every section adds value, and the most important 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?
The tool has no required parameters and an output schema exists, so return-value details are already covered elsewhere. The description covers all parameters, defaults, ordering, and usage context, making it complete for an agent to select and invoke correctly.
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 0%, so the description carries the full burden for all five parameters. It explains date formats with concrete examples, defaults for from_date/to_date, the meaning of project and search, and the limit maximum. This fully compensates for the empty 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 clearly states the tool lists the user's own time entries for a date range, newest first, with a specific resource and verb. It is distinct from list_projects and list_activities, though it does not explicitly differentiate itself from the sibling recent_entries, which could overlap in purpose.
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 clear usage contexts: use before writing an entry to avoid duplicates, and to answer 'what did I log this week'. It does not mention when not to use it or name an alternative such as recent_entries, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_timeA
Write a finished time entry to Kimai.
Give either start+end, or start+duration, or duration alone (which books the period ending now). Do not guess missing times — ask the user instead.
Args: project: project name or id. activity: activity name or id, must be valid for the project. description: what was worked on. Strongly recommended. date: 'today', 'yesterday', 'monday', '2026-08-24'. start: '09:00', '9am', '14.30'. end: same formats as start. duration: '1h30m', '90m', '1.5h', '1:30'. tags: optional list of Kimai tag names. billable: optional override of the project default.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| date | No | today | |
| tags | No | ||
| start | No | ||
| project | Yes | ||
| activity | Yes | ||
| billable | No | ||
| duration | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the key behavior: duration alone books the period ending now, and missing times must be requested from the user rather than approximated. It does not discuss idempotency or failure effects, but the write effect is plainly labeled and the output schema is present.
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 introductory sentences plus a compact Args block; every line adds information about valid values or behavior, and the headline 'write a finished time entry' 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 9-parameter mutation tool with no annotations, the definition explains all parameter formats, the accepted time-entry shapes, and the no-guessing rule. The presence of an output schema relieves it of needing to document return values, so nothing critical 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?
Input schema has no parameter descriptions (0% coverage), and the description compensates fully: each Arg line gives meaning plus concrete formats (e.g. start '09:00', '9am', '14.30'; duration '1h30m', '90m', '1.5h', '1:30'), and clarifies that activity must be valid for the project.
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?
Verb 'Write' plus object 'a finished time entry to Kimai' names the mutation and the external system. The phrase 'finished time entry' distinguishes it from start_timer/active_timers/stop_timer among siblings.
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?
States the three valid time-input combinations and instructs to ask the user rather than guess missing times, defining when it is safe to call. It does not explicitly name alternatives such as start_timer, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent_entriesA
The project/activity/description combinations this user booked most recently.
Best first call for "log the usual" or "same as yesterday" requests.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It conveys that the tool reads the user's most recent bookings but does not explicitly state that it is non-mutating, nor does it describe ordering or result limits. For a simple query tool with an output schema, this is adequate but not thorough.
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 short sentences with no filler. The first sentence states the core function and the second adds high-value usage guidance. Every word earns its place.
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 one-parameter read tool with an output schema, the description provides sufficient context: what is returned, whose data is returned, and when to call it. Minor gaps remain around explicit ordering and limit semantics, but they are not critical.
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 schema has no property descriptions, and the tool description does not mention the `limit` parameter at all. The name and default value provide some hint, but with 0% schema coverage the description should compensate, and it does not.
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 states that the tool returns the most recent project/activity/description combinations for the current user. This is a specific resource and action, and it is conceptually distinct from sibling tools like log_time or list_timesheets, though it does not name them.
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 explicitly positions this as the 'best first call' for 'log the usual' or 'same as yesterday' requests, giving clear contextual triggers. It does not, however, mention alternatives or situations where another tool would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_timerA
Start a new running entry that copies an existing one's project/activity.
| Name | Required | Description | Default |
|---|---|---|---|
| timesheet_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It does disclose the core behaviors: a new running entry is started, and only project/activity are copied from an existing entry. It does not mention potential side effects, such as whether an active timer must be stopped or gets replaced, which leaves some behavioral uncertainty.
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, front-loaded sentence with no wasted words. Every clause contributes meaning: 'Start a new running entry' and 'copies an existing one's project/activity' together fully define the operation.
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?
The tool is simple, with one parameter and an output schema, so the description enables basic invocation. However, with no annotations it omits when to use this versus alternatives and fails to clarify behavior around currently active timers. This makes it minimally complete but not fully self-sufficient.
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 0%, so the description must compensate for the single timesheet_id parameter. The phrase 'existing one's project/activity' gives meaningful context that the ID identifies the source entry, but the connection is implicit rather than explicit. This is adequate but not fully compensating for the lack of parameter documentation.
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 action ('Start a new running entry') and a distinguishing behavior ('copies an existing one's project/activity'). This makes it clear how it differs from start_timer or log_time. However, 'existing one' is not explicitly tied to the timesheet_id parameter, which leaves a small ambiguity.
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 the tool is for reusing a previous entry's project/activity rather than starting from scratch, but it does not explicitly say when to prefer this over start_timer or log_time. The sibling list provides context, but the description itself offers no direct guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_timerB
Start a running timer now (or at a given start time today).
Args: project: project name or id. activity: activity name or id. description: what is being worked on. start: optional start time such as '09:00'; defaults to now.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | ||
| project | Yes | ||
| activity | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden of behavioral disclosure. It states that the timer starts immediately or at a given time today, but it doesn't disclose what happens if a timer is already active or other side effects.
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 action is front-loaded and the parameter list is compact, with each line adding distinct information. There is no filler or redundant explanation.
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?
It covers invocation basics and parameter semantics, and an output schema exists to describe return values. However, it doesn't address interaction with an already-running timer or how it relates to sibling timer tools, which is relevant for a state-changing 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?
The schema has no per-parameter descriptions, so the Args list supplies the needed meaning for all four parameters. It clarifies that project/activity accept names or IDs, gives a format example for start ('09:00'), and notes the default behavior.
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 uses a specific verb-resource pair ('Start a running timer') and clarifies the optional start-time behavior. It doesn't explicitly distinguish from sibling tools like log_time or restart_timer, but the action is 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?
No guidance on when to prefer this over log_time, restart_timer, or active_timers. The description only defines the operation, not the selection context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_timerA
Stop a running timer.
Args: timesheet_id: which entry to stop. Omit to stop the only running one.
| Name | Required | Description | Default |
|---|---|---|---|
| timesheet_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the primary action, but it does not explain what happens if no timer is running, if multiple timers are running and no timesheet_id is supplied, or whether stopping a timer is reversible. These edge cases are not addressed, leaving a moderate transparency gap.
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 extremely concise: one clear purpose sentence followed by a minimal parameter note. There is no filler, and the most relevant usage rule is front-loaded. Every sentence earns its place.
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 tool with a single optional parameter, the description covers the main call path and the omit-when-only-one rule. The output schema exists, so return value documentation is likely covered elsewhere. The only notable gap is the missing rule for the multiple-running-timers case, which could cause an ambiguous or invalid call.
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 schema only defines timesheet_id as an optional integer, but the description adds meaning: it selects which entry to stop and may be omitted when only one timer is running. This is meaningful semantic guidance for the single parameter. It could be improved by pointing to where to find the timesheet_id, such as active_timers or list_timesheets.
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 states the operation as 'Stop a running timer,' which is a specific verb and resource. While the phrasing closely mirrors the tool name, the addition of 'running' and the parameter note makes the purpose concrete. It is naturally distinct from siblings like start_timer and restart_timer.
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 a clear trigger for use: a running timer needs to be stopped. It adds a conditional usage rule for the optional parameter ('Omit to stop the only running one'), which guides the agent on how to decide whether to pass timesheet_id. It does not explicitly mention alternatives, but the unique operation makes the choice obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_timeA
Total the user's logged hours over a range, grouped for reporting.
Args: from_date: defaults to 7 days ago. to_date: defaults to today. group_by: 'project', 'activity' or 'day'.
| Name | Required | Description | Default |
|---|---|---|---|
| to_date | No | ||
| group_by | No | project | |
| from_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavior. It clearly describes a read-only aggregation operation and the defaults for date bounds, which is useful, but it does not mention date format expectations, inclusivity of range, or what happens when no entries exist.
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, information-dense, and front-loaded with the core behavior before the args list. Every sentence contributes value, with no filler or repetition of the schema.
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 tool with three optional parameters and an output schema, the description covers the operation, grouping options, and date defaults, making the tool callable. The main gap is the absence of a date format convention and explicit range inclusivity, which could cause incorrect calls despite the defaults being clear.
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 0%, and the description compensates well by explaining all three parameters: from_date defaults to 7 days ago, to_date defaults to today, and group_by has three explicit allowed values. It does not specify the expected date string format, but the added semantics substantially exceed the bare 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 uses a specific verb ('Total') and resource ('the user's logged hours') plus grouping behavior, making the aggregation purpose unmistakable. It clearly differentiates from sibling tools like list_timesheets and recent_entries, which list raw entries rather than summarize them.
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 phrase 'grouped for reporting' implies this is for summaries rather than raw entry retrieval, but it does not explicitly state when to choose this tool over list_timesheets or recent_entries. There are no exclusions or named alternatives, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_timesheetA
Change an existing time entry. Only the fields you pass are touched.
Args: timesheet_id: the entry to change (from list_timesheets). date/start/end/duration: same formats as log_time. Passing any of these recomputes the entry's begin and end.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| date | No | ||
| tags | No | ||
| start | No | ||
| project | No | ||
| activity | No | ||
| billable | No | ||
| duration | No | ||
| description | No | ||
| timesheet_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry behavioral disclosure. It does so by stating that only passed fields are modified and that passing date/start/end/duration recomputes begin and end. It doesn't mention permission requirements or irreversibility, but the partial-update semantics and recomputation are the most salient behaviors.
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 brief sentences plus a tight args list; every sentence adds useful behavior or sourcing information, and the key partial-update rule 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?
The tool has 10 parameters and no annotations, so the description must carry more weight. It covers the update semantics and timesheet ID sourcing, and an output schema exists for return values, but several optional fields are left semantically unresolved. Adequate but not 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 schema has 0% description coverage, and the description only documents timesheet_id and date/start/end/duration, pointing to log_time for formats. Tags, project, activity, billable, and description receive no semantic guidance, so an agent won't know valid values or ID sources for those fields, particularly project/activity.
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 opening 'Change an existing time entry' clearly identifies the verb and resource, and 'existing' plus 'from list_timesheets' distinguishes updating from logging a new entry. It also immediately communicates the partial-update behavior with 'Only the fields you pass are touched.'
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 says to obtain timesheet_id from list_timesheets and implies updating is for entries that already exist, which separates it from log_time and delete_timesheet. It doesn't explicitly state when not to use the tool or name the alternative creation/deletion tools, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiA
Who the Kimai API token belongs to, plus their timezone and today's date.
Call this once at the start of a time-logging conversation so that relative dates ("yesterday") and times are anchored correctly.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It transparently describes the returned information (token owner, timezone, today's date) and implies a safe, read-only identity check. It does not explicitly state 'does not modify data,' but the described behavior strongly conveys that.
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 two purposeful sentences: the first states the output, the second states when to call it. Every element earns its place, and the key behavioral info 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 zero-parameter identity/context tool with an output schema present, this is complete. It covers what the tool returns and when the agent should use it, and the output schema handles return-value structure.
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 the schema fully covers parameter semantics. The description sensibly adds no unnecessary parameter detail, and the phrase 'the Kimai API token' makes it clear the invocation relies on the already-authenticated token.
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 exactly what the tool returns: the identity behind the Kimai API token, the user's timezone, and today's date. It is clearly distinct from the sibling time-tracking tools, which list or mutate timesheet data.
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 explicitly says to call this once at the start of a time-logging conversation so relative dates like 'yesterday' are anchored correctly. This gives the agent a clear, actionable trigger for when to invoke it.
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.
15 tool updates
v0.1.0- First observed
active_timers - First observed
delete_timesheet - First observed
list_activities - First observed
list_customers - First observed
list_projects - First observed
list_tags - First observed
list_timesheets - First observed
log_time - First observed
recent_entries - First observed
restart_timer - First observed
start_timer - First observed
stop_timer - First observed
summarize_time - First observed
update_timesheet - First observed
whoami
TDQS
Each tool targets a distinct operation: reference data listing, timesheet queries, entry creation, timer control, editing, deletion, and reporting. Even similar tools like list_timesheets and recent_entries are clearly differentiated by what they return.
The set mostly follows a clear list_ for read-only collections and verb_noun for actions, such as log_time and stop_timer. Minor deviations like active_timers, recent_entries, and whoami break the pattern slightly but remain understandable.
At 15 tools, the server covers discovery, logging, timer lifecycle, modifications, deletion, and reporting without feeling bloated. Each tool contributes a meaningful piece of the time-logging workflow.
The toolset supports a full time-logging lifecycle: lookup reference data, check existing entries, log time, start and stop timers, restart entries, update or delete entries, and summarize hours. It also includes helpful context tools like whoami and recent_entries; admin CRUD for projects or customers is outside the apparent purpose.
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-serverOAuthio.klokin
MCP server exposing klokin time-tracking operations (employees, time entries, stores) to AI clients.
Read time entries, projects, clients, tasks and invoices; log and update tracked time.
An MCP server that provides access to Testiny projects, test cases and test runs
Manage your KeepMySubs subscriptions, spend, renewals, and bills from any MCP client.
Related MCP Servers
AlicenseBqualityBmaintenanceEnables natural language control of the Timesheet API for timer management, task tracking, and project management through MCP tools.50741MIT- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with Kimai time-tracking API for managing timesheets, projects, activities, customers, users, and more.33MIT
- AlicenseCqualityCmaintenanceEnables interacting with Clockify time-tracking data through natural language, providing tools to manage workspaces, projects, time entries, reports, and more via the MCP protocol.481MIT
- AlicenseNot gradedqualityDmaintenanceThis MCP server enables AI assistants to interact with the Timing application for managing time tracking and tasks, including project and time entry operations.7MIT
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/Alpha101Code/kimai-timelog-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server