ATimeLogger MCP Server
Summary: It's an MCP server that gives Claude read/write access to a user's ATimeLogger time-tracking account — running timers, retroactive logging, and reports.
See what's running —
get_current_statusshows running/paused activities with elapsed time;list_activity_typesreturns the user's activity types as a group tree (names for talking to the user, ids for exact targeting).Control timers —
start_activity(by type name, fuzzy matched, or id) andstop_activity(name optional if only one activity is active), both with optional backdating via a wall-clockattime orstarted/stopped_minutes_ago.Pause and resume —
pause_resume_activitywithaction: pause|resume.Log past time —
log_intervalretroactively creates a completed entry fromfrom/towall-clock times, optionally with a comment and tags.Reports —
time_reportgives aggregated per-type totals with per-DAY/WEEK/MONTH buckets, for named periods (today,this_week,last_month, …) or explicitfrom/to, filtered by type names/ids or tags.History —
list_intervalsreturns raw entries grouped by day, paged (page,sizeup to 50 days), capped at a 100-day range, with the same period/type/tag filters.Timezone-aware — any tool that shows or accepts times takes an optional IANA
timezone(default: the user's ATimeLogger timezone).Both local and remote — usable over stdio from Claude Desktop/Code, or served over Streamable HTTP (with an
MCP_AUTH_TOKEN) for remote MCP clients like Notion custom agents.
Caveat: the supplied schema exposes only these eight tools — the README's update_activity (editing comments/tags) and app_help are not present, and there is no way to edit interval times or delete entries.
Allows Notion custom agents to interact with ATimeLogger through a remote MCP endpoint.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ATimeLogger MCP ServerShow my current activity status."
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.
ATimeLogger MCP Server
A standalone MCP (Model Context Protocol) server that exposes the ATimeLogger REST API to Claude Desktop / Claude Code over stdio. Scope: activities (start/stop/pause/log/update), reports/history, activity types, and official app documentation.
Setup
Requires Node 20+.
Generate a Personal Access Token in the ATimeLogger web app: Settings → API Tokens → Generate token. The value (starting with
atl_pat_) is shown only once — copy it right away. You can revoke the token from the same page at any time.Build the server and register it:
npm install
npm run build
npm run setup # paste the token, verifies it, prints the registration commandThe setup script prints ready-to-use registration snippets for both clients:
Claude Code — a one-liner:
claude mcp add atimelogger \
-e ATL_TOKEN=atl_pat_... \
-- node /absolute/path/to/atimelogger-mcp/dist/index.jsClaude Desktop — a JSON block to merge into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows), then restart Claude Desktop:
{
"mcpServers": {
"atimelogger": {
"command": "node",
"args": ["/absolute/path/to/atimelogger-mcp/dist/index.js"],
"env": {
"ATL_TOKEN": "atl_pat_..."
}
}
}
}The server targets production (https://app.atimelogger.pro) by default — no URL configuration needed. To work against a different backend, set ATL_BASE_URL explicitly: pass --url <base-url> to the setup script (or set the env var), and it will include ATL_BASE_URL in the printed snippets. Generate the token in the web UI of the same server you point the MCP at.
Troubleshooting: a 401 from any tool means the token is invalid, expired, or was revoked — generate a new one in Settings → API Tokens and update ATL_TOKEN in the MCP config.
Related MCP server: jira-worklog-mcp
Remote server (for Notion custom agents & other remote-MCP clients)
The same tools can be served over the network via the Streamable HTTP MCP transport, so a hosted client such as a Notion custom agent can connect by URL instead of spawning a local process.
npm install
npm run build
ATL_TOKEN=atl_pat_... MCP_AUTH_TOKEN=some-long-secret npm start
# → Streamable HTTP MCP endpoint on http://0.0.0.0:3000/mcp (health: /health)Environment variables (see .env.example):
Var | Required | Purpose |
| yes | ATimeLogger Personal Access Token the server acts as |
| recommended | shared secret required to call |
| no | non-production backend (defaults to |
| no | listen port (default |
| no | endpoint path (default |
One deployment = one ATimeLogger account (the server acts as the single
ATL_TOKEN). Because the URL is internet-facing, setMCP_AUTH_TOKENand serve it over HTTPS.
Getting a public URL
One-click (Render) — after this repo is on your GitHub, click the button (or replace the URL with your fork):
Render reads the bundled render.yaml, then prompts you for the two secrets ATL_TOKEN and MCP_AUTH_TOKEN. When it finishes, your endpoint is https://<service>.onrender.com/mcp.
Other options:
Docker / VPS —
docker compose up -d --build(fill.envfirst), then put HTTPS in front (Caddy/Nginx/Cloudflare Tunnel).Any Node 20+ host works:
npm ci && npm run build && npm start.
Detailed, step-by-step deploy + config (Chinese): DEPLOY.zh-CN.md.
Connect it to Notion
Open your Notion custom agent → Tools and access → add an MCP server, paste the …/mcp URL, and provide the MCP_AUTH_TOKEN as the bearer/access token. Full step-by-step (Chinese): NOTION_MCP_GUIDE.zh-CN.md. Design/rationale: docs/REMOTE_MCP_DESIGN.zh-CN.md.
Tools
Tool | Purpose |
| Running/paused activities with elapsed time |
| Activity type names as a group tree (source of names for other tools) |
| Start by type name; optional backdating ( |
| Stop the active activity (name optional if only one is active); same backdating options |
| Pause or resume |
| Retroactively log a completed entry (wall-clock times, optional comment/tags) |
| Update the comment and/or tags of an existing entry (running or past) without changing its tracked time; get |
| Aggregated per-type statistics for a period ( |
| Raw history grouped by day, paged, max 100-day range; entries carry the |
| Official app documentation (atimelogger.pro/docs) — the assistant looks up how app features work (goals, widgets, sync, export, …) instead of guessing |
Tools accept human-readable type names (fuzzy matched); internal ids also flow through tool outputs and parameters for exact targeting, but are never shown to the user. Durations are returned as "2h 15m" strings; times are shown in the user's ATimeLogger timezone unless a timezone parameter is given.
Usage examples
Things you can say to your assistant once the server is registered:
Timers
"Start tracking work" · "Stop the timer" · "Pause reading, I'll be back in 10" · "What am I tracking right now?"
Backdating — forgot to press start or stop:
"Start Development — I actually began at 11:30" · "Stop work, I finished 20 minutes ago" · "I've been in a meeting since 14:00, track it"
Logging past activities
"Log 2 hours of Reading yesterday from 9 to 11pm" · "Add a gym session for last Saturday morning, 90 minutes, tag it 'legs'" · "I slept from 23:30 to 7:15, log it"
Annotating existing entries
"Add a comment to the timer that's running: pair-programming with Lisa" · "Tag yesterday's gym entry 'legs'"
Reports & history
"Where did my week go?" · "How much did I work in June, broken down by week?" · "Compare my sleep this month vs last month" · "Show everything I tracked today" · "Which day last week had the most Development time?"
Combinations — the assistant chains tools on its own:
"Stop whatever is running and start Work" · "Continue from where the last entry ended — start Development from that time" · "Fill yesterday's gap between lunch and the meeting with Reading"
Activity names are fuzzy-matched against your own type list, so "start dev" finds "Development"; the assistant asks when a name is ambiguous.
Limitations
start_activitycannot attach a comment (the underlying start endpoint takes only a type and time); add one afterwards withupdate_activity, or uselog_intervalfor retroactive entries with comments/tags.Only comments and tags of existing entries can be edited (
update_activity); interval times cannot be changed and entries cannot be deleted — use the ATimeLogger app for that (the assistant can explain how viaapp_help).History requests are capped at 100 days by the backend.
Available Tools
8 toolsget_current_statusA
Show currently running or paused activities with elapsed time.
| Name | Required | Description | Default |
|---|---|---|---|
| timezone | No | IANA timezone for displayed times (default: user's timezone) |
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 does add useful scoping (only running or paused activities) and the notion of elapsed time, but it does not mention whether the operation is read-only, what happens if no activities are active, or how elapsed time is calculated. This is adequate for a simple getter but lacks deeper behavioral detail.
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 concise sentence that front-loads the key action and scope. Every word contributes meaning; there is no fluff or redundancy.
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 (one optional parameter, no output schema), so the description doesn't need to be exhaustive. However, since there is no output schema, an agent might benefit from knowing what fields are returned (e.g., activity name, elapsed time). The description gives a high-level idea but leaves these details implicit. Overall, it is minimally sufficient for 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 schema provides 100% description coverage for the single optional 'timezone' parameter, meeting the schema itself. The description does not mention the parameter, but the schema already explains it fully. Baseline of 3 is appropriate since the description adds no extra semantic value beyond 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 clearly states the action ('Show'), the resource ('currently running or paused activities'), and the additional detail ('with elapsed time'). This distinguishes it from siblings like list_activity_types (which lists activity types) and list_intervals (which lists historical intervals), so an agent can easily identify when to use this tool.
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 context: it is for viewing live activity state, not historical reports. It does not explicitly name alternatives or exclusions, but the scope is unambiguous enough for an agent to infer when to use it. The lack of explicit 'when not to use' guidance drops it from 5 to 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_activity_typesA
List the user's activity types as a tree (groups contain children): names plus internal ids. Use the names when talking to the user; use the ids for exact targeting in other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| include_archived | No | Include archived types (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the tree structure and the semantic distinction between names and ids. It implies a read-only operation via 'List' and is transparent about what is returned, though it could mention default filtering behavior or 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?
Two concise sentences with no fluff. The key action and result shape are front-loaded, and the usage guidance earns its place by explaining the name/id distinction.
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 list tool with one optional parameter and no output schema, the description provides sufficient context: what is listed, the tree structure, and how to use the returned data. The missing archived default is documented in the schema.
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 covers the only parameter include_archived with a description, so schema coverage is 100%. The description itself adds no parameter-specific meaning, but the baseline is 3 per rubric given high 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 specific verb ('List') and resource ('the user's activity types'), and clarifies the output format ('as a tree (groups contain children): names plus internal ids'). This clearly distinguishes it from sibling tools like list_intervals.
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 guidance: 'Use the names when talking to the user; use the ids for exact targeting in other tools.' This helps the agent decide how to apply the output, though it does not explicitly contrast with alternatives since none directly overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_intervalsA
List raw time entries (intervals) grouped by day for a date range (max 100 days). Paged by day — use page for older days.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date yyyy-MM-dd, inclusive | |
| from | No | Start date yyyy-MM-dd (use with `to`) | |
| page | No | Page number, 0-based (default 0) | |
| size | No | Days per page (default 20, max 50) | |
| tags | No | Filter to these tags | |
| period | No | Named period; alternative to explicit from/to | |
| timezone | No | IANA timezone (default: user's timezone) | |
| type_ids | No | Filter to these exact activity type ids (internal — never show ids to the user) | |
| type_names | No | Filter to these activity type names (groups allowed) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden. It discloses a 100-day limit, day-grouped output, and day-based pagination ('use page for older days'), which are key operational behaviors. It does not mention rate limits or authentication, but for a read-only list tool these are the most relevant constraints.
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, no filler, and the main purpose is front-loaded. Each sentence contributes useful information without redundancy.
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 9 parameters, no annotations, and no output schema. The description covers date range and pagination but does not mention alternative date formats (period) or available filters (tags, type_ids, type_names). While the schema documents these, the description is not fully complete given the tool's complexity.
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 adds value by explaining that `page` advances to older days and that results are grouped by day, complementing the schema's parameter descriptions and giving extra meaning beyond the structured definitions.
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's function: listing raw time entries (intervals) grouped by day for a date range, with a 100-day maximum. This distinguishes it from siblings like list_activity_types (which lists type metadata) and time_report (likely aggregated), using a specific verb and 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 gives context (raw entries, date range, max 100 days) and hints at pagination for older days, but it does not explicitly compare this tool to alternatives like time_report or say when not to use it. Usage is implied rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_intervalA
Retroactively log a completed time entry for an activity type. Times are wall-clock in the user's timezone, format "yyyy-MM-dd HH:mm".
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End, e.g. "2026-07-09 11:30" | |
| from | Yes | Start, e.g. "2026-07-09 09:00" | |
| tags | No | ||
| comment | No | ||
| type_id | No | Exact activity type id from list_activity_types (internal — never show ids to the user) | |
| timezone | No | IANA timezone the times are given in (default: user's timezone) | |
| type_name | No | Activity type name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure burden. It does disclose that times are wall-clock in the user's timezone and the expected format, which is useful. However, it does not mention side effects (e.g., creating a record), prerequisites (which parameter is required: type_id or type_name), or output behavior, leaving significant behavioral context unknown.
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 sentences, front-loaded with the primary action, followed by a critical input-format constraint. Every sentence adds value, with no redundancy.
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 description adequately conveys the purpose and a key input detail, but given 7 parameters and no annotations or output schema, it does not fully explain how to choose between type_id and type_name, whether either is required, or what the tool returns. The schema covers much, but optional params like tags/comment remain unexplained.
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 covers 71% of parameters with descriptions. The tool description adds the wall-clock/timezone context relevant to 'from' and 'to', but tags and comment are left undefined in both schema and description. Since coverage is above 50%, the baseline of 3 is appropriate.
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 'log' with a clear resource 'completed time entry' and the modifier 'retroactively', which clearly distinguishes it from sibling tools like start_activity/stop_activity that handle live tracking, and update_activity which modifies existing 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?
The description provides clear context: this tool is for retroactively logging completed time entries. It implies when to use it (when an entry has already finished) but does not explicitly name alternatives or exclusions, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_resume_activityB
Pause a running activity or resume a paused one.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| type_name | No | Which activity (needed only if several match) | |
| activity_id | No | Exact activity id from get_current_status (internal — never show ids to the user) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions the required activity state but does not disclose side effects, error conditions, or how the pause/resume affects time tracking.
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, clear sentence that is front-loaded with the action and resource. Every word earns its place with no unnecessary 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?
The description is adequate for a simple toggle tool, and the schema provides usable parameter details. However, with no output schema or annotations, it omits return values, error behavior, and when to use this over stop_activity, leaving some gaps.
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 67%, with type_name and activity_id already described. The main description adds minimal meaning by mapping 'pause' and 'resume' to activity states, but does not explain selection behavior or the internal id warning beyond 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 uses specific verbs 'Pause' and 'resume' with the resource 'activity', and further clarifies state constraints (running vs paused). This clearly distinguishes it from sibling tools like start_activity and stop_activity.
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 on when to use pause vs stop, when to resume, or any prerequisites. The description states what the tool does but not when to prefer it over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_activityA
Start tracking an activity by type name (fuzzy matched, see list_activity_types) or type_id. Optionally backdate the start with at (wall-clock) or started_minutes_ago.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Backdate: start time as "HH:mm" (today) or "yyyy-MM-dd HH:mm" in the user's timezone | |
| type_id | No | Exact activity type id from list_activity_types (internal — never show ids to the user) | |
| timezone | No | IANA timezone `at` is given in (default: user's timezone) | |
| type_name | No | Activity type name, e.g. "Work" or "Reading" | |
| started_minutes_ago | No | Backdate the start by N minutes (alternative to `at`) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal fuzzy matching and backdate semantics, but omits critical side effects for a state-changing tool: what happens if an activity is already being tracked, whether starting overwrites the current status, permissions needed, or any return/error behavior. This is a meaningful 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 two sentences, front-loaded with the primary purpose, and each clause adds necessary information (type identification, backdating options). No wasted words or repetition of schema details.
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 five parameters, no required parameters, no annotations, and no output schema. The description does not clarify whether at least one of type_id/type_name is required, nor does it explain typical success/failure responses or conflicts with an in-progress activity. This level of ambiguity makes the description incomplete for a state-changing tool, despite good parameter-level coverage.
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 already fully documents all five parameters, so the baseline is 3. The description adds value beyond the schema by noting that type_name is fuzzy matched, pointing to list_activity_types for valid names, and clarifying that at and started_minutes_ago are alternative backdating mechanisms. This helps an agent choose between the two backdate options.
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 action ('Start tracking an activity'), the resource (activity), and the key input modes (type name or type_id). It distinguishes itself from sibling tools like stop_activity and pause_resume_activity by explicitly being about starting tracking.
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 context: use this to start tracking an activity, with guidance to consult list_activity_types for fuzzy name matching. It does not explicitly mention exclusions (e.g., when not to use), but the context is unambiguous enough for an agent to select it appropriately over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_activityA
Stop a running or paused activity. type_name may be omitted when exactly one activity is active. Optionally backdate the stop with at (wall-clock) or stopped_minutes_ago.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Backdate: stop time as "HH:mm" (today) or "yyyy-MM-dd HH:mm" in the user's timezone | |
| timezone | No | IANA timezone `at` is given in (default: user's timezone) | |
| type_name | No | Which activity to stop (needed only if several are active) | |
| activity_id | No | Exact activity id from get_current_status (internal — never show ids to the user) | |
| stopped_minutes_ago | No | Backdate the stop by N minutes (alternative to `at`) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It discloses the ability to backdate with at or stopped_minutes_ago and the condition for type_name, which is useful. However, it does not mention what happens if no activity is active, whether the interval is definitively closed, or any side effects, leaving the agent without full awareness of edge cases.
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 sentences long, front-loaded with the core purpose, and every sentence adds important operational detail. There is no filler or repetition of schema content, making it appropriately concise and well-structured.
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 five parameters and no output schema, the description covers the main purpose and adds key usage semantics. It is fairly complete for a simple stop tool, though it could briefly note error conditions (e.g., no active activity) or what is returned. The schema handles parameter details, so this slight gap does not significantly impair context.
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 adds semantic value beyond the schema by explaining that type_name may be omitted when exactly one activity is active and by clarifying that at and stopped_minutes_ago are alternative backdating options. This helps the agent understand parameter relationships and selection.
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 stops a running or paused activity, using a specific verb and resource. It distinguishes from siblings like start_activity and pause_resume_activity by indicating it ends an activity. The nuance about omitting type_name when exactly one activity is active also reinforces the 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 context for when to use the tool (to stop an activity) and includes a specific condition: type_name may be omitted when exactly one activity is active. However, it does not explicitly compare with alternatives like pause_resume_activity or update_activity, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_reportA
Aggregated time statistics per activity type for a date range. Returns overall totals plus per-DAY/WEEK/MONTH buckets.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date yyyy-MM-dd, inclusive | |
| from | No | Start date yyyy-MM-dd (use with `to`) | |
| tags | No | Filter to these tags | |
| period | No | Named period; alternative to explicit from/to | |
| group_by | No | Bucket size for the periods breakdown (default DAY) | |
| timezone | No | IANA timezone (default: user's timezone) | |
| type_ids | No | Filter to these exact activity type ids (internal — never show ids to the user) | |
| type_names | No | Filter to these activity type names (groups allowed) |
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. It discloses the output format (totals and buckets) but does not explicitly state read-only behavior, data source, or edge cases. It adds some behavioral context but not comprehensive transparency.
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 totaling 19 words, front-loaded with the core purpose and output structure. No redundant information, 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?
With 8 parameters and no output schema, the description is somewhat sparse. It does not explain how to use from/to vs period, filtering by tags/type_ids/type_names, or the exact structure of returned data, leaving gaps for a tool of this complexity.
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 baseline is 3. The description does not add extra meaning to parameters; it only hints at date range and bucket size, which are already documented in 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 clearly states the tool provides 'Aggregated time statistics per activity type for a date range' and 'Returns overall totals plus per-DAY/WEEK/MONTH buckets'. This specifies a concrete resource and action, distinguishing it from sibling tools like list_intervals which return raw intervals.
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 for aggregated time statistics but does not explicitly state when to use this tool over siblings or mention exclusions/alternatives. There is no guidance on when not to use 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.
8 tool updates
v0.1.0- First observed
get_current_status - First observed
list_activity_types - First observed
list_intervals - First observed
log_interval - First observed
pause_resume_activity - First observed
start_activity - First observed
stop_activity - First observed
time_report
TDQS
Scored across 8 tools
Each tool addresses a distinct aspect of time tracking: listing types, checking current status, starting/stopping/pausing activities, logging entries retroactively, and generating reports or raw interval data. There is no overlap between tools; even pause_resume_activity is clearly a single combined operation.
All tool names use snake_case and mostly follow a verb_noun pattern (list_activity_types, start_activity, stop_activity, log_interval, list_intervals). The one exception is time_report, which is noun_noun rather than verb_noun, but it is still clear and fits the overall style.
With 8 tools, the server is well-scoped for its purpose of tracking time. Each tool covers a necessary action without redundancy, and the count sits comfortably in the ideal range for a focused domain.
The tool set covers the full tracking lifecycle: starting, stopping, pausing, resuming, retroactively logging, retrieving current status, viewing raw intervals, and generating aggregated reports. There are no obvious dead ends, as every tracking action has a corresponding read or management tool.
Maintenance
Related MCP Connectors
- mcp-serverOAuthio.klokin
MCP server exposing klokin time-tracking operations (employees, time entries, stores) to AI clients.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Remote MCP server to read and manage your Atako AI agents, messages, files, and integrations.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol (MCP) server that connects to ActivityWatch, allowing LLMs like Claude to interact with your time tracking data.4MIT
- FlicenseAqualityCmaintenanceMCP server for logging and checking Jira Cloud worklogs from AI agents such as Claude Code, Claude Desktop, Cursor, or any MCP client that supports stdio.71-
- FlicenseNot gradedqualityAmaintenanceMCP server for Timely time tracking API. Connects Claude Code to your Timely account for reading and creating time entries, projects, tasks, and users.5-
- FlicenseNot gradedqualityCmaintenanceA local MCP server that reads logged hours from an internal time tracker, providing tools to list time entries, projects, and the active timer. It is read-only, enabling Claude Code to see time-tracking data without writing.-