MCP tool reference
Every tool the Rize MCP server exposes, with its parameters and defaults.
Read tools never modify anything. Write tools create, update, or delete
records in your workspace, and clients that surface MCP annotations will ask you
to confirm the destructive ones. Two tools — sign_up and get_login_url —
work before you have authenticated; everything else requires a connected account.
Every response includes a _user_timezone field. Use it to interpret and build
timestamps rather than assuming UTC. Tools that return lists page with cursor
and return has_more and next_cursor.
This page is generated from the server's tool definitions, so it always matches what is deployed. Numbers, defaults, and enum values come straight from the schemas the MCP client sees.
Session and discovery
get_current_user
Read
Get the authenticated user's profile including name, email, timezone, default team, team memberships (team id, name, role, status), and organization info (id, name, logo, role, finance permission). Call this first to get your org_id and team_id for other tools.
Takes no parameters.
list_teams
Read
List the teams the authenticated user can access — org admins see every team in their orgs. The user's default team is returned first. Use this to obtain a team_id for other tools (time entries, allocations, team members). Each team includes agent_context (the standing guidance applied to its members' agent runs) when the caller can edit it — team admins and org admins; null otherwise.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number | no | Max teams to return. Default 50. |
cursor | string | no | Pagination cursor. |
get_help
Read
Get documentation on how to use Rize MCP tools. Pass a topic to get specific help, or omit for an overview. Topics: time_tracking, profitability, team_management, clients_projects, keywords, skills, reports_routines.
| Parameter | Type | Required | Description |
|---|---|---|---|
topic | string | no | One of overview, time_tracking, profitability, team_management, clients_projects, keywords, skills, reports_routines. Help topic. Default "overview". |
get_product_docs
Read
Get documentation about the Rize product itself: what Rize can do, which integrations are supported, and where to find help articles. Use this to answer questions about Rize features, integrations, platforms, or setup — never guess. Pass a query to search all documentation pages and get the matching ones back with their URLs — prefer this over the static topics when the question is about a specific feature. Use topic "support" whenever the docs don't cover the question, the user hit a bug, or they want to request a feature — it returns where to reach a human instead of guessing. Topics: overview, integrations, docs_index, support.
| Parameter | Type | Required | Description |
|---|---|---|---|
topic | string | no | One of overview, integrations, docs_index, support. Documentation topic. Default "overview". |
query | string | no | Search the full documentation index by keyword. Takes precedence over topic. |
list_skills
Read
List the reusable prompt skills visible to the authenticated user.
Takes no parameters.
get_skill
Read
Get one reusable prompt skill by ID. Use this when the user references a skill chip or a rize://skill/:id link.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | Skill ID from a rize://skill/:id reference or list_skills result. |
get_login_url
Read · no authentication required
Returns the Rize login URL so the user can authenticate in their browser. No authentication required. Use this when the user needs to log in or connect their Rize account.
Takes no parameters.
sign_up
Write · no authentication required
Create a new Rize account via magic link. Sends a sign-in link to the user's email. After clicking the link, the user should download the Rize desktop app to start tracking time automatically.
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | yes | User's email address. |
name | string | no | User's full name. |
timezone | string | no | IANA timezone (e.g. America/New_York). Defaults to UTC. |
Time entries
list_my_time_entries
Read
List the current user's own time entries for a date range. For team-wide entries (admin only), use list_team_time_entries instead. Returns all statuses except rejected by default (tracking, segmenting, active, pending, generating, failed), so you can see live tracked and unprocessed time as well as reviewable suggestions. Sorted by start time with client/project/task details and formatted durations.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | yes | Start date in YYYY-MM-DD format. |
end_date | string | no | End date in YYYY-MM-DD format (defaults to date for single-day query). |
query | string | no | Search time entries by title or description. |
statuses | string[] | no | Any of tracking, segmenting, active, pending, generating, failed, rejected. Array of time entry statuses to include, for example ["active", "pending"]. "tracking" is time currently being tracked live, "segmenting"/"generating" are being processed into suggestions, "pending"/"failed" are suggestions awaiting review. Do not pass a single string. |
client_ids | string[] | no | Filter by client IDs. |
project_ids | string[] | no | Filter by project IDs. |
task_ids | string[] | no | Filter by task IDs. |
sources | string[] | no | Filter by entry source, for example ["ai", "click_up", "user", "timer", "meeting"]. Useful for finding duplicates or verifying sync. |
label_ids | string[] | no | Filter by label IDs. |
team_id | string | no | Filter by team ID (defaults to user's default workspace). |
include_activity | boolean | no | Include expanded activity evidence per entry: top apps/websites, top window titles, and overlapping keyword-rule matches. Slower — only set when tagging or inspecting entries. |
limit | number | no | Max entries to return. Default 100. |
cursor | string | no | Pagination cursor from previous response. |
Scoped to the authenticated user regardless of role. Use list_team_time_entries for other people's time.
list_team_time_entries
Read
List time entries across all team members (team admin only). Returns entries for the entire team by default. Use creator_emails to filter to specific people. Non-admins will only see their own entries. Sorted by start time.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | yes | Start date in YYYY-MM-DD format. |
end_date | string | no | End date in YYYY-MM-DD format (defaults to date for single-day query). |
query | string | no | Search time entries by title or description. |
creator_emails | string[] | no | Filter to specific team members by email (e.g. ['macgill@rize.io']). |
creator_ids | string[] | no | Filter to specific team members by identity ID (alternative to creator_emails). |
statuses | string[] | no | Any of tracking, segmenting, active, pending, generating, failed, rejected. Array of time entry statuses to include, for example ["active", "pending"]. "tracking" is time currently being tracked live, "segmenting"/"generating" are being processed into suggestions, "pending"/"failed" are suggestions awaiting review. Do not pass a single string. |
client_ids | string[] | no | Filter by client IDs. |
project_ids | string[] | no | Filter by project IDs. |
task_ids | string[] | no | Filter by task IDs. |
sources | string[] | no | Filter by entry source, for example ["ai", "click_up", "user", "timer", "meeting"]. Useful for finding duplicates or verifying sync. |
label_ids | string[] | no | Filter by label IDs. |
team_id | string | no | Filter by team ID (defaults to user's default workspace). |
limit | number | no | Max entries to return. Default 100. |
cursor | string | no | Pagination cursor from previous response. |
get_time_entry
Read
Get a single time entry by ID with all details including client, project, task, billing info, and AI confidence data.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The time entry ID. |
create_time_entry
Write
Create a new time entry with optional client, project, and task assignment. Supports idempotency keys to prevent duplicate entries on retry. Times must be in ISO 8601 format — convert user-local times to their timezone (provided as _user_timezone in responses) before sending.
| Parameter | Type | Required | Description |
|---|---|---|---|
start_time | string | yes | Start time in ISO 8601 format (e.g. 2024-01-15T09:00:00Z). |
end_time | string | yes | End time in ISO 8601 format. |
title | string | no | Title for the time entry. |
description | string | no | Description of work performed. |
client_id | string | no | Client ID to assign. |
project_id | string | no | Project ID to assign. |
task_id | string | no | Task ID to assign. |
team_id | string | no | Team ID (defaults to user's default workspace). |
billable | boolean | no | Whether this entry is billable. |
idempotency_key | string | no | Unique key to prevent duplicate entries on retry. Recommended for all creates. |
update_time_entry
Write
Update an existing time entry. Supports changing times, title, description, billing, label, and entity reassignment (client, project, task). Changing team_id clears entity assignments.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The time entry ID to update. |
start_time | string | no | New start time in ISO 8601 format. |
end_time | string | no | New end time in ISO 8601 format. |
title | string | no | New title. |
description | string | no | New description. |
client_id | string | no | Reassign to this client. |
project_id | string | no | Reassign to this project. |
task_id | string | no | Reassign to this task. |
label_id | string | no | Assign this label to the time entry. |
team_id | string | no | Move to this team (clears entity assignments). |
billable | boolean | no | Set billable status. |
delete_time_entry
Write
Delete a time entry by ID. Works on entries of any status (active, pending, failed, etc.).
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The time entry ID to delete. |
AI suggestions and notes
generate_time_entries
Write
Generate AI time entries for a time range. Analyzes the user's actual activity — apps, websites, meetings — and uses clustering to create multiple entries based on natural activity groups. By default, skips time slots where previous entries were rejected. Rate limited: 15 per minute.
| Parameter | Type | Required | Description |
|---|---|---|---|
start_time | string | yes | Start time in ISO 8601 format (e.g. 2024-01-15T00:00:00-04:00). |
end_time | string | yes | End time in ISO 8601 format (e.g. 2024-01-15T23:59:59-04:00). |
team_id | string | no | Team ID (defaults to user's default workspace). |
retry_rejected | boolean | no | If true, also generates entries in time slots where previous entries were rejected. Default false. |
Generation is asynchronous. The call returns immediately; poll list_my_time_entries with statuses: ["generating", "pending"] until the entries settle. Shares a quota with regenerate_time_entry: 15 calls per minute and 100 per day.
regenerate_time_entry
Write
Regenerate AI content for a pending or failed time entry. Useful when generation failed or you want a better title/description. Optionally provide custom instructions to guide the AI. Rate limited: max 3 regenerations per entry, 15 per minute.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The time entry ID to regenerate. |
instructions | string | no | Custom instructions to guide the AI regeneration (e.g. 'focus on the meeting with Client X'). |
Regeneration is asynchronous and capped at 3 attempts per entry — the 4th call returns an error. Shares the generation quota above.
approve_time_entries
Write
Approve pending AI-generated time entry suggestions, making them active entries. Optionally assign client/project/task during approval in a single operation.
| Parameter | Type | Required | Description |
|---|---|---|---|
ids | string[] | yes | Array of time entry IDs to approve. |
client_id | string | no | Assign this client to all approved entries. |
project_id | string | no | Assign this project to all approved entries. |
task_id | string | no | Assign this task to all approved entries. |
reject_time_entries
Write
Reject pending AI-generated time entry suggestions. Rejected entries are kept but hidden from active views.
| Parameter | Type | Required | Description |
|---|---|---|---|
ids | string[] | yes | Array of time entry IDs to reject. |
approve_tag_suggestion
Write
Approve an AI-generated tag suggestion (client, project, or task) on a time entry. This assigns the suggested entity to the time entry. Use list_my_time_entries to see tag suggestions with confidence scores on pending entries.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The tag suggestion ID to approve. |
add_note
Write
Add a note about what you're working on. Notes give Rize context to improve time tracking accuracy.
| Parameter | Type | Required | Description |
|---|---|---|---|
text | string | yes | What did you work on? Natural language. |
date | string | no | Reference date YYYY-MM-DD. Defaults to today. |
save | boolean | no | Set true to save time entries after previewing. Only relevant when blocks are provided. Default false. |
billable | boolean | no | Override billable status for created entries. |
blocks | object[] | no | Pre-parsed time blocks. When provided with durations > 0, time entries will be created in addition to the note. Tag each block with any combination of client, project, and/or task. |
Each entry in blocks is an object: description (string, required), durationMin (number, 0–1440, required), and optional client, project, and task names matched against your existing entities. A block with durationMin: 0 records context without creating an entry. Blocks are laid out backwards from the anchor time, so list them in the order the work happened.
With blocks and save: false (the default) the tool returns a preview — the entries it would create, the client/project/task it matched each block to, and any overlap with entries that already exist. Call again with save: true to commit.
dictate
Write
DEPRECATED: Use add_note instead. This tool now delegates to add_note.
| Parameter | Type | Required | Description |
|---|---|---|---|
text | string | yes | Natural language time description. |
date | string | no | Reference date YYYY-MM-DD. Defaults to today. |
save | boolean | no | Set true to save after previewing. Defaults to false (preview). Default false. |
billable | boolean | no | Override billable status. |
blocks | object[] | no | Pre-parsed blocks. Tag each block with any combination of client, project, and/or task. |
Deprecated. It delegates to add_note and takes the same arguments — call add_note directly.
Raw activity
list_my_apps_used
Read
List the authenticated user's own apps and websites used in a date range, sorted by time spent. Returns app name, URL, time spent, and category.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | yes | Start date in YYYY-MM-DD format. |
end_date | string | no | End date in YYYY-MM-DD format (defaults to date). |
list_my_events
Read
List raw tracking events (app switches, website visits) for the authenticated user in a date range. Max 7-day range. Returns app name, URL, URL host, title, source, and timestamps. Use list_my_apps_used for aggregated summaries instead.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | yes | Start date in YYYY-MM-DD format. |
end_date | string | no | End date in YYYY-MM-DD format (defaults to date for single-day query). |
limit | number | no | Max events per page. Default 200. |
cursor | string | no | Pagination cursor from previous response. |
The date range is capped at 7 days. For an aggregated view, use list_my_apps_used.
list_my_calendar_events
Read
List calendar events (meetings, appointments) for a single day from the user's connected calendars. Returns title, start/end times, attendees, location, and video conference link per event. For raw tracked activity (app switches, website visits) use list_my_events instead.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | yes | Date in YYYY-MM-DD format. |
list_my_keyword_matches
Read
List deterministic keyword-rule matches over the user's tracked time in a date range. Each match is a time window where a keyword rule fired, naming the client/project/task/label it points at. Use these as ground truth when tagging or creating time entries — a keyword match covering an entry's time range is strong evidence for that tag.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | yes | Start date in YYYY-MM-DD format. |
end_date | string | no | End date in YYYY-MM-DD format (defaults to date for single-day query). |
Analytics
get_my_time_allocation
Read
Get the current user's own time allocation summary. By default returns the full view — breakdowns by client, project, task, AND label — plus totals and billable hours. Pass group_by to fetch a single breakdown. For team-wide allocation (admin only), use get_team_time_allocation instead.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | yes | Start date in YYYY-MM-DD format. |
end_date | string | no | End date in YYYY-MM-DD format (defaults to date). |
group_by | string | no | One of client, project, task, label. Single breakdown to return. Omit for the full view (client + project + task + label breakdowns). |
client_ids | string[] | no | Filter by client IDs. |
project_ids | string[] | no | Filter by project IDs. |
task_ids | string[] | no | Filter by task IDs. |
label_ids | string[] | no | Filter by label IDs. |
team_id | string | no | Filter by team ID. |
statuses | string[] | no | Any of active, pending, generating, failed, rejected. Array of time entry statuses to include, for example ["active"]. Do not pass a single string. Default ["active"]. |
get_team_time_allocation
Read
Get time allocation summary across all team members (team admin only). Returns total hours, billable hours, and breakdown by grouping. Use creator_emails to filter to specific people. Non-admins will only see their own allocation.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | yes | Start date in YYYY-MM-DD format. |
end_date | string | no | End date in YYYY-MM-DD format (defaults to date). |
creator_emails | string[] | no | Filter to specific team members by email (e.g. ['macgill@rize.io']). |
creator_ids | string[] | no | Filter to specific team members by identity ID (alternative to creator_emails). |
group_by | string | no | One of client, project, task, label. How to group results. Default "client". |
client_ids | string[] | no | Filter by client IDs. |
project_ids | string[] | no | Filter by project IDs. |
task_ids | string[] | no | Filter by task IDs. |
label_ids | string[] | no | Filter by label IDs. |
team_id | string | no | Filter by team ID. |
statuses | string[] | no | Any of active, pending, generating, failed, rejected. Array of time entry statuses to include, for example ["active"]. Do not pass a single string. Default ["active"]. |
get_ai_effectiveness_stats
Read
Get AI effectiveness metrics for time entry creation and tagging. Shows acceptance rates, tagging coverage, label coverage, AI vs manual breakdown, confidence scores, and trends. Use to assess how well Rize's AI is performing for a team or user.
| Parameter | Type | Required | Description |
|---|---|---|---|
start_time | string | yes | Start of date range (ISO 8601 datetime, e.g. 2025-01-01T00:00:00Z). |
end_time | string | yes | End of date range (ISO 8601 datetime, e.g. 2025-06-01T00:00:00Z). |
team_id | string | no | Team ID to filter by. Defaults to the user's default workspace. |
creator_ids | string[] | no | Filter by specific identity IDs. |
creator_emails | string[] | no | Filter by creator emails (resolved to identity IDs). |
exclude_identity_ids | string[] | no | Identity IDs to exclude from results (e.g. admin accounts). |
include_weekly_trend | boolean | no | Include week-over-week trend data. Default false. |
include_member_breakdown | boolean | no | Include per-member stats breakdown. Default false. |
week_count | number | no | Number of weeks for trend data (max 52). Default 12. |
get_my_time_tracking_signals
Read
Get your recent time tracking signals — the individual AI actions and user feedback events that make up your time tracking history. Returns events like entry accepts/rejects, tag suggestions, label changes, and manual edits with full metadata (reasoning, confidence, tag_type, before/after values). Use alongside get_ai_effectiveness_stats to drill into the 'why' behind aggregate metrics.
| Parameter | Type | Required | Description |
|---|---|---|---|
event_types | string[] | no | Filter by event types. Available: time_entry_accepted, time_entry_rejected, time_entry_deleted, time_entry_auto_approved, time_entry_regenerated, time_entry_split, time_entry_merged, time_entry_created_manually, title_changed, description_changed, tag_suggestion_accepted, tag_suggestion_rejected, tag_suggestion_auto_approved, manual_tag_change, batch_tag_applied, time_entry_created, tag_suggestion_created, tag_rule_created, tag_rule_removed. |
time_entry_id | string | no | Filter signals for a specific time entry. |
start_time | string | no | Start of date range (ISO 8601 datetime). Defaults to 30 days ago. |
end_time | string | no | End of date range (ISO 8601 datetime). Defaults to now. |
limit | number | no | Number of signals to return (max 50). Default 25. |
offset | number | no | Offset for pagination. Default 0. |
Clients, projects, and tasks
list_clients
Read
List clients (customers/accounts) with their hourly rates and team associations. Use client IDs when creating or updating time entries.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | no | Search clients by name. |
queries | string[] | no | Search clients by multiple names. Cannot be combined with query; cursor is ignored and next_cursor is null. |
statuses | string[] | no | Array of client statuses to include, for example ["active"]. Do not pass a single string. Default ["active"]. |
limit | number | no | Max clients to return. Default 50. |
cursor | string | no | Pagination cursor. |
include_keywords | boolean | no | Include keywords (auto-tagging rules) for each client. Off by default for performance. Default false. |
create_client
Write
Create a new client (customer/account). Clients are top-level entities that projects and time entries can be assigned to.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Client name. |
hourly_rate | number | no | Default hourly rate for billing. |
color | string | no | Color hex code (e.g. #FF5733). |
team_name | string | no | Team name to associate with (defaults to user's default team). |
update_client
Write
Update an existing client's name, hourly rate, color, status, keywords (for auto-tagging keyword matching), or prompt (AI context for tagging).
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The client ID to update. |
name | string | no | New name. |
hourly_rate | number | no | New hourly rate. |
color | string | no | New color hex code. |
status | string | no | New status (e.g. active, archived). |
keywords | string[] | no | Keywords for auto-tagging. When the AI sees these strings in window titles, URLs, or app names, it matches the time entry to this client. Use specific terms like client names, domains, or project codes. |
prompt | string | no | AI context prompt for tagging. Describes the client so the AI can better match time entries. Example: 'Acme Corp — SaaS company. Google Ads campaigns, Shopify store management, Klaviyo email flows.'. |
list_projects
Read
List projects with their client associations and team info. Use project IDs when creating or updating time entries.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | no | Search projects by name. |
queries | string[] | no | Search projects by multiple names. Cannot be combined with query; cursor is ignored and next_cursor is null. |
client_id | string | no | Filter by client ID. |
statuses | string[] | no | Array of project statuses to include, for example ["in_progress", "completed"]. Do not pass a single string. Default ["in_progress","completed"]. |
limit | number | no | Max projects to return. Default 50. |
cursor | string | no | Pagination cursor. |
include_keywords | boolean | no | Include keywords (auto-tagging rules) for each project. Off by default for performance. Default false. |
create_project
Write
Create a new project, optionally under a client. Projects organize time entries and can be assigned to time entries directly.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Project name. |
client_id | string | no | Client ID to associate with. |
client_name | string | no | Client name to associate with (creates client if it doesn't exist). |
color | string | no | Color hex code. |
team_name | string | no | Team name to associate with (defaults to user's default team). |
update_project
Write
Update an existing project's name, client, color, status, keywords (for auto-tagging keyword matching), or prompt (AI context for tagging).
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The project ID to update. |
name | string | no | New name. |
client_id | string | no | Client ID to associate with. |
client_name | string | no | Client name to associate with (creates if doesn't exist). |
color | string | no | New color hex code. |
status | string | no | New status (e.g. in_progress, completed, archived). |
keywords | string[] | no | Keywords for auto-tagging. When the AI sees these strings in window titles, URLs, or app names, it matches the time entry to this project. Use specific terms like repo names, Jira codes, or unique identifiers. |
prompt | string | no | AI context prompt for tagging. Describes the project so the AI can better match time entries. Example: 'Website Redesign — Next.js migration. Work in Figma, VS Code with repo acme/website-v2, Vercel deploys.'. |
list_tasks
Read
List tasks with their project and assignee associations. Use task IDs when creating or updating time entries.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | no | Search tasks by name. |
queries | string[] | no | Search tasks by multiple names. Cannot be combined with query; cursor is ignored and next_cursor is null. |
project_ids | string[] | no | Filter tasks by project IDs. |
assigned_to_me | boolean | no | Only return tasks assigned to the current user. |
statuses | string[] | no | Array of task statuses to include, for example ["in_progress", "completed"]. Do not pass a single string. Default ["in_progress","completed"]. |
limit | number | no | Max tasks to return. Default 50. |
cursor | string | no | Pagination cursor. |
include_keywords | boolean | no | Include keywords (auto-tagging rules) for each task. Off by default for performance. Default false. |
create_task
Write
Create a new task, optionally under a project. Tasks are the most granular unit of work and can be assigned to team members.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Task name. |
project_id | string | no | Project ID to associate with. |
project_name | string | no | Project name to associate with (creates project if it doesn't exist). |
assignee_email | string | no | Email of team member to assign (defaults to authenticated user). |
color | string | no | Color hex code. |
team_name | string | no | Team name to associate with (defaults to user's default team). |
update_task
Write
Update an existing task's name, project, assignee, color, status, or keywords (for auto-tagging keyword matching).
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The task ID to update. |
name | string | no | New name. |
project_id | string | no | Project ID to associate with. |
project_name | string | no | Project name to associate with (creates if doesn't exist). |
assignee_email | string | no | Email of team member to assign. |
color | string | no | New color hex code. |
status | string | no | New status (e.g. in_progress, completed). |
keywords | string[] | no | Keywords for auto-tagging. When the AI sees these strings in window titles, URLs, or app names, it matches the time entry to this task. Use specific terms like ticket IDs, branch names, or unique identifiers. |
Labels
list_labels
Read
List labels available for tagging time entries. Use label IDs when updating time entries.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | no | Search labels by name. |
statuses | string[] | no | Array of label statuses to include, for example ["active"]. Do not pass a single string. Default ["active"]. |
limit | number | no | Max labels to return. Default 50. |
cursor | string | no | Pagination cursor. |
create_label
Write
Create a new label for categorizing time entries. Requires team admin role. Labels have a name, description, and AI prompt used for automatic classification.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Label name. |
description | string | yes | Human-readable description of what this label represents. |
prompt | string | yes | AI prompt used for automatic time entry classification. |
color | string | no | Color hex code (e.g. #FF5733). |
team_id | string | no | Team ID to associate with. |
team_name | string | no | Team name to associate with (defaults to user's default team). |
update_label
Write
Update an existing label's name, description, prompt, color, or status. Requires team admin role.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The label ID to update. |
name | string | no | New name. |
description | string | no | New description. |
prompt | string | no | New AI classification prompt. |
color | string | no | New color hex code. |
status | string | no | New status (active or archived). |
delete_label
Write
Delete a label by ID. Requires team admin role. The label is soft-deleted and will no longer appear in label lists.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The label ID to delete. |
Keywords and tagging settings
list_keywords
Read
List active keywords (auto-tagging rules) for the current user. Keywords map text patterns to clients, projects, or tasks — when a keyword appears in a window title, URL, or app name, the time entry is auto-tagged to the parent entity. Must specify tag_type to scope the query.
| Parameter | Type | Required | Description |
|---|---|---|---|
tag_type | string | yes | One of client, project, task. Required: filter by entity type — client, project, or task. |
tag_id | string | no | Filter by specific client/project/task ID. |
create_keyword
Write
Create a new keyword (auto-tagging rule). Keywords auto-tag time entries when the keyword text matches in window titles, URLs, or app names. Each keyword maps to a client, project, or task.
| Parameter | Type | Required | Description |
|---|---|---|---|
keyword | string | yes | The keyword to match (e.g. 'acme', 'acme.com', 'jira.atlassian.net'). |
tag_type | string | yes | One of client, project, task. The entity type to tag to: client, project, or task. |
tag_id | string | yes | The ID of the client, project, or task to tag to. |
match_type | string | no | One of contains, starts_with, ends_with, equals. How to match: contains (default), starts_with, ends_with, or equals. Default "contains". |
field | string | no | One of any, app_name, url, window_title, calendar_event. Which field to match against: any (default), app_name, url, window_title, or calendar_event. Default "any". |
update_keyword
Write
Update an existing keyword's text, match type, or field. Use list_keywords to find the keyword ID first.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The keyword ID to update. |
keyword | string | no | New keyword text. |
match_type | string | no | One of contains, starts_with, ends_with, equals. New match type. |
field | string | no | One of any, app_name, url, window_title, calendar_event. New field to match against. |
delete_keyword
Write
Delete (archive) a keyword. The keyword will no longer be used for auto-tagging. Use list_keywords to find the keyword ID first.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The keyword ID to delete. |
get_tagging_settings
Read
Get the current user's auto-tagging settings: generation mode, entry duration preferences, auto-approve threshold, which tag dimensions are automated, the custom instructions for tagging and activity summaries, and the agent guidance layered onto their runs (personal, plus their default team/workspace guidance). Read-only — use update_tagging_settings to change your own settings. Admins: manage other members via get/update_member_agent_settings, teams via update_team_agent_context, and the workspace via update_workspace_agent_context.
Takes no parameters.
update_tagging_settings
Write
Update your AI tagging settings: tracking mode, minimum entry duration, auto-approve threshold, and custom instructions for how the AI should tag your time entries and generate activity summaries. Which tag dimensions are automated is user-managed and not changeable here. Use get_tagging_settings to read current values first.
| Parameter | Type | Required | Description |
|---|---|---|---|
tracking_generation_mode | string | no | One of tag_rules_and_clustering, tag_rules_only, clustering. How time entries are matched to tags. 'tag_rules_and_clustering' (recommended) combines keyword matching with AI. 'clustering' uses AI only. 'tag_rules_only' uses keywords only. |
minimum_time_entry_minutes | number | no | Minimum duration in minutes for a time entry (default 8, recommend 2-5 for detailed tracking). |
auto_approve_threshold | number | no | Confidence threshold (0-100) for auto-approving AI tag suggestions. Default 95 (very strict). Recommend 70-85 for most users. |
custom_instructions_for_tagging | string | no | Custom instructions for how the AI should tag your time entries to clients/projects/tasks. Describe your workflow, main clients, and how to identify which client from window titles. Example: 'I manage Google Ads for 3 clients. Match by ad account name in browser title.'. |
custom_instructions_for_activity_summary | string | no | Custom instructions for how the AI should generate activity summaries (time entry titles/descriptions). Example: 'Use task names from ClickUp. Keep titles under 60 chars. Include client name prefix.'. |
agent_context | string | no | Personal guidance injected into every agent run (chat, reports, routines, tagging). May embed skills as markdown links like Name; they are expanded at run time. Team/org guidance is admin-managed and read-only here. |
update_team_agent_context
Write
Set a team's standing agent guidance — injected into every team member's agent runs (chat, reports, routines, tagging). Team admins and org admins only. Read current values via list_teams. May embed skills as markdown links like Name; only team- or workspace-visible skills are accepted. Pass an empty string to clear.
| Parameter | Type | Required | Description |
|---|---|---|---|
team_id | string | yes | The team to update (from list_teams). |
agent_context | string | yes | The new team guidance. Empty string clears it. |
update_workspace_agent_context
Write
Set the workspace's standing agent guidance — injected into every member's agent runs (chat, reports, routines, tagging). Workspace admins only. Read the current value via get_tagging_settings (org_agent_context). May embed skills as markdown links like Name; only workspace-visible skills are accepted. Pass an empty string to clear.
| Parameter | Type | Required | Description |
|---|---|---|---|
agent_context | string | yes | The new workspace guidance. Empty string clears it. |
org_id | string | no | The workspace to update. Defaults to the caller's active workspace (see get_current_user). |
Contracts and profitability
list_contracts
Read
List contracts for an organization. Contracts track billing arrangements with clients including hourly rates, retainers, and profitability metrics. Archived contracts are excluded by default — pass status to filter. Use contract IDs with get_contract_profitability.
| Parameter | Type | Required | Description |
|---|---|---|---|
org_id | string | yes | Organization (billing) ID. |
query | string | no | Search contracts by name. |
status | string | no | One of draft, active, paused, completed, archived. Filter by contract status. |
limit | number | no | Max contracts to return. Default 50. |
cursor | string | no | Pagination cursor. |
get_contract
Read
Get a single contract with all its periods and profitability details.
| Parameter | Type | Required | Description |
|---|---|---|---|
org_id | string | yes | Organization (billing) ID. |
id | string | yes | Contract ID. |
create_contract
Write
Create a new contract for profitability tracking. Contracts define billing arrangements (hourly, retainer, fixed fee) with clients. Automatically creates the first contract period. Use get_current_user to get org_id. Pass client_name or org_client_id to link a client.
| Parameter | Type | Required | Description |
|---|---|---|---|
org_id | string | yes | Organization (billing) ID. |
name | string | yes | Contract name. |
contract_type | string | no | One of client, internal, pro_bono. Contract type. Default "client". |
billing_model | string | no | One of hourly, retainer, hybrid, fixed_fee, internal, custom. Billing model. Default "hourly". |
billing_period | string | no | One of monthly, quarterly, yearly, one_time. Billing period. Default "monthly". |
hourly_rate | number | no | Hourly rate. |
retainer_amount_cents | number | no | Retainer amount in cents. |
hours_included | number | no | Hours included in retainer. |
overage_hourly_rate | number | no | Overage hourly rate. |
currency | string | no | Currency code. Default "USD". |
notes | string | no | Contract notes. |
org_client_id | string | no | Organization client ID to link. |
client_name | string | no | Client name to look up (alternative to org_client_id). |
period_start_date | string | no | First period start date (ISO 8601, defaults to start of current month). |
period_end_date | string | no | First period end date (ISO 8601, defaults to end of current month). |
update_contract
Write
Update a contract's billing details. Changes to rate fields are synced to the current period.
| Parameter | Type | Required | Description |
|---|---|---|---|
org_id | string | yes | Organization (billing) ID. |
id | string | yes | Contract ID to update. |
name | string | no | Contract name. |
contract_type | string | no | One of client, internal, pro_bono. Contract type. |
billing_model | string | no | One of hourly, retainer, hybrid, fixed_fee, internal, custom. Billing model. |
status | string | no | One of draft, active, paused, completed, archived. Contract status. |
billing_period | string | no | One of monthly, quarterly, yearly, one_time. Billing period. |
hourly_rate | number | no | Hourly rate. |
retainer_amount_cents | number | no | Retainer amount in cents. |
hours_included | number | no | Hours included in retainer. |
overage_hourly_rate | number | no | Overage hourly rate. |
currency | string | no | Currency code. |
notes | string | no | Contract notes. |
org_client_id | string | no | Organization client ID to link. |
get_org_profitability
Read
Get aggregated profitability metrics across all non-archived contracts for an organization in a date range. Returns revenue, costs, margin, and hours. For per-contract detail use get_contract_profitability. All monetary values are in cents.
| Parameter | Type | Required | Description |
|---|---|---|---|
org_id | string | yes | Organization (billing) ID. |
start_date | string | yes | Start date (ISO 8601, e.g. 2025-01-01). |
end_date | string | yes | End date (ISO 8601, e.g. 2025-01-31). |
Requires org admin or the finance permission. All monetary values are in cents.
get_contract_profitability
Read
Get profitability metrics for a specific contract in a date range. Returns revenue, costs, margin, hours, budget burn, and period dates. Use list_contracts to find contract IDs. All monetary values are in cents.
| Parameter | Type | Required | Description |
|---|---|---|---|
org_id | string | yes | Organization (billing) ID. |
id | string | yes | Contract ID. |
start_date | string | yes | Start date (ISO 8601, e.g. 2025-01-01). |
end_date | string | yes | End date (ISO 8601, e.g. 2025-01-31). |
get_profitability_trend
Read
Get monthly revenue, cost, and expense totals for a date range. Returns one data point per month across all non-archived contracts. Useful for spotting trends and comparing periods. All monetary values are in cents.
| Parameter | Type | Required | Description |
|---|---|---|---|
org_id | string | yes | Organization (billing) ID. |
start_date | string | yes | Start date (ISO 8601, e.g. 2025-01-01). |
end_date | string | yes | End date (ISO 8601, e.g. 2025-06-30). |
create_expense
Write
Add an expense to a contract period. Expenses can be pass-through, delivery, or overhead. Categories: ad_spend, vendor, freelancer, software, other. Get the contract_period_id from get_contract. Metrics recompute automatically after adding.
| Parameter | Type | Required | Description |
|---|---|---|---|
org_id | string | yes | Organization (billing) ID. |
contract_period_id | string | yes | Contract period ID to add the expense to. |
expense_type | string | yes | One of pass_through, delivery, overhead. Type: pass_through (billed to client), delivery (cost of delivery), overhead. |
amount_cents | number | yes | Amount in cents. |
date | string | yes | Expense date (ISO 8601, must fall within the contract period). |
category | string | yes | One of ad_spend, vendor, freelancer, software, other. Expense category. |
currency | string | no | Currency code. Default "USD". |
description | string | no | Description of the expense. |
vendor_name | string | no | Vendor name. |
create_revenue_entry
Write
Add a revenue entry to a contract period. Categories: setup_fee, consulting, upsell, adjustment, other. Get the contract_period_id from get_contract.
| Parameter | Type | Required | Description |
|---|---|---|---|
org_id | string | yes | Organization (billing) ID. |
contract_period_id | string | yes | Contract period ID to add revenue to. |
amount_cents | number | yes | Amount in cents. |
date | string | yes | Revenue date (ISO 8601, must fall within the contract period). |
category | string | yes | One of setup_fee, consulting, upsell, adjustment, other. Revenue category. |
currency | string | no | Currency code. Default "USD". |
description | string | no | Description of the revenue entry. |
Teams and members
list_workspace_members
Read
List the workspace (organization) roster with per-team assignments. Visibility depends on your role: workspace admins see everyone, team admins and viewers see their teams, managers see their direct reports, plain members see an empty roster. Rates are only returned for workspace admins and finance grantees. Get workspace_id from get_current_user (org.id).
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_id | string | yes | Workspace (organization/billing) ID. |
query | string | no | Search members by name or email. |
limit | number | no | Max members to return. Default 50. |
cursor | string | no | Pagination cursor. |
list_team_members
Read
List team members with their roles, managers, hourly rates, and cost rates. Any team member can list: org and team admins and viewers see the whole roster, managers see their direct reports plus themselves, members see only themselves. Archived members are never returned. Rates require team admin, org admin, or finance permissions. Cost rates affect profitability calculations (delivery_labor_cost_cents).
| Parameter | Type | Required | Description |
|---|---|---|---|
team_id | string | yes | Team ID to list members for. |
query | string | no | Search members by name or email. |
statuses | string[] | no | Array of team member statuses to include, for example ["active"]. Do not pass a single string. Default ["active"]. |
limit | number | no | Max members to return. Default 50. |
cursor | string | no | Pagination cursor. |
get_member_agent_settings
Read
Get another workspace member's agent settings: their personal guidance, tagging instructions, and activity summary instructions. Admins only (org admins, plus admins of an active team the member belongs to) — returns not-found otherwise. Find identity ids via list_workspace_members. For your OWN settings use get_tagging_settings.
| Parameter | Type | Required | Description |
|---|---|---|---|
identity_id | string | yes | The member's identity id (from list_workspace_members). |
org_id | string | no | The workspace the member belongs to. Defaults to the caller's active workspace. |
update_member_agent_settings
Write
Update another workspace member's agent settings: their personal guidance, tagging instructions, and/or activity summary instructions. Admins only (org admins, plus admins of an active team the member belongs to). Omitted fields are left unchanged; pass an empty string to clear one. Read current values first with get_member_agent_settings. For your OWN settings use update_tagging_settings.
| Parameter | Type | Required | Description |
|---|---|---|---|
identity_id | string | yes | The member's identity id (from list_workspace_members). |
org_id | string | no | The workspace the member belongs to. Defaults to the caller's active workspace. |
agent_context | string | no | The member's personal agent guidance. Empty string clears it. |
custom_instructions_for_tagging | string | no | The member's personal tagging instructions. Empty string clears it. |
custom_instructions_for_activity_summary | string | no | The member's activity summary instructions. Empty string clears it. |
invite_team_member
Write
Invite a new member to a team by email. Sends an invitation email. Requires team admin or org admin permissions. Naturally idempotent — re-inviting an existing member returns the existing record.
| Parameter | Type | Required | Description |
|---|---|---|---|
team_id | string | yes | Team ID to invite the member to. |
email | string | yes | Email address of the person to invite. |
name | string | no | Name of the person being invited. |
role | string | no | One of member, manager, admin, viewer. Role to assign (default: member). Managers see direct reports only; viewers have read-only visibility and are excluded from tracking rosters. Default "member". |
billable_by_default | boolean | no | Whether the member's time is billable by default (default: true). |
manager_id | string | no | Team member ID of this member's manager (must be an admin or manager on the same team). |
update_team_member
Write
Update a team member's role, title, manager, hourly rate, cost rate, or billable default. Requires team admin or org admin permissions. Use list_team_members to find team_member_id values.
| Parameter | Type | Required | Description |
|---|---|---|---|
team_id | string | yes | Team ID. |
team_member_id | string | yes | Team member ID to update. |
role | string | no | One of member, manager, admin, viewer. Role to assign. Managers see direct reports only; viewers have read-only visibility and are excluded from tracking rosters. |
title | string | no | Job title. |
manager_id | string | no | Team member ID of this member's manager (must be an admin or manager on the same team). Pass null to clear. |
hourly_rate | number | no | Hourly billing rate. |
cost_rate | number | no | Internal cost rate per hour. |
billable_by_default | boolean | no | Whether time is billable by default. |
remove_team_member
Write
Remove a member from a team. The membership is archived, not deleted — historical time entries are kept and re-inviting the person restores it. Requires team admin or org admin permissions. Use list_team_members to find team_member_id values.
| Parameter | Type | Required | Description |
|---|---|---|---|
team_id | string | yes | Team ID. |
team_member_id | string | yes | Team member ID to remove. |
Reports and routines
list_report_runs
Read
List report runs for the current user's reports. Returns runs ordered by most recent first, with nested report metadata and AI analyses. Filter by report ID or status (pending, running, ready, failed).
| Parameter | Type | Required | Description |
|---|---|---|---|
report_id | string | no | Filter runs to a specific report ID. |
status | string | no | One of pending, running, ready, failed. Filter by run status. |
limit | number | no | Max runs to return. Default 25. |
cursor | string | no | Pagination cursor from previous response. |
get_report_run
Read
Get a single report run by ID, including the parent report metadata and all AI analyses with summaries and insights.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | Report run ID. |
list_routine_runs
Read
List routine runs for the current user. Returns runs ordered by most recent first, with nested routine metadata and the briefs each run produced. Filter by routine ID or status (pending, running, ready, failed).
| Parameter | Type | Required | Description |
|---|---|---|---|
routine_id | string | no | Filter runs to a specific routine ID. |
status | string | no | One of pending, running, ready, failed. Filter by run status. |
limit | number | no | Max runs to return. Default 25. |
cursor | string | no | Pagination cursor from previous response. |
get_routine_run
Read
Get a single routine run by ID, including the parent routine metadata and all briefs the run produced with their markdown bodies.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | Routine run ID. |