Pyunto Time Management
OfficialPyunto Time Management — integrations
Open-source client libraries for Pyunto Time Management, a time-management and project-planning service with end-to-end encryption.
Package | What it is |
TypeScript client for the public REST API (v1), with client-side E2EE decryption | |
MCP (Model Context Protocol) server — connects Claude Code, Claude Desktop, Codex CLI, Cursor and other AI clients to an account |
The service itself is not open source. This repository contains only the client side: HTTP calls against the documented public API, plus the crypto needed to decrypt your own data locally. There is nothing here that talks to the database, handles billing, or holds a key.
Why this part is public
The MCP server can be given your account password so it can decrypt project and task names. That is a lot to ask of a program you cannot read, so this is the part we publish: you can verify for yourself that the password is used only to unwrap the private key in your own process, and is never transmitted.
See sdk/src/crypto.ts for the primitives and
mcp/src/index.ts for how they're used.
Related MCP server: tyme-mcp
Quick start (MCP)
No clone needed — the published package runs straight from npm:
claude mcp add pyunto-tm \
--env PYUNTO_TM_API_KEY=ptm_your_key \
-- npx -y @pyunto/tm-mcpFull setup instructions, including Claude Desktop, Codex CLI and Cursor: https://tm.pyunto.com/docs/mcp.en.md (日本語: https://tm.pyunto.com/docs/mcp.ja.md).
Get an API key from Settings → Account → API keys in the app. Scopes decide what an integration may read or write, and a key can be revoked at any time.
Quick start (SDK)
npm install @pyunto/tm-sdkimport { PyuntoTM } from "@pyunto/tm-sdk";
const tm = new PyuntoTM({ apiKey: process.env.PTM_KEY! });
// Dates, durations and aggregates need no key material at all
const record = await tm.serviceRecord("2026-08-01", "2026-08-31");
// Names and memos are encrypted; unlock decrypts them locally
await tm.unlock(process.env.PTM_PASSWORD!);
const projects = await tm.projects({ decrypt: true });Development
npm workspaces; Node 18+.
npm install
npm run build # both packages
npm test # sdk crypto round-trips + mcp tools against a stub APImcp depends on @pyunto/tm-sdk by version, so the published package resolves
it from the registry while local development links the workspace copy.
Security
Found a problem in this code, or in the service? Please report it privately rather than opening a public issue: support@pyunto.com.
Licence
MIT — see LICENSE.
Available Tools
10 toolsdelete_time_blockA
Permanently delete ONE recorded time block, along with any files attached to it. Before calling it you MUST show the user the block you are about to delete (date, start and end time, project, task and memo, from list_time_blocks) and get an explicit yes for that specific block. Never infer the block from a vague instruction, and never delete several blocks because the user described a range — confirm and delete them one at a time. A deleted block can be put back with restore_time_block for 14 days, after which it and its attachments are purged for good and cannot be recovered; say so when you report the deletion, and do not tell the user the deletion is irreversible. Requires the blocks:delete scope, which is separate from blocks:write and has to be granted deliberately.
| Name | Required | Description | Default |
|---|---|---|---|
| block_id | Yes | From list_time_blocks. Exactly one block is deleted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and delivers: cascade deletion of attachments, a 14-day recoverability window versus permanent purge afterward, and a distinct blocks:delete scope separate from blocks:write that must be granted deliberately. It also pre-empts an incorrect user-facing claim about 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?
Long but denser than it looks: every sentence is a distinct guardrail (target identification, user confirmation, no batching, reversibility window, scope requirement). The destructive action is front-loaded and no sentence is 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 an irreversible-leaning destructive tool with no annotations and no output schema, this covers everything an agent needs: exactly what is destroyed, how to confirm, how to recover, what scope is required, and what to tell the user afterward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents that the id comes from list_time_blocks. The description only reinforces cardinality ('Exactly one block is deleted'), adding little beyond the schema. 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 precise verb and resource ('Permanently delete ONE recorded time block') and immediately scopes the side effect ('along with any files attached to it'). The 'ONE' emphasis cleanly separates it from ranged or bulk operations and from siblings like list_deleted_time_blocks and restore_time_block.
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 preconditions (must show the user the specific block pulled from list_time_blocks and get an explicit yes), explicit prohibitions (never infer from a vague instruction, never delete a range at once), and names the alternative path (restore_time_block within 14 days). Nothing 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.
list_deleted_time_blocksA
Time blocks that were deleted but can still be restored, newest first, each with the date it was deleted and the deadline for putting it back. Use it to find the block_id for restore_time_block when the user says they deleted something by mistake. Requires the blocks:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses ordering (newest first), the per-item payload (deletion date, restore deadline), and the required blocks:read scope — solid context. It stops short of return-shape details like pagination or whether expired blocks drop off.
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 what the tool returns before the usage instruction and the scope requirement. No filler; each sentence carries distinct 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?
With no output schema and no annotations, the description must explain the return payload and auth needs — it does both (item contents, ordering, blocks:read scope). Pagination and result limits are the only meaningful omissions for a list 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?
The tool takes zero parameters, so the baseline is 4. There is no parameter surface for the description to clarify, and it correctly doesn't waste words on nonexistent inputs.
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 resource and qualifier: time blocks that were deleted but are still restorable. This clearly distinguishes it from the sibling list_time_blocks, which covers active blocks, so an agent can pick correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes usage: 'Use it to find the block_id for restore_time_block when the user says they deleted something by mistake.' It names the sibling tool it feeds and the triggering user condition, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List every project the account can see, with id, name, colour and role (owner/editor/viewer). Use it to resolve a project name the user typed into the project_id other tools need. Requires the projects:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers the key operational facts: visibility scope ('every project the account can see'), the required projects:read scope, and the read-only nature implied by 'List'. It omits pagination/result-size behavior for what could be a large collection.
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 what is returned, then why to call it, then the auth prerequisite. No filler 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?
No output schema exists, so the description compensates by naming the returned fields, and it also discloses the required scope. The only material gap is the absence of any pagination or volume guidance for a potentially unbounded list.
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?
Zero parameters, so the baseline is 4. The description usefully clarifies that the output id is the project_id consumed by other tools, adding context beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List every project the account can see') and enumerates the returned fields (id, name, colour, role). This is unmistakably distinct from siblings such as list_tasks and list_time_blocks, which target entirely different resources.
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 states when to use it: to resolve a user-typed project name into the project_id that other tools require. That is a strong, concrete usage context, though it names no exclusion or explicit alternative tool for listing projects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksA
List Gantt tasks (and subtasks) with their id, project, name and date range. Filter to one project with project_id. Use it to resolve a task name into the task_id that log_time takes. Requires the projects:read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| active_on | No | YYYY-MM-DD — keep only tasks whose date range covers this day. | |
| project_id | No | Only tasks in this project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden, and it does disclose the required 'projects:read' scope, which is a non-obvious auth prerequisite. 'List' implies read-only, but pagination, result caps, and whether subtasks are nested or flattened are not addressed.
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 what is listed and returned, followed by filtering and the use case. No filler and every sentence contributes 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?
With no output schema, the description usefully enumerates returned fields, the filtering mechanism, the downstream consumer (log_time), and the auth scope. It leaves pagination/result-size behavior and subtask nesting unstated, a minor gap for a simple two-parameter list 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 100%, so both parameters are already documented, setting the baseline at 3. The description reinforces project_id as the project filter but never mentions active_on, adding little semantic meaning 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 ('List Gantt tasks (and subtasks)') and enumerates the returned fields (id, project, name, date range), so an agent knows exactly what comes back. It is distinguishable from siblings like list_projects and list_time_blocks by its task-level scope and inclusion of subtasks.
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 concrete primary use case: 'resolve a task name into the task_id that log_time takes,' which names the consuming sibling. It also tells the agent how to narrow results with project_id. It stops short of stating when NOT to use it (e.g., versus list_projects for enumerating projects), so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_time_blocksA
The individual time blocks logged between two dates (inclusive, max 92 days), with start/end times, duration, project, task and memo. This is the detailed schedule; use time_summary when you only need totals. Requires blocks:read.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | YYYY-MM-DD (inclusive). | |
| date_from | Yes | YYYY-MM-DD (inclusive). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the inclusive date semantics, a max 92-day range limit, and the required blocks:read scope. It omits ordering/pagination behavior and result-size expectations, which keeps 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 no filler; the scope constraint precedes the alternative-tool routing. It opens as a noun phrase rather than a verb, which slightly weakens the front-loading of the action, 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?
For a two-parameter read tool with no output schema, the description supplies the return fields, the permission requirement, and the range cap — enough to call it correctly. Only ordering/pagination details are missing, which is minor.
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 both date parameters are already documented as YYYY-MM-DD inclusive. The description adds a real constraint not present in the schema — the 92-day maximum span — which meaningfully constrains how the agent should call it.
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 the specific resource (individual time blocks), the scope (logged between two dates), and the returned fields (start/end, duration, project, task, memo). It explicitly differentiates itself from the sibling time_summary, so an agent can pick correctly 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 clear routing rule: 'use time_summary when you only need totals,' which tells the agent when the alternative is preferable. It stops short of stating exclusions (e.g., what to use for deleted or unfiltered blocks), so it is strong but not fully prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_timeA
Record a block of worked time on the calendar. Writes to the user's real schedule, so confirm the project, date and times with them before calling it. Requires the blocks:write scope; for an end-to-end-encrypted project a memo additionally needs PYUNTO_TM_PASSWORD so it can be encrypted locally.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | "HH:MM" (24h) or minutes past midnight. | |
| date | Yes | YYYY-MM-DD. | |
| memo | No | What was worked on. Encrypted client-side. | |
| start | Yes | "HH:MM" (24h) or minutes past midnight. | |
| task_id | No | Gantt task to attribute the time to. | |
| project_id | Yes | From list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that this mutates the user's real schedule, requires the blocks:write scope, and needs PYUNTO_TM_PASSWORD for encrypted memos. It omits other behavioral traits such as overlap/conflict handling, reversibility, or validation errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the mutation side-effect and the confirm-first warning front-loaded. No filler, though the sentence packing scope, memo and password into one clause is slightly dense.
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-param mutation tool with no annotations and no output schema, the description covers side effects, auth and the encryption password requirement well. It leaves gaps around conflict/overlap behavior and what a successful call returns, but is otherwise 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 100%, so every parameter is already documented, giving a baseline of 3. The description adds only marginal parameter meaning beyond the schema (the memo/encryption context), which the schema already states as 'Encrypted client-side'.
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 ('Record a block of worked time on the calendar'), so the agent knows exactly what it does and can tell it apart from read tools like list_time_blocks. It does not explicitly contrast with update_time_block or delete_time_block, which would have sharpened sibling differentiation.
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 usage condition and a prerequisite: confirm project, date and times with the user before calling, since it writes to the real schedule. It stops short of naming the alternative tools (e.g. update_time_block) or stating when not to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_time_blockA
Put a deleted time block back on the calendar, along with any files that were attached to it. Get block_id from list_deleted_time_blocks. Works only within the 14-day recovery window; after that the block is gone for good. Requires the blocks:write scope.
| Name | Required | Description | Default |
|---|---|---|---|
| block_id | Yes | From list_deleted_time_blocks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the permission requirement (blocks:write scope), the irreversibility after 14 days, and the side effect of reattaching files. It stops short of saying how failures present (e.g., block already restored or window expired), which is the one behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, action first, then sourcing guidance, then the constraint and permission. No redundant or filler 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 one-parameter mutation with no annotations and no output schema, the description covers purpose, input source, permission, and the recovery-window limit. It omits error/response behavior, but everything needed to invoke it correctly is present.
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 the single parameter's description already points to list_deleted_time_blocks, so the description adds no syntax or format detail beyond what the schema states. Baseline 3 is correct for a one-param tool with full 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?
Specific verb ('Put ... back') plus resource ('a deleted time block') with the attached-file side effect called out, which cleanly distinguishes it from delete_time_block and update_time_block. An agent can pick this over its siblings without reading 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 names the companion tool that produces the required input (list_deleted_time_blocks) and states the hard usage boundary (14-day recovery window, after which the block is unrecoverable). No explicit 'when not to use this vs. another restore path' exists, but the prerequisites are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_summaryA
Total hours logged between two dates (inclusive, max 92 days), grouped by project, by task, or by day. This is the tool to answer 'how much time did I spend on X' and to write a work log or diary entry. Requires record:read.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | YYYY-MM-DD (inclusive). | |
| group_by | No | Grouping for the totals. Default: project. | |
| date_from | Yes | YYYY-MM-DD (inclusive). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so well: it discloses the 92-day maximum range, that dates are inclusive, the available grouping modes, and the required record:read permission. What it does not cover is output shape or how totals are formatted, leaving a small gap for a no-annotation 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: the capability and its bounds come first, then the use case. No filler and no repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter aggregation tool with no output schema, the description covers scope, grouping, limits, and auth requirements so an agent can call it correctly. The only omission is any hint about the shape of the returned totals, which is minor given the group_by field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds a real constraint the schema omits: the 92-day maximum span between date_from and date_to. It also restates the grouping vocabulary, which the schema already enumerates, so value beyond baseline is moderate rather than rich.
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 operation (totaling hours logged) over an explicit resource (time records) with a bounded date window and three named groupings. It is clearly distinguishable from siblings like list_time_blocks, which return raw entries rather than aggregated totals.
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 concrete use cases ('how much time did I spend on X', writing a work log or diary entry), which tells the agent when this tool is the right pick. It does not explicitly name or exclude the alternative listing tools, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_time_blockA
Change an already-recorded time block: its date, start/end times, memo, or the task it counts towards. Get block_id from list_time_blocks. Only the fields you pass change. Tell the user what the block currently says and what it will say before calling this. Requires the blocks:write scope; changing a memo on an end-to-end-encrypted project also needs PYUNTO_TM_PASSWORD, and project_id so the memo is encrypted under the right key.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | "HH:MM" (24h) or minutes past midnight. | |
| date | No | YYYY-MM-DD. | |
| memo | No | Replaces the memo. Needs project_id. | |
| start | No | "HH:MM" (24h) or minutes past midnight. | |
| task_id | No | Task to attribute the time to; 0 detaches it. | |
| block_id | Yes | From list_time_blocks. | |
| project_id | No | The block's project, from list_time_blocks. Required with memo. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses partial-update semantics ('Only the fields you pass change'), the required blocks:write scope, and the special PYUNTO_TM_PASSWORD + project_id requirement for encrypting memos on end-to-end-encrypted projects. It omits reversibility and result behavior, but the authorization and mutation semantics are unusually well covered.
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 tight sentences, front-loaded with the mutation scope before the prerequisites. Every sentence carries operational weight, though the memo/encryption sentence is dense enough that it could be split for readability.
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 tool with no annotations and no output schema, the description covers identity lookup, partial-update behavior, scope, and the encryption prerequisite. Return-value details are absent but the tool has no output schema, and reversibility guidance is the only notable omission.
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 already 100% (baseline 3), and the description adds meaning beyond it by explaining where block_id comes from and why project_id must accompany a memo (so the memo is encrypted under the right key). That cross-parameter dependency is genuine added value.
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 ('Change') and resource ('an already-recorded time block') and enumerates exactly which fields are mutable (date, start/end, memo, task attribution). This clearly distinguishes it from siblings like log_time (create), delete_time_block, and list_time_blocks without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete context: obtain block_id from list_time_blocks, and confirm the current vs. intended state with the user before calling. It stops short of stating when not to use this tool (e.g., versus log_time for new entries), so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiA
Who this MCP server is connected as: account email, API key name, granted scopes, server URL, and whether end-to-end-encrypted names can be decrypted. Call this first when a tool fails, to see which scopes are missing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden, and it does meaningfully: it discloses the exact contents returned (email, key name, scopes, server URL, E2E decryption status) and frames the tool as a read-only diagnostic. It does not explicitly state that it is side-effect free, but the identity-inspection framing makes that clear.
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: the first front-loads what is returned, the second front-loads the diagnostic trigger. No filler, no restatement of 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?
There is no output schema and no annotations, so the description must explain what comes back — it enumerates the returned fields — and it supplies the diagnostic use case. Nothing an agent needs in order to decide to call this zero-parameter tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly adds no parameter detail because there is nothing to parameterize, and the 100% schema coverage leaves no gap 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+resource — it returns the identity this MCP server is connected as — and enumerates the exact fields (account email, API key name, scopes, server URL, encryption capability). This is clearly distinguishable from every sibling, which is a time-tracking domain tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: "Call this first when a tool fails, to see which scopes are missing." That is a concrete when-to-use condition. It does not name any competing tool or an exclusion, but no sibling overlaps this diagnostic role, so ambiguity is low.
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.
10 tool updates
- First observed
delete_time_block - First observed
list_deleted_time_blocks - First observed
list_projects - First observed
list_tasks - First observed
list_time_blocks - First observed
log_time - First observed
restore_time_block - First observed
time_summary - First observed
update_time_block - First observed
whoami
This server cannot be deployed
TDQS
Scored across 10 tools
Each tool targets a clearly distinct resource or action: projects, tasks, active time blocks, summaries, deleted blocks, logging, updating, deleting, restoring, and identity. Descriptions explicitly resolve potential overlaps, such as list_time_blocks versus time_summary and list_deleted_time_blocks versus list_time_blocks.
The set is mostly consistent snake_case with verb_noun or list_noun patterns, such as list_tasks, log_time, delete_time_block, and restore_time_block. Minor deviations are whoami (single word) and time_summary (noun phrase rather than verb_noun), but readability remains high.
10 tools is well-scoped for a time-tracking server, and each tool has a clear role without obvious redundancy. The count sits comfortably in the ideal range and does not feel thin or heavy.
The time-block lifecycle is fully covered: log, list, update, delete, restore, and list deleted blocks. Minor gaps include read-only projects and tasks (no create/update/delete for those resources) and no direct get_time_block_by_id, but the core time-management workflows are present.
Maintenance
Related MCP Connectors
Log hours and invoice clients from your AI chat. Time tracking and invoicing for freelancers.
Connects AI assistants to TrackingTime for querying time entries, projects, tasks, customers, and team data using natural language.
Track billable time from your AI chat: timers, entries, reports, CSV export. All data stays local.
Track billable time from your AI chat: timers, entries, reports, CSV export. All data stays local.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with Rytnow project management platform, supporting task management, time tracking, plan creation, and team collaboration through natural language commands.-
- AlicenseNot gradedqualityFmaintenanceConnects AI assistants to the Tyme macOS app to manage time tracking, projects, and tasks via natural language. It uses native AppleScript and JXA to control timers and generate reports without requiring cloud dependencies or API keys.13 npm4MIT

TrackingTime MCPofficial
AlicenseNot gradedqualityBmaintenanceConnects AI assistants to TrackingTime for querying time entries, projects, tasks, customers, and team data using natural language.11 npmMIT- AlicenseNot gradedqualityDmaintenanceEnables natural language time tracking through AI assistants, integrating with Azure DevOps to log, view, and report work hours without context switching.14 npmMIT