mcp-timely
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-timelyWhat's on my plate?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-timely
MCP server for Timely time tracking — built for asking questions, not wrapping endpoints. Three read-only tools, each answered in a single upstream call with Timely doing the aggregation server-side, so an LLM never pages through raw entries to sum hours (and never gets the sum wrong).
Tool | The question it answers |
| What's on my plate? — projects with client, logged hours, budget burn, unbilled amounts |
| Where did my time go? — date-range rollups grouped by project, client, label, or day, with billable split |
| What did I actually do? — individual entries with notes for a range; standup/diary/invoicing material |
Scope is deliberate: read-only, and always scoped to the authorized user. There are no write tools and no user/team parameters.
Setup
Create a Timely OAuth app at
https://app.timelyapp.com/<account>/oauth_applicationswith callback URLurn:ietf:wg:oauth:2.0:oob.Configure
cp .env.example .env # fill in TIMELY_CLIENT_ID and TIMELY_CLIENT_SECRETAuthorize (once)
uv sync uv run mcp-timely authOpen the printed URL, authorize, paste the code. Tokens land in
TIMELY_TOKEN_FILE(defaulttimely_tokens.json) and refresh themselves from then on.Add to Claude Code
claude mcp add timely -- uv run --directory /path/to/mcp-timely mcp-timely
Related MCP server: kimai-mcp-server
Token handling
Timely rotates refresh tokens on every refresh and its access tokens carry no expiry. The session layer uses the access token until a 401, then refreshes once — persisting the new pair atomically before continuing — and retries the request once. The token file is the only state; keep it on a persistent volume in Docker. Re-authorization is only needed if the grant is revoked.
HTTP deployment
Set TRANSPORT=http and MCP_API_KEY (the server refuses to start
unauthenticated HTTP). Serves streamable-http on /mcp, liveness on
/health. See compose.yaml.
Development
uv run pytest # unit tests (in-memory MCP client, no network)
uv run ruff check .Releases
Every push to main that touches non-doc files releases automatically: tests
and a security audit run, the patch version bumps, a vX.Y.Z tag lands, and a
multi-arch image is published to ghcr.io/caseyro/mcp-timely. Consequences:
Don't edit
versioninpyproject.tomlby hand — CI owns it.Add
[skip ci]to a commit message to skip a release.Rebase PRs on
mainbefore merging so the auto-bump commit doesn't race yours.Markdown-only and test-only changes don't trigger a release.
License
MIT
Available Tools
3 toolsprojects_overviewProjects overviewARead-onlyIdempotent
[timely] What's on my plate? Every project with client, logged hours, budget burn, and unbilled amounts, sorted by hours logged.
| Name | Required | Description | Default |
|---|---|---|---|
| include_inactive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| summary | Yes | |
| projects | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds behavioral details such as sorting by hours logged and specifying output fields (client, budget burn, unbilled amounts), providing additional context 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?
The description is a single concise sentence that front-loads the purpose with '[timely] What's on my plate?' followed by a clear list of outputs. Every word is informative, with no wasted 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?
Given the tool has one optional parameter and an output schema, the description covers the main purpose and output fields. However, it omits guidance on the include_inactive parameter, leaving a minor completeness 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 0%, meaning the parameter include_inactive has no description in the schema. The tool description does not mention this parameter or explain when to set it to true, failing to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns every project with client, logged hours, budget burn, and unbilled amounts, sorted by hours logged. It specifies the resource (projects overview) and the action (list/retrieve), making it distinct from sibling tools like time_spent and work_log.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through '[timely] What's on my plate?' suggesting a quick overview, but it does not explicitly provide when to use this tool versus alternatives or conditions 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.
time_spentTime spentARead-onlyIdempotent
[timely] Where did my time go? Server-side rollups for a date range (YYYY-MM-DD), grouped by project, client, label, or day, with billable split. Totals are computed by Timely, not client-side. Day buckets follow the Timely account's timezone (a day's bucket equals the sum of that day's entries).
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | ||
| until | Yes | ||
| group_by | No | project |
Output Schema
| Name | Required | Description |
|---|---|---|
| since | Yes | |
| until | Yes | |
| groups | Yes | |
| summary | Yes | |
| group_by | Yes | |
| total_hours | Yes | |
| billable_hours | Yes | |
| total_formatted | Yes | |
| non_billable_hours | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent behavior. The description adds value by disclosing that totals are computed server-side by Timely and that day buckets follow the account's timezone. This provides clarity 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?
The description is concise, containing a few clear sentences. It front-loads the purpose and critical details without unnecessary words. The informal lead phrase 'Where did my time go?' adds personality but is still 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?
Given the tool's moderate complexity (3 params, output schema present), the description covers the main aspects: date range, grouping, timezone behavior, and server-side computation. It provides sufficient context for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It mentions the date range format (YYYY-MM-DD) and the group_by options, but does not elaborate on the meaning of 'since' and 'until' beyond the schema. Some value added but 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?
The description clearly states the tool computes server-side rollups for time spent, grouped by project/client/label/day, with billable split. It distinguishes from siblings by focusing on aggregated rollups rather than detailed logs or overviews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for aggregated time data, mentioning server-side rollups and grouping options. However, it does not explicitly state when to use this tool over siblings like work_log or projects_overview, leaving the agent to infer based on the 'rollup' nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
work_logWork logARead-onlyIdempotent
[timely] What did I actually do? Individual entries with notes for a date range (YYYY-MM-DD) — standup, diary, and invoicing raw material.
| Name | Required | Description | Default |
|---|---|---|---|
| upto | Yes | ||
| since | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| upto | Yes | |
| since | Yes | |
| entries | Yes | |
| summary | Yes | |
| total_hours | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint; description adds date range format (YYYY-MM-DD) and notes about entries, but does not mention pagination, size 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?
Compact single sentence with a clarifying bracketed prefix, though the '[timely]' may be ambiguous; front-loaded with 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?
Description covers key output (entries with notes), references use cases (standup, diary, invoicing), and pairs well with existing annotations and output schema, making it mostly complete for a data retrieval 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 has 0% parameter description coverage. Description only indicates date range format but does not explain the 'since' and 'upto' parameters individually or their constraints.
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?
Description clearly states the tool retrieves individual work log entries with notes for a date range, explicitly distinguishing from sibling tools like projects_overview and time_spent by calling it 'raw material' for standup, diary, and invoicing.
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?
Implies usage for raw activity entries, but no explicit guidance on when to use this versus siblings, nor 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.
TDQS
Each tool serves a clearly distinct purpose: projects_overview provides project-level summaries, time_spent aggregates time data, and work_log returns raw entries. No overlap or ambiguity.
All tool names follow a consistent pattern of [noun]_[descriptor] (e.g., projects_overview, time_spent, work_log), making them predictable and easy to understand.
Three tools are appropriate for a read-only time tracking reporting server, covering high-level overview, aggregated time, and detailed logs without unnecessary bloat.
The tools cover the main read operations for time tracking reporting, but lack write/update actions. For a reporting-focused server, this is acceptable, though a tool for client or user listing could enhance coverage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
MCP server exposing klokin time-tracking operations (employees, time entries, stores) to AI clients.
MCP server providing attendance data queries via the CloudTime API.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceMCP server for Timely time tracking API. Connects Claude Code to your Timely account for reading and creating time entries, projects, tasks, and users.5
- AlicenseAqualityBmaintenanceMCP server for Kimai time-tracking that provides read access to the full API and guarded write tools for timesheets, with explicit authorization and backups.28195AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceA local MCP server that reads logged hours from an internal time tracker, providing tools to list time entries, projects, and the active timer. It is read-only, enabling Claude Code to see time-tracking data without writing.
- AlicenseNot gradedqualityAmaintenanceRead-only MCP server for Clockify time tracking, exposing 60 raw read tools and five workflows for status, workspace overview, and review of days/weeks.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/CaseyRo/mcp-timely'
If you have feedback or need assistance with the MCP directory API, please join our Discord server