TrackingTime
Server Details
Connects AI assistants to TrackingTime for querying time entries, projects, tasks, customers, and team data using natural language.
- Status
- Healthy
- Uptime
- 84.3% over 22 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- TrackingTime/mcp
- GitHub Stars
- 0
- Server Listing
- TrackingTime MCP
TDQS
Scored across 127 tools
Most tools are distinct by resource and action, but the event family (list_events, list_company_events, list_filtered_events, get_events_stats, get_events_summary) and timecard family overlap enough to require careful description reading. Descriptions clarify usage, but boundaries are not always immediately obvious.
Tool names are almost entirely consistent snake_case verb_noun patterns, with predictable CRUD verbs across entities. Minor inconsistencies exist (add_task_comment vs. create_task, and some verb_noun_noun names like get_timecards_count), but there is no chaotic mixing.
127 tools is an extreme mismatch for an MCP server surface, far beyond the 3-15 well-scoped range. This volume likely overwhelms agents, increases selection latency, and raises misselection risk despite the API's underlying breadth.
The surface covers a very broad time-tracking domain: tasks, projects, users, events, invoices, expenses, time off, schedules, custom fields, and reports. Some lifecycle gaps remain, such as no obvious delete_timeoff_policy or delete_user operation, but agents can work around most missing operations.
Available Tools
127 toolsadd_task_commentAdd Task CommentCInspect
Adds a comment to a task using /tasks/:task_id/comments/add. Limitations: write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| notes | No | ||
| comment | No | ||
| task_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so calling this a 'write operation' adds nothing. The description omits what an agent actually needs: that the call is non-idempotent (retrying can create duplicate comments), that auth is required, and what happens on an unknown task_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the operation front-loaded and no filler. The endpoint path is arguably redundant with the tool name, but it costs little and is not padded.
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, non-idempotent write tool with no output schema, the description leaves key things unaddressed: the text/notes/comment ambiguity, auth/account_id requirements, and retry semantics. Annotations cover the safety profile, but the content-parameter confusion is a real risk of misuse.
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 56% and the description adds no parameter meaning at all. Critically, there are three apparently interchangeable content parameters (text, notes, comment) and the description never says which one carries the comment body or how they interact; it also doesn't mention that task_id is required.
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?
States a specific verb and resource ('Adds a comment to a task') and even names the REST endpoint, so the operation is unambiguous. It does not differentiate from siblings like list_task_comments or delete_task_comment, but the verb makes the direction of the operation obvious.
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 when-to-use guidance, no prerequisites, and no mention of the nearby sibling tools. The only extra line, 'Limitations: write operation,' is a property of the tool, not guidance about when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_timeoffApprove TimeoffADestructiveInspect
Approves or rejects a time off request using GET /timeoffs/approve/:timeoff_id?token=:token. This endpoint is global and does not prefix account_id. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | ||
| action | No | ||
| status | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| approved | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| timeoff_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is largely covered. The description adds genuinely useful context beyond that: it is a 'sensitive write operation', demands explicit confirm=true, and warns that the endpoint is global and does not prefix account_id — a non-obvious routing detail. It stops short of describing irreversibility or failure behavior.
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 tight sentences, front-loaded with the verb/resource and then the routing and safety constraints. No filler, though the raw endpoint string is somewhat mechanical.
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 10-parameter destructive mutation with no output schema, the description covers safety and scoping adequately but leaves parameter semantics gaps and does not address what happens to the request after approval/rejection. Minimum viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description should compensate, but it only surfaces token and timeoff_id (via the URL) and confirm. It says nothing about the action/status/approved/access_token/app_password parameters, leaving several fields ambiguous — notably the overlapping action enum and approved boolean.
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 pair ('approves or rejects') and resource ('time off request'), and even names the underlying endpoint. An agent can distinguish it from siblings like create_timeoff, update_timeoff, get_timeoff and delete_timeoff without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It notes the operational constraint ('requires confirm=true') and the endpoint's global scoping, but gives no guidance on when to use this versus update_timeoff or delete_timeoff, nor any prerequisite/role context. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_customerArchive CustomerCInspect
Archives/closes a customer using /customers/close/:customer_id. Limitations: write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| customer_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so 'Limitations: write operation' largely repeats structured data rather than adding context. It does not say whether the archived customer is recoverable (e.g., via restore_customer), whether data is retained, or what permissions are needed.
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 very short sentences that are front-loaded with the action, which is good. The second sentence, however, only restates what the annotations already declare and does not earn its place, making the definition terse without being informative.
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 mutation tool with no output schema and a large set of closely related customer operations, the definition omits the key distinctions an agent needs: archive vs delete semantics, reversibility, and effects on the customer's projects/tasks. Annotations cover the safety profile, but the description does not complete the picture.
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 83%, so the schema carries most parameter meaning (auth tokens, account_id, base_url). The description's path template '/customers/close/:customer_id' confirms customer_id is the resource identifier, but adds no new format or constraint information 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?
States a specific verb+resource ('Archives/closes a customer') and even names the endpoint, so the core action is unambiguous. However, it never distinguishes itself from close siblings like delete_customer, restore_customer, or update_customer, leaving the agent to infer whether archive is a soft-close or a destructive removal.
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 when-to-use guidance at all — no conditions under which an agent should archive rather than delete, restore, or update a customer. The only hint ('Limitations: write operation') is a capability note, not a usage rule, so the agent must guess from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_projectArchive ProjectBDestructiveInspect
Archives/closes a project using /projects/close/:project_id. Limitations: write operation; affects project visibility.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so 'write operation' largely restates structured data. The description does add one piece of novel context — that archiving 'affects project visibility' — but omits reversibility, the confirm-required flow, and non-idempotent retry behavior, all of which matter for a destructive mutation.
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, front-loaded sentences with the operation and its endpoint stated first. Slight waste in 'write operation', which is already covered by annotations, but nothing else bloats the text.
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 destructive, non-idempotent mutation the description covers the basic identity and the visibility side effect, and annotations plus an 86%-covered schema carry the rest. However, it never says whether archiving is recoverable via restore_project, which is the key question an agent needs answered before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, so the required confirm and credential parameters are already documented in the schema. The description only echoes project_id via the endpoint path and adds no format, aliasing, or multi-workspace guidance beyond what the schema states.
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?
States a specific verb pair (archives/closes) and the resource (project), and even names the endpoint /projects/close/:project_id. It is clear what the tool does, but it never distinguishes itself from close siblings like delete_project, update_project, or restore_project, so the agent must infer which one applies.
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 guidance on when to archive rather than delete, update, or duplicate a project, and no mention that restore_project is the inverse. Usage is only implied by the tool name; the description adds no routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_taskArchive TaskADestructiveInspect
Archives/closes a task using /tasks/close/:task_id. Limitations: destructive write operation; task must exist in the target account.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| task_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so 'destructive write operation' largely restates structured data. The description does add the endpoint path and the account-existence precondition, but omits what 'archive/close' actually changes (reversibility, status 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 tight sentences with the action and endpoint front-loaded and constraints following. No filler, nothing to trim.
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 single-task mutation with no output schema, the description covers the action, endpoint, and main precondition. It could say more about whether archiving is reversible and how it differs from stop/delete, but it is close to adequate.
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 86%, so the schema already documents task_id, confirm, base_url, account_id, and auth fields. The description adds no parameter-level meaning beyond what the schema provides, which is the expected baseline here.
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?
States a specific verb ('Archives/closes') and resource ('a task') and even cites the endpoint '/tasks/close/:task_id'. It does not, however, explicitly distinguish itself from close-sounding siblings like stop_task, delete_task, or restore_task, so an agent must infer the boundary.
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?
Provides one precondition ('task must exist in the target account') but gives no guidance on when to choose archive_task over delete_task, stop_task, or restore_task, nor any exclusions. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_userArchive UserADestructiveInspect
Archives/closes a user using /users/close/:user_id. Limitations: destructive write operation; requires user-management permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| user_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds genuinely new context beyond the annotations: the permission requirement and the concrete endpoint. It stops short of saying whether the archive is reversible (restore_user exists) or what the response contains.
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 clauses with the operation front-loaded and limitations second; no filler. It is tightly sized, though the endpoint restatement is slightly redundant with the tool's purpose.
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 7-parameter destructive tool with no output schema, the description covers the essential decision inputs: what it does, that it is destructive, and that permissions are required. Missing only reversibility and any notion of what happens to the user's data, which would round it out.
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 86%, so the schema already documents confirm, base_url, api_token, account_id, access_token, and app_password. The description adds no parameter-level detail such as user_id format or account_id requirements, so the baseline 3 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?
States a specific verb and resource ('Archives/closes a user') plus the underlying endpoint /users/close/:user_id, which pins down the operation precisely. It is distinguishable from the sibling restore_user, though the description never names that counterpart, so the differentiation is implicit rather than explicit.
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 'Limitations' clause tells the agent this is a destructive write requiring user-management permissions, which is useful context for deciding whether to call it. However, it never states when to use this versus restore_user or update_user, nor any preconditions beyond permissions, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_user_projectsAssign User ProjectsAInspect
Assigns projects to a user using /users/:user_id/projects/assign. Limitations: write operation; project/user visibility depends on role.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| projects | No | ||
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_ids | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write and non-idempotent behavior, so the description doesn't need to restate that. It adds genuinely useful context: the operation is a write, and visibility of projects/users depends on role, which is a real constraint an agent won't get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single tight sentence plus a limitation clause. Front-loaded with the action. No wasted words, though the endpoint path is somewhat redundant with the tool name.
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 an 8-parameter mutation tool with no output schema, the description is thin. It covers the safety-relevant limitation (role-based visibility) but leaves parameter semantics, especially the project_ids/projects alias and account_id requirement, unclear.
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 63%, and the description adds no parameter meaning at all. It doesn't clarify project_ids vs projects (the alias), whether user_id can be a list, or what account_id does beyond what the schema already says. For 8 parameters with partial coverage, more clarification is expected.
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?
States a specific verb (Assigns) and resource (projects to a user) and gives the endpoint path, making it unambiguous against siblings like list_user_projects or assign_users_to_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and endpoint, but there is no explicit when-to-use guidance, no mention of when to prefer list_user_projects or how to remove assignments. It doesn't name any alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_users_to_scheduleAssign Users To ScheduleADestructiveInspect
Assigns users to a schedule using GET /schedules/:schedule_id/users/assign. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| users | Yes | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| schedule_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered structurally. The description's 'sensitive write operation; requires confirm=true' largely restates the schema's confirm const and the destructive annotation, adding little new behavioral context (no auth, side effects, or reversibility 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?
Two short sentences, front-loaded with the action and endpoint, then the constraint. Minimal waste, though the endpoint restatement is somewhat redundant with the name.
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 10-parameter destructive mutation with no output schema, the description covers the crucial confirmation gate and sensitivity flag. It omits the polymorphic 'users' shape and the 'to'/'from' range semantics, but the schema carries part of that load and no output contract needs explaining.
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 60%, so some parameters (confirm, base_url, api_token, account_id, access_token, app_password) are documented in the schema itself. The description reinforces the confirm requirement but says nothing about the undocumented/ambiguous 'users' (array vs number vs string), 'to'/'from', or schedule_id semantics, so it doesn't compensate for the remaining coverage gap.
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?
States a specific verb and resource ('Assigns users to a schedule') and pins the exact endpoint GET /schedules/:schedule_id/users/assign. This clearly distinguishes it from siblings like remove_users_from_schedule and assign_user_projects.
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 'Limitations' clause establishes a precondition (requires confirm=true) and flags the operation as sensitive, which implies caution. However, it never says when to prefer this over remove_users_from_schedule or how it relates to other assignment tools, leaving routing guidance implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_update_tasksBatch Update TasksBDestructiveInspect
Updates tasks in batch using /tasks/batch/update. Limitations: destructive write operation; payload replaces/updates fields according to API behavior.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | Yes | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the 'destructive write operation' clause largely restates structured data. The phrase 'payload replaces/updates fields according to API behavior' hints at partial-vs-full update semantics but is too vague to be actionable, and no auth/permission or partial-failure behavior is described.
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 compact sentences, front-loaded with the operation and endpoint. The trailing 'Limitations' sentence is short but partly padding since annotations already carry the destructive flag.
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 destructive, non-idempotent batch mutation with no output schema, the description should explain how tasks are identified and matched, what a partial failure does, and how it relates to update_task. None of that is present, leaving real gaps for a 7-parameter write 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?
Schema description coverage is 86%, so the schema already documents confirm, base_url, account_id, and the token aliases. The description adds nothing about the shape of the tasks array (e.g. whether each entry needs an id, which fields are updatable) — the single most important parameter remains unexplained in both places.
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?
States a specific verb and resource ('Updates tasks in batch') and names the endpoint, so the operation is unambiguous. It implicitly distinguishes itself from the single-record sibling update_task via 'in batch', though it never names that alternative explicitly.
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 statement of when to use this over update_task or update_events_batch, no prerequisites, and no exclusions. The agent must infer that 'batch' means multiple tasks in one call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_timeoff_amountCalculate Timeoff AmountCRead-onlyIdempotentInspect
Calculates time off amount using GET /timeoffs/calculate_amount. Limitations: read-only calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| policy_id | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds 'read-only calculation' which reinforces this but doesn't add much beyond the annotations. It doesn't describe return format, rate limits, or other behavioral traits.
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 short sentences with no wasted words, front-loading the core purpose. It efficiently conveys the essential information without unnecessary detail.
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 tool with no output schema and incomplete parameter documentation, the description is insufficient. It doesn't explain what the returned amount represents (hours? days?), how to use the parameters, or when to prefer this over similar tools. The agent lacks critical context to invoke it 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 56%, so the description should compensate for undocumented parameters. However, it provides no parameter information at all. Key parameters like 'to', 'from', 'user_id', and 'policy_id' lack descriptions in both the schema and the description, leaving agents to guess their meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: calculates time off amount via GET /timeoffs/calculate_amount. This distinguishes it from sibling timeoff tools like get_timeoff_balance (which retrieves balances) and create_timeoff (which creates records). However, it doesn't clarify how it differs from get_timeoff_balance, which also seems related to time off calculations.
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 no guidance on when to use this tool versus alternatives like get_timeoff_balance or other timeoff-related tools. It simply states what it does without context about appropriate scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_customerCreate CustomerAInspect
Creates a new customer using POST /customers/add. Supports adding custom field values during creation. Limitations: write operation; requires permissions in the target account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, openWorld=true, idempotent=false and destructive=false. The description adds value beyond them by flagging the permission requirement in the target account and confirming custom fields can be supplied during creation, though it does not restate the non-idempotent behavior or describe the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the core action and endpoint, then add capability and constraints. Nothing is redundant, though the 'Limitations:' fragment is slightly clipped rather than fully developed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should cover creation semantics, permissions, and the custom-fields capability, which it does. Minor gaps remain around what 'name' must contain and multi-workspace account_id handling, but these are partly covered by 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?
Schema description coverage is 71%, so most parameters (base_url, api_token, account_id, access_token, app_password) are self-documented. The description adds only the note that custom field values are supported, matching the custom_fields parameter, and says nothing about the required 'name' parameter, which the schema leaves undocumented.
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?
States a specific verb and resource ('Creates a new customer') and even names the underlying endpoint (POST /customers/add), which makes it easy to separate from update_customer, archive_customer, and delete_customer. It stops short of explicitly naming those siblings or clarifying scope, so it is clear but not maximally differentiated.
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 notes it is a write operation requiring account permissions, which implies a context of use, and mentions that custom field values can be set at creation time. However, it never states when to prefer this over update_customer or how it relates to list_customers, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_custom_fieldCreate Custom FieldAInspect
Creates a new custom field using POST /custom_fields/add. Supports task, project, event, user and customer custom fields. Limitations: write operation; value_type and filter_object_class are required.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| color | No | ||
| notes | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| cf_index | No | ||
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| value_type | Yes | Custom field value type. text stores a plain string; number stores a numeric string/value; date stores an API date value such as YYYY-MM-DD or YYYY-MM-DD HH:mm:ss; boolean displays the custom field name when set; enum stores one selected enum option; list_single stores a JSON string object like {"item":"Option A"}; list_multiple stores a JSON string array like [{"item":"A"},{"item":"B"}]; currency stores a currency code such as USD or EUR. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| filter_object_class | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=true, so the write/non-idempotent profile is covered. The description's "write operation" line largely repeats that, though the POST path adds a small amount of context. It does not disclose auth requirements, what happens on duplicate names, or failure behavior.
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, front-loaded with the core action and then the constraint, with no filler. The "Limitations:" label is slightly odd for what is really a required-parameter note, but the text is compact and earns its space.
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 an 11-parameter mutation tool with no output schema, the description covers the purpose and the two enum-bearing required params. It omits guidance on the auth parameters (api_token/app_password/access_token), the multi-workspace account_id requirement, and any return/error behavior, leaving meaningful gaps for an agent configuring the 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?
Schema coverage is 55% with 11 parameters, several of which (name, color, notes, cf_index, api_token, access_token, app_password) have no schema description. The description only restates that value_type and filter_object_class are required, which the schema's required array already conveys, and the object-class list duplicates the enum. It adds essentially nothing beyond the structured fields.
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?
States a specific verb and resource (creates a new custom field) and scopes it by naming the object classes it can attach to (task, project, event, user, customer), which distinguishes it from siblings like create_enum_option and update_custom_field. The API endpoint is also given, so an agent knows exactly what operation this is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states that this is a write operation and that value_type and filter_object_class are required, which is implied usage guidance for creating a field. However, it never says when to choose this over update_custom_field, create_enum_option, or how it relates to list/get custom field tools, so no alternatives or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_enum_optionCreate Enum OptionAInspect
Creates a new enum option for an existing custom field using POST /enum_options/add. Limitations: write operation; requires an existing enum custom field id.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| color | No | ||
| index | No | ||
| notes | No | ||
| enabled | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_field | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so most of the safety profile is provided structurally. The description adds the meaningful constraint that a pre-existing enum custom field id is required, plus the underlying endpoint, but redundantly restates 'write 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?
Two tight sentences with the primary action front-loaded and the constraint second. Nothing is padded, though the endpoint string adds little selection value.
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 write tool with no output schema and 11 parameters, the description covers the core action and its precondition adequately but leaves most parameter meanings and any return/error behavior unaddressed. It is minimally complete rather than thorough.
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 only 45% and the description compensates for almost none of it, documenting neither the required 'name' semantics nor optional fields like color, index, notes, and enabled. It only alludes to custom_field, leaving the bulk of the 11 parameters ambiguous.
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?
States a specific verb and resource ('Creates a new enum option for an existing custom field'), which clearly distinguishes it from create_custom_field and update_enum_option. The parent resource (custom field) fixes the scope precisely.
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 prerequisite 'requires an existing enum custom field id' gives partial when-to-use context, telling the agent this cannot create a field from scratch. However, it never contrasts itself with update_enum_option or list_enum_options, so the selection logic is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_eventCreate EventAInspect
Creates a new time event using POST /events/add. Supports linking to a task or project, optional notes, repeating configuration and custom fields. Limitations: write operation; start, end and timezone are required.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| notes | No | ||
| start | Yes | ||
| repeat | No | ||
| task_id | No | ||
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| duration | No | ||
| timezone | Yes | ||
| api_token | No | Alias of app_password | |
| frequency | No | ||
| task_name | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| end_repeat | No | ||
| event_type | No | ||
| project_id | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| project_name | No | ||
| repeat_every | No | ||
| custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the 'write operation' note is largely redundant. The description adds useful context on optional capabilities (task/project linking, notes, repeating, custom fields) and mandatory inputs, but says nothing about idempotency, auth requirements, or side effects beyond what annotations cover.
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 tight sentences, front-loaded with the action and endpoint, then the capability summary, then the hard constraints. No filler and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 21-parameter mutation with no output schema and thin schema descriptions, the description covers the essentials (required fields, main feature groups) but omits much of the parameter surface and any auth/permission or return behavior. Adequate as a minimum viable definition, 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?
Schema description coverage is only 24% across 21 parameters, so the description must compensate. It does name the required trio (start, end, timezone) and groups optional fields (task/project link, notes, repeat config, custom fields), which adds real meaning, but it leaves many parameters undocumented (duration, event_type, frequency, repeat_every, end_repeat, name aliases, auth/base_url).
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?
States a specific verb and resource ('Creates a new time event') and even names the underlying endpoint POST /events/add, which clearly separates it from list_events, get_event, update_event and create_events_batch. It does not explicitly name those siblings, 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?
It conveys scope and prerequisites (write operation; start, end and timezone are required) and lists supported features, which implies when to use it. However it never states when to prefer a sibling such as create_events_batch or track_task, nor any exclusions, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_events_batchCreate Events BatchCInspect
Creates time entries in batch using /events/batch/add. Limitations: write operation; accepts API-supported batch payloads.
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, and the description merely restates 'write operation' rather than adding value. Critically, it says nothing about partial-failure behavior, whether a failed entry aborts the whole batch, auth requirements, or any size cap on the batch — exactly the traits an agent needs for a non-idempotent batch write.
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 the core action front-loaded and no padding. The 'Limitations' clause is weak on substance but does not waste much space.
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 six-parameter, non-idempotent batch mutation with no output schema, the description omits what an agent most needs: how the batch payload is shaped, what happens on partial failure, and whether retries are safe. Annotations cover only the safety profile, leaving these gaps unaddressed.
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 83%, so the schema already documents base_url, account_id, and the auth fields. The description's 'batch payloads' is the only nod to the events parameter and adds no format, size, or shape detail beyond the schema, so the baseline 3 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?
States a specific verb and resource ('Creates time entries in batch'), which cleanly separates it from the single-entry create_event sibling. It does not, however, explicitly name create_event or update_events_batch as the alternative, so the differentiation is implied rather than stated.
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 guidance on when to use this batch tool versus create_event or update_events_batch, nor any prerequisites. The 'Limitations' sentence gestures at usage constraints but resolves to nothing actionable ('accepts API-supported batch payloads').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_expenseCreate ExpenseBDestructiveInspect
Creates an expense using GET /expenses/add. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| amount | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | No | ||
| spent_date | No | ||
| category_id | No | ||
| customer_id | No | ||
| is_billable | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is largely carried by structured data. The description adds that this is a 'sensitive write operation' requiring explicit confirmation, which usefully reinforces the guardrail, but says nothing about side effects, reversibility, or error behavior.
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, front-loaded with the core action and then the critical limitation. The endpoint reference is arguably redundant, but nothing is padded and the key constraint (confirm=true) is not buried.
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 14-parameter destructive mutation with no output schema and less than half of parameters documented, the description is far too thin. An agent gets the confirm gate but no guidance on required business fields, date formatting, or workspace/account selection when the user belongs to multiple accounts.
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?
With 14 parameters and only 43% schema description coverage, the description must compensate for undocumented parameters, and it does not. It mentions only confirm=true, which is already documented in the schema, leaving amount, spent_date, project_id, category_id, customer_id, and others entirely unexplained.
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?
States a specific verb and resource ('Creates an expense') and even names the underlying endpoint, which is enough to separate it from update_expense, delete_expense, and list_expenses. It stops short of explicitly contrasting itself with those siblings, so it falls just below the top band.
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?
'Limitations: sensitive write operation; requires confirm=true' gives a real usage precondition, which is more than most definitions offer. However, it gives no when-to-use context (e.g. when to create vs. update an expense, or which fields are needed for a valid record), so usage is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_holidayCreate HolidayCInspect
Creates a holiday using GET /holidays/add. Limitations: write operation; confirm is not required by the Excel.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| name | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the 'write operation' statement merely restates structured data. The one added behavioral detail is that creation happens via GET /holidays/add, which is a useful quirk. No auth/permission or side-effect context is provided.
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 and the purpose is front-loaded, which is good. However, the trailing 'confirm is not required by the Excel' clause is unclear filler that consumes space without earning it.
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 7-parameter mutation with no output schema, the description omits required auth context (the token/account parameters), the meaning of date/name, and any indication of what happens on success or duplicate. Annotations cover the safety profile but not enough to fill this gap.
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 71%, with the auth/URL params documented but the two core fields (date, name) left undescribed in the schema. The description adds no parameter meaning for these gaps, so it neither compensates nor detracts.
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?
States a specific verb and resource ('Creates a holiday'), which cleanly distinguishes it from siblings like update_holiday, delete_holiday, and list_holidays. It also references the underlying endpoint, though it doesn't explicitly call out differentiation from near-name 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?
No when-to-use or when-not-to-use guidance relative to alternatives such as update_holiday or create_timeoff. The clause about 'confirm is not required by the Excel' is opaque jargon that does not help an agent decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_invoiceCreate InvoiceBDestructiveInspect
Creates an invoice using POST /:account_id/invoices/add. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| terms | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| qr_file | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| customer_name | No | ||
| payment_details | No | ||
| customer_address | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds 'sensitive write operation; requires confirm=true', which reinforces the confirmation gate, but the confirm requirement is already documented in the schema's const/description, so the added value is modest. Nothing about side effects beyond creation (e.g. whether it emails the customer) is 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?
Two terse sentences with the operation front-loaded and the constraint immediately after. No filler, though the endpoint string is arguably redundant with the tool name for an agent that cannot call URLs directly.
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 destructive, non-idempotent write with 11 parameters and no output schema, the description covers the confirmation gate but not the auth parameter interactions (access_token vs api_token vs app_password) or the behavior of the unlabeled invoice fields. Annotations carry the safety story, so the gap is real but not severe.
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 only 55% across 11 parameters, so the description is expected to compensate and does not. It only echoes the confirm requirement already stated in the schema, and mentions account_id only implicitly through the endpoint path; terms, qr_file, customer_name, customer_address and payment_details are left with no semantics anywhere.
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?
States a specific verb+resource ('Creates an invoice') and even names the underlying endpoint, which distinguishes it cleanly from update_invoice, delete_invoice, export_invoice and send_invoice in the sibling list. It lacks any explicit sibling differentiation in prose, 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 'requires confirm=true' line tells the agent a prerequisite for invocation, which is genuine usage guidance. However, there is no when-to-use vs. alternative (e.g. when to use this versus create_expense or send_invoice afterwards), and no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectCreate ProjectBInspect
Creates a new project using POST /projects/add. Supports linking a customer, custom fields, public visibility and estimated time. Limitations: write operation; requires permissions to create projects in the target account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| is_public | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| customer_id | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| default_view | No | ||
| custom_fields | No | ||
| customer_name | No | ||
| estimated_time | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the permission requirement, which is useful behavioral context, but it does not mention non-idempotency or what happens on duplicate creation.
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 that are front-loaded with the core action and endpoint, then list supported features and limitations. No wasted words, though the limitations could be integrated more smoothly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and incomplete schema descriptions for 12 parameters, the description should provide more detail about required fields, authentication options, and return behavior. It covers the essentials but leaves gaps for an agent to infer.
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 only 42%, so the description should compensate. It mentions linking a customer, custom fields, public visibility, and estimated time, which maps to some parameters, but it omits several parameters such as default_view and account_id from the description.
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?
States a specific verb (creates) and resource (project), and names the endpoint POST /projects/add. It does not distinguish itself from the many sibling create_* tools or from duplicate_project, but the purpose 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?
The description notes it is a write operation and requires permissions to create projects in the target account, which implies when it is usable. However, it gives no explicit when-to-use guidance versus alternatives like duplicate_project or update_project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reportCreate ReportCInspect
Creates a saved/shared report using POST /docs/add. Limitations: write operation; confirm is not required by the Excel.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| name | No | ||
| type | No | ||
| title | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| doc_type | No | ||
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| recipient_users | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, and the description merely restates 'write operation'. It offers no insight into auth requirements (despite api_token/access_token/app_password params), what gets persisted, sharing semantics, or non-idempotency, so it adds little beyond the annotation block.
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 short and front-loads the action, which is good, but the second sentence is garbled and wastes space on an unclear 'Excel' reference rather than useful detail.
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 an 11-parameter, zero-required, write-capable tool with no output schema, the description omits critical context: what a report consists of, which credential parameter to pass, and what happens on success/failure. It is not sufficient for an agent to invoke it confidently.
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 only 45% across 11 parameters, and the description clarifies none of them — no explanation of data, name, type, doc_type, recipient_users, or which credential fields are needed. This leaves a large documentation gap that the description fails to compensate for.
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?
States a specific verb and resource ('Creates a saved/shared report') and even names the underlying endpoint (POST /docs/add), which lets an agent distinguish it from update_report/delete_report/list_reports. It does not, however, differentiate it from the many other create_* siblings or clarify what a 'report' is in this product.
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 indication of when to use this tool versus update_report, list_reports, or refresh_report_share_token. The only usage-adjacent remark is that 'confirm is not required by the Excel', which is confusing and does not help tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_scheduleCreate ScheduleCDestructiveInspect
Creates a schedule using GET /schedules/add. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| fri | No | ||
| mon | No | ||
| sat | No | ||
| sun | No | ||
| thu | No | ||
| tue | No | ||
| wed | No | ||
| name | No | ||
| users | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| frequency | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_message | No | ||
| default_events | No | ||
| show_default_events | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=true, idempotent=false, and openWorld=true, so the safety profile is largely covered. The description adds the confirm=true requirement and the 'sensitive write' framing, which is consistent and mildly useful, but it does not disclose side effects, permission needs, or what the created schedule affects.
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, front-loaded sentences with no filler; the core action and the confirm constraint both land immediately. Efficiency is good, though a slightly longer description would have room to document the parameters it omits.
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 19-parameter destructive tool with no output schema and low schema description coverage, the definition is far too thin. It omits what a schedule contains, what happens on creation, and how most parameters behave, leaving the agent under-equipped to call it 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?
With 19 parameters and only 32% schema description coverage, the schema does not carry the burden, so the description should compensate. Instead it mentions only confirm=true and adds nothing about the day fields, users, frequency, or credentials, leaving most parameters semantically opaque.
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?
States a specific verb and resource ('Creates a schedule') and even names the endpoint used, so the agent knows exactly what action is taken. It does not, however, differentiate itself from near siblings like update_schedule, delete_schedule, or assign_users_to_schedule.
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 the confirm=true prerequisite, which is a useful usage constraint. But it offers no guidance on when to prefer create_schedule over siblings such as update_schedule, list_schedules, or create_event, so the agent must infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskCreate TaskBInspect
Creates a new task using POST /tasks/add. Supports assigning users, linking to a project, custom fields and billable flag. Limitations: write operation; requires permissions to create tasks in the target account/project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | No | ||
| users | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | No | ||
| description | No | ||
| is_billable | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| project_name | No | ||
| custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so "write operation" mostly restates structured data. The description does add value by flagging the permissions requirement, but it stays silent on the non-idempotent behavior (idempotentHint=false) and on what creation returns, leaving gaps even under the lower annotation-backed bar.
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 compact sentences with the action front-loaded and the constraint placed last. Efficient, though the raw HTTP endpoint reference is marginally low-level for a tool description.
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 13-parameter write tool with no output schema and no return-value contract, the description covers the high-level surface but leaves the non-idempotency, type enum, and most parameter meanings undocumented. It is enough to attempt a call but not enough to call it confidently.
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 only 38% across 13 parameters, so the description is expected to compensate. It names four functional parameters (users, project, custom fields, billable), which merely echoes schema property names and adds no semantics, while the PERSONAL/EVERYONE type enum and most auth/account parameters remain unexplained.
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?
Specific verb+resource ("Creates a new task") plus the underlying endpoint POST /tasks/add, and it enumerates the main capabilities (users, project link, custom fields, billable). It does not distinguish itself from close siblings like create_project or batch_update_tasks, 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?
Usage is implied by the stated limitation ("write operation; requires permissions to create tasks in the target account/project"), which gives the agent a permission prerequisite. However, there is no explicit when-to-use/when-not guidance or routing to alternatives such as batch_update_tasks, so it is only minimally viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_timeoffCreate TimeoffBDestructiveInspect
Creates a time off request using GET /timeoffs/add. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| notes | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| policy_id | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description adds the 'sensitive write operation' label and the confirm requirement, but does not explain side effects such as whether the request needs approval or what happens on repeated calls — leaving a modest gap beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and followed by the constraints. The endpoint reference is slightly unusual but informative; 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 mutation tool with no output schema but rich annotations, the definition covers the critical safety gate (confirm). It still omits which fields are needed to build a valid request and what the result looks like, which matters given 11 loosely documented parameters.
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?
With 11 parameters and only 55% schema description coverage, the description is expected to compensate, but it only mentions confirm=true — which the schema already documents. Core fields like to, from, notes, user_id, and policy_id get no explanation in either place, so the agent must guess their meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a time off request') and even names the underlying endpoint, so the agent knows exactly what the tool does. It doesn't explicitly differentiate from the adjacent update_timeoff/delete_timeoff/approve_timeoff siblings, but the create semantics are unambiguous from the verb.
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 a real prerequisite ('requires confirm=true') and flags the operation as sensitive, which is usable guidance. However, it never says when to prefer this over alternatives such as creating via a policy, nor how it relates to the approval flow implied by the approve_timeoff sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_timeoff_policyCreate Timeoff PolicyBDestructiveInspect
Creates a time off policy using POST /timeoffs/policies/add. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| notes | No | ||
| users | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false. The description adds useful context beyond that – it flags the operation as 'sensitive' and discloses the required confirm=true gate, which the annotations do not convey. It omits reversibility and what the created policy affects, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action front-loaded and the caveats second; nothing is padded. It is effectively sized for the operation, though it could fold the endpoint detail away as it adds little for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and 9 parameters at 67% coverage, the annotations plus the confirm disclosure cover the safety profile adequately. However, the description says nothing about workspace scoping (account_id) or the shape of the policy being created, leaving meaningful 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%, above the midpoint, so baseline 3 applies. The description only restates the confirm=true requirement already documented in the schema and adds no meaning for parameters like users, account_id, or the auth aliases.
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?
States a specific verb and resource ('Creates a time off policy') and even names the endpoint, so the operation is unambiguous and distinguishable from siblings like create_timeoff or update_timeoff_policy. It does not explicitly contrast against those siblings, 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 description gives a precondition (confirm=true) but no when-to-use or when-not-to-use guidance, and never routes the agent toward or away from alternatives such as create_timeoff or update_timeoff_policy. Usage is only implied by the required confirmation flag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_user_groupCreate User GroupBInspect
Creates a user group/team using /user_groups/add. Limitations: write operation; requires permission to manage groups.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| users | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and openWorldHint=true, so calling it a 'write operation' is largely redundant. It does add one genuinely useful non-annotation detail — the requirement for group-management permission — but omits mutation side effects such as duplicate-name behavior or whether members are notified.
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, front-loaded with the action and endpoint, with no padding. The 'write operation' clause is slightly redundant with the annotations but does not waste much space.
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 mutation tool with no output schema and 7 parameters, the description covers the action, endpoint and an auth prerequisite, but says nothing about the result of the call or what happens when the group name already exists — leaving an agent without the information it needs to interpret success or failure.
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 71% and the auth/override parameters (base_url, api_token, app_password, account_id, access_token) are already documented in the schema. The description adds no meaning to 'name' or the polymorphic 'users' parameter, so the baseline 3 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?
States a specific verb+resource ('Creates a user group/team') and even names the backing endpoint (/user_groups/add), so an agent knows exactly what the tool does. It does not, however, distinguish itself from the adjacent update_user_group/delete_user_group siblings beyond the verb.
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 offers no when-to-use guidance, no prerequisites for selecting this over update_user_group, and no note on how the required 'name' interacts with the optional 'users' list. Only a bare permission restriction is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_customerDelete CustomerADestructiveInspect
Deletes a customer using /customers/delete/:customer_id. Limitations: destructive write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| customer_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false. The description restates the destructive nature but adds no new behavioral context – no warning about reversibility, cascade effects on related tasks/projects, or auth requirements.
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, front-loaded sentences. The endpoint is stated first, followed by the limitation. No waste.
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 destructive, non-idempotent operation on a customer that likely cascades to related data, the description is thin. It doesn't mention data loss scope, whether the operation can be undone, or the auth requirements implied by the 7 parameters. Adequate but leaves real 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 86% and required params (customer_id, confirm) are documented in the schema. The description adds no parameter meaning beyond the endpoint path, so it neither helps nor hurts. Baseline 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?
States a specific verb and resource ('Deletes a customer'), plus the exact endpoint. Distinguishable from siblings like archive_customer and restore_customer despite no explicit sibling naming.
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 use this versus archive_customer (the reversible alternative) or restore_customer. It notes 'destructive write operation' but doesn't tell the agent to prefer archiving when reversible soft-delete suffices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_custom_fieldDelete Custom FieldCDestructiveInspect
Deletes a custom field definition using /custom_fields/delete/:custom_field_id. Limitations: destructive write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_field_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, so 'destructive write operation' merely restates structured data rather than adding value. The description omits what is actually destroyed (field values on existing tasks/entities), whether deletion is recoverable, and any auth/permission requirements.
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, front-loaded with the action and endpoint. The second sentence is largely redundant with the annotations but costs little; nothing is padded or buried.
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 destructive, non-idempotent delete with a mandatory confirm parameter and no output schema, the description covers the mechanics but not the consequences. An agent knows what it does but not what data is lost or whether the operation is reversible, which is material for an irreversible delete.
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 86%, so the schema already documents confirm, credentials, and base_url. The description only implies custom_field_id via the URL template and adds no new semantics for the remaining parameters, so baseline 3 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?
States a specific verb (Deletes) and resource (custom field definition) and even names the endpoint path, so the action is unambiguous. It does not explicitly differentiate from siblings like delete_enum_option or update_custom_field, but the resource noun is distinctive enough to identify the target.
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 guidance on when to use this tool versus alternatives (e.g. delete_enum_option, update_custom_field, archive_* patterns). No prerequisites, no note that the field must exist, and no mention of the required confirm flag as a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_enum_optionDelete Enum OptionBDestructiveInspect
Deletes an enum option using /enum_options/delete/:enum_option_id. Limitations: destructive write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| enum_option_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotent, so the statement 'destructive write operation' largely restates structured data. The endpoint path adds a small amount of context, but the description omits what is destroyed, whether deletion is reversible, and that the confirm flag gates the 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?
Two short, front-loaded sentences with no filler. The 'Limitations' sentence is slightly redundant with annotations, but overall it is tight and readable.
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 destructive mutation with no output schema, the description should note irreversibility and the required confirmation gate. With annotations covering the safety profile and the schema covering params, it is adequate but leaves meaningful 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 description coverage is 86%, so the schema already documents parameters, including the required confirm flag. The description adds no parameter-level detail (e.g., format of enum_option_id or auth requirements) beyond what the schema provides, so baseline 3 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?
States a specific verb (deletes) and resource (enum option) and even names the endpoint path, so the operation is unambiguous. It does not differentiate itself from siblings like update_enum_option or list_enum_options, keeping it 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?
There is no guidance on when to use this versus update_enum_option or list_enum_options, nor any prerequisites such as needing a valid enum_option_id or confirmation. The 'Limitations' note is a safety statement, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_eventDelete EventCDestructiveInspect
Deletes a time entry using /events/delete/:event_id. Limitations: destructive write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| event_id | Yes | ||
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The line 'destructive write operation' merely restates the destructiveHint=false/readOnlyHint=false annotations and adds no new information. With annotations already covering the safety profile, the description should instead disclose irreversibility, whether the event can be recovered via restore_event, or the auth requirements — none of which appear.
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 the action front-loaded and no filler. The second sentence is largely redundant with the annotations, which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 7 parameters (5 focused on auth/workspace routing), the description is thin but the schema carries most of the load and annotations cover the safety profile. Missing confirmation of side effects and recovery path keeps it at minimum viable.
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 86%, so the schema already documents confirm, base_url, account_id, and the token aliases. The description only implies that event_id is a path segment, adding little beyond the structured fields; baseline 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?
States a specific verb+resource ('Deletes a time entry') and even names the REST endpoint. It does not differentiate itself from siblings like delete_events_batch (which deletes many) or restore_event (the inverse), so an agent must infer the single-vs-batch distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: nothing tells the agent to prefer delete_events_batch for multiple entries, whether the event can be restored, or what prerequisites (account_id when multi-workspace) apply. Usage is only implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_events_batchDelete Events BatchCDestructiveInspect
Deletes time entries in batch using /events/batch/delete. Limitations: destructive write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| events | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| event_ids | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so 'destructive write operation' restates structured data rather than adding context. Nothing is said about irreversible loss of tracked time, auth/permission requirements, or partial-failure behavior when some event_ids are invalid.
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, front-loaded sentences with no filler; the destructive nature is stated up front. It is efficient, though the second sentence is largely redundant.
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 an 8-parameter destructive batch operation with no output schema, the description is too thin: it omits the required confirm flag, the events-vs-event_ids choice, workspace/account scoping, and any consequence of misuse. An agent would need to reverse-engineer intent from the schema alone.
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 75%, below the high-coverage baseline, and the description mentions no parameters at all. The undocumented 'events' parameter is ambiguous (array of objects or a string) and the description does nothing to clarify whether it or event_ids is the intended input.
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 (Deletes), resource (time entries), and scope (in batch), plus the underlying endpoint /events/batch/delete. The 'batch' qualifier implicitly separates it from the single-item delete_event sibling, though it never names that sibling explicitly.
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 guidance on when to use this versus delete_event (single) or update_events_batch. The 'Limitations:' line only flags destructiveness, not selection criteria, prerequisites, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_expenseDelete ExpenseBDestructiveInspect
Deletes an expense using GET /expenses/:expense_id/delete. Limitations: destructive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| expense_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, and the description merely restates "destructive write operation." It adds one genuinely useful detail — the unusual GET method and the confirm=true gate — but discloses nothing about reversibility, downstream effects, or auth requirements beyond what structured fields provide.
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, front-loaded with the action and followed by constraints, with no filler. The endpoint path is slightly boilerplate but still compact overall.
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 annotations that already carry the full safety profile, a schema at 86% coverage, and no output schema, the description covers the essentials an agent needs. The missing element is any statement about recoverability or consequences of the deletion, which matters for a destructive 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?
Schema description coverage is 86%, so the confirm and credential/base_url parameters are already documented in the schema itself. The description adds no syntax, format, or meaning beyond what the schema provides; baseline 3 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?
States a specific verb and resource ("Deletes an expense") and even names the exact endpoint, so the operation is unambiguous. It does not explicitly differentiate itself from siblings like update_expense or archive_* tools, but the delete intent is self-evident from the name and text.
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 guidance on when to use this tool versus alternatives (e.g., how it differs from update_expense or whether a soft-delete/archive path exists). The only conditional information given is the confirm=true requirement, which is a precondition rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_holidayDelete HolidayADestructiveInspect
Deletes a holiday using GET /holidays/delete/:holiday_id. Limitations: destructive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| holiday_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, and openWorldHint=true. The description adds that it is a 'destructive write operation' and 'requires confirm=true', which reinforces annotations but also adds a specific behavioral requirement (confirmation parameter) not present in annotations. Some additional value, but not extensive beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action and endpoint, then limitations. No waste.
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 annotations cover safety profile and schema covers parameters, the description adds the confirm requirement and endpoint. However, it doesn't mention potential side effects (e.g., cascading deletions) or return behavior, though no output schema exists. Adequate but minor 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 description coverage is 86%, so the schema already documents most parameters. The description adds the requirement of confirm=true, but holiday_id semantics are not elaborated. Baseline 3 is appropriate when schema does heavy lifting.
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?
States a specific verb+resource ('Deletes a holiday') and even names the underlying endpoint GET /holidays/delete/:holiday_id, which distinguishes it from siblings like delete_timeoff, delete_event, and delete_task.
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 mentions the destructive nature and confirm=true requirement, which gives some usage context, but does not explicitly compare to alternatives (e.g., update_holiday, list_holidays) or state when to use vs. not use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_invoiceDelete InvoiceBDestructiveInspect
Deletes an invoice using POST /invoicing/:account_id/invoices/:invoice_id/delete. Limitations: destructive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| invoice_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, so 'destructive write operation' is redundant with structured data. The description does add the confirmation gate, but it omits consequences of deletion (reversibility, effect on linked timecards/expenses, error on already-deleted invoice given non-idempotency).
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 compact clauses, with the action and endpoint front-loaded before the limitations. No filler sentences, though the endpoint path duplicates information the schema parameters already imply.
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 destructive, non-idempotent mutation with no output schema, the description covers the confirmation requirement and target endpoint, which are the essentials. It still leaves gaps on failure behavior and side effects on related records, which matter for an irreversible 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 86%, so the schema already documents confirm, account_id, base_url, tokens, etc. The description only echoes the confirm=true requirement and the account_id/invoice_id path placement, adding no syntax or format detail beyond the structured fields. Baseline 3 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?
States a specific verb (deletes) and resource (invoice) plus the exact endpoint POST /invoicing/:account_id/invoices/:invoice_id/delete, which leaves no ambiguity about scope. It does not, however, differentiate itself from sibling mutations such as mark_invoice_void or archive-style operations, which a reader must infer.
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 'Limitations' clause gives one actionable prerequisite (confirm=true), which is real usage guidance. It never says when to delete versus voiding or archiving an invoice, nor what state the invoice must be in, so the when-to-use decision against siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_projectDelete ProjectCDestructiveInspect
Deletes a project using /projects/delete/:project_id. Limitations: destructive write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
'Limitations: destructive write operation' merely restates destructiveHint=true and readOnlyHint=false from the annotations, earning no credit. It omits behavior the annotations do not carry: whether the deletion cascades to tasks/timecards/expenses, whether it is reversible, and what the caller sees on success or failure.
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 the action front-loaded and no filler prose. The second sentence is largely redundant with the annotations, which slightly dilutes the efficiency.
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 destructive, non-idempotent, open-world mutation with seven parameters and no output schema, the description is thin. It never addresses scope of deletion, recoverability, permission requirements, or the required confirm flag, leaving an agent to infer the risk profile entirely from annotations and 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?
Schema description coverage is 86%, so the schema already documents the auth parameters, base_url override, and the confirm flag. The description only echoes project_id via the endpoint template and adds no semantics beyond the schema, so the baseline 3 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?
States a specific verb and resource ('Deletes a project') plus the underlying endpoint, so the operation is unambiguous. It does not distinguish itself from the closely related siblings archive_project and restore_project, which an agent must choose between.
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 delete versus the available alternatives. With archive_project and restore_project present in the sibling set, the description should say whether this is permanent, when archiving is preferred, or how recovery works, and it says none of that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reportDelete ReportADestructiveInspect
Deletes one or more saved/shared reports using POST /docs/delete. Limitations: destructive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| report_id | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotency, so the safety profile is covered structurally. The description adds useful context beyond that: the operation is destructive, it is a write, and confirm=true is mandatory, though it does not note irreversibility or what happens to still-running report jobs.
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 front-loaded sentences with a clear 'Limitations:' label and no filler; the constraint (confirm=true) is placed before the endpoint detail. Slightly terse relative to the 8-parameter surface but nothing is wasted.
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?
No output schema exists, so return values needn't be explained, and annotations already convey the destructive/write profile. For a simple deletion tool the description is nearly complete, with the only real gap being the undocumented 'data' vs 'report_id' invocation paths.
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?
With 75% schema description coverage, the schema carries most parameter meaning, so baseline 3 applies. The description's 'one or more' hints at batch deletion but does not resolve the ambiguity between the 'data' array and the standalone 'report_id' parameter, which are undocumented in both places.
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?
States a specific verb ('Deletes'), the resource ('saved/shared reports'), and a scope qualifier ('one or more') plus the underlying endpoint. An agent can distinguish it from get_report/update_report/list_reports, though it offers no explicit contrast with sibling delete_* tools.
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 destructive nature and the confirm=true prerequisite are stated, which signals when the tool is appropriate, but there is no guidance on when to delete versus archive or restore, nor any prerequisite/permission context for choosing it over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_scheduleDelete ScheduleADestructiveInspect
Deletes a schedule using GET /schedules/delete/:schedule_id. Limitations: destructive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| schedule_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is covered. The description adds the meaningful constraint that confirm=true is mandatory, but does not disclose side effects (e.g., what happens to assignments or the schedule's history).
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 compact sentences with the action and endpoint front-loaded, followed immediately by the operative constraint. 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 destructive single-resource delete with annotations covering safety and an 86%-documented schema, the definition is nearly sufficient. It could mention auth requirements or the effect on related schedule assignments, but nothing essential to invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, so the schema already documents confirm, base_url, account_id, tokens, etc. The description only restates the confirm requirement, adding no semantics beyond the structured fields; baseline 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?
States a specific verb (deletes) plus the resource (a schedule) and even the underlying endpoint, making it trivially distinguishable from siblings like update_schedule or delete_task.
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 gives a precondition ('requires confirm=true') and flags the operation as destructive, which implicitly tells the agent when it is safe to call. However, it names no alternative or when-not-to-use condition, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskDelete TaskCDestructiveInspect
Deletes a task using /tasks/delete/:task_id. Limitations: destructive write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| task_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so 'destructive write operation' merely restates structured data. The description adds the endpoint path but says nothing beyond annotations about irreversibility, whether a restore_task recovery path exists, or any permission requirements.
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, front-loaded with the action and endpoint with no filler. It is efficient, though the 'Limitations' fragment is thin enough to feel like a stub.
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 destructive 7-parameter operation with no output schema, the description covers only the basic action. Given the required confirm flag and auth parameters are documented in the schema at 86% coverage, it is minimally adequate, but it omits recovery options and side effects an agent should know before deleting.
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 86% and the required confirm flag is already documented in the schema, so the heavy lifting is done there. The description only alludes to task_id through the endpoint path and adds no syntax or constraint detail 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?
States a specific verb and resource ('Deletes a task') and pins down the endpoint /tasks/delete/:task_id, which is concrete. It does not, however, differentiate from close siblings like archive_task or restore_task, which an agent must choose among.
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 when-to-use or when-not-to-use guidance and no named alternative (archive_task, restore_task exist as siblings). The 'Limitations' line only notes destructiveness, not the conditions that should select this tool over archiving.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_task_commentDelete Task CommentCDestructiveInspect
Deletes a task comment using /comments/delete/:comment_id. Limitations: destructive write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| comment_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so 'destructive write operation' merely restates structured data and adds no value. The description omits genuinely useful behavioral context such as irreversibility, auth requirements, or whether the deletion can be undone.
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 the action front-loaded and no padding. The second sentence is largely redundant with the annotations, but the text is tight.
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 destructive single-entity delete with annotations covering the safety profile and no output schema, the essentials are present. It nonetheless leaves out confirmation behavior and auth expectations that would help an agent call it 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 86%, so the schema already documents comment_id, confirm, and the auth/account overrides. The description adds no parameter meaning beyond that, which is the baseline case.
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?
Names a specific verb and resource ('Deletes a task comment') plus the underlying endpoint, so an agent can distinguish it from delete_task and the other delete_* siblings. It stops short of explicitly contrasting with the closely related list_task_comments/add_task_comment, but the purpose 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 use this versus alternatives, no prerequisites, no mention that the required confirm flag gates the call. The agent must infer everything from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_timeoffDelete TimeoffADestructiveInspect
Deletes a time off request using GET /timeoffs/:timeoff_id/delete. Limitations: destructive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| timeoff_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description effectively reinforces the destructive nature already hinted by annotations, and adds unique behavioral context by explicitly stating that this destructive write requires confirm=true. It could have disclosed if deletion is permanent or recoverable, but it provides more than the annotations alone.
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 highly concise, one sentence covering the action and a critical limitation. Every part earns its place without any 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?
The description gives the core action, the exact endpoint, and a critical safety requirement, which is sufficient for a destructive tool with annotations. It doesn't explain the return value or all permissions, but since there is no output schema and annotations cover safety, it is mostly 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?
With 86% schema description coverage, the schema already documents most parameters, including the confirm requirement. The description mentions confirm=true, which duplicates the schema but adds minimal new meaning for the 7 parameters overall. The baseline is 3.
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 (deletes) and resource (a time off request), and uniquely includes the exact endpoint. It clearly distinguishes this specific delete operation from other delete sibling tools like delete_customer or delete_task.
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 implies usage through "deletes a time off request" and lists a critical limitation, but it does not explicitly state when to use this tool versus alternatives such as update_timeoff. However, for a specific delete operation, 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.
delete_user_groupDelete User GroupCDestructiveInspect
Deletes a user group/team using /user_groups/delete/:user_group_id. Limitations: destructive write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| user_group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the description's 'destructive write operation' line merely restates structured data. It adds no new behavior: not what happens to group members or associated data, not whether the delete is recoverable, not auth requirements or rate limits.
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, front-loaded sentences with no padding, and the endpoint reference is placed immediately after the action. The second sentence is largely redundant with the annotations, which slightly weakens it, but it is not verbose.
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 destructive, non-idempotent, open-world delete with no output schema, the description is minimally adequate: safety is covered by annotations and the required confirm flag is covered by the schema. It still omits cascade effects (what happens to members, projects, or trackables tied to the group), which an agent would want before calling.
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 86%, so the schema already documents confirm, base_url, api_token, account_id, access_token, and app_password. The description adds nothing about user_group_id beyond echoing it in the URL path, so 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 names a specific verb (deletes) and resource (user group/team) and even cites the underlying endpoint /user_groups/delete/:user_group_id, so the action is unambiguous. It does not, however, contrast itself with the many other delete_* siblings (delete_customer, delete_project, delete_task), though the resource name largely does that work.
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 guidance on when to use this tool versus alternatives (e.g., archive_user vs delete, list_user_groups to find the id), no preconditions such as required permissions or the fact that the group must exist, and no note on irreversibility beyond a generic 'destructive' label.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_projectDuplicate ProjectBInspect
Duplicates a project using /projects/duplicate/:project_id. Limitations: write operation; supports extra API parameters via passthrough.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, and 'write operation' is consistent with that. The 'supports extra API parameters via passthrough' note usefully explains the additionalProperties:true schema, but nothing is said about side effects, the new project's ownership/naming, or rate limits.
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 the action front-loaded and no filler. Slightly terse but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 7 parameters and no output schema, the description is a bit thin: it omits what the duplicate returns and any required context beyond the URL. Annotations plus the 71%-covered schema carry most of the remaining burden.
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 71%, so most parameters are already documented. The description adds only the passthrough hint and implicitly the project_id via the endpoint; it doesn't clarify what the 'name' parameter controls for the duplicate, which is the one field most likely to confuse an agent.
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?
States a specific verb+resource ('Duplicates a project') and even names the underlying endpoint, so an agent knows exactly what it does. It doesn't explicitly contrast with create_project or update_project, 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?
Only a fragment of guidance: it notes it is a write operation and supports passthrough params. There's no statement of when to duplicate vs. use create_project or what prerequisites (e.g. workspace/account_id, permissions) are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_invoiceExport InvoiceCRead-onlyIdempotentInspect
Exports an invoice using GET /:account_id/invoices/:invoice_id/export. Limitations: read-only export.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| invoice_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's 'read-only export' merely restates structured data. It adds no behavioral context beyond that, such as the export format produced, whether it streams/downloads a file, or any rate limits or permission requirements.
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 compact sentences with the action and endpoint front-loaded and no filler. The second sentence is somewhat redundant with the annotations but is short and harmless.
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?
No output schema exists, so the description should ideally say what the export actually produces (PDF, CSV, URL, binary payload). Since 'export' implies a non-JSON artifact, this is a meaningful gap, though annotations cover the safety profile adequately.
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 83%, so the schema already documents nearly every parameter (base_url, api_token, account_id, access_token, app_password), and the description adds nothing further about them. The only undocumented field, the required invoice_id, is merely echoed in the endpoint path. Baseline 3 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 names a specific verb ('Exports') and resource ('an invoice') and even pins the REST endpoint, so an agent can immediately tell this apart from mutation-oriented siblings like send_invoice or mark_invoice_paid. It stops short of distinguishing itself from get_invoice or the sibling export_timecards, so it is clear but not fully differentiated.
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 guidance on when to choose export_invoice over get_invoice, list_invoices, or export_timecards, and no prerequisites or exclusions are stated. The only hint is the terse 'Limitations: read-only export', which implies no side effects but does not route the agent to an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_timecardsExport TimecardsCRead-onlyIdempotentInspect
Exports timecards using GET /timecards/export. Limitations: read-only export; pass data in the API-supported format.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| data | No | ||
| from | No | ||
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description's "read-only export" merely restates that safety profile. It adds the endpoint path and a vague "pass data in the API-supported format" note but discloses nothing about auth requirements, return format, or limits. With annotations carrying the safety burden, this is adequate but adds little genuine context.
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 that are front-loaded with the core action and contain no padding. The second sentence is somewhat vague but still earns its place as a constraint statement.
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 export tool with no output schema and only partial schema coverage, the description omits what the export produces, what format the result takes, and how the data parameter works. An agent would struggle to call this correctly, especially the data argument.
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?
With 9 parameters and only 56% schema description coverage, the description should compensate for the undocumented to/data/from/user_id arguments but does not. "Pass data in the API-supported format" gestures at the data parameter without explaining its structure, acceptable values, or relationship to from/to.
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?
States a specific verb and resource ("Exports timecards") and even names the endpoint GET /timecards/export, so the basic action is unambiguous. However, it does not distinguish this tool from closely related siblings such as export_invoice, list_timecards, get_timecard, or generate_timecard, so the agent gets no help telling similar export/list/get operations apart.
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 guidance on when to use this tool versus list_timecards, get_timecard, or export_invoice. The "Limitations" line describes a constraint, not a usage condition, and no prerequisites or exclusions are given, leaving selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_timecardGenerate TimecardCInspect
Generates a user timecard using GET /timecards/generate. Limitations: write operation; can save generated days when save_days=true.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| save_days | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the description's 'write operation' note is largely redundant. The genuinely additive part is that generated days can be persisted when save_days=true, which clarifies side effects beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the core action front-loaded ahead of the caveats. No padding or repetition.
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 output schema, the description omits what the call returns, the required time-range/auth inputs, and how the result relates to saving. The save_days note is the only behavioral completeness it provides.
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 sits at 56% with 9 parameters and none required. The description explains only save_days; from/to, user_id, account_id requirements, and auth parameter selection are left to the schema, which is itself incomplete.
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?
States a specific verb+resource ('Generates a user timecard') and even names the underlying endpoint, so an agent can distinguish it from read siblings like get_timecard and list_timecards. It stops short of explicitly naming those alternatives.
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 statement of when to use this tool versus save_timecard_day, get_timecard, or export_timecards. The only usage-adjacent content is the save_days note, which is a parameter behavior rather than selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountGet AccountARead-onlyIdempotentInspect
Gets account/workspace settings from /account. Use for account-level configuration and metadata. Limitations: read-only; visibility depends on account role.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds genuine context beyond them: 'visibility depends on account role,' which tells the agent results may vary by permissions. 'Read-only' merely restates readOnlyHint and adds little.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then usage, then limitations. No filler and nothing that repeats structured data unnecessarily.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with annotations covering safety and full schema coverage, the description is nearly complete, and the role-based visibility caveat is a useful addition. With no output schema, it could have described the returned account shape, which is the remaining minor gap.
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 all five parameters are already documented, including the multi-workspace requirement for account_id. The description adds no parameter-level meaning beyond the schema, so the baseline 3 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?
Specific verb and resource ('Gets account/workspace settings from /account'), which is clear enough for an agent to identify the operation. It stops short of distinguishing itself from close siblings like get_me or list_workspaces, so it lands at 4 rather than 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?
'Use for account-level configuration and metadata' gives implied usage context, but no when-not guidance and no alternatives are named among the many sibling getters (get_me, get_user, get_customer, list_workspaces). Adequate but leaves the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_customerGet CustomerARead-onlyIdempotentInspect
Gets a specific customer from /customers/:customer_id. Supports include_custom_fields. Limitations: read-only; customer must belong to the authenticated account context.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| customer_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the 'read-only' restatement earns little. The added value is the account-scoping constraint ('customer must belong to the authenticated account context'), a genuine behavioral/authorization fact not present in annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler: purpose, one supported flag, then limitations. Efficient, though the endpoint path slightly duplicates what the name already conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-resource getter with no output schema, the description covers purpose, endpoint, the one non-obvious flag, and the authorization scope. No output explanation is needed since no output schema exists, and no pagination concern applies.
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 71%, so the schema already documents base_url, api_token, account_id and the token aliases. The description only flags include_custom_fields (which is undocumented in the schema) and adds no syntax or format detail. Baseline 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?
States a specific verb and resource ('Gets a specific customer') and anchors it to the endpoint /customers/:customer_id, which clearly distinguishes it from list_customers. It stops short of naming the sibling, but the singular-resource framing 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?
The 'Limitations' clause implies usage context (read-only, account-scoped), but it never states when to use this versus list_customers or get_account, nor any exclusion conditions. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_custom_fieldGet Custom FieldBRead-onlyIdempotentInspect
Gets a custom field definition from /custom_fields/:custom_field_id. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_field_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so 'Limitations: read-only' merely restates what structured data provides. No additional behavioral context (e.g. behavior on a missing ID, auth requirements across the six credential params) is 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?
Two short, front-loaded sentences with no filler. It is efficiently sized for a simple getter, though 'Limitations: read-only' adds little given the annotations.
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 single-resource getter with no output schema and an adequately described input schema, the description is minimally sufficient. It omits any note about the returned definition shape or not-found behavior, which keep it at the baseline rather than above it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the schema already documents the parameters well. The description adds only the endpoint path and does not clarify which credential parameter is preferred or what custom_field_id must reference, so this is the standard baseline.
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?
States a specific verb+resource ('Gets a custom field definition') and even names the REST path, which clearly distinguishes it from list_custom_fields, create_custom_field, and update_custom_field. It stops short of explicitly differentiating from its siblings, but the single-fetch semantics are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'read-only' limitation implies a safe retrieval use, but there is no explicit when-to-use guidance and no pointer to alternatives such as list_custom_fields for enumeration. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet EventARead-onlyIdempotentInspect
Fetches one time event by event_id from /events/{id}. Use when you already have an event identifier and need full event detail. Limitations: requires a valid event_id in the same accessible account context; read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| event_id | Yes | ||
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint and destructiveHint, so safety is handled externally. The description adds the genuine extra constraint that the event_id must resolve "in the same accessible account context," which hints at workspace scoping/auth requirements beyond the annotation set.
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 tight sentences: purpose + endpoint first, then the use condition, then constraints. Every clause carries information and nothing is repeated; the minor redundancy of "read-only" against the annotation is negligible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-record fetch with no output schema, the description supplies endpoint, trigger condition and the account-context caveat, which is sufficient to call it correctly. It could note the return shape of the "full event detail," but the safety profile is already in annotations.
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 83%, so the schema already documents base_url, api_token, account_id, access_token and app_password. The description mentions event_id and account context in prose but adds no format, type or aliasing detail beyond the schema, so the baseline 3 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?
States a specific verb and resource ("Fetches one time event by event_id") and pins the exact endpoint /events/{id}, making it unambiguous that this returns a single event rather than a collection. This cleanly separates it from list_events, list_filtered_events, get_events_summary and get_events_stats in the sibling set.
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?
"Use when you already have an event identifier and need full event detail" gives a clear positive trigger condition tied to having an ID. It stops short of naming explicit alternatives or when-not cases (e.g. bulk retrieval), so it is good but not fully routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_events_statsGet Events StatsBRead-onlyIdempotentInspect
Gets aggregate event statistics from /events/stats. Use for metrics over date ranges. Limitations: read-only; from/to are required by most stats queries.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| to | Yes | ||
| from | Yes | ||
| filter | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the 'read-only' note in the description is largely redundant. The only added behavioral content is the note that from/to are required by most stats queries, which is modest context and not backed by any error/pagination/auth disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the core purpose and the endpoint front-loaded. The 'Limitations' clause is compact and earns its place, though the trailing sentence is somewhat redundant with the schema's required field declaration.
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 10-parameter aggregate-read tool with no output schema, the definition covers purpose, endpoint, and the read-only nature, but says nothing about what the aggregates actually contain (grouped by what? returned per filter?) or how the filter parameter shapes the result. An agent can invoke it, but cannot predict the response.
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?
With 10 parameters and only 50% schema description coverage, the description must carry more of the load, but it only echoes that from/to are required — something the schema's required array already states, and hedged with 'most stats queries'. Nothing explains the filter enum values (USER/PROJECT/CUSTOMER/TASK/COMPANY), id, or include_custom_fields, so the two sources together still leave half the surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Gets aggregate event statistics') and even discloses the backing endpoint (/events/stats), so the agent knows exactly what it does. It does not, however, differentiate itself from the close sibling get_events_summary, leaving the agent to guess which of the two to call.
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?
'Use for metrics over date ranges' gives an implied usage context, but there is no statement of when NOT to use it and no routing to alternatives such as get_events_summary, get_event, or list_events, which all touch the same resource. Adequate but leaves the sibling-choice decision unresolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_events_summaryGet Events SummaryBRead-onlyIdempotentInspect
Gets aggregated event/hour summary from /events/summary. Use for totals over date ranges without fetching every event. Limitations: read-only; from/to are required by most summary queries.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| to | Yes | ||
| from | Yes | ||
| filter | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the description's 'read-only' note is largely redundant. It adds modest value by confirming that from/to are required by most summary queries, but says nothing about the shape of the aggregation, granularity limits, or rate/pagination behavior.
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 tight sentences, front-loaded with purpose then usage then limitations; nothing is padded. The 'read-only' clause duplicates structured annotation data, which is a minor waste, but the overall size is well matched to the content.
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 10-parameter tool with no output schema and only 50% schema coverage, the description is thin: it does not explain the aggregation result, the meaning of the filter dimension, or how id interacts with from/to. An agent would need to open the schema and still be missing semantics for half the parameters.
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 only 50% across 10 parameters, so the description should compensate — instead it only restates that from/to are required, which the schema's required array already communicates. The filter enum (USER/PROJECT/CUSTOMER/TASK/COMPANY) and parameters like id and include_custom_fields get no semantic elaboration anywhere.
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?
States a specific verb+resource ('Gets aggregated event/hour summary') and even names the endpoint, which is more concrete than a tautology. It partially differentiates from list_events via 'without fetching every event', but never distinguishes itself from the close sibling get_events_stats, so an agent still has to guess between the two.
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?
'Use for totals over date ranges without fetching every event' gives a clear selecting condition and implicitly rules out the per-event listing tools. However, it never names get_events_stats or list_filtered_events as the alternatives, and gives no exclusion criteria, so the routing is slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_expenseGet ExpenseCRead-onlyIdempotentInspect
Gets one expense using GET /expenses/:expense_id. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| expense_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=true, so the description's 'Limitations: read-only' is redundant. It adds no new behavioral context such as pagination-free single fetch, required auth mode among the several token parameters, or response shape (no output schema exists).
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 clauses, front-loaded with the action and endpoint. Efficient, though the 'Limitations: read-only' fragment is filler given the annotations.
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 6-parameter retrieval tool with no output schema, the description omits return-value shape, auth selection among api_token/app_password/access_token, and multi-workspace account_id requirement. It relies entirely on the schema and annotations to fill these 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 description coverage is 83%, with most parameters documented in the schema (base_url, api_token, account_id, access_token, app_password). The description adds no parameter detail at all, so it does not compensate for the undocumented expense_id or clarify the auth-parameter alternatives.
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?
States a specific verb+resource ('Gets one expense') and even names the underlying endpoint GET /expenses/:expense_id, which distinguishes it from list_expenses and get_* siblings. It doesn't explicitly name which sibling it replaces, but the singular/plural distinction is implicit.
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 when-to-use guidance, no mention of when to prefer list_expenses, update_expense, or delete_expense. The agent must infer that this is the single-record read from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceGet InvoiceBRead-onlyIdempotentInspect
Gets one invoice using GET /:account_id/invoices/:invoice_id. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| invoice_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description's 'Limitations: read-only' merely restates the readOnly annotation and adds no new behavioral context such as authentication requirements or rate limits.
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 purpose and endpoint come first and the limitation follows. Every sentence earns its place, though the read-only limitation is redundant with annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter, the description covers what the tool does and the HTTP method, while annotations cover safety and the schema covers most parameters. It omits usage routing and authentication context, leaving gaps for an agent deciding between this and list_invoices.
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 83%, so the schema already documents most parameters. The description only names invoice_id and account_id as part of the path but adds no format, constraint, or interaction detail 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?
States the specific verb and resource ('Gets one invoice') and even the exact endpoint path, which distinguishes it from list/update/delete invoice siblings by singular scope. However, it does not explicitly name an alternative or sibling, so it stops short of the top score.
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?
Provides no explicit when-to-use or when-not-to-use guidance. The singular 'one invoice' implies retrieving a specific invoice, but it never mentions list_invoices or the condition for choosing this over that alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meGet MeARead-onlyIdempotentInspect
Returns the authenticated user's profile from /me (user_id, account_id and identity fields). Use this first to discover account context before calling list/get tools. Limitations: read-only; requires valid credentials via app_password/api_token or X-API-Key; does not return full account-wide analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered structurally. The description adds real context beyond that: the required credential mechanisms (app_password/api_token or X-API-Key) and the explicit limitation about account-wide analytics.
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 tight sentences: purpose first, then usage ordering, then limitations. Every sentence earns its place 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?
With no output schema, the description carries return-value burden and does so by naming the returned fields. Auth requirements and scope limits are covered. Minor gap: no detail on response shape beyond the field list, but overall it is self-sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the schema. The description references the credential inputs (app_password/api_token or X-API-Key), which adds marginal, non-syntactic meaning but does not extend beyond what the schema already states, warranting the baseline 3.
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?
States a specific verb (Returns) and resource (the authenticated user's profile from /me) and enumerates the identity fields returned (user_id, account_id, identity fields). This clearly distinguishes it from the many get_* siblings that fetch specific entities.
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?
Explicitly instructs 'Use this first to discover account context before calling list/get tools,' giving a clear ordering rule relative to siblings. It also scopes the tool by noting it does not return full account-wide analytics, steering analytics queries elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_next_invoice_numberGet Next Invoice NumberCRead-onlyIdempotentInspect
Gets the next invoice number using GET /invoices/next_number. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so 'Limitations: read-only' merely repeats structured data rather than adding context. The only new element is the HTTP verb/path, which is minor. It says nothing about whether the returned number is reserved or persists if unused.
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 very short sentences with the action front-loaded and no filler. It is tight, though the second sentence is redundant with the annotations rather than earning 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?
There is no output schema, so the description should explain what 'the next invoice number' returns (a scalar, string, or object) and whether retrieving it consumes/reserves that number. For a non-obvious utility endpoint with no annotations beyond safety flags, these gaps matter.
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 all five parameters (base_url, api_token, account_id, access_token, app_password) are already documented in the schema. The description adds no parameter-level meaning, which is the expected baseline when the schema does the heavy lifting.
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?
States a specific verb+resource ('Gets the next invoice number') and names the exact endpoint GET /invoices/next_number. It does not differentiate itself from siblings like get_invoice or create_invoice, 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 call this versus create_invoice or get_invoice, nor any prerequisites such as whether an invoice must exist first. Usage is left entirely to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectGet ProjectARead-onlyIdempotentInspect
Gets a specific project from /projects/:project_id/min. Supports detail flags for tasks, task lists, closed tasks and custom fields. Limitations: read-only; project must belong to the authenticated account context.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_tasks | No | ||
| include_task_lists | No | ||
| include_closed_tasks | No | ||
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds the endpoint path (/projects/:project_id/min), the supported detail flags, and the ownership constraint, which are useful beyond the annotations. It does not describe return format or pagination, but that is a minor gap given the annotation coverage.
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 tightly written sentences that front-load the purpose, then detail flags, then limitations. No wasted words; 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 read-only retrieval tool with no output schema, the description covers what it does, the endpoint, optional detail flags, and ownership limitations. It omits return value details and deeper auth mechanics, but those are partially covered by the schema and annotations, making it adequate.
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 50%. The description conceptually covers project_id ('specific project') and the four include_* flags ('detail flags for tasks, task lists, closed tasks and custom fields'), but does not explain the authentication parameters (base_url, api_token, account_id, access_token, app_password) or provide exact flag names. Partial compensation only.
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?
States a specific verb ('Gets') and resource ('a specific project') with the exact endpoint path, distinguishing it from list_projects and other get_* siblings. No explicit sibling naming, but the specificity is sufficient for an agent to select it.
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?
Provides a clear limitation (read-only, project must belong to authenticated account context) but does not say when to use this versus list_projects or other retrieval tools. Usage is implied by the description 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.
get_reportGet ReportBRead-onlyIdempotentInspect
Gets a saved/shared report using GET /docs/:report_id. Limitations: read-only; report_id maps to doc id.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| report_id | Yes | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered and 'read-only' in the description is largely redundant. The one genuinely additive fact is 'report_id maps to doc id', a non-obvious behavioral mapping, but nothing on auth, pagination, or errors is added.
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, front-loaded sentences led by the verb, with no filler and the endpoint detail tucked at the end. Sized appropriately for a simple lookup 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?
With no output schema and six parameters, the definition is minimal but functional: it discloses the endpoint, the read-only nature, and the id mapping. However it omits any return-value shape and any routing guidance against the many report siblings, leaving meaningful gaps for an agent.
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 high (83%), so the baseline is 3, and the description adds real meaning by explaining that report_id maps to a doc id — semantics the schema (bare 'number' for report_id) does not capture. The auth-ish params (api_token, access_token, app_password, account_id) are left entirely to 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?
States a specific verb and resource ('Gets a saved/shared report') and even names the underlying endpoint GET /docs/:report_id. The singular 'a report' implicitly distinguishes it from list_reports, but it never explicitly names sibling tools like list_reports or delete_report, so differentiation is left to inference.
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 statement of when to use this versus list_reports or any alternative, nor any when-not guidance. 'Limitations: read-only' is a behavioral constraint rather than usage direction, so the agent must infer that this fetches a single report by id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduleGet ScheduleCRead-onlyIdempotentInspect
Gets one schedule using GET /schedules/:schedule_id. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| schedule_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so 'Limitations: read-only' merely restates structured data rather than adding context. Nothing is said about auth requirements (api_token/app_password), the multi-workspace account_id requirement, or error behavior for a missing schedule_id.
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, front-loaded with the verb and resource, with the endpoint placed immediately after. It is tight and wastes little space, though the 'Limitations: read-only' clause is filler given the annotations.
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 single-parameter read tool with annotations covering the safety profile, the description is adequate but thin. It omits the auth/workspace-scoping context that the six-parameter schema implies, which would help an agent call it 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 83%, so the schema already documents base_url, api_token, account_id, access_token, and app_password. The description adds nothing about schedule_id's format or the conditional requirement of account_id; baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb ('Gets') and resource ('one schedule') and gives the underlying endpoint GET /schedules/:schedule_id, so an agent can tell it retrieves a single schedule. It does not distinguish itself from close siblings like list_schedules or get_user_schedule, which keeps it from 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?
There is no explicit when-to-use guidance, no conditions or prerequisites, and no mention of alternatives. The phrase 'Gets one schedule' implies a single-record lookup, but the agent must infer that versus list_schedules on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskGet TaskARead-onlyIdempotentInspect
Gets a specific task from /tasks/:task_id. By default this tool requests include_custom_fields=true so task custom fields are returned unless explicitly disabled. Use when you need full task details by id. Limitations: read-only; task must belong to the authenticated account context.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/open-world, so the safety bar is low, yet the description still adds real context: the include_custom_fields=true default when fetching, and the constraint that the task must belong to the authenticated account context. It does not mention pagination or error/not-found behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action before the default-behavior and limitation notes. The sentence 'Use when you need full task details by id' is mildly redundant with the opening, costing a perfect score.
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 7-parameter read tool with no output schema, the description covers the important default (custom fields) and the auth/ownership limitation. It does not sketch the returned task shape, which would help given there is no output schema, but nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 71% schema description coverage the baseline is 3, and the description adds meaningful semantics for include_custom_fields by stating it defaults to true. The schema already documents base_url/api_token/access_token/account_id, so remaining gaps are minor rather than compensated by prose.
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?
States a specific verb+resource and the underlying endpoint ('Gets a specific task from /tasks/:task_id'), which clearly separates it from list_tasks and other sibling getters. It does not name a sibling it might be confused with, but the single-resource-by-id scope 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?
'Use when you need full task details by id' gives a clear positive trigger, but there is no when-not guidance and no explicit routing away from list_tasks/list_user_tasks for bulk or filtered retrieval. Usage is implied rather than contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timecardGet TimecardBRead-onlyIdempotentInspect
Gets a user's timecard using GET /timecards. Limitations: read-only; typically requires user_id, from and to.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, so restating "read-only" adds nothing. The description discloses no pagination behavior, no return granularity, no auth/permission requirements despite openWorldHint, leaving real behavioral gaps for a multi-param read.
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 compact sentences with zero filler, and the core action is front-loaded ahead of the limitations note. Efficient and readable.
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 GET tool with annotations covering the safety profile and no output schema, this is minimally adequate, but it omits the timecard's contents/granularity and gives no routing against the several sibling timecard tools, which is the main thing an agent needs.
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 63% with 8 params and 0 required, and the description compensates only partially by flagging user_id/from/to as typically required — the three schemaless params (to, from, user_id) lack type/format detail. Baseline 3 is appropriate since the schema already documents the auth-related params.
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?
States a specific verb and resource ("Gets a user's timecard") and even names the backing endpoint GET /timecards. It is clear what the tool does, though it does not distinguish itself from close siblings like list_timecards or generate_timecard.
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?
"typically requires user_id, from and to" implies the calling context, which is useful, but there is no explicit when-to-use guidance and no mention of the obvious alternatives (list_timecards, get_timecards_count, export_timecards) that a selecting agent must choose between.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timecards_countGet Timecards CountCRead-onlyIdempotentInspect
Gets timecards count using GET /timecards/count. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| filter | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so 'Limitations: read-only' is largely redundant. Beyond restating the endpoint, the description says nothing about how the count is scoped (date range, filter semantics) or rate/auth behavior, so it adds little beyond the structured fields.
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, front-loaded with the action, and no padding in length. The 'Limitations: read-only' clause is redundant against annotations but costs little.
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 count endpoint with 8 params (including date-range and filter inputs) and no output schema, the description omits what the count represents and how to scope it. An agent cannot confidently construct a filtered count query from this definition.
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 63%, and the three operationally important params (to, from, filter) have no descriptions in either the schema or the description. The description does not explain how those select or restrict the count, so it fails to compensate for the coverage gap.
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?
States a specific verb and resource ('Gets timecards count') plus the underlying endpoint, which distinguishes it from data-returning siblings like list_timecards or get_timecard. It stops short of explicitly contrasting with those siblings, so it is clear but not fully differentiated.
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 when-to-use context, no mention of when a count is preferable to list_timecards, and no prerequisites. 'Limitations: read-only' is a trait statement, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timeoffGet TimeoffCRead-onlyIdempotentInspect
Gets one time off request using GET /timeoffs/:timeoff_id. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| timeoff_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the description's 'Limitations: read-only' adds nothing beyond structured data. It discloses nothing about authentication selection (api_token vs app_password vs access_token), error behavior for a missing ID, or response shape.
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 sentence is short and front-loaded with the action and endpoint. The trailing 'Limitations: read-only' clause is redundant with annotations rather than earning its place, but the overall text is lean.
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 six parameters and three mutually overlapping auth options, plus no output schema, the definition should at least hint at which credential to supply and what is returned; it does neither. It is minimally adequate for a simple read but leaves real gaps for an agent assembling the 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?
Schema description coverage is 83%, so the schema already documents the meaningful parameters (base_url, account_id, auth tokens) while timeoff_id itself carries no description. The description contributes no additional parameter meaning, which is the baseline 3 when the schema does the heavy lifting.
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 and resource ('Gets one time off request') and even names the endpoint GET /timeoffs/:timeoff_id, so an agent knows this is a single-record fetch. It does not explicitly distinguish itself from the sibling list_timeoffs or the other timeoff reads (get_timeoff_balance, get_timeoff_policy), so it falls short of 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?
There is no when-to-use or when-not-to-use guidance and no mention of the obvious alternative, list_timeoffs. The singular resource and the presence of a required timeoff_id only implicitly signal that this is for fetching one known request.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timeoff_balanceGet Timeoff BalanceBRead-onlyIdempotentInspect
Gets a user's balance status for a policy using GET /timeoffs/balances/status/:user_id/:policy_id. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| policy_id | Yes | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully covered by structured data. The description's 'Limitations: read-only' simply restates that, and adds no behavior beyond the endpoint path (no auth requirements, error cases, or multi-workspace behavior).
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?
Single front-loaded sentence with the action first, followed by a terse limitation clause. No padding or boilerplate; only the redundant read-only note costs it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with no output schema, the description is minimally adequate — the agent knows what it retrieves and that it is safe. It omits what the balance response contains and any note about multi-workspace/account_id behavior, which matters for a 7-parameter 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 description only names user_id and policy_id implicitly via the URL template; it adds no meaning beyond the schema, which documents 71% of parameters including account_id's multi-workspace requirement. With moderately rich schema coverage, 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?
States a specific verb and resource ('Gets a user's balance status for a policy') and even names the endpoint path, so the operation is unambiguous. However, it does not distinguish itself from the closely related sibling list_timeoff_balances, so the agent gets no help choosing between the two.
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 guidance on when to use this tool rather than list_timeoff_balances or calculate_timeoff_amount, nor any prerequisite or context statement. The only qualifier given is a read-only limitation, which is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timeoff_policyGet Timeoff PolicyCRead-onlyIdempotentInspect
Gets one time off policy using GET /timeoffs/policies/:policy_id. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| policy_id | Yes | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description's only behavioral note ('Limitations: read-only') merely restates readOnlyHint rather than adding anything new. It says nothing about auth requirements, workspace scoping, or error behavior beyond what the schema and annotations already carry.
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 very short, front-loaded sentences with no padding. Slight deduction because the second sentence is redundant with the readOnlyHint annotation rather than earning 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 simple read tool with no output schema and only one required parameter, this is minimally viable. It omits the account_id multi-workspace caveat and any notion of what the policy object contains, but the annotations and schema cover most of the burden.
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 83%, so the schema already documents the parameters, including the account_id multi-workspace requirement and the auth aliases. The description only echoes policy_id via the endpoint path, adding no syntax or format detail, so baseline 3 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?
States a specific verb ('Gets') and resource ('one time off policy') and even cites the underlying endpoint GET /timeoffs/policies/:policy_id. The singular 'one' implicitly distinguishes it from the sibling list_timeoff_policies, though the description never names that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus list_timeoff_policies, get_timeoff, or get_timeoff_balance. The agent must infer usage from the name alone; no preconditions, context, or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userGet UserARead-onlyIdempotentInspect
Gets a single user from /users/:id. Use when you already have a user id and need detailed profile data. Limitations: read-only; access to other users depends on role permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds a useful access-control note ('access to other users depends on role permissions'), which is beyond annotations, but does not disclose other behavioral traits like error handling or rate limits.
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, front-loaded with purpose and usage, with no wasted words. 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 read-only tool with annotations covering safety and no output schema, the description provides sufficient context on usage and access limitations. However, it does not address the multiple authentication parameters or the optional include_custom_fields parameter, leaving minor 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 71%, with many parameters undocumented in both schema and description. The description adds no meaning beyond what the schema provides for user_id or auth parameters, so baseline 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?
States a specific verb and resource ('Gets a single user from /users/:id') and differentiates from siblings by noting it's for when you 'already have a user id,' implicitly contrasting with list_users.
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?
Provides clear context for use ('when you already have a user id and need detailed profile data'), but does not explicitly name alternatives like list_users or get_me as contrasts, nor state 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.
get_user_groupGet User GroupBRead-onlyIdempotentInspect
Gets a user group/team by id from /user_groups/:user_group_id. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| user_group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so 'read-only' in the description largely repeats structured data. The endpoint path is minor added context, but auth requirements (api_token/app_password/account_id) and not-found behavior are left unaddressed.
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, front-loaded sentences with no filler. Efficient, though the second sentence is a bare constraint label rather than a substantive addition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with no output schema, the description is minimally adequate but silent on return shape and error/empty cases. With 6 parameters (mostly auth) and a multi-workspace caveat in the schema, slightly more context would help.
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 83%, so the schema already documents base_url, api_token, account_id, access_token and app_password. The description adds nothing about user_group_id's format or the workspace-scoping role of account_id, so it earns only the baseline.
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 and resource ('Gets a user group/team by id') and even names the endpoint path '/user_groups/:user_group_id', making the single-entity retrieval nature clear. It does not explicitly contrast with the sibling list_user_groups, but 'by id' distinguishes it implicitly.
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 only guidance is 'Limitations: read-only', which is a constraint rather than a when-to-use statement. There is no mention of when to prefer this over list_user_groups or what happens when the id is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_scheduleGet User ScheduleCRead-onlyIdempotentInspect
Gets the current schedule for a user using GET /schedules/users/:user_id/current. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The only behavioral claim, 'read-only', merely restates what the annotations already declare (readOnlyHint=true, destructiveHint=false, idempotentHint=true). It adds no new context such as auth requirements, workspace scoping behavior, or what 'current' means when no schedule exists.
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, front-loaded with the action and endpoint. The trailing 'Limitations: read-only' sentence is largely redundant with the annotations, which is the only wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only getter with no output schema, the definition is minimally sufficient: an agent knows what it fetches and where. But it omits what the returned schedule contains and when account_id becomes mandatory, leaving meaningful gaps for a 6-parameter 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?
Schema coverage is 83%, so the schema already documents base_url, api_token, account_id, access_token, and app_password. The description adds nothing about user_id semantics or the multi-workspace condition noted in the schema. Baseline 3 applies when the schema carries the burden.
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?
States a specific verb and resource ('Gets the current schedule for a user') and pins down the scope with 'current', which distinguishes it from the sibling list_schedules. However, it never contrasts itself with get_schedule, so an agent must infer the difference from the name alone.
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 when-to-use guidance and no mention of alternatives such as get_schedule or list_schedules. The endpoint path is quoted but that is not usage guidance. An agent gets no help deciding between this and the other schedule read tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invite_usersInvite UsersBInspect
Invites one or more users to the account using /users/invite. Limitations: write operation; requires permission to invite users.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| users | No | ||
| emails | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the 'write operation' statement is largely redundant. The permission requirement is genuine added context, but nothing is said about duplicate emails, idempotency of repeated invites, or what happens to existing users.
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, front-loaded with the action and endpoint, with the constraint sentence following. 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 multi-parameter write tool with no output schema and a 0-required-parameter schema, the description covers the safety/permission angle but omits the input-shape guidance (users vs emails, role) an agent needs to build a correct 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?
Schema description coverage is only 63%, and the description explains none of the 8 parameters. Critically, it does not resolve the ambiguity between the 'users' and 'emails' inputs or explain how 'role' is applied, leaving the agent to infer invitee format entirely.
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?
States a specific verb and resource ('Invites one or more users to the account') and even names the endpoint /users/invite. It does not distinguish itself from the near-sibling create_user, so an agent cannot fully disambiguate 'invite' vs 'create' without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a prerequisite (permission to invite users) and confirms it is a write operation, but offers no when-to-use guidance relative to create_user or any other user-provisioning sibling, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_company_eventsList Company EventsARead-onlyIdempotentInspect
Lists company-level events from /events using filter=COMPANY. Use this for global metrics (for example, total hours by user in a period) without iterating user-by-user. Requires from/to and does not require id.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date/time. Accepts YYYY-MM-DD or YYYY-MM-DD HH:mm:ss; date-only values are normalized to 23:59:59. | |
| from | Yes | Start date/time. Accepts YYYY-MM-DD or YYYY-MM-DD HH:mm:ss; date-only values are normalized to 00:00:00. | |
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| order | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the endpoint-level filter semantics (filter=COMPANY) and the required/optional parameter constraint, but says nothing about pagination behavior or result limits despite page/page_size/order being 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 tight sentences with the core mechanism front-loaded and no filler. The use-case sentence earns its place by disambiguating the tool's purpose, though it could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 11 params (82% documented) and no output schema, the description covers what the tool does, when to use it, and the key required parameters. Pagination is only implied via the schema, but that is a minor gap given the annotation 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?
Schema description coverage is 82%, so the schema already documents most parameters including date normalization and page semantics. The description adds one useful clarification about from/to being required and id not being needed, but contributes little beyond the schema. Baseline 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?
States a specific verb (Lists), resource (company-level events), and the mechanism (from /events using filter=COMPANY). This implicitly separates it from list_events and list_filtered_events by scoping to company-level, though it never names those siblings explicitly.
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?
Gives a clear use case ('global metrics ... without iterating user-by-user') and states the required-parameter condition ('Requires from/to and does not require id'). It does not name the alternative sibling tools (list_events, list_filtered_events), so the routing guidance is contextual rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customersList CustomersARead-onlyIdempotentInspect
Lists customers from /customers with optional status filter (ALL, ACTIVE, ARCHIVED). Use to map customer entities before querying related projects/events. Limitations: read-only listing; filter values are restricted to ALL/ACTIVE/ARCHIVED.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| filter | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the description's "read-only listing" note largely restates the structured data. The filter-value restriction is also already captured by the schema enum, so the description adds little new behavioral context such as pagination or rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and scope before the usage note and limitations. Efficient and readable, with negligible waste.
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 read tool with no output schema, the description covers purpose and the filter but omits pagination semantics and the auth/account parameters that a caller must supply in multi-workspace contexts. Adequate but leaves gaps beyond what the schema already documents.
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 78%, above the baseline, so the schema already documents most parameters including page, page_size, and auth fields. The description only echoes the filter enum (already in schema) and adds nothing about pagination or the multiple auth/account parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Lists customers from /customers") and states the scope (optional status filter). It is clear what the tool does, though it distinguishes itself from siblings like get_customer only implicitly via "Lists" rather than by naming the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete usage context: "Use to map customer entities before querying related projects/events." That is clear when-to-use guidance, but it offers no exclusions (e.g., use get_customer for a single entity) and does not name alternatives explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_fieldsList Custom FieldsARead-onlyIdempotentInspect
Lists custom field definitions from /custom_fields. Use this to inspect available custom fields before setting values on tasks, projects, events, users, or customers. Supports pagination and optional object-class/type filters when supported by the TrackingTime API. Limitations: read-only; visibility depends on account permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| value_type | No | Custom field value type. text stores a plain string; number stores a numeric string/value; date stores an API date value such as YYYY-MM-DD or YYYY-MM-DD HH:mm:ss; boolean displays the custom field name when set; enum stores one selected enum option; list_single stores a JSON string object like {"item":"Option A"}; list_multiple stores a JSON string array like [{"item":"A"},{"item":"B"}]; currency stores a currency code such as USD or EUR. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| filter_object_class | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the 'read-only' clause in the description is largely redundant. The genuinely additive content is the permissions caveat ('visibility depends on account permissions') and the pagination/filter-support hedge, which is modest but useful context.
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 front-loaded sentences covering purpose, usage, and limitations with no filler. Minor redundancy in restating 'read-only' after the annotations already say it, but overall tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list endpoint with no output schema, 0 required parameters, and annotations carrying the safety profile, the description covers purpose, usage, and limitations adequately. The only softness is the vague 'when supported by the TrackingTime API' hedge.
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 89%, so the schema already documents the parameters thoroughly (including enum value meanings). The description adds only a high-level note that pagination and optional object-class/type filters are supported 'when supported by the API,' which does not meaningfully extend 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?
States a specific verb and resource ('Lists custom field definitions from /custom_fields') and clarifies the object scope. It is clear, but it never names or contrasts the singular sibling get_custom_field, so sibling differentiation is left to inference.
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?
Explicitly gives a when-to-use context: 'inspect available custom fields before setting values on tasks, projects, events, users, or customers.' However, it offers no when-not guidance and does not route to alternatives such as get_custom_field for a single definition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_enum_optionsList Enum OptionsBRead-onlyIdempotentInspect
Lists enum options for custom fields from /enum_options. Limitations: read-only; optionally filter by custom field when supported by the API.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_field | No | ||
| custom_field_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the description's 'read-only' limitation largely repeats structured data. The filter caveat adds a small amount, but no rate limits, page-window behavior, or error conditions are 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?
Two short sentences with the purpose front-loaded and no filler. The 'Limitations: read-only' clause is somewhat redundant with the annotations but is compact enough not to be wasteful.
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, zero-required list tool with no output schema, the description is thin: it omits pagination behavior despite page/page_size params and leaves the custom_field/custom_field_id distinction unexplained. It is minimally viable but leaves real gaps before calling.
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 78%, just below the high-coverage baseline, so the schema carries most parameter meaning. The description only gestures at 'filter by custom field' and does not disambiguate the two undocumented numeric params (custom_field vs custom_field_id), which are the ones most likely to confuse an agent.
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?
States a specific verb and resource ('Lists enum options for custom fields') and even names the endpoint, which distinguishes it from siblings like list_custom_fields (fields, not their options). However, it does not explicitly name those siblings, so an agent still has to infer the boundary.
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?
Mentions an optional custom-field filter but qualifies it with the vague 'when supported by the API,' and gives no when-to-use vs alternatives guidance, no prerequisites for pagination, and no indication of what a caller should do differently from listing custom fields directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsList EventsARead-onlyIdempotentInspect
Lists time events from /events for a date range. Supports filters by USER, PROJECT, CUSTOMER, TASK, or COMPANY, plus pagination and sort order. If filter/id are missing, it defaults to USER and auto-resolves the caller user_id. For global account-level events, set filter=COMPANY (or use list_company_events). Limitations: from and to are required; results are paginated; only returns data accessible to the authenticated account.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| to | Yes | End date/time. Accepts YYYY-MM-DD or YYYY-MM-DD HH:mm:ss; date-only values are normalized to 23:59:59. | |
| from | Yes | Start date/time. Accepts YYYY-MM-DD or YYYY-MM-DD HH:mm:ss; date-only values are normalized to 00:00:00. | |
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| order | No | ||
| filter | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| global_company | No | ||
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds real value beyond that: the required from/to constraint, that results are paginated, and that only account-accessible data is returned. It does not mention rate limits or response shape, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences with the core purpose front-loaded, followed by filtering, defaults, and limitations. Every sentence carries information, though the closing 'Limitations' sentence overlaps with schema-documented pagination.
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 14-parameter read tool with no output schema, the description covers the essential filtering and pagination context an agent needs, but it leaves several parameters (auth variants, include_custom_fields, global_company, account_id) unexplained and gives no hint about the returned event shape. Adequate but with clear 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 description coverage is 64%, so the schema documents many parameters itself. The description usefully clarifies the filter enum's role (USER default, COMPANY for global events) and the id/auto-resolution behavior, but it says nothing about the auth parameters, account_id, global_company, or include_custom_fields, leaving part of the coverage gap unaddressed.
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 first sentence gives a specific verb (Lists), resource (time events), source endpoint (/events), and scope (date range). It also distinguishes itself from list_company_events by pointing to that sibling for global account-level events, so an agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the fallback behavior when filter/id are missing (defaults to USER, auto-resolves caller user_id) and names the alternative list_company_events for company-wide events. It does not clarify the boundary against the closer sibling list_filtered_events, 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.
list_expense_categoriesList Expense CategoriesCRead-onlyIdempotentInspect
Lists expense categories using GET /expenses/categories. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the description's 'Limitations: read-only' only restates structured data. It adds no new behavioral context such as pagination, result ordering, or auth requirements beyond what annotations and schema provide.
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, front-loaded with the purpose. Slightly wasteful in that the second sentence re-states an annotation rather than earning its place, but it is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema coverage and safety annotations, the essentials are present. However, with no output schema, the description says nothing about return shape or whether results are paginated/filterable, which matters for a list operation over a large workspace.
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 all five parameters (base_url, api_token, account_id, access_token, app_password) are documented in the schema itself. The description adds nothing about parameters; baseline 3 applies since the schema does the heavy lifting.
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?
States a clear verb+resource ('Lists expense categories') and even cites the underlying endpoint GET /expenses/categories, which distinguishes it from list_expenses and the other list_* siblings. It stops short of explicitly naming the sibling it is not, so it is clear but not fully differentiated.
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 when-to-use guidance, no prerequisites (e.g. which auth parameter is needed), and no mention of alternatives such as list_expenses. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_expensesList ExpensesCRead-onlyIdempotentInspect
Lists expenses using GET /expenses/. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | No | ||
| category_id | No | ||
| customer_id | No | ||
| is_billable | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| spent_date_to | No | ||
| spent_date_from | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The read-only claim merely restates the readOnlyHint annotation and adds nothing the structured data does not already provide. With annotations already covering safety, idempotency, and open-world behavior, the description should disclose something extra (pagination, filtering scope, result limits) but does not.
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 two sentences are short and the operation is front-loaded with no wasted preamble. But the second sentence is redundant given the annotations, so brevity here reflects under-specification rather than tight writing.
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 11 optional parameters, low schema coverage, and no output schema, the description is far too thin. It says nothing about filtering, date-range behavior, result shape, or pagination, all of which an agent needs to call a list endpoint 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 only 45%, so the description carries a compensation burden it does not meet. None of the 11 parameters are explained despite several being non-obvious filters (project_id, category_id, customer_id, is_billable, spent_date_from/to), leaving half the inputs undocumented in both places.
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?
States a verb ("Lists") and a resource ("expenses") and names the underlying endpoint GET /expenses/, so the basic operation is identifiable. However, it does nothing to distinguish this from siblings like get_expense, list_expense_categories, or list_invoices, and it omits what the listing actually contains.
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?
"Limitations: read-only" is a capability constraint, not usage guidance. There is no statement of when to reach for this tool versus get_expense (single expense) or list_expense_categories, and no mention of prerequisites such as account_id being required for multi-workspace users.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filtered_eventsList Filtered EventsARead-onlyIdempotentInspect
Lists report-filtered WORK and SCHEDULE events from /events/filtered using one JSON query_data payload. Use this when you need precise event searches by project, task, user, customer, notes, billing fields, numeric report fields, or custom fields without first discovering legacy filter/id combinations. Required: date_range.period, date_range.start and date_range.end. Use date_range.period=custom_range with YYYY-MM-DD dates; all/all_time are not supported. The API excludes events from DELETED projects and returns results ordered by event start date descending.
| Name | Required | Description | Default |
|---|---|---|---|
| sorts | No | Accepted by the API schema, but currently does not alter the response. | |
| groups | No | Accepted by the API schema, but currently does not alter the response. | |
| filters | No | Optional report filters. Multiple filters can be provided. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| rounding | No | Optional duration rounding configuration, for example { by: 15, method: 'round' }. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| date_range | Yes | ||
| parameters | No | Optional response fields, for example user, project, task, notes, is_billed, or custom field keys. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_timeoffs | No | When true, includes time off and holiday data in the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive safety profile, but the description adds real behavioral detail: events from DELETED projects are excluded, results are ordered by event start date descending, and all/all_time periods are unsupported. This goes beyond the structured fields, though it omits pagination/result-size behavior.
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 purpose and primary use case are front-loaded in the first sentence, followed by required fields and API constraints. Dense but each sentence carries load; minor redundancy in restating the unsupported period values.
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 12-parameter tool with nested objects and no output schema, the description covers the trigger, required date_range, and key behavioral constraints (ordering, deleted-project exclusion). It leaves the full query_data/filter/parameter payload semantics to the schema, which is acceptable given high schema 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?
Schema description coverage is 92%, so the schema already documents nearly all parameters. The description reinforces the date_range requirements and custom_range/YYYY-MM-DD constraint, but this largely repeats the schema's own text rather than adding new syntax or semantic detail. Baseline 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?
States a specific verb (Lists), resource (report-filtered WORK and SCHEDULE events), and endpoint (/events/filtered). It distinguishes itself from the generic list_events sibling via 'report-filtered' and the JSON query_data payload framing.
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?
Clearly states when to use it: precise event searches by project/task/user/customer/notes/billing/numeric/custom fields, explicitly contrasting with 'discovering legacy filter/id combinations'. It stops short of naming the concrete alternative (list_events) or stating when-not to use it, so it falls below the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_holidaysList HolidaysCRead-onlyIdempotentInspect
Lists holidays using GET /holidays. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| year | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so 'read-only' merely restates structured data and adds no new behavioral context. Nothing is said about pagination behavior, default result size, or what happens when filters are omitted.
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, and the core action is front-loaded. It is efficient, though the brevity reflects under-specification rather than disciplined editing.
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 10-parameter list tool with no output schema, the description is far too thin: it omits filter semantics, pagination, and the auth/workspace context implied by api_token, access_token, app_password, and account_id. Only the read-only trait is covered, and that is already in the annotations.
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?
With 10 parameters and only 70% schema description coverage, the description should compensate for gaps like the bare 'to', 'from', and 'year' fields, but it offers no parameter guidance at all. An agent gets no help on filter formats, date syntax, or how account_id interacts with the other auth parameters.
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?
States a clear verb and resource ('Lists holidays') and even names the underlying endpoint GET /holidays, so an agent knows exactly what is being fetched. However, it does nothing to distinguish this from the many other list_* siblings (list_timeoffs, list_events, etc.) beyond the resource noun in the name itself.
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 guidance on when to use this tool versus alternatives such as list_timeoffs or list_events, nor on when the filtering parameters (year, from/to) should be supplied. The only usage-adjacent sentence, 'Limitations: read-only,' is a constraint rather than routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invoicesList InvoicesCRead-onlyIdempotentInspect
Lists invoices using GET /invoices. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| status | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| customer_id | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so 'read-only' merely restates structured data and adds no new behavioral context. The description says nothing about pagination behavior, rate limits, auth requirements, or result shape, which is what would earn credit here.
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, front-loaded with the verb. But the second sentence spends space restating annotation-provided behavior, so it is terse rather than genuinely efficient.
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 an 11-parameter, zero-required list tool with no output schema, the description omits the filter semantics, pagination convention, and required-when conditions that an agent needs to invoke it correctly. It is too thin for 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 coverage is only 64% and several meaningful filters (to, from, status, customer_id) are bare types with no description. The description adds no clarification of these ambiguous parameters, so it fails to compensate for the coverage gap.
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?
Names a specific verb and resource ('Lists invoices') and even cites the endpoint (GET /invoices), so the purpose is unambiguous. However it does not differentiate itself from siblings like get_invoice (single fetch) or the other list_* tools, 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 only guidance is 'Limitations: read-only,' which is not a when-to-use statement. It never says when to prefer this over get_invoice or how it relates to list_expenses/list_reports, and gives no preconditions for the credential/account parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList ProjectsARead-onlyIdempotentInspect
Lists projects from /projects with optional status filter (ALL, ACTIVE, ARCHIVED, FOLLOWING). Use for project discovery before task/event queries. Limitations: read-only listing.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| filter | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, and the description's 'Limitations: read-only listing' largely restates that safety profile rather than adding to it. It omits genuinely useful behavior for a paginated read tool, such as default page size or what happens when page is out of range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with the core purpose stated first. The trailing 'Limitations: read-only listing' is largely redundant with the annotations and does not earn its place, costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema and annotations covering the safety profile, the description is nearly complete. The remaining gap is pagination guidance (defaults, ordering, termination), which is left entirely to the page/page_size schema fields.
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 78%, close to the high-coverage baseline, so the schema already carries most parameter meaning. The description only repeats the filter enum values already present in the schema and adds nothing about page_size, include_custom_fields, or the optional account_id workspacing 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?
States a specific verb and resource ('Lists projects from /projects') and names the optional status filter with its enum values. However, it never distinguishes itself from close siblings like get_project (single) or list_user_projects/list_project_users (scoped listings), so the agent must infer the difference from the schema alone.
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?
'Use for project discovery before task/event queries' gives one concrete usage context, but there is no when-not guidance and no named alternative for filtered or user-scoped project retrieval. Usage is implied rather than delimited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_timesList Project TimesBRead-onlyIdempotentInspect
Gets project time totals from /projects/times. Use for project-level accumulated time lookups. Limitations: read-only; pass project IDs or filters supported by the API.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_ids | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the 'Limitations: read-only' clause is largely redundant. Beyond that the description adds no behavioral context such as pagination, result ordering, or response shape, so it contributes little over the structured safety profile.
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 tight sentences, front-loaded with the resource and endpoint, with the usage cue and limitations following. Nothing is padded, though the endpoint path adds little practical value to an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter read tool with no output schema, the description omits what the returned totals look like, whether results paginate, and what 'filters supported by the API' concretely means. It is minimally usable but leaves meaningful 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 description coverage is 63%, leaving from/to and project_ids undocumented in the schema. The description hints at 'project IDs or filters supported by the API' but is vague and adds no format or semantics for the date-range or the account/workspace interplay. Baseline 3 fits given partial 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?
States a specific verb and resource ('Gets project time totals'), names the endpoint, and scopes it to 'project-level accumulated time lookups.' An agent can distinguish it from list_projects or list_timecards, though the description doesn't explicitly name those 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?
The sentence 'Use for project-level accumulated time lookups' gives implied usage context, but there is no explicit when-not guidance or named alternative for narrower queries (e.g., per-user time via list_user_projects or timecards).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_usersList Project UsersBRead-onlyIdempotentInspect
Lists users assigned to a project from /projects/:project_id/users. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the 'read-only' limitation adds nothing new and is effectively a restatement. The one genuinely additive detail is the endpoint path, which hints at the API surface, but no pagination, result-size, or auth behavior is 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?
Two short sentences, purpose front-loaded with the endpoint immediately after it. The trailing 'Limitations: read-only' sentence is largely redundant with the annotations, which is the only wasted space.
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 six-parameter read tool with no output schema, the description covers the core purpose but omits auth expectations, pagination behavior, and how it relates to the many sibling list_* tools. Adequate but with clear gaps given the parameter richness.
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 83%, so the schema already documents base_url, api_token, account_id, access_token and app_password; project_id itself has no schema description and the tool description only implies the project scoping. Baseline 3 is appropriate since the schema carries nearly all parameter meaning and the description adds none.
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?
States a specific verb (lists), resource (users assigned to a project) and even the underlying endpoint (/projects/:project_id/users), so the operation is unambiguous. It does not differentiate itself from the close sibling list_user_projects, which is the inverse relationship, leaving the agent to infer which direction of the mapping each tool covers.
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 when-to-use guidance, no prerequisites (e.g. when account_id is needed), and no mention of the alternative list_user_projects. The only sentence beyond the purpose line is 'Limitations: read-only', which is a constraint restatement rather than usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reportsList ReportsBRead-onlyIdempotentInspect
Lists saved/shared reports using GET /docs/. Limitations: read-only; reports are represented by docs in the API.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| filter | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_doc_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds valuable domain context that reports are represented by docs in the API and that the underlying call is GET /docs/. It repeats 'read-only' but does not cover pagination or auth behavior.
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, front-loaded with the action and endpoint mapping, with zero wasted text. The limitation note follows immediately.
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 10-param list tool with no output schema, the description gives adequate purpose and a key domain mapping, while annotations cover safety. However, it omits pagination, filtering, and authentication guidance that an agent would need to call it confidently.
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?
With 10 parameters and only 70% schema description coverage, the description adds no parameter meaning at all. It does not explain page, filter, page_size, account_id, auth tokens, or the undocumented id and include_doc_type fields.
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?
States a specific verb and resource: 'Lists saved/shared reports using GET /docs/.' Adds the useful API mapping that reports are represented by docs. Does not explicitly differentiate from siblings like get_report or delete_report, but the listing scope is clear.
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?
Provides no when-to-use guidance, no alternatives, and no exclusions beyond the read-only limitation. An agent gets no help deciding between list_reports and get_report or other list endpoints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schedulesList SchedulesBRead-onlyIdempotentInspect
Lists schedules using GET /schedules/. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, and the description's only behavioral claim ('read-only') merely restates readOnlyHint. It discloses nothing new such as pagination behavior, result ordering, or what scope of schedules is returned.
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 terse sentences, purpose front-loaded, zero filler. Nothing is redundant or padded.
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 7-parameter read tool with no output schema, the description is minimally adequate: safety profile comes from annotations and parameters from the schema. But a list tool with pagination should say whether results are paginated and how the caller learns of more pages, which is left entirely to inference.
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 schema already documents pagination (page, page_size), auth tokens, and account_id. The description adds no parameter meaning beyond that, which matches the baseline 3 for fully covered schemas.
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?
Names a specific verb and resource ('Lists schedules') and even cites the underlying endpoint GET /schedules/. However, it does nothing to distinguish itself from the dozens of sibling list_* tools or from get_schedule, so an agent must infer the list-vs-single distinction from the plural noun alone.
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 statement of when to use this versus get_schedule (single schedule), list_user_schedule, or assign_users_to_schedule. 'Limitations: read-only' is a constraint, not usage guidance; no exclusions or alternatives are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_commentsList Task CommentsBRead-onlyIdempotentInspect
Lists comments for a task using /tasks/:task_id/comments. Limitations: read-only; visibility depends on task access.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| task_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so "read-only" in the description is largely redundant. The one piece of genuinely additive context is that visibility depends on task-level access, which hints at permission-scoped results beyond what the annotations convey.
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, front-loaded with the action and endpoint, with no padding. Minor deduplication opportunity in restating the read-only annotation.
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 list endpoint with a rich (88%) schema and no output schema, the description covers the essentials: what it returns, from which path, and the access constraint. It omits any pagination hint, but page/page_size semantics are already 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?
Schema description coverage is 88%, so the schema already documents page, page_size, account_id and the auth fields. The description adds nothing about parameters (no pagination or required-parameter notes), so the baseline 3 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?
States a specific verb and resource ("Lists comments for a task") and pins it to the REST endpoint /tasks/:task_id/comments, so an agent knows exactly what it retrieves. It does not explicitly contrast with the sibling mutations add_task_comment/delete_task_comment, but the read-only framing makes the distinction clear enough.
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 when-to-use guidance, no routing to alternatives such as add_task_comment or delete_task_comment, and no statement of when not to use it. The access note is a caveat, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_logsList Task LogsCRead-onlyIdempotentInspect
Lists task history/log entries using /tasks/:task_id/logs. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| task_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the 'read-only' limitation is redundant rather than additive. The description discloses nothing beyond annotations – no pagination behavior, return shape, or auth requirements – leaving the behavioral burden unmet.
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 the purpose front-loaded. It is efficient, though the 'Limitations: read-only' clause earns little since it duplicates the annotation.
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, no output schema, and an unmentioned return format or pagination semantics, the description leaves notable gaps. An agent must open the schema to learn how results are paged and returned, which the description should have covered.
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 88%, so the schema already documents nearly every parameter (page, page_size, account_id, auth tokens, base_url). The description adds no parameter meaning, so the baseline 3 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?
States a specific verb and resource ('Lists task history/log entries') and even names the API path, so the agent knows exactly what data this returns. However, it does not differentiate from siblings like list_timecard_logs or list_task_comments, so it falls 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 description offers no when-to-use guidance and names no alternatives. The only usage hint, 'Limitations: read-only', merely restates the readOnlyHint annotation rather than telling the agent when this tool beats a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksList TasksARead-onlyIdempotentInspect
Lists tasks from /tasks, optionally scoped by project_id and status filter (ALL, ACTIVE, ARCHIVED). Use after selecting a project to narrow task context. Limitations: read-only; project_id must exist in the same account context when provided.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| filter | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered; the description's "read-only" restates that. It does add genuine behavioral context the annotations lack: the same-account existence constraint on project_id. Pagination and return-shape behavior remain undisclosed.
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 sentences, no filler, and the scope statement is front-loaded before the usage hint and limitations. Efficient for a tool with this many parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with full annotation coverage and no output schema, the description supplies what an agent needs: the endpoint scope, the filter dimensions, the usage trigger, and the account-context precondition. Remaining gaps (pagination, return shape) are minor against what annotations already carry.
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 78%, so the schema documents most parameters already. The description names project_id and repeats the filter enum values (ALL, ACTIVE, ARCHIVED) that are already in the schema, while saying nothing about page, page_size, account_id, or the auth parameters — marginal value beyond structured fields.
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?
States a specific verb (Lists) and resource (tasks from /tasks) plus the optional scoping dimensions (project_id, status filter). An agent can distinguish it from get_task and list_task_comments, though it never names the closest sibling, list_user_tasks, to draw the line.
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?
"Use after selecting a project to narrow task context" gives a clear when-to-use trigger, and the Limitations clause adds the precondition that project_id must exist in the same account context. It stops short of naming an alternative (e.g. list_user_tasks) for the non-project-scoped case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_timecard_logsList Timecard LogsCRead-onlyIdempotentInspect
Lists timecard logs using GET /timecards/logs. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's 'read-only' note is redundant rather than additive. It discloses nothing beyond that: no pagination behavior, result ordering, date-range handling, or auth/workspace requirements for an 8-parameter call.
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, front-loaded with the action and endpoint, with no filler. It is efficient, though the terseness borders on under-specification rather than genuine conciseness.
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 an 8-parameter, zero-required tool with no output schema, the description should at least explain the date/user filters and what a log entry represents. Instead it covers only the endpoint and a safety property already carried by annotations, leaving the agent to guess at invocation semantics.
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 63%, and the three parameters that carry no schema description (to, from, user_id) are precisely the ones an agent must understand to filter logs. The description supplies no meaning for any parameter, so it fails to compensate for the coverage gap.
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?
States a specific verb and resource ('Lists timecard logs') plus the backing endpoint GET /timecards/logs, which is more than a restatement of the name. However, it does nothing to distinguish this from close siblings such as list_timecards, list_task_logs, or get_timecard, so an agent cannot tell from the text alone which log-oriented tool applies.
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 statement of when to use this tool versus list_timecards, list_task_logs, or export_timecards, and no prerequisites or filtering context. The only guidance-like sentence, 'Limitations: read-only,' is a safety property rather than a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_timecardsList TimecardsCRead-onlyIdempotentInspect
Lists user timecards using POST /timecards/users. Limitations: write-style POST endpoint used for listing; accepts API-supported body fields.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| users | No | ||
| filter | No | ||
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful context that the endpoint is a write-style POST used for listing, which explains the apparent mismatch with readOnlyHint, but it does not cover auth requirements, pagination, or return format.
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, front-loaded with the action and endpoint. The second sentence is somewhat vague but brief, and no filler is present.
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 10-parameter list tool with no output schema, the description is too thin: it doesn't explain how to filter by date or users, pagination, or response shape. Annotations cover safety but parameter usage remains opaque.
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 50% (5 of 10 parameters), and the description only says 'accepts API-supported body fields', adding no meaning for parameters like from, to, users, or filter. It fails to compensate for the undocumented half.
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 'Lists' and resource 'user timecards', and names the endpoint POST /timecards/users. It does not differentiate from sibling tools like get_timecard or list_timecard_logs, so it falls 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?
No when-to-use guidance or alternatives are provided. The note about a write-style POST endpoint is a limitation, not usage advice, so an agent gets no help choosing between this and get_timecard or get_timecards_count.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_timeoff_balancesList Timeoff BalancesCRead-onlyIdempotentInspect
Lists time off balances using GET /timeoffs/balances. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| policy_id | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, and the description merely restates 'read-only' while adding the raw endpoint path. Nothing is said about pagination behavior (page/page_size), result shape, or auth/workspace scoping, so it adds little beyond the structured hints.
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, front-loaded with the purpose and followed by the limitation, with no filler. It is efficient, though the second sentence ('read-only') is functionally redundant with the annotations.
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 paginated list tool with no output schema, the description covers the core purpose and safety profile but omits when to use it over sibling tools and any pagination or filtering guidance. It is minimally adequate given the annotations and schema do much of the work.
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?
With 9 parameters at 78% schema description coverage, the schema already documents page, page_size, base_url, account_id, and the token aliases. The description contributes no additional parameter meaning (e.g., what user_id/policy_id filtering does, or that account_id scoping is needed), which matches the baseline 3 for schema-driven 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?
States a specific verb and resource ('Lists time off balances') plus the backing endpoint GET /timeoffs/balances, so the agent knows this is a read/list operation on balance records. It does not explicitly distinguish itself from the very close sibling get_timeoff_balance (singular) or list_timeoffs, which an agent must infer from the plural 'balances'.
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 only guidance is 'Limitations: read-only,' which is a constraint rather than a when-to-use rule. No alternative is named (e.g., use get_timeoff_balance for a single balance, or list_timeoffs for raw timeoff entries), so the agent gets no routing help among the many list_*/get_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_timeoff_policiesList Timeoff PoliciesCRead-onlyIdempotentInspect
Lists time off policies using GET /timeoffs/policies. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so 'Limitations: read-only' merely restates structured data rather than adding new behavioral context. The only extra signal is the raw endpoint path, with no mention of pagination, rate limits, or result shape.
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, front-loaded sentences that get to the point immediately. The trailing 'Limitations: read-only' clause is somewhat wasteful since it duplicates annotations, but overall it is tight.
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 endpoint with no output schema and fully-covered parameters, the description is minimally adequate, but it omits pagination behavior, expected result contents, and how to scope by account, all of which an agent would benefit from.
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% (7 params fully documented, including page and account_id conditions), so the schema carries the burden and the description adds nothing about parameters. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb (Lists) and resource (time off policies) and cites the concrete endpoint GET /timeoffs/policies. It does not explicitly differentiate from the sibling get_timeoff_policy, but the plural/singular distinction is inferable from the name and title.
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 no when-to-use context, no mention of when to prefer get_timeoff_policy for a single policy, and no guidance on pagination or workspace scoping. Only the read-only note hints at constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_timeoffsList TimeoffsCRead-onlyIdempotentInspect
Lists time off requests using GET /timeoffs. Limitations: read-only; accepts API-supported query filters.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| status | No | ||
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so 'read-only' in the description is redundant. The remaining clause, 'accepts API-supported query filters', is too vague to disclose real behavior such as pagination limits, default scoping, or auth requirements.
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 the verb and resource front-loaded and no filler. It is efficient, though brevity here edges toward under-specification rather than tightness.
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 an 11-parameter list tool with no output schema, the description should at least sketch the returned records and pagination behavior. Instead it omits return shape, pagination expectations, and filtering semantics, and relies on the schema for all auth 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 64%, leaving to, from, status, and user_id undocumented. The description's only contribution is 'accepts API-supported query filters', which does not explain filter syntax, accepted status values, or date formats, so it fails to compensate for the coverage gap.
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?
States a clear verb and resource ('Lists time off requests') and even names the backing endpoint (GET /timeoffs), so the agent knows this is a collection-read. It does not distinguish itself from near siblings like get_timeoff, list_timeoff_balances, or list_timeoff_types, which is the only missing element.
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 when-to-use or when-not-to-use guidance. The notes 'read-only' and 'accepts API-supported query filters' hint at scope but never say to prefer this over list_timeoff_balances/get_timeoff or that it returns all timeoffs regardless of user/status unless filtered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_timeoff_typesList Timeoff TypesBRead-onlyIdempotentInspect
Lists time off types using GET /timeoffs/types. Limitations: read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true. The description adds only the GET endpoint path and repeats the read-only trait, while saying nothing about authentication requirements, pagination behavior, or return characteristics.
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 short and front-loads the action and resource. The second sentence ('Limitations: read-only') is redundant with the annotations, but overall it is efficient and does not waste many words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool whose annotations already cover the safety profile and whose schema fully documents parameters, the description states the purpose and scope adequately. It omits how this type listing relates to sibling tools and gives no return-shape hint, but those are minor for this 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 schema already documents all 7 parameters including page, page_size, account_id, and auth tokens. The description adds no parameter-level meaning beyond what the schema provides, which is the baseline 3 when the schema does the heavy lifting.
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 and resource ('Lists time off types') and even names the underlying endpoint GET /timeoffs/types. However, it does not differentiate this tool from closely related siblings such as list_timeoffs, get_timeoff, or list_timeoff_policies, so an agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no conditions, and no named alternatives. The only guidance-like sentence, 'Limitations: read-only,' merely restates the annotation and does not help the agent decide between this and sibling list/get tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_user_groupsList User GroupsARead-onlyIdempotentInspect
Lists user groups/teams from /user_groups. Limitations: read-only; visibility depends on account role.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds one genuinely new behavioral fact — that results are filtered by account role — but says nothing about pagination behavior or what the list contains, so it adds only partial value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler; the purpose is front-loaded and the limitation follows. It is efficient, though the limitation sentence is terse enough to leave some ambiguity.
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 7 optional parameters fully documented in the schema and no output schema, the description only needs to convey purpose and constraints, which it largely does. The one gap is that it never indicates the return shape (a paged list of groups) despite the schema exposing page/page_size.
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 every parameter (page, page_size, account_id, base_url, token aliases) is already documented in the schema. The description adds no parameter-level meaning such as pagination semantics or token precedence, so the baseline 3 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?
States a specific verb ('Lists') plus resource ('user groups/teams') and even names the endpoint (/user_groups), so the operation is unmistakable and clearly distinct from get_user_group. It does not explicitly contrast with that singular sibling, 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 description gives a limitation ('visibility depends on account role') that implies when results may be empty or partial, but it never states when to call this versus get_user_group or list_users, nor any prerequisite ordering. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_user_projectsList User ProjectsARead-onlyIdempotentInspect
Lists projects assigned to a user from /users/:user_id/projects. Use to scope project context for a specific person. Limitations: read-only; returns only projects visible in the authenticated account context.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint, so the safety profile is covered; the description repeats 'read-only' (consistent, not contradictory) and adds genuine value with the visibility limitation 'returns only projects visible in the authenticated account context'. It does not mention pagination or result size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the operation and scope before the limitations. Near-optimal, with only the minor redundancy of restating 'read-only' that annotations already assert.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, annotations carry the safety profile and the description covers scope plus the account-context visibility caveat. Missing only pagination/ordering behavior and confirmation of how the multi-workspace account_id requirement interacts with this endpoint.
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 83% and the description only implies the required user_id via the endpoint template; it adds no meaning to the auth-related parameters (api_token/app_password/access_token/base_url/account_id) beyond what the schema already documents. Baseline 3 is appropriate when structured fields carry the parameter detail.
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?
States a specific verb and resource with scope ('projects assigned to a user') and pins the underlying endpoint /users/:user_id/projects, which makes it distinguishable from list_projects. It stops short of naming the sibling it is not, so the agent must infer the contrast with list_projects/list_project_users.
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?
'Use to scope project context for a specific person' gives a clear intended context for invocation. It offers no exclusion or explicit alternative (e.g., use list_projects for all projects), so an agent must reason out 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.
list_usersList UsersARead-onlyIdempotentInspect
Lists account users from /users. Supports filters and optional billing/team/employee expansion. Use this to discover users before calling user-specific tools. Limitations: read-only; visibility depends on role permissions (typically admin/project manager for full account listing).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| filter | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_billing | No | ||
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world and non-destructive traits. The description adds genuinely new behavioral context: visibility is gated by role permissions and full account listing typically requires admin/project manager. It does not describe pagination or result volume, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the core action before limitations. No filler, though the 'Limitations:' label is a slightly formal device rather than pure economy.
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 10-parameter read tool with no output schema and no required params, the description covers purpose, usage trigger, and permission constraints. It omits return shape and pagination behavior, which the schema partially handles, leaving a small gap.
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 70%, so the schema documents most parameters (page, page_size, account_id, tokens). The description references 'filters' and 'billing/team/employee expansion', which only loosely maps to include_billing/include_custom_fields and the filter enum, adding marginal meaning. Baseline 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 states a specific verb and resource ('Lists account users from /users') and notes supported filters and expansions, which is clear. It partially differentiates itself from siblings via 'discover users before calling user-specific tools', but does not explicitly contrast with close alternatives like get_user, list_project_users, or list_user_groups.
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 gives a clear use context ('discover users before calling user-specific tools') and discloses a real constraint (role-based visibility, typically admin/project manager). It lacks explicit when-not guidance or named alternatives, so it stops 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.
list_user_tasksList User TasksARead-onlyIdempotentInspect
Lists tasks assigned to a user from /users/:id/assigned_tasks, grouped by project. By default (without filter) this endpoint returns the user's active assigned tasks. Use filter only when you explicitly need another subset (ALL, ARCHIVED, TRACKING). If filter is not provided, it is not sent to the API. Limitations: read-only; visibility depends on account permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. For the first request, omit this field or use 0. Use 1 only after page 0. | |
| order | No | ||
| filter | No | ||
| sort_by | No | ||
| user_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| page_size | No | Maximum number of results to return per page. | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_billing | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered. The description adds genuinely useful behavior the annotations cannot: the server-side default subset, that an absent filter is not transmitted, and that visibility is constrained by account permissions.
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 sentences, front-loaded with the resource and endpoint, then the filter default rule, then limitations. Each sentence earns its place with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should cover return shape and pagination; it mentions grouping by project but not pagination semantics or output fields. Still, it is complete enough for correct invocation given annotations and the schema's param-level docs.
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?
Coverage is 58% across 12 parameters, with the auth/base_url params documented in schema and the enum'd filter/sort_by/order only listed. The description meaningfully clarifies the filter parameter's semantics and omission behavior, but adds nothing for page_size, include_billing, account_id, or order.
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?
States a specific verb+resource ('Lists tasks assigned to a user'), names the exact endpoint, and notes the grouping by project. It reads as user-scoped and distinct from sibling list_tasks, though it does not explicitly contrast the two, so it falls just 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?
Gives explicit default behavior (active assigned tasks without a filter) and a when-to-use rule for filter ('use only when you explicitly need another subset'), which is stronger than most. It stops short of naming an alternative sibling tool for other task queries, so no 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_user_trackablesList User TrackablesARead-onlyIdempotentInspect
Lists user trackables from /users/:id/trackables (projects and tasks grouped by project). Supports favorite-only mode and project/task filtering options. Limitations: read-only; payload size can grow on large accounts.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| include_tasks | No | ||
| only_favorites | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered and the description's 'read-only' merely repeats it. It does, however, add a genuinely new behavioral trait beyond the annotations: payload size can grow on large accounts, which warns the agent about response volume. That extra context earns a 4.
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 tight sentences, front-loaded with the core action and resource before the supported options and limitations. No padding, though the terse limitation clause could be marginally sharper.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers the endpoint, the shape of results, the filtering options and a payload-size caveat. It omits pagination behavior, which is the main remaining gap for a large-payload list operation, keeping it from a 5.
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 56% (above the 50% baseline), so the schema already documents several params. The description loosely maps to only_favorites ('favorite-only mode'), project_id and include_tasks ('project/task filtering'), but adds no format, type or default detail and says nothing about the auth params, so it does not meaningfully exceed the baseline.
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?
States a specific verb and resource ('Lists user trackables') and then disambiguates by parenthetically defining what a trackable is ('projects and tasks grouped by project') plus the endpoint. This is more informative than the bare name, but it does not explicitly differentiate itself from close siblings like list_user_tasks or list_user_projects, 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?
It notes that favorite-only mode and project/task filtering are supported, which implies when the tool is useful, but it never states when to choose this over list_user_tasks/list_user_projects or any exclusion conditions. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesList WorkspacesARead-onlyIdempotentInspect
Lists available workspaces/accounts for the authenticated user, including account_id and selected workspace flag. Use this when multiple workspaces exist and you need to choose account_id before other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds useful behavior beyond that by disclosing the shape of the result (account_id, selected flag), which matters because there is no output schema.
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 tight sentences with the resource identified first and the routing hint second; no filler. Slightly longer than strictly needed but every clause 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 simple read-only listing tool with no output schema and auth-only parameters, the description covers what is returned and when to call it. It stops short of describing behavior on a single-workspace account or empty results, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all four parameters are auth/endpoint infrastructure (base_url, api_token, access_token, app_password). The description adds nothing about them, but with high coverage and zero required params the schema carries the load, so a 3 baseline 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?
Specific verb+resource ('Lists available workspaces/accounts for the authenticated user') and it names the concrete fields returned (account_id, selected workspace flag), so an agent can distinguish it from sibling list_* tools immediately.
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?
Gives an explicit triggering condition: use when multiple workspaces exist and you need an account_id before other tools. Clear context, though it does not name a specific alternative tool or state what to do when only one workspace exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_invoice_paidMark Invoice PaidADestructiveInspect
Marks an invoice as paid using POST /:account_id/invoices/:invoice_id/pay. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| invoice_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds useful context beyond them: the sensitivity framing and the mandatory confirm=true guard, plus the concrete endpoint. It does not discuss side effects like status transitions or non-idempotency of repeated calls.
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 compact sentences, front-loading the action and endpoint before the limitations. No filler or redundant restatement of the title.
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 destructive, non-idempotent mutation with no output schema, the description covers action, endpoint, and the confirmation guard, but says nothing about what the operation changes (invoice status), failure modes, or return behavior. Adequate given the annotation coverage, but with visible 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 86%, so parameters are largely documented already (confirm, account_id, tokens, base_url). The description only echoes the confirm requirement and adds no syntax or format detail beyond the schema; baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb ('marks ... as paid'), the resource (invoice), and the exact endpoint POST /:account_id/invoices/:invoice_id/pay. This clearly distinguishes it from siblings such as mark_invoice_void, send_invoice, and update_invoice.
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?
Gives clear preconditions: it is a sensitive write operation that requires confirm=true, which tells the agent the call is guarded. It does not explicitly name alternatives (e.g., update_invoice vs mark_invoice_void), so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_invoice_voidMark Invoice VoidADestructiveInspect
Marks an invoice as void using POST /:account_id/invoices/:invoice_id/void. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| invoice_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, so the safety profile is covered. The description reinforces this with 'sensitive write operation' and adds the confirm=true gate, but does not disclose consequences such as irreversibility, effect on invoice status/numbering, or any downstream effects on reports. Modest added value on top of rich annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action and the endpoint front-loaded; nothing is wasted. The endpoint path is marginally redundant given the function name, keeping it just short of a 5.
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 destructiveHint already in annotations, the confirm gate stated, and no output schema required, the agent has enough to call this correctly. Only minor gaps remain (post-void state of the invoice, any cascade to related records), which annotations partially cover.
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 86%, so the schema itself already documents confirm, base_url, api_token, account_id, access_token, and app_password. The description only repeats the confirm=true requirement and gives no meaning for invoice_id or account_id beyond the schema, so the baseline 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?
States a specific verb+resource ('Marks an invoice as void') and pins down the exact endpoint (POST /:account_id/invoices/:invoice_id/void). This cleanly separates it from mark_invoice_paid, delete_invoice, and update_invoice in the sibling list.
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 use case (voiding rather than deleting or paying an invoice) and flags that confirm=true is mandatory, which is a real prerequisite. However, it never states when to prefer this over delete_invoice or mark_invoice_paid, nor what happens after voiding, so usage selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_users_from_scheduleRemove Users From ScheduleBDestructiveInspect
Removes a schedule assignment using GET /schedules/:schedule_id/assignments/delete/:assignment_id. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| schedule_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| assignment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered. The description adds that this is a 'sensitive write operation' requiring confirm=true, but the confirm requirement is already documented in the schema and the sensitivity note largely restates destructiveHint. Useful but not additively rich.
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, front-loaded with the action and endpoint, followed by the constraint. Zero 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 destructive mutation with no output schema, the description covers the operation and the confirmation gate, and annotations cover the safety profile. It does not address reversibility, what happens to the removed assignment, or auth-workspace scoping (account_id), 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 75%, so most parameters are documented in the schema itself. The endpoint string maps schedule_id and assignment_id to path segments, adding minor clarity, but nothing is said about account_id or the auth parameters beyond what the schema provides. Baseline 3.
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?
States a specific verb and resource ('Removes a schedule assignment') and even gives the underlying endpoint, which disambiguates it from delete_schedule and assign_users_to_schedule. It does not explicitly name those siblings, 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?
No statement of when to use this tool versus alternatives (e.g. delete_schedule, update_schedule, assign_users_to_schedule). The only conditional given is the confirm=true requirement, which is a gate, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_customerRestore CustomerCInspect
Restores/reopens an archived customer using /customers/open/:customer_id. Limitations: write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| customer_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, covering the safety and mutability profile. The description's only behavioral note—'Limitations: write operation'—simply restates readOnlyHint=false and adds no further context (e.g., idempotency behavior, error conditions, 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?
The description is two short sentences with the core action front-loaded. The second sentence ('Limitations: write operation') is redundant with the annotations, but the overall length is appropriate and not bloated.
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 restore tool with annotations covering the write/non-destructive profile and no output schema, the description covers purpose and endpoint adequately. However, it omits prerequisites (customer must be archived), expected behavior on failure, and idempotency details, leaving some gaps for an agent.
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 83%, so the schema already documents most parameters. The description adds only the endpoint path '/customers/open/:customer_id', which implicitly confirms customer_id is the target, but provides no extra semantics for the other five parameters.
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 ('restores/reopens') and resource ('an archived customer'), clearly distinguishing the action from siblings like archive_customer, delete_customer, or update_customer. It does not explicitly name alternatives, but the purpose is unambiguous and the endpoint path adds precision.
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 explicit guidance on when to use this tool versus alternatives (e.g., update_customer or archive_customer). It does not state prerequisites such as the customer must already be archived, nor does it mention any exclusions. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_eventRestore EventBInspect
Restores a deleted/archived time entry using /events/restore/:event_id when supported by the API. Limitations: write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| event_id | Yes | ||
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds the endpoint path and confirms the write nature ('Limitations: write operation') without contradicting anything, but says nothing about what happens on a non-deleted event, auth requirements, or repeat-call behavior for a non-idempotent 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?
Two short, front-loaded sentences with no filler. The trailing 'Limitations: write operation' fragment is slightly telegrammatic but not wasteful.
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 non-idempotent write over 6 parameters with no output schema, the description covers the core act and the endpoint but leaves the ambiguous 'when supported by the API' caveat and the multi-credential options unexplained. Adequate minimum, 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?
Schema description coverage is 83%, so the schema already documents base_url, api_token, account_id, access_token and app_password. The description adds only the fact that event_id is a path segment in /events/restore/:event_id; it adds nothing about account_id scoping or which credential to supply.
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?
States a specific verb and resource — 'Restores a deleted/archived time entry' — which cleanly separates it from delete_event, get_event and update_event. It does not, however, distinguish itself from the other restore_* siblings (restore_task, restore_project, restore_customer, restore_user); the resource noun carries that distinction implicitly.
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?
'when supported by the API' is a hedge rather than guidance — it tells the agent an operation may fail without saying how to know or what to do. There is no stated precondition (event must already be deleted/archived), no alternative named, and no 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.
restore_projectRestore ProjectCInspect
Restores/reopens an archived project using /projects/open/:project_id. Limitations: write operation.
| Name | Required | Description | Default |
|---|---|---|---|
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The only behavioral claim, 'write operation', merely restates what readOnlyHint=false already conveys, so it adds no value beyond the annotations. Nothing is said about what the restore does to the project's tasks, whether it is effectively idempotent, who may perform it, or what the response looks like.
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, front-loaded with the core action and free of padding. The second sentence is largely redundant with the annotations, which keeps it just short of a 5.
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?
Annotations cover the safety profile (non-read-only, non-destructive, not idempotent) and there is no output schema to explain, so the description is minimally adequate for this mutation tool. It still omits the archived-only precondition, side effects on contained tasks, and any error condition, leaving real gaps for a write 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 83%, so the schema already documents base_url, api_token, account_id, access_token, and app_password. The description only echoes project_id via the endpoint path, adding no new syntax or format meaning. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb and resource ('Restores/reopens an archived project') and even names the underlying endpoint path. It implies the precondition (the project must already be archived), which differentiates it from update_project, though it never names or contrasts those siblings explicitly.
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 word 'archived' hints at the use case, but there is no explicit statement of when to use this tool versus update_project, archive_project, or the other restore_* siblings. No exclusions, prerequisites (auth/owner rights), or workflow context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_taskRestore TaskAInspect
Restores/reopens an archived task using /tasks/open/:task_id. Limitations: write operation; task must exist in the target account.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and a non-destructive write profile, so 'write operation' largely restates them. It does add value with the endpoint and the 'task must exist in the target account' constraint, but says nothing about idempotency, reversibility, or return behavior for a mutation tool.
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 tight sentences with the purpose front-loaded ahead of the limitations clause. Nearly all content earns its place, though 'write operation' is redundant with the annotations.
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 annotations present and no output schema, the definition covers purpose, endpoint, and precondition adequately. Auth requirements are handled by the schema's token parameters, so no critical gap remains for calling it 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 coverage is 83%, so the schema carries the parameter burden; task_id itself is undocumented but self-evident. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline 3 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?
States a specific verb and resource ('Restores/reopens an archived task') and even names the endpoint (/tasks/open/:task_id). This clearly separates it from its inverse (archive_task) and from other restore_* siblings by 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 precondition 'task must exist in the target account' gives implied usage context, but the description never says when to use this vs archive_task or any alternative, nor when-not to use it. Usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_userRestore UserAInspect
Restores/reopens an archived user using /users/open/:user_id. Limitations: write operation; requires user-management permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/safety profile (readOnlyHint=false, destructiveHint=false), so the 'write operation' clause is partly redundant. However, the description adds real context beyond the annotations: the user-management permission requirement and the concrete endpoint path. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action front-loaded with limitations following. Mostly waste-free, though 'restores/reopens' is slightly redundant and the 'write operation' clause duplicates what annotations already convey.
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 mutation tool with no output schema and 83% param coverage, the definition covers purpose, endpoint, and the key auth requirement. It omits side effects on related data (e.g. reactivated assignments) and error conditions, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents most parameters. The description only surfaces user_id implicitly via the endpoint path and adds no format/semantics beyond that; baseline 3 is appropriate when the schema does the heavy lifting.
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?
States a specific verb (restores/reopens) and resource (an archived user), and even names the API endpoint. This clearly distinguishes it from sibling restore_* tools (restore_customer, restore_project, restore_task, restore_event) and from archive_user, its inverse.
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 condition of use ('an archived user') but gives no explicit when-not guidance and does not name alternatives or prerequisites beyond the permission note. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_timecard_daySave Timecard DayCInspect
Saves or modifies a timecard day using POST /timecards/days/save. Limitations: write operation; accepts API-supported body fields.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| date | No | ||
| entries | No | ||
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false (write), destructiveHint=false, and idempotentHint=false, so calling out 'write operation' is largely redundant. The upsert framing ('saves or modifies') adds slight value, but 'accepts API-supported body fields' is empty filler and no auth/permission or idempotency context beyond the annotations is provided.
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, front-loaded with the action and endpoint, with no padding. The second sentence is weak but brief rather than bloated.
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 write tool with no output schema and a documented-parameter gap, the description is too thin: it omits what the day/entries payload must contain, which auth credential applies, and any error or overwrite behavior an agent would need to invoke it safely.
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 only 56% and the description does nothing to compensate, gesturing only at 'API-supported body fields' without mentioning day, date, entries, or user_id. The auth parameters (api_token, access_token, app_password, base_url, account_id) rely entirely on schema text.
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+resource: 'Saves or modifies a timecard day,' which is clear about the operation and target. However, it does not distinguish this from related siblings like get_timecard, generate_timecard, or update_timeoff, leaving the agent to infer scope from the name alone.
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 when-to-use guidance, no prerequisites, and no alternatives named. 'Limitations: write operation' describes a property, not a usage condition, so the agent gets no routing help despite ~100 sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_invoiceSend InvoiceADestructiveInspect
Sends an invoice using POST /:account_id/invoices/:invoice_id/send. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| message | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| invoice_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is largely covered. The description reinforces this with 'sensitive write operation' and the confirm requirement, but adds little beyond the structured fields and the endpoint path; no side effects on the invoice itself are described.
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, front-loaded sentences: the action/endpoint first, then the limitations. Every clause carries information and nothing is padded.
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 destructive tool with no output schema and only 67% schema coverage, the description is thin: it does not explain the optional email/message targeting, workspace scoping via account_id, or authentication, which an agent would need to call it 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 coverage is 67% and the only parameter the description mentions (confirm=true) is already fully documented in the schema, so it adds no new meaning. It says nothing about email, message, account_id, or the auth parameters, leaving the semantic gaps in the schema unaddressed.
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?
States a specific verb ('Sends') plus resource ('an invoice') and even names the exact endpoint POST /:account_id/invoices/:invoice_id/send, which cleanly distinguishes it from create_invoice, update_invoice, mark_invoice_paid and export_invoice in the sibling list.
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 a prerequisite ('requires confirm=true') but offers no when-to-use/when-not guidance relative to the many sibling invoice tools (e.g. mark_invoice_paid, export_invoice, update_invoice). Usage is implied by the verb rather than explicitly scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_taskStop TaskADestructiveInspect
Stops tracking a running task using /tasks/stop/:task_id. Requires date in YYYY-MM-DD HH:MM:SS format and timezone as an IANA timezone (for example Europe/Stockholm). Agents should derive the current local date/time and IANA timezone from the user's computer/settings before calling this tool. Limitations: write operation; the task must be currently trackable in the target account.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| task_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| timezone | Yes | ||
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| return_task | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and non-idempotency; the description does repeat 'write operation' but adds genuine preconditions (task must be currently trackable) not present in annotations. It omits what happens to already-recorded tracked time, which matters for a destructive stop.
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 compact sentences that lead with the action and endpoint, then prerequisites, then limitations. Minor redundancy in restating 'requires date... and timezone' after the format guidance, but 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 destructive, 10-parameter tool with no output schema, it covers the awkward input formats, the confirmation requirement is carried by the schema's const:true, and preconditions are stated. The main gap is not saying what the caller gets back or whether tracked time is preserved.
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 only 60%, and the two undocumented required params (date, timezone) are precisely the ones the description formats: YYYY-MM-DD HH:MM:SS and IANA timezone with an example. Other params (confirm, account_id, tokens, base_url) carry their own schema descriptions.
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?
States a specific verb and resource ('Stops tracking a running task') plus the underlying endpoint (/tasks/stop/:task_id), so the action is unambiguous. It does not explicitly name its sibling counterpart track_task, but the inverse relationship is inferable from the name.
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?
Gives a clear prerequisite workflow: derive current local date/time and IANA timezone from the user's machine before calling, and notes the task must be currently trackable in the target account. It stops short of naming alternatives (e.g. why to stop vs. delete or update a task), so no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_taskTrack TaskBInspect
Starts tracking time. With task_id, calls POST /tasks/track/:task_id. Without task_id, calls /tasks/track/ with query fields such as task_name and project_name/project_id. Limitations: write operation; provide either task_id or a trackable task/project/service reference.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| tags | No | ||
| notes | No | ||
| service | No | ||
| task_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| timezone | No | ||
| api_token | No | Alias of app_password | |
| task_name | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | No | ||
| return_task | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| project_name | No | ||
| service_task_id | No | ||
| stop_running_task | No | ||
| service_project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, so the safety profile is covered. The description adds useful non-annotation context: it is a write operation and requires one of two reference shapes. It does not disclose auth requirements (api_token/app_password/access_token) or what stop_running_task actually does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and then the routing rules; no padding. Slightly telegraphic but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter mutation with 28% schema coverage and no output schema, the description covers the key routing decision but leaves large gaps around auth parameters and behavioral flags. It is minimally adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 28% across 18 params, so the schema does little work. The description clarifies the central branch (task_id vs task_name/project_name/project_id) but says nothing about date, tags, notes, timezone, stop_running_task, or return_task, leaving most parameters undocumented.
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?
States a specific verb+resource ('Starts tracking time') and names the concrete endpoints hit in each mode, which clearly separates it from stop_task and other timecard tools. It stops short of explicitly naming siblings, but the purpose 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?
The description gives a genuine usage fork — 'With task_id... Without task_id...' — and a limitation requiring either task_id or a trackable task/project/service reference. However, it never names alternatives (stop_task, save_timecard_day, generate_timecard) or says when-not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_accountUpdate AccountBDestructiveInspect
Updates account/workspace settings using /account/update. Limitations: write operation; requires admin-level permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| locale | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| currency | No | ||
| timezone | No | ||
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation/safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false, openWorldHint=true), so the description need not restate that. It usefully adds the admin-permission requirement, but says nothing about reversibility, partial-update semantics, or what happens to unset fields, which matters for a 10-parameter write.
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 compact sentences, the action first and the limitations second, with no filler. It is efficiently sized for what it conveys, though the endpoint reference is mildly redundant.
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?
Annotations carry the safety profile and the schema carries the confirm/credential parameters, so the essentials are present. However, for a destructive 10-parameter settings mutation with no output schema, the description omits which fields are updatable and the effect of the change, leaving a meaningful gap.
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 60%, so the baseline is 3. The description names no parameters at all and does not clarify the settable values (name, locale, currency, timezone) that lack schema descriptions, so it neither compensates for nor worsens the existing 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?
States a specific verb ('Updates') and resource ('account/workspace settings') plus the underlying endpoint, which cleanly distinguishes it from the read sibling get_account. It stops short of naming which settings are mutable, so the scope is clear at a category level but not exhaustive.
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 line 'Limitations: write operation; requires admin-level permissions' gives one real usage precondition (admin rights) that helps an agent decide if it may proceed. There is no guidance on when to prefer this over update_user, update_user_group, or workspace-level alternatives, and no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_customerUpdate CustomerADestructiveInspect
Updates an existing customer using /customers/update/:customer_id. Supports renaming the customer and updating custom field values. Limitations: write operation; customer must exist in the target account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| customer_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description adds a useful precondition about the customer existing, but repeats 'write operation' (already implied) and says nothing about the required `confirm` flag, reversibility, or auth requirements.
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 compact sentences, front-loaded with the action and endpoint, then scope, then limitations. No filler; each sentence carries information, though the 'write operation' note is mildly redundant with annotations.
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 non-idempotent mutation with no output schema, the description covers the endpoint, updatable fields, and the existence precondition. It leaves the confirm requirement and credential parameters to the schema, which is acceptable but slightly thin for a destructive 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 67% and 9 params exist; the description names name and custom_fields and embeds customer_id in the path, which is useful. It does not explain the confirm flag (schema does), the auth options, or account_id multi-workspace behavior, so it stays at the baseline for a partially-documented 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?
States a specific verb+resource ('Updates an existing customer') and even names the endpoint and the two mutable areas (name, custom field values). It does not, however, explicitly differentiate itself from the other customer mutators (archive_customer, delete_customer, restore_customer), so sibling disambiguation is only partial.
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?
Provides a precondition ('customer must exist in the target account') and flags it as a write operation, which implies context of use. But there is no explicit guidance on when to choose this over create_customer, archive_customer, or delete_customer, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_custom_fieldUpdate Custom FieldCDestructiveInspect
Updates a custom field definition using /custom_fields/update/:custom_field_id. Limitations: destructive write operation; field changes can affect existing records.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| color | No | ||
| notes | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| cf_index | No | ||
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| value_type | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_field_id | Yes | ||
| filter_object_class | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the description's 'destructive write operation' adds nothing new. It does add one genuinely useful behavior beyond the annotations: field changes can affect existing records. It says nothing about reversibility, required authorization, or rate limits, so it stays at a middle 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?
Two sentences, front-loaded with the action and endpoint, and the limitation caveat follows. Tight and readable, though the endpoint string is arguably redundant with the tool name.
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 13-parameter destructive mutation with no output schema and 46% schema coverage, the description is too thin. An agent gets no help on which of the many fields are actually updatable, what confirm does, or what the response contains.
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?
With 13 parameters and only 46% schema description coverage, the description must compensate, and it does not. It never mentions the confirm requirement, the name/color/notes values being changed, value_type, filter_object_class, or the account_id/api_token auth parameters, leaving those to the schema alone.
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?
States a specific verb (updates) and resource (a custom field definition) and even names the endpoint path /custom_fields/update/:custom_field_id, which clearly separates it from create_custom_field and delete_custom_field. It stops short of explicitly contrasting itself with those siblings, so it lands just below the top score.
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 only guidance is a 'Limitations' note that it is destructive and affects existing records. There is no indication of when to use this versus create_custom_field, update_enum_option, or delete_custom_field, and no stated prerequisites such as permissions or the confirm flag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_enum_optionUpdate Enum OptionCDestructiveInspect
Updates an enum option using /enum_options/update/:enum_option_id. Limitations: destructive write operation; can affect existing custom-field values.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| color | No | ||
| index | No | ||
| notes | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| enabled | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_field | No | ||
| enum_option_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so 'destructive write operation' merely restates structured data. The genuinely additive detail is that changes 'can affect existing custom-field values', a cascade effect not captured by annotations, but nothing is said about required permissions or irreversibility.
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 compact sentences with the action front-loaded and the warning trailing. Nothing is wasted, though the endpoint path is arguably redundant with the tool name.
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 13-parameter, non-idempotent mutation with no output schema and under-half schema coverage, the description omits parameter semantics and the mandatory confirm requirement entirely. It is too thin to let an agent call this correctly without reading the schema closely.
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 only 46% across 13 parameters, and the description mentions no parameters at all. With low coverage the description is expected to compensate, and it fails to explain fields like index, enabled, custom_field, or the required confirm flag beyond what the schema already states.
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?
States a specific verb+resource ('Updates an enum option') and even names the endpoint path, so the action is unambiguous. It does not distinguish itself from siblings like create_enum_option, delete_enum_option, or list_enum_options, 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?
There is no guidance on when to choose this tool versus create_enum_option, delete_enum_option, or update_custom_field. The 'Limitations' line is a hazard warning, not a when-to-use/alternative statement, so the agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_eventUpdate EventADestructiveInspect
Updates an existing time event using /events/update/:event_id. Supports changing task/project linkage, start/end timestamps, notes, user and custom fields. Limitations: write operation; event must exist in the target account.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| notes | No | ||
| start | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| task_id | No | ||
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| event_id | Yes | ||
| api_token | No | Alias of app_password | |
| is_billed | No | ||
| task_name | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| event_type | No | ||
| project_id | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| project_name | No | ||
| custom_fields | No | ||
| include_custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the 'event must exist in the target account' precondition and the endpoint path, but does not explain the required confirm flag, partial-update semantics, or reversibility beyond what annotations state.
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, front-loaded with the action and endpoint, followed by the supported field set and limitations. No filler or repetition of the title.
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 19-parameter mutation with no output schema and a mandatory confirm flag, the description covers the main field groups and one precondition but leaves notable gaps: the confirm requirement, credential/account selection, and custom_fields format are undocumented in the description and only partially 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?
Schema description coverage is only 32% across 19 parameters, so the description must compensate. It lists the primary mutable fields (task/project linkage, start/end, notes, user, custom fields), giving real meaning for those, though it omits semantics for is_billed, event_type, include_custom_fields, and the credential/account parameters.
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?
States a specific verb and resource (update an existing time event), names the API endpoint, and enumerates the mutable fields (task/project linkage, start/end, notes, user, custom fields). This clearly separates it from create_event, delete_event, and update_events_batch.
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 'Limitations' clause gives a precondition (event must exist in the target account) and flags it as a write operation, which implies when it applies. However, it never routes the agent between this and alternatives like update_events_batch, restore_event, or stop_task, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_events_batchUpdate Events BatchCDestructiveInspect
Updates time entries in batch using /events/batch/update. Limitations: destructive write operation; accepts API-supported batch payloads.
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, and openWorldHint=true, so calling it a 'destructive write operation' is redundant. 'Accepts API-supported batch payloads' is vague and adds nothing about failure modes, partial-batch behavior, or payload limits, which would be genuinely useful for a batch mutation.
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 compact sentences with the operation and limitation front-loaded, no filler. It is efficient, though the 'Limitations' sentence is partly redundant with annotations.
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?
A 7-parameter destructive batch mutation with no output schema needs more: what the batch payload looks like, whether partial success is possible, and how confirm interacts with the write. The description leaves an agent under-informed for a high-risk 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 86%, so most parameters are self-documenting and the baseline of 3 applies. The description adds no syntax or shape detail for the loosely-typed 'events' anyOf (array or string) or for the required confirm flag.
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?
States a specific verb (updates) and resource (time entries) with batch scope, and names the endpoint. It is distinguishable from the singular update_event and from create_events_batch/delete_events_batch, though it does not explicitly contrast with 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 never says when to use batch update versus update_event for a single entry, nor what prerequisites apply beyond the schema's confirm flag. 'Using /events/batch/update' is a mechanism note, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_expenseUpdate ExpenseBDestructiveInspect
Updates an expense using GET /expenses/:expense_id/update. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | ||
| amount | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| expense_id | Yes | ||
| project_id | No | ||
| spent_date | No | ||
| category_id | No | ||
| customer_id | No | ||
| is_billable | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotent, so the safety profile is largely covered. The description adds genuinely new behavioral context: the operation is treated as sensitive and is gated behind an explicit confirm=true, which the agent must know to call it successfully.
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 compact sentences with the core action front-loaded and the constraints immediately after. Nothing is padded, though the endpoint path is arguably redundant detail.
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 15-parameter destructive mutation with no output schema and thin schema coverage, the description covers the action and the confirm gate but omits which fields are updatable, auth requirements, and what changes are applied. It is adequate but leaves clear 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 description coverage is only 40% across 15 parameters, so the description is expected to compensate, but it explains no field semantics (amount, spent_date, category_id, auth fields, etc.) beyond repeating the confirm requirement already documented in the schema. It leaves most parameters undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Updates an expense') and even cites the backing endpoint. It does not explicitly differentiate itself from siblings like create_expense, delete_expense, or update_events_batch, but the verb+resource pairing 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?
It states a prerequisite ('requires confirm=true') and flags the operation as sensitive, which tells the agent a guard exists. However, it gives no guidance on when to prefer this single-record update over sibling alternatives such as batch update tools, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_holidayUpdate HolidayCInspect
Updates a holiday using POST /holidays/update/:holiday_id. Limitations: write operation; confirm is not required by the Excel.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| name | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| holiday_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, and the description merely restates that this is a write operation. The 'confirm is not required by the Excel' line is opaque jargon that adds no usable behavioral context (no permission requirements, no effect on unspecified fields, no side-effect description).
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 purpose is correctly front-loaded in the first clause, but the second sentence is confusing and low-value. Two sentences, one of which does not earn 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 mutation tool with no output schema, the description plus annotations and schema-derived auth param docs cover the safety profile, but it does not explain which fields are editable or how multiple auth parameters interact. Adequate but with visible 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 description coverage is 63%, which sits in the middle band, and the description adds nothing about the parameters themselves (which fields such as name/date are updatable, what holiday_id must reference). Baseline 3 is appropriate since the schema carries most of the load but the description does not compensate for the uncovered third.
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?
States a specific verb and resource ('Updates a holiday') and even names the API route, so the agent can distinguish it from create_holiday, delete_holiday, and list_holidays at a glance. There is no explicit sibling differentiation or scope note, 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?
No when-to-use, when-not-to-use, or alternative guidance is provided. The trailing 'confirm is not required by the Excel' clause offers no actionable routing or prerequisite information, leaving the agent to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_invoiceUpdate InvoiceBDestructiveInspect
Updates an invoice using POST /:account_id/invoices/:invoice_id/update. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| terms | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| qr_file | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| invoice_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| customer_name | No | ||
| payment_details | No | ||
| customer_address | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description usefully reinforces this with 'sensitive write operation' and surfaces the confirm=true gate as a hard precondition, which is real behavioral value beyond the annotations — though it does not say what is overwritten or whether the change is reversible.
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 compact sentences, front-loaded with the action and endpoint, followed by the limitation. No filler, though the endpoint path is somewhat redundant with the tool's purpose.
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 12-parameter non-idempotent mutation with no output schema, the description covers the confirmation gate but says nothing about the other writable fields, partial-vs-full update semantics, or auth/workspace scoping. Adequate minimum, but real gaps remain.
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?
With 12 parameters and only ~50% schema description coverage, the description carries some burden but adds nothing about any parameter — not what fields like terms, qr_file, or payment_details do, nor that invoice_id is the target. The confirm requirement is the only parameter-adjacent detail, and that is 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 gives a specific verb+resource ('Updates an invoice') and even the exact endpoint, so an agent can distinguish it from get_invoice, delete_invoice, or mark_invoice_paid. It stops short of explicitly naming those siblings, but the update semantics are 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?
Usage is implied by the verb and a precondition is stated ('requires confirm=true'), which tells the agent this will fail without confirmation. However, there is no guidance on when to prefer this over mark_invoice_paid/mark_invoice_void or other invoice mutations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectUpdate ProjectBDestructiveInspect
Updates an existing project using /projects/update/:project_id. Supports core project fields, billing fields, customer/service linkage, notes and custom fields. Limitations: write operation; project must exist in the target account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| color | No | ||
| notes | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| fixed_rate | No | ||
| project_id | Yes | ||
| service_id | No | ||
| customer_id | No | ||
| hourly_rate | No | ||
| is_billable | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| default_view | No | ||
| service_name | No | ||
| custom_fields | No | ||
| customer_name | No | ||
| delivery_date | No | ||
| estimated_time | No | ||
| retainer_closing_day | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as a non-read-only, destructive, non-idempotent, open-world write, so the description's 'write operation' line largely repeats structured data. What it adds is genuinely useful: the precondition that the project must exist in the target account. It does not disclose partial-update semantics, what happens to omitted fields, or reversibility.
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 compact sentences; the core action and endpoint come first, followed by scope and then limitations. Efficient and front-loaded, with no filler, though the 'Limitations:' label is slightly awkward for a single precondition.
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 22-parameter destructive mutation with no output schema and low schema coverage, the description gives a reasonable field-group overview and the existence precondition, but omits the confirmation requirement semantics, idempotency behavior, and per-field guidance. Adequate but notably short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 27% across 22 parameters, so the description is expected to compensate, and it partially does by grouping the updatable fields (core, billing, linkage, notes, custom fields). However, it offers no detail on the required confirm flag, auth parameters, or rate/value formats, leaving most of the 22 params undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Updates an existing project') and even gives the endpoint (/projects/update/:project_id), then enumerates the categories of fields it touches (core, billing, customer/service linkage, notes, custom fields). This clearly distinguishes it from create_project and archive_project, though it does not explicitly contrast with sibling update tools such as update_customer or batch_update_tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the precondition that the project must already exist, which implies 'use this to modify, not create.' Beyond that there is no guidance on when to prefer archive_project/duplicate_project/deletion, or on the multi-workspace situation. Usage context is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_reportUpdate ReportCInspect
Updates a saved/shared report using POST /docs/:report_id/update. Limitations: write operation; confirm is not required by the Excel.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| name | No | ||
| type | No | ||
| title | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| doc_type | No | ||
| api_token | No | Alias of app_password | |
| report_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| recipient_users | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so 'write operation' merely restates the schema-level hints. The description adds no detail about what fields are replaced vs merged, whether unspecified fields are cleared, or auth requirements. The 'confirm is not required by the Excel' sentence is opaque and adds no real behavioral insight.
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?
It is short and front-loads the core action, which is good. However, the second sentence is garbled ('confirm is not required by the Excel') and consumes space without conveying meaning, so it is not fully efficient.
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 mutation tool with 11 parameters, only 36% schema coverage, and no output schema, the description leaves most of the calling surface undocumented. It gives an endpoint but no payload semantics, field behaviors, or success/return expectations.
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 only 36% across 11 parameters, and the description documents none of them (data, name, type, title, doc_type, recipient_users, etc.). With low 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?
States a clear verb+resource ('Updates a saved/shared report') and even names the underlying endpoint POST /docs/:report_id/update, which distinguishes it from get_report, delete_report, create_report, and list_reports in the sibling set. It stops short of explicitly contrasting with those siblings, so it lands at 4 rather than 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?
There is no guidance on when to choose update_report over create_report or get_report, and no prerequisites (auth scope, ownership) are stated. The trailing clause about 'confirm' is confusing and doesn't function as usable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_scheduleUpdate ScheduleBDestructiveInspect
Updates a schedule using GET /schedules/update/:schedule_id. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| fri | No | ||
| mon | No | ||
| sat | No | ||
| sun | No | ||
| thu | No | ||
| tue | No | ||
| wed | No | ||
| name | No | ||
| users | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| frequency | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| description | No | ||
| schedule_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_message | No | ||
| default_events | No | ||
| show_default_events | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered structurally. The description adds the confirm=true gate and the 'sensitive' framing, but does not say what state is overwritten, whether unspecified fields (e.g. day columns) are cleared, or what authorization is needed.
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 compact sentences, front-loaded with the action, no filler or restatement of the title. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive write with 21 loosely documented parameters and no output schema, the description omits what a schedule payload actually contains and what the update affects. The confirmation gate is the only substantive context provided.
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?
With 21 parameters at only 29% schema description coverage, the description is expected to compensate and does not: it names only confirm (already documented with a const and a schema description). The day fields, users, frequency, custom_message, default_events and auth parameters are left unexplained.
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 gives a clear verb+resource ('Updates a schedule') and even the endpoint path. It does not, however, distinguish this from siblings like create_schedule, delete_schedule, get_schedule, or the assign/remove_users_from_schedule variants, so the agent must infer scope from the name alone.
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?
'Limitations: sensitive write operation; requires confirm=true' states a gate the caller must satisfy, which is real usage guidance. It stops short of saying when to choose this over assign_users_to_schedule or batch variants, and gives no when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskUpdate TaskADestructiveInspect
Updates an existing task using /tasks/update/:task_id. Supports changing description, due date, project/service linkage, assignees, billing fields and custom fields. Limitations: write operation; task must exist in the target account, and permissions depend on role.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| type | No | ||
| users | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| list_id | No | ||
| task_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| due_date | No | ||
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| project_id | No | ||
| service_id | No | ||
| description | No | ||
| hourly_rate | No | ||
| is_billable | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| project_name | No | ||
| service_name | No | ||
| custom_fields | No | ||
| list_position | No | ||
| estimated_time | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write, destructive, non-idempotent, and open-world behavior, so the bar is lower. The description adds useful prerequisites about task existence and role-based permissions, but it does not expand on destructive effects, auth requirements, or the required confirmation beyond what the schema states.
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 tightly written sentences with the core action front-loaded. The limitations sentence is compact and does not waste words, making the definition easy to scan.
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 destructive update tool with no output schema and a very large parameter set, the description is only partially complete. It covers the basic purpose and some safety prerequisites, but omits critical invocation details such as the required confirmation flag, authentication options, and the batching alternative.
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?
With 22 parameters and only 27% schema description coverage, the description must compensate for undocumented inputs. It names several update categories (description, due date, project/service linkage, assignees, billing fields, custom fields), but leaves many parameters such as list_id, list_position, estimated_time, id, type, and the required confirm unexplained, so it does not sufficiently cover the payload.
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?
States a specific verb and resource (updates an existing task), gives the endpoint, and names the field scope. The singular 'existing task' helps distinguish it from create_task, archive_task, and batch_update_tasks.
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?
Provides prerequisites (task must exist, permissions depend on role) and identifies it as a write operation, which gives implied usage context. However, it does not explicitly say when to use this versus batch_update_tasks or other update paths, leaving the alternative selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_timeoffUpdate TimeoffCDestructiveInspect
Updates a time off request using GET /timeoffs/:timeoff_id/update. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| notes | No | ||
| status | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| user_id | No | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| policy_id | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| timeoff_id | Yes | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description adds the operation type ('sensitive write') and the confirm=true precondition, which is useful. But it says nothing about what gets destroyed or irreversibility beyond the annotations, so it only marginally exceeds the annotation baseline.
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 waste; the verb-resource statement comes first and the constraint follows. Efficient and 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 destructive, non-idempotent, open-world mutation with 13 params at 46% schema coverage and no output schema, the description is thin. It omits what fields are updatable, how status changes behave, and what happens to the request after update.
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 only 46% with 13 parameters. The description does not explain the six undocumented fields (to, from, notes, status, user_id, policy_id) or their semantics. It only echoes the confirm requirement that the schema already documents with a const and description.
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?
States a specific verb and resource ('Updates a time off request'), which clearly distinguishes it from siblings like create_timeoff, delete_timeoff, get_timeoff, and approve_timeoff. It also names the backing endpoint, adding precision.
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 about when to use this versus approve_timeoff (a status transition) or delete_timeoff. The confirm requirement is stated, but no when-not-to-use or alternative-routing guidance is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_timeoff_policyUpdate Timeoff PolicyBDestructiveInspect
Updates a time off policy using POST /timeoffs/policies/:policy_id/update. Limitations: sensitive write operation; requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| notes | No | ||
| users | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| policy_id | Yes | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the danger profile is largely pre-supplied. The description reinforces this with "sensitive write operation; requires confirm=true," adding the confirmation gate, but it does not explain what an update overwrites, how partial updates behave, or what happens to omitted fields.
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, front-loaded with the action and endpoint before the caveat. No filler or repetition, though the endpoint path adds little for an agent that already has the tool binding.
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 non-idempotent, destructive mutation with 10 parameters and no output schema, the description is only minimally sufficient: it covers the confirmation requirement but not which fields are updatable, whether updates are merge or replace, or the effect on policy membership. Annotations carry the safety story, so the gap is not severe, but the description could say considerably more.
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?
With 10 parameters and only 60% schema description coverage, the description should compensate, yet it only references policy_id (implicitly, via the URL path) and confirm. The complex anyOf "users" parameter, whose array-of-objects vs array-of-IDs vs string forms imply different membership semantics, is left entirely unexplained.
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 and resource ("Updates a time off policy") plus the exact REST path, which clearly distinguishes it from create_timeoff_policy, get_timeoff_policy, and list_timeoff_policies. It stops short of explicitly naming those siblings, but the verb+resource pair 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?
It gives one concrete precondition ("requires confirm=true") and flags the operation as sensitive, which tells the agent when the call will be rejected. However, it offers no guidance on when to pick this over other policy or timeoff mutation tools, nor any prerequisites such as permissions or workspace scoping.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_userUpdate UserBDestructiveInspect
Updates a user profile/settings using /users/update/:user_id. Limitations: write operation; requires permission to manage users.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| No | |||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| user_id | Yes | ||
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| timezone | No | ||
| api_token | No | Alias of app_password | |
| last_name | No | ||
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| first_name | No | ||
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| custom_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered. The description restates that it is a write operation (duplicating the annotation) but does add the permission requirement, which is genuine extra context. It stops short of explaining irreversibility or scope of change.
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 compact sentences with the action front-loaded and the constraints second. No filler, though the 'Limitations:' fragment is terse rather than 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?
For a destructive, 13-parameter mutation with no output schema and 46% description coverage, the definition is thin: it neither names which fields can be changed nor explains the confirmation requirement or partial-update behavior. Permission guidance partly compensates but gaps remain.
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 only 46%, so the description carries a larger burden, yet it adds no meaning for any parameter. The 13 params (role, email, timezone, custom_fields, auth tokens, confirm) are left to the schema, and the sensitive confirm=true requirement is not reinforced in prose.
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?
States a specific verb and resource ('Updates a user profile/settings') plus the endpoint, so an agent can distinguish it from list_users or get_user. It does not differentiate against near-siblings like update_account or update_user_group, but the resource 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?
Adds the condition 'requires permission to manage users', which is useful preconditions context. However there is no guidance on when to choose this over alternatives, and no mention that a confirm=true flag must accompany the call beyond what the schema already states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_user_groupUpdate User GroupCDestructiveInspect
Updates a user group/team using /user_groups/update/:user_group_id. Limitations: write operation; changing membership may affect access.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| users | No | ||
| confirm | Yes | Required explicit confirmation for this sensitive operation. | |
| base_url | No | Optional TrackingTime API base URL override, for example https://api.trackingtime.co/api/v4. | |
| api_token | No | Alias of app_password | |
| account_id | No | TrackingTime workspace/account ID. Required when the user belongs to multiple workspaces. | |
| access_token | No | OAuth 2.0 bearer access token | |
| app_password | No | TrackingTime app password | |
| user_group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered; restating "write operation" is redundant. However, the note that changing membership may affect access is a genuine behavioral addition beyond the annotations, so it earns partial credit.
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, front-loaded with the action and endpoint, with no wasted filler. Efficient, though it is brief to the point of under-specification.
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 with a destructive annotation and no output schema, the description is thin. It omits the required confirm flag, the polymorphic users format, and the multi-workspace account_id/auth requirements that an agent would need to call it 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 coverage is 67%, below the 80% threshold, so the description should compensate but does not. It only implies user_group_id via the path and says nothing about the name, users (a three-way anyOf shape), or the required confirm flag.
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?
States a specific verb and resource ("Updates a user group/team") and even names the endpoint path, so the operation is unambiguous. It doesn't explicitly distinguish itself from siblings like create_user_group or get_user_group, but the verb alone makes the intent clear.
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 guidance on when to use this versus alternatives (create_user_group, delete_user_group) or what prerequisites apply. The "changing membership may affect access" line hints at consequences but offers no when/when-not context.
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.
127 tool updates
- First observed
add_task_comment - First observed
approve_timeoff - First observed
archive_customer - First observed
archive_project - First observed
archive_task - First observed
archive_user - First observed
assign_user_projects - First observed
assign_users_to_schedule - First observed
batch_update_tasks - First observed
calculate_timeoff_amount - First observed
create_custom_field - First observed
create_customer - First observed
create_enum_option - First observed
create_event - First observed
create_events_batch - First observed
create_expense - First observed
create_holiday - First observed
create_invoice - First observed
create_project - First observed
create_report - First observed
create_schedule - First observed
create_task - First observed
create_timeoff - First observed
create_timeoff_policy - First observed
create_user_group - First observed
delete_custom_field - First observed
delete_customer - First observed
delete_enum_option - First observed
delete_event - First observed
delete_events_batch - First observed
delete_expense - First observed
delete_holiday - First observed
delete_invoice - First observed
delete_project - First observed
delete_report - First observed
delete_schedule - First observed
delete_task - First observed
delete_task_comment - First observed
delete_timeoff - First observed
delete_user_group - First observed
duplicate_project - First observed
export_invoice - First observed
export_timecards - First observed
generate_timecard - First observed
get_account - First observed
get_custom_field - First observed
get_customer - First observed
get_event - First observed
get_events_stats - First observed
get_events_summary - First observed
get_expense - First observed
get_invoice - First observed
get_me - First observed
get_next_invoice_number - First observed
get_project - First observed
get_report - First observed
get_schedule - First observed
get_task - First observed
get_timecard - First observed
get_timecards_count - First observed
get_timeoff - First observed
get_timeoff_balance - First observed
get_timeoff_policy - First observed
get_user - First observed
get_user_group - First observed
get_user_schedule - First observed
invite_users - First observed
list_company_events - First observed
list_custom_fields - First observed
list_customers - First observed
list_enum_options - First observed
list_events - First observed
list_expense_categories - First observed
list_expenses - First observed
list_filtered_events - First observed
list_holidays - First observed
list_invoices - First observed
list_project_times - First observed
list_project_users - First observed
list_projects - First observed
list_reports - First observed
list_schedules - First observed
list_task_comments - First observed
list_task_logs - First observed
list_tasks - First observed
list_timecard_logs - First observed
list_timecards - First observed
list_timeoff_balances - First observed
list_timeoff_policies - First observed
list_timeoff_types - First observed
list_timeoffs - First observed
list_user_groups - First observed
list_user_projects - First observed
list_user_tasks - First observed
list_user_trackables - First observed
list_users - First observed
list_workspaces - First observed
mark_invoice_paid - First observed
mark_invoice_void - First observed
refresh_report_share_token - First observed
remove_users_from_schedule - First observed
restore_customer - First observed
restore_event - First observed
restore_project - First observed
restore_task - First observed
restore_user - First observed
save_timecard_day - First observed
send_invoice - First observed
stop_task - First observed
track_task - First observed
update_account - First observed
update_custom_field - First observed
update_customer - First observed
update_enum_option - First observed
update_event - First observed
update_events_batch - First observed
update_expense - First observed
update_holiday - First observed
update_invoice - First observed
update_project - First observed
update_report - First observed
update_schedule - First observed
update_task - First observed
update_timeoff - First observed
update_timeoff_policy - First observed
update_user - First observed
update_user_group
Publisher details
- Operator
- Not applicable
- Operator website
- https://trackingtime.co
- Vendor relationship
- First-party
- Documentation
- https://support.trackingtime.co/en/articles/13738626-trackingtime-mcp-server-for-ai-assistants
- Trust center
- https://support.trackingtime.co/
- Restrictions
- Not applicable
Related MCP Connectors
Time tracking you talk to: log, check and fix your work hours from your AI assistant.
Freelancer time tracking for AI assistants: log time, timers, timesheets, sign-off links, invoices.
Manage projects, tasks, time tracking, and team collaboration through natural language.
Log hours and invoice clients from your AI chat. Time tracking and invoicing for freelancers.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to the TrackingTime API v4 for managing projects, tasks, and team assignments. Users can start or stop timers, log manual time entries, and organize project workflows using natural language.2 npmMIT
- AlicenseNot gradedqualityDmaintenanceIntegrates TimeCamp time tracking into AI assistants, enabling real-time timer control, time entry management, smart search, and reporting.MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Toggl Track time entries, projects, and workspaces through natural language, supporting CRUD operations and past date time slots.137 npm2MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to access Time Doctor employee time-tracking data, including companies, users, projects, tasks, and time-use statistics, while handling authentication internally.11Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.