Skip to main content
Glama
Mrquj

ATimeLogger MCP Server

by Mrquj

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

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

  2. Build the server and register it:

npm install
npm run build
npm run setup        # paste the token, verifies it, prints the registration command

The 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.js

Claude 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

ATL_TOKEN

yes

ATimeLogger Personal Access Token the server acts as

MCP_AUTH_TOKEN

recommended

shared secret required to call /mcp (sent as Authorization: Bearer …, x-mcp-token, or ?token=). If unset, the endpoint is open

ATL_BASE_URL

no

non-production backend (defaults to https://app.atimelogger.pro)

PORT

no

listen port (default 3000; most hosts inject it)

MCP_PATH

no

endpoint path (default /mcp)

One deployment = one ATimeLogger account (the server acts as the single ATL_TOKEN). Because the URL is internet-facing, set MCP_AUTH_TOKEN and 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):

Deploy to Render

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 / VPSdocker compose up -d --build (fill .env first), 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

get_current_status

Running/paused activities with elapsed time

list_activity_types

Activity type names as a group tree (source of names for other tools)

start_activity

Start by type name; optional backdating (at wall-clock time or started_minutes_ago)

stop_activity

Stop the active activity (name optional if only one is active); same backdating options

pause_resume_activity

Pause or resume

log_interval

Retroactively log a completed entry (wall-clock times, optional comment/tags)

update_activity

Update the comment and/or tags of an existing entry (running or past) without changing its tracked time; get activity_id from get_current_status or list_intervals

time_report

Aggregated per-type statistics for a period (today, this_week, last_month, … or explicit dates)

list_intervals

Raw history grouped by day, paged, max 100-day range; entries carry the activity_id that update_activity needs

app_help

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_activity cannot attach a comment (the underlying start endpoint takes only a type and time); add one afterwards with update_activity, or use log_interval for 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 via app_help).

  • History requests are capped at 100 days by the backend.

Available Tools

8 tools
get_current_statusA

Show currently running or paused activities with elapsed time.

ParametersJSON Schema
NameRequiredDescriptionDefault
timezoneNoIANA timezone for displayed times (default: user's timezone)

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_archivedNoInclude archived types (default false)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date yyyy-MM-dd, inclusive
fromNoStart date yyyy-MM-dd (use with `to`)
pageNoPage number, 0-based (default 0)
sizeNoDays per page (default 20, max 50)
tagsNoFilter to these tags
periodNoNamed period; alternative to explicit from/to
timezoneNoIANA timezone (default: user's timezone)
type_idsNoFilter to these exact activity type ids (internal — never show ids to the user)
type_namesNoFilter to these activity type names (groups allowed)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd, e.g. "2026-07-09 11:30"
fromYesStart, e.g. "2026-07-09 09:00"
tagsNo
commentNo
type_idNoExact activity type id from list_activity_types (internal — never show ids to the user)
timezoneNoIANA timezone the times are given in (default: user's timezone)
type_nameNoActivity type name

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
type_nameNoWhich activity (needed only if several match)
activity_idNoExact activity id from get_current_status (internal — never show ids to the user)

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoBackdate: start time as "HH:mm" (today) or "yyyy-MM-dd HH:mm" in the user's timezone
type_idNoExact activity type id from list_activity_types (internal — never show ids to the user)
timezoneNoIANA timezone `at` is given in (default: user's timezone)
type_nameNoActivity type name, e.g. "Work" or "Reading"
started_minutes_agoNoBackdate the start by N minutes (alternative to `at`)

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoBackdate: stop time as "HH:mm" (today) or "yyyy-MM-dd HH:mm" in the user's timezone
timezoneNoIANA timezone `at` is given in (default: user's timezone)
type_nameNoWhich activity to stop (needed only if several are active)
activity_idNoExact activity id from get_current_status (internal — never show ids to the user)
stopped_minutes_agoNoBackdate the stop by N minutes (alternative to `at`)

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date yyyy-MM-dd, inclusive
fromNoStart date yyyy-MM-dd (use with `to`)
tagsNoFilter to these tags
periodNoNamed period; alternative to explicit from/to
group_byNoBucket size for the periods breakdown (default DAY)
timezoneNoIANA timezone (default: user's timezone)
type_idsNoFilter to these exact activity type ids (internal — never show ids to the user)
type_namesNoFilter to these activity type names (groups allowed)

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 8 tool updatesv0.1.0
    • First observedget_current_status
    • First observedlist_activity_types
    • First observedlist_intervals
    • First observedlog_interval
    • First observedpause_resume_activity
    • First observedstart_activity
    • First observedstop_activity
    • First observedtime_report

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers