workspace-list
List Workspaces
List workspaces for the active MCP profile. Pass refresh: true to refetch from Accounts when a workspace is missing from cache.
refresh
io.github.togglPublished by GitHub account togglv1.13.194Updated Nov 8, 2026
Toggl 2.0 MCP server for tasks, projects, time entries, and workspace operations.
Toggl 2.0 MCP server that lets an assistant manage workspaces, projects, tasks, time entries, timesheets and reports.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
List Workspaces
List workspaces for the active MCP profile. Pass refresh: true to refetch from Accounts when a workspace is missing from cache.
refreshSwitch Workspace
Switch the active workspace by updating the stored configuration. The new workspace takes effect on the next tool call. Use workspace-list to see available workspace IDs.
workspace_idrequiredList MCP profiles
List saved credential profiles from ~/.toggl/focus-tools.json. The row where active is true is the MCP active profile (active.mcp). Profiles may be shared with the Toggl CLI.
Takes no parameters.
Switch MCP profile
Set active.mcp to an existing profile name so subsequent entity calls use that credential row.
profile_namerequiredRemove saved profile
Delete a profile row from ~/.toggl/focus-tools.json. If it was the MCP active profile, active.mcp moves to another remaining profile when possible. This affects both MCP and shared storage; removing a profile used by the CLI removes it for the CLI too. Destructive: call without confirm_token first to receive confirm_required + confirm_token, then repeat with the same profile_name and confirm_token (same pattern as entity mutations).
profile_namerequiredconfirm_tokenAuthenticate MCP
Authenticate this MCP server with Toggl 2.0 via OAuth. Opens browser login and stores credentials locally. Optionally pass workspace_id to pick a specific workspace when multiple are available. When the server runs with TOGGL_API_TOKEN, reports the API-key identity instead and never opens a browser.
workspace_idfocus_api_urlaccounts_api_urlLogout MCP
Clear local MCP authentication state. Removes stored credentials so subsequent tool calls require auth again.
Takes no parameters.
Ai
Manage Focus ai with the following actions: - **accept-ai-change**: Accept Ai Change Ai. (data: conversation_id*, message_id*, view_id*) - **apply-ai-change**: Apply Ai Change Ai. (data: conversation_id*, message_id*, view_id*) - **connect-ai-source**: Connect Ai Source Ai. (data: payload*{redirect_uri*}, source_id*) - **day-rebuild-group**: Day Rebuild Group Ai. (data: payload*{evidence*}) - **day-rebuild-name**: Day Rebuild Name Ai. (data: payload*{evidence*}) - **day-rebuild-projects**: Day Rebuild Projects Ai. (data: payload*{evidence*}) - **day-rebuild-read-connected**: Day Rebuild Read Connected Ai. (data: payload*{now*, service*, since*, tools*, final, preferred_tools, turns}) - **discard-ai-change**: Discard Ai Change Ai. (data: conversation_id*, message_id*, view_id*) - **disconnect-ai-source**: Disconnect Ai Source Ai. (data: source_id*) - **finish-ai-source**: Finish Ai Source Ai. (data: payload*{code*, state*}, source_id*) - **get-conversations**: Get Conversations Ai. (data: before, limit, search) - **get-messages**: Get Messages Ai. (data: conversation_id*, limit) - **get-sources**: Get Sources Ai. (data: none) - **get-usage**: Get Usage Ai. (data: none) - **next-ai-actions**: Next Ai Actions Ai. (data: conversation_id*, message_id*) - **remove-ai-attachment**: Remove Ai Attachment Ai. (data: attachment_id*, conversation_id*) - **run-ai-view**: Run Ai View Ai. (data: payload*{input*, tool*}) - **search**: Search Ai. (data: q*) - **send-ai-message**: Send Ai Message Ai. (data: conversation_id*, payload*{text*, attachment_ids, page_context}) - **undo-ai-change**: Undo Ai Change Ai. (data: conversation_id*, message_id*, view_id*) - **upload-ai-attachment**: Upload Ai Attachment Ai. (data: conversation_id*, file*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: tru
dataactionrequireddry_runconfirm_tokenAlerts
Manage Focus alerts with the following actions: - **create**: Create Alerts. (data: payload*{config*, rule_type*, project_id, recipient_group_ids, recipient_roles, recipient_user_ids}) - **delete**: Delete Alerts. (data: alert_id*) - **get**: Get Alerts. (data: alert_id*) - **list**: List Alerts. (data: rule_type, project_id, scope) - **partial-update**: Partial Update Alerts. (data: alert_id*, payload*{config, recipient_group_ids, recipient_roles, recipient_user_ids, rule_type}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenArchived-clients
Manage Focus archived-clients with the following actions: - **get**: Get Archived Clients. (data: client_id*) - **get-classic**: Get Classic Archived Clients. (data: name, page, per_page) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenArchived-projects
Manage Focus archived-projects with the following actions: - **get**: Get Archived Projects. (data: project_id*) - **get-classic**: Get Classic Archived Projects. (data: client_id, name, page, per_page) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenArchived-tasks
Manage Focus archived-tasks with the following actions: - **get**: Get Archived Tasks. (data: task_id*) - **get-classic**: Get Classic Archived Tasks. (data: name, page, per_page, project_id) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenArchived-time-entries
Manage Focus archived-time-entries with the following actions: - **get**: Get Archived Time Entries. (data: date_from*, date_to*, page, per_page, project_id, task_id) - **get-get**: Get Get Archived Time Entries. (data: time_entry_id*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenAttachments
Manage Focus attachments with the following actions: - **get-workspace-attachment-storage**: Get Workspace Attachment Storage Attachments. (data: none) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenAudit-log
Manage Focus audit-log with the following actions: - **get-organization**: Get Organization Audit Log. (data: action, custom_field_id, entity_id, entity_type, export, from*, page_number, page_size, project_id, to*, user_id, workspace_id) - **list**: List Audit Log. (data: action, custom_field_id, entity_id, entity_type, export, from*, page_number, page_size, project_id, to*, user_id) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenCapacities
Manage Focus capacities with the following actions: - **get-computations**: Compute user or ghost capacity for a date range. (data: end_date*, group*, include_drafts, include_task_estimates, private, start_date*, task_source, team_id, unit, user_id) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenClients
Manage Focus clients with the following actions: - **archive**: Archive Clients. (data: client_id*, payload*{project_count*}) - **create**: Create Clients. (data: name*, address, contact_email, currency, internal_reference) - **delete**: Delete Clients. (data: client_id*) - **get**: Get Clients. (data: client_id*) - **get-archive-preview**: Get Archive Preview Clients. (data: client_id*) - **list**: List Clients. Clients group billable work; projects can reference client_id. Filter projects with projects.list --client-id. (data: name, page, per_page) - **restore**: Restore Clients. (data: client_id*) - **unarchive**: Unarchive Clients. (data: client_id*) - **update**: Update Clients. (data: client_id*, payload*{name, address, contact_email, currency, internal_reference}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenProjects
Manage Focus projects with the following actions: - **create-project**: Create a project with related data such as members, milestones, rates, and billable rates. Follow the create action's privacy and billable guidance. Project fields go under payload.project. Set rates through payload.billable_rates, not the legacy payload.rates (start_at/end_at). For payload.billable_rates: hourly_rate is in the currency's smallest unit, so it depends on the currency: two-decimal currencies like USD/EUR use cents (5000 = 50.00), zero-decimal ones like JPY/KRW use whole units (5000 = 5000), three-decimal ones like KWD/BHD use thousandths. Reads return the same unit. Omit end_date for an open-ended schedule; when set it must be on or after start_date. (data: payload*{project*, billable_rates, members, milestones, rates}) - **add-project-members**: Add Project Members Projects. (data: payload*{role_id*, group_ids, user_ids}, project_id*) - **archive**: Archive Projects. (data: project_id*) - **attachments-bulk-create**: Attachments Bulk Create Projects. Uploads several local files in one call. names and display_orders are optional parallel arrays; they default to the file basenames and array positions. (data: project_id*, file_paths*, names, display_orders) - **attachments-create**: Attachments Create Projects. Uploads a local file (file_path) as an attachment. The mime type is inferred from the extension and the API rejects disallowed types; uploads are capped at 20 MB. (data: project_id*, file_path*, name, display_order) - **attachments-delete**: Attachments Delete Projects. (data: attachment_id*, project_id*) - **attachments-list**: Attachments List Projects. Lists attachment metadata. Upload files with attachments-create (file_path), download with attachments-view (save_to). (data: order_by, project_id*) - **attachments-update**: Attachments Update Projects. Full update (PUT): both name and display_order are required; the response body is empty, verify via attachments-list. (da
dataactionrequireddry_runconfirm_tokenTasks
Manage Focus tasks with the following actions: - **create-task**: Create a task with related data such as subtasks and an initial time entry. For payload.task and each payload.subtasks[] item: Send start_date and end_date together, with end_date on or after start_date; for a single due date, send both as that day. (data: payload*{task*, estimate_allocations, subtasks, time_entry}) - **archive**: Archive Tasks. (data: from_recurring_task_id, scope, task_id*) - **attachments-bulk-create**: Attachments Bulk Create Tasks. Uploads several local files in one call. names and display_orders are optional parallel arrays; they default to the file basenames and array positions. (data: task_id*, file_paths*, names, display_orders) - **attachments-create**: Attachments Create Tasks. Uploads a local file (file_path) as an attachment. The mime type is inferred from the extension and the API rejects disallowed types; uploads are capped at 20 MB. (data: task_id*, file_path*, name, display_order) - **attachments-delete**: Attachments Delete Tasks. (data: attachment_id*, task_id*) - **attachments-list**: Attachments List Tasks. Lists attachment metadata. Upload files with attachments-create (file_path), download with attachments-view (save_to). (data: order_by, task_id*) - **attachments-update**: Attachments Update Tasks. Full update (PUT): both name and display_order are required; the response body is empty, verify via attachments-list. (data: attachment_id*, payload*{display_order*, name*}, task_id*) - **attachments-view**: Attachments View Tasks. Downloads the attachment's binary content to a local path (save_to). Refuses to replace an existing file unless overwrite is true. (data: task_id*, attachment_id*, save_to*, overwrite) - **bulk-archive**: Bulk Archive Tasks. (data: task_ids*) - **bulk-create**: Bulk Create Tasks. (data: tasks*) - **bulk-delete**: Bulk Delete Tasks. Deletes all listed task IDs in one HTTP call. Requires confirm flow like single delete. (data: ids*, outboun
dataactionrequireddry_runconfirm_tokenCustom-fields
Manage Focus custom-fields with the following actions: - **bulk-patch-user-custom-field-values**: Bulk Patch User Custom Field Values Custom Fields. (data: payload*{user_ids*}) - **create**: Create Custom Fields. Requires workspace admin (403 otherwise). field_type is one of select, multi_select, text, number, date, checkbox, users; select/multi_select fields can be seeded with options inline. (data: payload*{entity_type*, field_type*, name*, description, integration_ext_id, integration_source, options}) - **delete**: Delete Custom Fields. Requires workspace admin. Soft-deletes the field and removes it from entities; this also discards stored values. (data: custom_field_id*) - **get**: Get Custom Fields. (data: custom_field_id*) - **get-allowed-users**: Get Allowed Users Custom Fields. (data: custom_field_id*) - **list**: List Custom Fields. Custom fields are workspace-level definitions attached to project or task entities. Reads work for all members; create/update/delete return 403 for non-admins. Reordering fields is not available through this tool yet. (data: entity_type, order_by, page, per_page) - **options-create**: Options Create Custom Fields. Requires workspace admin. Only valid for select and multi_select fields. (data: custom_field_id*, payload*{name*, color, description}) - **options-delete**: Options Delete Custom Fields. Requires workspace admin. Deleting an option clears it from entities that have it selected. (data: custom_field_id*, option_id*) - **options-list**: Options List Custom Fields. (data: custom_field_id*, name, order_by, page, per_page) - **options-update**: Options Update Custom Fields. Requires workspace admin. Full update (PUT) of the option's name/color/description. (data: custom_field_id*, option_id*, payload*{name*, color, description}) - **replace-custom-field-allowed-users**: Replace Custom Field Allowed Users Custom Fields. (data: custom_field_id*, payload*{user_ids*}) - **update**: Update Custom Fields. Requires workspace admin
dataactionrequireddry_runconfirm_tokenCustomreports
Manage Focus customreports with the following actions: - **create-acustom-report**: Create Acustom Report Customreports. (data: payload*{name*, params*}) - **delete-acustom-report**: Delete Acustom Report Customreports. (data: id*) - **get-acustom-report**: Get Acustom Report Customreports. (data: id*) - **get-custom-reports**: Get Custom Reports Customreports. (data: none) - **save-acustom-report**: Save Acustom Report Customreports. (data: id*, payload*{name*, params*}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenDesignations
Manage Focus designations with the following actions: - **bulk-create-workspace**: Bulk Create Workspace Designations. (data: payload*{designations*}) - **bulk-delete-workspace**: Bulk Delete Workspace Designations. (data: all_or_none, ids*) - **bulk-update-workspace**: Bulk Update Workspace Designations. (data: payload*{designations*, all_or_none}) - **create-project**: Create Project Designations. (data: payload*{designations*}, project_id*) - **create-project-designation-bookings**: Create Project Designation Bookings Designations. (data: payload*{bookings*}, project_id*) - **create-workspace**: Create Workspace Designations. (data: payload*{name*, member_ids}) - **delete-project**: Delete Project Designations. (data: payload*{ids*}, project_id*) - **delete-project-designation-bookings**: Delete Project Designation Bookings Designations. (data: payload*{ids*}, project_id*) - **delete-workspace**: Delete Workspace Designations. (data: designation_id*) - **get-project**: Get Project Designations. (data: order_by, project_id*) - **get-project-designation-bookings**: Get Project Designation Bookings Designations. (data: project_id*) - **get-workspace-designations**: Get Workspace Designations Designations. (data: designation_id, has_members, include_members, name, order_by, page, per_page) - **update-project**: Update Project Designations. (data: payload*{designations*}, project_id*) - **update-project-designation-bookings**: Update Project Designation Bookings Designations. (data: payload*{bookings*}, project_id*) - **update-workspace**: Update Workspace Designations. (data: designation_id*, payload*{name*}) - **update-workspace-designation-members**: Update Workspace Designation Members Designations. (data: payload*{add, remove}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_r
dataactionrequireddry_runconfirm_tokenGoals
Manage Focus goals with the following actions: - **create**: Create Goals. (data: payload*{...}) - **delete**: Delete Goals. (data: goal_id*) - **get**: Get Goals. (data: goal_id*) - **list**: List Goals. (data: none) - **preview-goal-tracked-time**: Preview Goal Tracked Time Goals. (data: payload*{...}) - **reorder**: Reorder Goals. (data: payload*{goal_ids*}) - **update**: Update Goals. (data: goal_id*, payload*{active, client_ids, comparison, icon, name, project_ids, recurrence, start_date, tag_ids, target_seconds, task_ids, weekdays}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenMilestones
Manage Focus milestones with the following actions: - **create**: Create Milestones. (data: payload*{color*, due_date*, name*, completed_at, project_ids, team_ids}) - **delete**: Delete Milestones. (data: milestone_id*) - **get**: Get Milestones. (data: milestone_id*) - **get-classic**: Get Classic Milestones. (data: due_date_from, due_date_to, order_by, page, per_page, project_id, team_id) - **get-stream**: Get Stream Milestones. (data: due_date_from, due_date_to, order_by, project_id, team_id) - **partial-update**: Partial Update Milestones. (data: milestone_id*, payload*{color, due_date, name, project_ids, team_ids}) - **restore**: Restore Milestones. (data: milestone_id*) - **update**: Update Milestones. (data: milestone_id*, payload*{color*, due_date*, name*, completed_at, project_ids, team_ids}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenOrganization
Manage Focus organization with the following actions: - **create-group**: Create an organization group. (data: payload*{name*, emoji, organization_users, workspaces}) - **create-workspace-invitations**: Create Workspace Invitations Organization. (data: payload*{emails*, focus_role_id}) - **delete-group**: Delete an organization group. (data: group_id*) - **get-member-tags**: Get Member Tags Organization. (data: workspace_id*) - **get-my-groups**: List organization groups for the current user. (data: none) - **get-roles**: List organization roles. (data: none) - **get-teams**: List organization teams. (data: active_members_only, filter, group_ids, has_designations, organization_user_id, page, per_page, query, sort_dir, workspace_id*) - **update-group**: Update an organization group. (data: group_id*, payload*{name*, emoji, organization_users, workspaces}) - **update-group-user-role**: Update Group User Role Organization. (data: group_id*, payload*{organization_user_id*, workspace_id*}) - **update-user-active-status**: Update User Active Status Organization. (data: organization_user_id*, status*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenPublic-holidays
Manage Focus public-holidays with the following actions: - **get-by-user-ids**: Get By User Ids Public Holidays. (data: end_date*, start_date*, user_id*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenPublicsharedreports
Manage Focus publicsharedreports with the following actions: - **open-public-shared-report**: Open Public Shared Report Publicsharedreports. (data: token*) - **profitability-public-shared-report**: Profitability Public Shared Report Publicsharedreports. (data: include_dicts, payload*{chart_key}, response_format, token*) - **query-public-shared-report**: Query Public Shared Report Publicsharedreports. (data: include_dicts, payload*{chart_key}, response_format, token*) - **workload-public-shared-report**: Workload Public Shared Report Publicsharedreports. (data: payload*{chart_key}, token*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenRates
Manage Focus rates with the following actions: - **billable-bulk-check-workspace-user-billable-rate-conflicts**: Billable Bulk Check Workspace User Billable Rate Conflicts Rates. (data: payload*{currency*, hourly_rate*, start_date*, user_ids*, end_date}) - **billable-bulk-upsert-workspace-user**: Billable Bulk Upsert Workspace User Rates. (data: payload*{currency*, hourly_rate*, on_conflict*, start_date*, user_ids*, end_date}) - **billable-check-project-billable-rate-conflicts**: Billable Check Project Billable Rate Conflicts Rates. (data: payload*{currency*, hourly_rate*, start_date*, end_date}, project_id*) - **billable-check-project-user-billable-rate-conflicts**: Billable Check Project User Billable Rate Conflicts Rates. (data: payload*{currency*, hourly_rate*, start_date*, end_date}, project_id*, user_id*) - **billable-check-workspace-billable-rate-conflicts**: Billable Check Workspace Billable Rate Conflicts Rates. (data: payload*{currency*, hourly_rate*, start_date*, end_date}) - **billable-check-workspace-user-billable-rate-conflicts**: Billable Check Workspace User Billable Rate Conflicts Rates. (data: payload*{currency*, hourly_rate*, start_date*, end_date}, user_id*) - **billable-delete-by-id**: Billable Delete By Id Rates. (data: rate_id*) - **billable-delete-project-billable-rate-range**: Billable Delete Project Billable Rate Range Rates. (data: from*, project_id*, to) - **billable-delete-project-user-billable-rate-range**: Billable Delete Project User Billable Rate Range Rates. (data: from*, project_id*, to, user_id*) - **billable-delete-workspace-billable-rate-range**: Billable Delete Workspace Billable Rate Range Rates. (data: from*, to) - **billable-delete-workspace-user-billable-rate-range**: Billable Delete Workspace User Billable Rate Range Rates. (data: from*, to, user_id*) - **billable-get-all-project-user**: Billable Get All Project User Rates. (data: date, order_by, project_id, user_id) - **billable-get-all-workspace-user**: Billable Get All
dataactionrequireddry_runconfirm_tokenRecurring-budget-suggestions
Manage Focus recurring-budget-suggestions with the following actions: - **accept-arecurring-project-budget-suggestion**: Accept Arecurring Project Budget Suggestion Recurring Budget Suggestions. (data: project_id*) - **accept-atemplate-estimate-suggestion**: Accept Atemplate Estimate Suggestion Recurring Budget Suggestions. (data: project_id*) - **dismiss-arecurring-project-budget-suggestion**: Dismiss Arecurring Project Budget Suggestion Recurring Budget Suggestions. (data: project_id*) - **dismiss-atemplate-estimate-suggestion**: Dismiss Atemplate Estimate Suggestion Recurring Budget Suggestions. (data: project_id*) - **get-recurring-project-budget-suggestion**: Get Recurring Project Budget Suggestion Recurring Budget Suggestions. (data: project_id*, target_period_start*) - **get-template-estimate-suggestion**: Get Template Estimate Suggestion Recurring Budget Suggestions. (data: project_id*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenReports
Manage Focus reports with the following actions: - **get-flexq-data**: Get Flexq Data Reports. (data: include_dicts, payload*{...}, response_format, xTogglReportExport) - **get-flexq-dictionary**: Get Flexq Dictionary Reports. (data: payload*) - **get-forecast-availability**: Get Forecast Availability Reports. (data: none) - **get-profitability**: Get Profitability Reports. (data: include_dicts, payload*{...}, response_format, xTogglReportExport) - **get-time-accounting**: Get Time Accounting Reports. (data: payload*{...}) - **get-workload**: Get Workload Reports. (data: payload*{...}, xTogglReportExport) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenReportschedules
Manage Focus reportschedules with the following actions: - **delete-shared-report-schedule**: Delete Shared Report Schedule Reportschedules. (data: id*) - **upsert-saved-view-schedule**: Upsert Saved View Schedule Reportschedules. (data: id*, payload*{cadence*, charts*, time*, day, period, recipient_team_ids, recipient_user_ids, recipient_workspace_ids}) - **upsert-shared-report-schedule**: Upsert Shared Report Schedule Reportschedules. (data: id*, payload*{cadence*, time*, day, recipient_team_ids, recipient_user_ids, recipient_workspace_ids}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenSaved-views
Manage Focus saved-views with the following actions: - **create**: Create Saved Views. Required: name, type, pinned, and params (the view's filter/layout state as an object, e.g. { project_id, filters }). Project-scoped types (project, project.tasks, project.board, project.timeline) expect the project context inside params. (data: payload*{name*, params*, type*, icon_name, pinned}) - **delete**: Delete Saved Views. Deletes the authenticated user's saved view; it cannot be restored. (data: id*) - **get**: Get Saved Views. id is the saved view ID (number) from saved-views list. (data: id*) - **list**: List Saved Views. Saved views are per-user, so results belong to the authenticated user. Filter by type (inbox, archive, board, timeline, project, project.tasks, project.board, project.timeline, projects) or by partial name match. pinned=true entries are the user's starred views. (data: name, order_by, type) - **update**: Update Saved Views. The payload requires the full updatable set (name, type, pinned, params), so fetch the view first and resend it with your changes to avoid clobbering params. Toggling pinned is how views are starred/unstarred. (data: id*, payload*{name*, params*, pinned*, type*, icon_name}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenSearch
Manage Focus search with the following actions: - **mentions**: Mentions Search. (data: keyword, per_group) - **search**: Search across Toggl 2.0 entities. (data: keyword*, per_group, assignee_user_id, project_id, task_id, include_drafts, exclude_calendar_events, assignee_team_id, group_by_tags, only_me) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenSharedreports
Manage Focus sharedreports with the following actions: - **add-shared-report-grants**: Add Shared Report Grants Sharedreports. (data: id*, payload*{grantees*}) - **get-member-owned-shared-reports**: Get Member Owned Shared Reports Sharedreports. (data: user_id*) - **get-saved-view-shared-report**: Get Saved View Shared Report Sharedreports. (data: id*) - **get-shared-report-dates**: Get Shared Report Dates Sharedreports. (data: id*) - **get-shared-report-for-viewer**: Get Shared Report For Viewer Sharedreports. (data: id*) - **get-shared-reports-shared-by-me**: Get Shared Reports Shared By Me Sharedreports. (data: none) - **get-shared-reports-shared-with-me**: Get Shared Reports Shared With Me Sharedreports. (data: none) - **mint-shared-report-link**: Mint Shared Report Link Sharedreports. (data: id*, payload*{expires_at}) - **revoke-shared-report-grant**: Revoke Shared Report Grant Sharedreports. (data: grant_id*, id*) - **revoke-shared-report-link**: Revoke Shared Report Link Sharedreports. (data: id*) - **rotate-shared-report-link**: Rotate Shared Report Link Sharedreports. (data: id*, payload*{expires_at}) - **set-shared-report-dates-lock**: Set Shared Report Dates Lock Sharedreports. (data: id*, payload*{locked*}) - **share-saved-view**: Share Saved View Sharedreports. (data: id*, payload*{charts*, period, team_id, user_id, workspace_id}) - **share-saved-view-many**: Share Saved View Many Sharedreports. (data: id*, payload*{charts*, grantees*, period}) - **take-over-member-shared-reports**: Take Over Member Shared Reports Sharedreports. (data: user_id*) - **unshare-shared-report**: Unshare Shared Report Sharedreports. (data: id*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenStatuses
Manage Focus statuses with the following actions: - **create-status**: Create a task status. (data: payload*{emoji*, name*, position*}) - **delete-status**: Delete a task status. (data: status_id*) - **get-status**: List task statuses with generated API filters. (data: status_id*) - **list**: List Statuses. Lists all task status options for the workspace. Use returned status IDs when creating or updating tasks via status_id. Statuses have types: todo, in_progress, done, blocked. (data: page, per_page) - **restore**: Restore Statuses. (data: status_id*) - **update-status**: Update a task status. (data: payload*{emoji*, name*, position*}, status_id*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenSubscriptions
Manage Focus subscriptions with the following actions: - **get-current**: Get Current Subscriptions. (data: none) - **get-current-trial**: Get Current Trial Subscriptions. (data: none) - **get-features-upsell**: Get Features Upsell Subscriptions. (data: none) - **get-plans**: Get Plans Subscriptions. (data: none) - **upsert-forced-trial**: Upsert Forced Trial Subscriptions. (data: payload*{plan_workspace_id}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenTags
Manage Focus tags with the following actions: - **archive**: Archive Tags. (data: tag_id*) - **bulk-archive**: Bulk Archive Tags. (data: payload*{tag_ids*}) - **bulk-create**: Bulk Create Tags. (data: payload*{tags*}) - **bulk-delete**: Bulk Delete Tags. (data: ids*) - **bulk-restore**: Bulk Restore Tags. (data: payload*{tag_ids*}) - **bulk-unarchive**: Bulk Unarchive Tags. (data: payload*{tag_ids*}) - **count-tag-time-entries**: Count Tag Time Entries Tags. (data: ids*, match*) - **create**: Create Tags. Both name and color are required by the API (hex color, e.g. #FF5733). (data: color*, name*) - **delete**: Delete Tags. (data: tag_id*) - **get**: Get Tags. (data: tag_id*) - **list**: List Tags. Workspace tags label tasks and projects. Use tag IDs with tasks (tag_ids) and organization user filters (tag_ids on users.list). (data: name, page, per_page) - **merge**: Merge Tags. (data: payload*{source_ids*, target_id*}) - **restore**: Restore Tags. (data: tag_id*) - **unarchive**: Unarchive Tags. (data: tag_id*) - **update**: Update Tags. (data: tag_id*, payload*{color, name}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenTime-entries
Manage Focus time-entries with the following actions: - **archive**: Archive Time Entries. (data: time_entry_id*) - **bulk-create**: Bulk Create Time Entries. JSON array of entries with task_id, start, duration, type ('activity'|'break'). One HTTP request for many creates. Datetime fields (start, planned_start, planned_at, tracked_at) must be RFC3339 with a timezone (e.g. 2026-04-01T09:00:00Z or 2026-04-01T11:00:00+02:00), not YYYY-MM-DDTHH:MM. (data: array payload) - **bulk-delete**: Bulk Delete Time Entries. Soft-delete multiple time entries by id in one request. (data: ids*) - **bulk-edit**: Bulk Edit Time Entries. (data: payload*{changes*, ids*}) - **bulk-patch**: Bulk Patch Time Entries. JSON array of { id: timeEntryId, ...partial fields } for bulk partial update. Datetime fields (start, planned_start, planned_at, tracked_at) must be RFC3339 with a timezone, or null to clear. (data: array payload) - **bulk-restore**: Bulk Restore Time Entries. Restore deleted time entries by id in one request. (data: ids*) - **bulk-set-day-duration**: Bulk Set Day Duration Time Entries. (data: payload*) - **constraints-list**: Constraints List Time Entries. (data: none) - **constraints-upsert**: Constraints Upsert Time Entries. (data: payload*{enabled*, required_fields*, disallow_billable_override}) - **create**: Create a completed task time entry. payload.type defaults to 'activity' when omitted. Logs a completed task time entry. payload.type defaults to 'activity' when omitted; pass 'break' explicitly for a break. provide payload.start and payload.duration for completed tracked time. payload.start must be RFC3339 with a timezone (e.g. 2026-04-01T09:00:00Z or 2026-04-01T11:00:00+02:00), not YYYY-MM-DDTHH:MM. (data: from_recurring_task_id, payload*{...}, return_occurrence, task_id*) - **create-taskless**: Create a completed taskless time entry. payload.type defaults to 'activity' when omitted. Logs a completed taskless time entry. payload.type defaults to 'activity' when omitt
dataactionrequireddry_runconfirm_tokenTime-off
Manage Focus time-off with the following actions: - **approve-timeoff-entry**: Approve Timeoff Entry Time Off. (data: entry_id*) - **archive-timeoff-category**: Archive Timeoff Category Time Off. (data: category_id*) - **cancel-timeoff-entry**: Cancel Timeoff Entry Time Off. (data: entry_id*) - **create-timeoff-balance-adjustment**: Create Timeoff Balance Adjustment Time Off. (data: payload*{amount*, time_off_category_id*, user_id*, date, note}) - **create-timeoff-category**: Create Timeoff Category Time Off. (data: payload*{allow_negative_balance*, auto_approve_under_days*, default_amount_per_year*, description*, emoji*, max_carry_over_amount*, name*, prorate*, accrual_frequency, allowance_type, carry_over_expiry_months, policy_link}) - **create-timeoff-for-user**: Create Timeoff For User Time Off. (data: payload*, user_id*) - **delete-timeoff-category**: Delete Timeoff Category Time Off. (data: category_id*) - **delete-timeoff-for-user**: Delete Timeoff For User Time Off. (data: payload*, user_id*) - **get-timeoff-absence-report**: Get Timeoff Absence Report Time Off. (data: category_id, end_date*, include_pending, start_date*, team_id, user_id) - **get-timeoff-balance-changes-for-user**: Get Timeoff Balance Changes For User Time Off. (data: category_id*, page, rows, user_id*, year) - **get-timeoff-balances**: Get Timeoff Balances Time Off. (data: category_id, date, user_id) - **get-timeoff-balances-for-user**: Get Timeoff Balances For User Time Off. (data: category_id, date, user_id*) - **get-timeoff-categories**: Get Timeoff Categories Time Off. (data: none) - **get-timeoff-category**: Get Timeoff Category Time Off. (data: category_id*) - **get-timeoff-entries**: Get Timeoff Entries Time Off. (data: category_id, from, page, rows, status, team_id, to, user_id) - **get-timeoff-entry**: Get Timeoff Entry Time Off. (data: entry_id*) - **get-timeoff-for-user**: Get Timeoff For User Time Off. (data: from*, to*, user_id*) - **get-timeoff-timeline**: Get Timeoff Timeli
dataactionrequireddry_runconfirm_tokenTimesheets
Manage Focus timesheets with the following actions: - **add-timesheet-flag**: Add Timesheet Flag Timesheets. (data: payload*{comment*, time_entry_id*}, setup_id*, start_date*, user_account_id*) - **approve**: Approve Timesheets. (data: setup_id*, start_date*, user_account_id*) - **bulk-approve**: Bulk Approve Timesheets. (data: payload*{keys*}) - **bulk-request-changes**: Bulk Request Changes Timesheets. (data: payload*{keys*, comment}) - **bulk-submit**: Bulk Submit Timesheets. (data: payload*{keys*}) - **bulk-withdraw**: Bulk Withdraw Timesheets. (data: payload*{keys*}) - **get**: Get Timesheets. (data: approver_user_account_ids, current_layer_approver_user_account_id, date_from*, date_to*, member_status, page, per_page, setup_id, statuses, team_ids, user_account_ids) - **get-approvers**: Get Approvers Timesheets. (data: none) - **get-details**: Get Details Timesheets. (data: setup_id*, start_date*, user_account_id*) - **get-flags**: Get Flags Timesheets. (data: setup_id*, start_date*, user_account_id*) - **get-history**: Get History Timesheets. (data: setup_id*, start_date*, user_account_id*) - **get-hours**: Get Hours Timesheets. (data: setup_id*, start_date*, user_account_id*) - **get-status-counts**: Get Status Counts Timesheets. (data: approver_user_account_ids, date_from*, date_to*, member_status, setup_id, team_ids, user_account_ids) - **remove-timesheet-flag**: Remove Timesheet Flag Timesheets. (data: flag_id*) - **request-changes**: Request Changes Timesheets. (data: payload*{comment*}, setup_id*, start_date*, user_account_id*) - **resubmit**: Resubmit Timesheets. (data: payload*{comment*}, setup_id*, start_date*, user_account_id*) - **setups-add-timesheet-setup-member**: Setups Add Timesheet Setup Member Timesheets. (data: payload*{started_at}, setup_id*, user_account_id*) - **setups-cancel-timesheet-setup-member-move**: Setups Cancel Timesheet Setup Member Move Timesheets. (data: setup_id*, user_account_id*) - **setups-create**: Setups Create Timesheet
dataactionrequireddry_runconfirm_tokenTrack-team-invites
Manage Focus track-team-invites with the following actions: - **post**: Post Track Team Invites. (data: payload*{organization_user_ids*}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenUsage-signals
Manage Focus usage-signals with the following actions: - **list**: List Usage Signals. (data: none) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenUsers
Manage Focus users with the following actions: - **list**: List Users. Lists organization users (members). Use returned IDs for assignee_user_ids on tasks. Invite or provision new users from the Toggl Track/Focus web UI or billing admin — this API lists existing users only. (data: page, per_page, filter, sort_dir, only_admins, include_working_hours, include_rates, workspaces, tag_ids, roles, active_status, groups, pinned_ids, user_account_ids, org_user_ids) - **settings-email-unsubscribe**: Settings Email Unsubscribe Users. (data: token*) - **settings-email-unsubscribe-page**: Settings Email Unsubscribe Page Users. (data: token*) - **settings-list**: Settings List Users. (data: none) - **settings-partial-update**: Settings Partial Update Users. (data: payload*{...}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenWorkspace-settings
Manage Focus workspace-settings with the following actions: - **workspace-settings-list**: List user workspace settings. (data: none) - **workspace-settings-partial-update**: Update user workspace settings. (data: payload*{has_opened_focus, onboarding_intent, onboarding_invited_user_ids, onboarding_project_id, onboarding_step, onboarding_task_id, onboarding_team_size, work_introduction_dismissed}) - **get-user-permissions**: Get User Permissions Workspace Settings. (data: none) - **get-workspace-currency**: Get Workspace Currency Workspace Settings. (data: none) - **get-workspace-export-branding**: Get Workspace Export Branding Workspace Settings. (data: none) - **get-workspace-watermark**: Get Workspace Watermark Workspace Settings. (data: none) - **list**: List Workspace Settings. (data: none) - **update**: Update Workspace Settings. (data: payload*{default_private, settings}) - **update-workspace-currency**: Update Workspace Currency Workspace Settings. (data: payload*{currency*}) - **update-workspace-watermark**: Update Workspace Watermark Workspace Settings. (data: payload*{show_watermark*}) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenVersion
Manage Focus version with the following actions: - **service**: MCP package version plus the Focus API service revision. mcp.package is this published MCP package version (e.g. 1.8.0). focus_api is the Focus API process revision (git SHA / build number) — it does not change when you update the npm MCP package. (data: none) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenWork-preparation
Manage Focus work-preparation with the following actions: - **get**: Get Work Preparation. (data: page) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenWorking-hours
Manage Focus working-hours with the following actions: - **create-for-user**: Create For User Working Hours. (data: payload*, user_id*) - **delete-for-user**: Delete For User Working Hours. (data: payload*, user_id*) - **get-for-user**: Get For User Working Hours. (data: user_id*) - **replace-working-hours-for-users**: Replace Working Hours For Users Working Hours. (data: payload*{schedule*, user_ids*}) - **update-for-user**: Update For User Working Hours. (data: payload*, user_id*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenWorkspace
Manage Focus workspace with the following actions: - **get-context**: Get Context Workspace. (data: none) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenOrg-invitations
Manage Focus org-invitations with the following actions: - **list**: List pending invitations for the current user account. (data: none) - **create**: Send organization invitations (uses organization ID from your workspace profile). (data: initiating_product*, invitations*, skip_email*) - **get**: Get an invitation by ID. (data: invitation_id*) - **resend**: Resend an invitation email for an organization user record. (data: organization_user_id*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenOrg-members
Manage Focus org-members with the following actions: - **get**: Get an organization user by organization user ID. (data: organization_user_id*) - **update**: Replace organization user settings (roles, groups, tags, etc.). (data: organization_user_id*, payload*{accounts_role_id*, active*, groups*, name*, tags*, workspaces*}) - **set-active**: Activate or deactivate an organization member. (data: organization_user_id*, status*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenOrg-workspaces
Manage Focus org-workspaces with the following actions: - **list**: List workspaces under the active organization. (data: none) - **my-roles**: Get your roles for a workspace (defaults to the CLI active workspace when omitted). (data: workspace_id) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenShared-status
Manage Focus shared-status with the following actions: - **get**: Health check for the Shared Data API. (data: none) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenShared-holidays
Manage Focus shared-holidays with the following actions: - **list**: List organization holiday calendar dates for a year (optional ISO country override). (data: year*, country) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenShared-working-hours
Manage Focus shared-working-hours with the following actions: - **list**: Get your working hours entries for the active organization. (data: none) - **put**: Replace working hours by ID (JSON array of updates). (data: array payload) - **create**: Create working hour rows (JSON array). (data: array payload) - **delete**: Delete working hour rows by ID. (data: ids*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenOrg-time-off-me
Manage Focus org-time-off-me with the following actions: - **list**: List your time off entries between two dates (YYYY-MM-DD). (data: from*, to*) - **update**: Update your time off entries (JSON array). (data: array payload) - **create**: Create your time off entries (JSON array). (data: array payload) - **delete**: Delete your time off entries by ID. (data: ids*) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_tokenDeep-links
Manage Focus deep-links with the following actions: - **get**: Build Toggl 2.0 web URLs (and Track URLs where IDs map) for a task, project, time entry, calendar day, report or member. Read-only; makes no API calls. member id is the organization user ID. time_entry needs task_id to open the entry itself. report_type defaults to summary; set period (preset) or from/to (YYYY-MM-DD) for a date range. track.url is null with a note when the IDs do not map to Track. (data: entity*, id, task_id, project_id, date, report_type, period, from, to, tab) Pass the action-specific fields under `data` (required fields are marked with *). Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm. Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.
dataactionrequireddry_runconfirm_token65% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.
Declare a license in the repository or the registry entry.