Timing integration
Timing is an automatic time tracker for Mac with a web app for teams. Through its API an agent can list, create, update and delete time entries, start and stop the timer, mark entries billable, billed or paid in bulk, manage the project tree, list teams and their members, and build duration reports grouped by project, title, user or time span, optionally with app usage. The plain-text activity hierarchy route and the two redirect-only routes (latest entry, running timer: use list_time_entries with is_running=true) are not exposed. Authentication is an API key from the API Keys section of the web app, sent as a Bearer token. The limit is 500 requests per hour and 200 per minute.
Say what should happen.
The workflow builds itself.
What you can do with Timing
Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Project, 5 operations
create_projectCreate projectPOSTCreates a project, at the root or under an existing parent, in your private projects or in a team (team_id). Returns the new project with its self reference (/projects/<id>).delete_projectDelete projectDELETEDeletes a project AND all of its child projects. Cannot be undone. Returns no content.get_projectGet projectGETReturns one project: title, title_chain, color, productivity score, archive state, notes, parent, children (as references), team_id, billing default and custom fields.list_projectsList projectsGETLists the projects you can see, flat, with title, title_chain, color, productivity score, archive state, parent and billing default. Pass team_id for a team's projects; leave it out for your private ones.update_projectUpdate projectPUTUpdates a project's title, color, productivity score, archive state, notes, billing default or custom fields. Only fields you send change. The parent and children cannot be changed here.
Time entry, 5 operations
create_time_entryCreate time entryPOSTCreates a finished time entry between start_date and end_date, with a title and/or project. Returns the entry with its self reference (/time-entries/<id>).delete_time_entryDelete time entryDELETEDeletes one time entry. Cannot be undone. Returns no content.get_time_entryGet time entryGETReturns one time entry: start_date, end_date, duration in seconds, project reference, title, notes, is_running, billing_status and custom fields.list_time_entriesList time entriesGETLists time entries, newest start first, one page at a time (page). Without both start_date_min and start_date_max it returns the last 30 days. is_running=true finds the running timer.update_time_entryUpdate time entryPUTUpdates a time entry's dates, project, title, notes, billing status or custom fields. Only fields you send change; title and project cannot both end up empty.
Batch update, 1 operation
batch_update_time_entriesBatch update time entriesPATCHApplies the same changes (data) to several time entries at once, for example marking them billed. Only the fields in data change. Returns the updated entries.
Hierarchy, 1 operation
get_project_hierarchyGet project hierarchyGETReturns the whole project tree: each root project with its children nested under children. Pass team_id for a team's tree; leave it out for your private projects.
Member, 1 operation
list_team_membersList team membersGETLists the active members of a team (pending invitations excluded), each with a user reference (/users/<id>), email and name. Use the reference in team_members[] or other_user_id.
Report, 1 operation
generate_reportGenerate reportGETReturns report rows, each with a total duration in seconds for one combination of the chosen columns (project, title, user...). Without both start_date_min and start_date_max it covers the last 30 days.
Start, 1 operation
start_timerStart timerPOSTStarts a timer now (or at start_date) with a title and/or project. Any timer already running is stopped first. Returns the running entry.
Stop, 1 operation
stop_timerStop timerPUTStops the currently running timer and returns the stopped entry with its end_date and duration in seconds.
Team, 1 operation
list_teamsList teamsGETLists the teams you are a member of, each with its id (a reference such as /teams/1) and name. The number at the end of the id is the team_id other tools take.
Use Timing from Claude Code, Cursor or Codex
Connect Timing in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Timing operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect Timing
- Create your workspace
Sign up free. Nothing to install.
- Connect Timing once
Add your Timing connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- Describe the job in chat
The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.
Timing integration FAQ
What can you do with the Timing integration?
LiveContext exposes 17 operations on Timing, covering project, time entry, batch update and hierarchy.
