> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Toggl 2.0

The Toggl 2.0 connector lets your AI agent act in each user's Toggl 2.0 account. Each user connects their own Toggl 2.0 access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 67 tools.

**Authentication:** Bearer Token
**Categories:** Productivity, Project Management
**Tools:** 67: 32 read, 27 write, 8 destructive
**Users sign in with:** Access token
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=TOGGLFOCUS)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Toggl 2.0 connection

   In **AgentKit > Connections**, create a Toggl 2.0 connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'togglfocus'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Toggl 2.0:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'togglfocus_get_user_settings',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "togglfocus"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Toggl 2.0:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="togglfocus_get_user_settings",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Toggl 2.0 credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'togglfocus_get_client',
  toolInput: {
    client_id: 1234567,
    workspace_id: 1234567,
  },
  connector: 'togglfocus',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="togglfocus_get_client",
    tool_input={
        "client_id": 1234567,
        "workspace_id": 1234567,
    },
    connection_name="togglfocus",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `togglfocus_get_client`

Get Client · Read-only

Get one client by id.
Returns the client: id, name, currency, active and workspace_id.
Use after togglfocus_list_clients to read one client.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `client_id` (`integer`, required): Numeric ID of the client. Find it with togglfocus_list_clients. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"client_id":1234567,"workspace_id":1234567}`

### `togglfocus_get_current_time_entry`

Get Current Time Entry · Read-only

Get the time entry the authenticated user is tracking right now.
Returns the running time entry, or no content (HTTP 204) when nothing is being tracked.
Use before togglfocus_start_tracking or togglfocus_stop_tracking to check the timer state.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_get_milestone`

Get Milestone · Read-only

Get one milestone by id.
Returns the milestone: id, name, due_date, color, completed_at, project_ids and team_ids.
Use after togglfocus_list_milestones to read one milestone.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `milestone_id` (`integer`, required): Numeric ID of the milestone. Find it with togglfocus_list_milestones. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"milestone_id":1234567,"workspace_id":1234567}`

### `togglfocus_get_project`

Get Project · Read-only

Get one project by id.
Returns the project: id, name, client_id, color, billable, private, dates, estimated_mins, completion_mode and permissions.
Use after togglfocus_list_projects to read a project in full.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `project_id` (`integer`, required): Numeric ID of the project. Find it with togglfocus_list_projects. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"project_id":1234567,"workspace_id":1234567}`

### `togglfocus_get_status`

Get Status · Read-only

Get one task status by id.
Returns the status: id, name, emoji, position and type.
Use after togglfocus_list_statuses to read one status.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `status_id` (`integer`, required): Numeric ID of the task status. Find it with togglfocus_list_statuses. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"status_id":1234567,"workspace_id":1234567}`

### `togglfocus_get_tag`

Get Tag · Read-only

Get one tag by id.
Returns the tag: id, name, color and workspace_id.
Use after togglfocus_list_tags to read one tag.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tag_id` (`integer`, required): Numeric ID of the tag. Find it with togglfocus_list_tags. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"tag_id":1234567,"workspace_id":1234567}`

### `togglfocus_get_task`

Get Task · Read-only

Get one task by id.
Returns the task: id, name, notes, state fields, priority, estimated_mins, start_date, end_date, project, assignees and tags.
Use after togglfocus_list_tasks to read a task in full.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `task_id` (`integer`, required): Numeric ID of the task. Find it with togglfocus_list_tasks. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `include_assignees` (`boolean`, optional): Includes the unified user and team assignees. Example: true

Example input: `{"organization_id":1234567,"task_id":1234567,"workspace_id":1234567}`

### `togglfocus_get_time_accounting_report`

Get Time Accounting Report · Read-only

Generate the per-member time accounting report (logged, overtime, holiday and leave minutes) for a period.
Returns members (one row per member), periods (team totals per day, week or month) and period_unit.
Use for hours per member across a period. This POST only reads data.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `period` (`object`, required): Report period as a JSON object with either a preset or both from and to, for example {"from": "2026-09-01", "to": "2026-09-30"}. Required; a period that resolves to nothing is rejected. Accepts a JSON object. Example: {}
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"period":{},"workspace_id":1234567}`

### `togglfocus_get_time_entry`

Get Time Entry · Read-only

Get one time entry by id.
Returns the time entry: id, description, start, duration, planned_start, planned_duration, task_id, project_id, tag_ids, billable and type.
Use after togglfocus_list_time_entries to read one entry.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `time_entry_id` (`integer`, required): Numeric ID of the time entry. Find it with togglfocus_list_time_entries. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"time_entry_id":1234567,"workspace_id":1234567}`

### `togglfocus_get_user_settings`

Get User Settings · Read-only

Get the authenticated user's Toggl 2.0 settings, including their current workspace.
Returns the user's preference fields such as current_workspace_id, mcp_active_organization_id, mcp_active_workspace_id, date_format, duration_format and calendar options.
Use this first to learn the workspace and organization ids the other tools need.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `togglfocus_get_workspace_permissions`

Get Workspace Permissions · Read-only

List the permissions the authenticated user holds in a workspace.
Returns permissions, an array of permission names.
Use to check whether the user may perform an action before calling a write tool.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"workspace_id":1234567}`

### `togglfocus_list_clients`

List Clients · Read-only

List clients in a workspace, optionally filtered by name.
Returns data (array of clients) plus page and per_page.
Use to find a client id for togglfocus_create_project.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `name` (`string`, optional): Filter clients by their names. Example: Website redesign
- `order_by` (`array`, optional): Order by. Accepts a JSON array. Example: ["value"]
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Results per page. Example: 50

Example input: `{"workspace_id":1234567}`

### `togglfocus_list_custom_fields`

List Custom Fields · Read-only

List the custom fields defined in a workspace, optionally filtered by entity type.
Returns data (array of custom fields) plus page, per_page and total.
Use to find custom field ids and options before setting custom_fields on a project or task.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `entity_type` (`string`, optional): Filter by entity type. Allowed values: project, task, user. Example: project. One of: `project`, `task`, `user`.
- `order_by` (`array`, optional): Order by. Accepts a JSON array. Example: ["value"]
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Results per page. Example: 50

Example input: `{"organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_list_milestones`

List Milestones · Read-only

List milestones in a workspace, filtered by due date, project or team.
Returns data (array of milestones) plus page and per_page.
Use to see upcoming deadlines across projects.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `due_date_from` (`string`, optional): Filter by due date from. Format: YYYY-MM-DD. Example: 2026-09-01
- `due_date_to` (`string`, optional): Filter by due date to. Format: YYYY-MM-DD. Example: 2026-09-01
- `order_by` (`array`, optional): Order by. Accepts a JSON array. Example: ["value"]
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Results per page. Example: 50
- `project_id` (`array`, optional): Filter by project id. Accepts a JSON array. Example: [123456, 234567]
- `team_id` (`array`, optional): Filter by team id. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"workspace_id":1234567}`

### `togglfocus_list_my_goals`

List My Goals · Read-only

List the active and inactive goals owned by the authenticated user in a workspace.
Returns an array of goals.
Use to review the user's time tracking goals.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_list_organization_roles`

List Organization Roles · Read-only

List the roles defined in an organization.
Returns an array of role records.
Use to find the role_id that togglfocus_add_project_members requires.
Needs organization_id. togglfocus_get_user_settings returns mcp_active_organization_id when set.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567

Example input: `{"organization_id":1234567}`

### `togglfocus_list_organization_teams`

List Organization Teams · Read-only

List the teams (user groups) of a workspace within an organization.
Returns data (array of teams) plus page, per_page and total.
Use to find team ids for task assignment or milestones. Use togglfocus_list_organization_users for individual users.
Needs organization_id. togglfocus_get_user_settings returns mcp_active_organization_id when set.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `active_members_only` (`boolean`, optional): Filter by active members only. Example: true
- `filter` (`string`, optional): Filter by name. Example: design
- `group_ids` (`array`, optional): Filter by group IDs. Accepts a JSON array. Example: [123456, 234567]
- `organization_user_id` (`integer`, optional): Filter groups that contain this organization user. Example: 1234567
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Results per page. Example: 50
- `query` (`string`, optional): Filter by team name and its members' names. Example: design
- `sort_dir` (`string`, optional): Direction to sort by (asc/desc). Example: value

Example input: `{"organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_list_organization_users`

List Organization Users · Read-only

List the users in an organization, with filters for workspace, team, role, status and name or email.
Returns an array of organization user records.
Use to find user ids for assignees, time entries and project members. Use togglfocus_list_organization_teams for teams.
Needs organization_id. togglfocus_get_user_settings returns mcp_active_organization_id when set.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `active_status` (`array`, optional): Filter by active status. Accepts a JSON array. Example: ["value"]
- `filter` (`string`, optional): Filter by name or email. Example: design
- `groups` (`array`, optional): Filter by group IDs. Accepts a JSON array. Example: [123456, 234567]
- `only_admins` (`boolean`, optional): Only return admins. Example: true
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Results per page. Example: 50
- `roles` (`array`, optional): Filter by roles. Accepts a JSON array. Example: [123456, 234567]
- `sort_dir` (`string`, optional): Sort direction (asc/desc). Example: value
- `tag_ids` (`array`, optional): Filter by tag IDs. Accepts a JSON array. Example: [123456, 234567]
- `user_account_ids` (`array`, optional): Filter by user account IDs. Accepts a JSON array. Example: [123456, 234567]
- `workspaces` (`array`, optional): Filter by workspace IDs. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"organization_id":1234567}`

### `togglfocus_list_project_members`

List Project Members · Read-only

List the users and teams that are members of a project.
Returns project_id, user_ids and group_ids.
Use to see who has access before calling togglfocus_add_project_members or togglfocus_remove_project_member.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `project_id` (`integer`, required): Numeric ID of the project. Find it with togglfocus_list_projects. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"project_id":1234567,"workspace_id":1234567}`

### `togglfocus_list_projects`

List Projects · Read-only

List projects in a workspace, with filters for name, client, tags, archived, completed and date range.
Returns data (array of projects) plus page, per_page, total and task counts.
Use to browse or find a project id. Use togglfocus_get_project for one project.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `archived` (`boolean`, optional): Filter by archived state (true = archived only, false = active only, omit = active only, empty = all projects). Example: true
- `assignee_user_id` (`array`, optional): Filter by assignee user IDs; pass empty value (?assignee_user_id=) to include projects without user assignees. Accepts a JSON array. Example: [123456, 234567]
- `client_id` (`array`, optional): Filter by client IDs. Accepts a JSON array. Example: [123456, 234567]
- `completed` (`boolean`, optional): Filter by completion state (true = completed only, false = non-completed only, empty = all projects, omit = non-completed only, or all projects when archived=true). Example: true
- `creator_id` (`array`, optional): Filter by project creator id. Accepts a JSON array. Example: [123456, 234567]
- `end_date` (`string`, optional): Filter projects overlapping date range (end). Used with start_date to find projects where project.start_date <= end_date AND project.end_date >= start_date. Format: YYYY-MM-DD. Example: 2026-09-01
- `include_drafts` (`boolean`, optional): Include draft projects in the response (default false hides them; requires view_draft_projects permission). Example: true
- `include_rates` (`boolean`, optional): Includes the projects' rate data. Example: true
- `member_only` (`boolean`, optional): Only projects where the caller has an active project role, directly or through a team; normal visibility and lifecycle filters still apply. Example: true
- `name` (`string`, optional): Filter by project name or client name. Example: Website redesign
- `order_by` (`array`, optional): Order by. Also accepts cf_<id> / -cf_<id> to sort by any active workspace custom field. Multi_select and users CF types sort by their canonicalized (sorted) value array, so projects sharing the same set cluster together. Accepts a JSON array. Example: ["value"]
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Results per page. Example: 50
- `pinned` (`boolean`, optional): Filter by only pinned tasks. Example: true
- `private` (`boolean`, optional): Filter by project privacy (true for private, false for public). Example: true
- `project_id` (`array`, optional): Filter by project IDs. Accepts a JSON array. Example: [123456, 234567]
- `start_date` (`string`, optional): Filter projects overlapping date range (start). Used with end_date to find projects where project.start_date <= end_date AND project.end_date >= start_date. Format: YYYY-MM-DD. Example: 2026-09-01
- `tag_id` (`array`, optional): Filter by tag IDs. Accepts a JSON array. Example: [123456, 234567]
- `user_id` (`array`, optional): Return only projects accessible by the given users (requires manage workspace users when inspecting another user). Incompatible with only_me. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_list_saved_views`

List Saved Views · Read-only

List the authenticated user's saved views in a workspace, optionally filtered by name or type.
Returns an array of saved views.
Use to find a saved report or board view.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `name` (`string`, optional): Filter saved views by name (partial match). Example: Website redesign
- `order_by` (`string`, optional): Order by field. Allowed values: name, -name, type, -type, created_at, -created_at, updated_at, -updated_at. Example: name. One of: `name`, `-name`, `type`, `-type`, `created_at`, `-created_at`, `updated_at`, `-updated_at`.
- `type` (`string`, optional): Filter saved views by type. Allowed values: inbox, archive, board, timeline, project, project.tasks, project.board, project.timeline, projects, reports.summary, reports.detailed, reports.utilization, reports.workload, reports.profitability, reports.time-off, reports.time-accounting. Example: inbox. One of: `inbox`, `archive`, `board`, `timeline`, `project`, `project.tasks`, `project.board`, `project.timeline`, `projects`, `reports.summary`, `reports.detailed`, `reports.utilization`, `reports.workload`, `reports.profitability`, `reports.time-off`, `reports.time-accounting`.

Example input: `{"workspace_id":1234567}`

### `togglfocus_list_statuses`

List Statuses · Read-only

List task statuses in a workspace, optionally filtered by name or type.
Returns data (array of statuses) plus page and per_page.
Use to find status_id values for togglfocus_create_task and togglfocus_update_task.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `name` (`string`, optional): Filter by status name. Example: Website redesign
- `order_by` (`array`, optional): Order by. Accepts a JSON array. Example: ["value"]
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Results per page. Example: 50
- `type` (`string`, optional): Filter by status type. Allowed values: todo, in_progress, done, blocked. Example: todo. One of: `todo`, `in_progress`, `done`, `blocked`.

Example input: `{"workspace_id":1234567}`

### `togglfocus_list_subtasks`

List Subtasks · Read-only

List the child tasks of a task.
Returns data (array of child tasks) plus page and per_page.
Use to walk a task hierarchy. Use togglfocus_list_tasks with parent_task_id to search across parents.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `task_id` (`integer`, required): Numeric ID of the task. Find it with togglfocus_list_tasks. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `archived` (`boolean`, optional): Filter in/out archived tasks. Example: true
- `assignee_user_id` (`array`, optional): Filter in tasks by assignee's user IDs. Accepts a JSON array. Example: [123456, 234567]
- `include_assignees` (`boolean`, optional): Includes the unified user and team assignees. Example: true
- `order_by` (`array`, optional): Order by. tag_ids and assignees order by the canonicalized (sorted) array, so tasks with the same set of tags or assignees cluster together regardless of storage order. Accepts a JSON array. Example: ["value"]
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Results per page. Example: 50
- `source` (`array`, optional): Filter by sources. Accepts a JSON array. Example: ["value"]
- `status_id` (`integer`, optional): Filter children tasks by status ID. Example: 1234567
- `tag_id` (`array`, optional): Filter in tasks by tag IDs. Accepts a JSON array. Example: [123456, 234567]
- `team_id` (`array`, optional): Filter children tasks by team IDs. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"organization_id":1234567,"task_id":1234567,"workspace_id":1234567}`

### `togglfocus_list_tags`

List Tags · Read-only

List tags in a workspace, optionally filtered by name, id or archived state.
Returns data (array of tags) plus page, per_page and total.
Use to find tag ids for tasks, projects and time entries.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `archived` (`boolean`, optional): Filter by archived state (true = archived only, false = active only, omit = active only, empty = all tags). Omitting it alongside tag_id returns those ids whatever their state, so an archived tag still attached to an entity resolves. Example: true
- `include_archived` (`boolean`, optional): List archived tags alongside active ones; an explicit archived param still wins. Example: true
- `include_usage` (`boolean`, optional): Hydrate per-tag usage counts (settings surface only; adds a warehouse read). Example: true
- `name` (`string`, optional): Filter by name. Example: Website redesign
- `order_by` (`array`, optional): Order by. Accepts a JSON array. Example: ["value"]
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Results per page. Example: 50
- `tag_id` (`array`, optional): Filter by tag IDs. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"workspace_id":1234567}`

### `togglfocus_list_task_time_entries`

List Task Time Entries · Read-only

List the time entries of one task.
Returns data (array of time entries) plus page and per_page.
Use to see time spent on a task. Use togglfocus_list_time_entries to list across tasks by date range.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `task_id` (`integer`, required): Numeric ID of the task. Find it with togglfocus_list_tasks. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `archived` (`boolean`, optional): Filter in/out archived TEs. Example: true
- `include_subtasks` (`boolean`, optional): Also list entries of the subtasks summed into this task's totals (default false). Example: true
- `order_by` (`array`, optional): Order by. Accepts a JSON array. Example: ["value"]
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Results per page. Example: 50
- `type` (`string`, optional): Time entry type. Allowed values: activity, break. Example: activity. One of: `activity`, `break`.

Example input: `{"organization_id":1234567,"task_id":1234567,"workspace_id":1234567}`

### `togglfocus_list_tasks`

List Tasks · Read-only

List tasks in a workspace, with filters for project, assignee, state, status, tags, dates and name.
Returns data (array of tasks) plus page, per_page and total.
Use to browse or find a task id. Use togglfocus_get_task for one task.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `archived` (`boolean`, optional): Filter in/out archived tasks. Example: true
- `assignee_team_id` (`array`, optional): Filter in tasks assigned to these teams, without expanding the teams to their members. Accepts a JSON array. Example: [123456, 234567]
- `assignee_user_id` (`array`, optional): Filter in tasks by assignee's user IDs. Accepts a JSON array. Example: [123456, 234567]
- `client_id` (`array`, optional): Filter by client ids. `?client_id=` will include tasks with no client. Accepts a JSON array. Example: [123456, 234567]
- `end_date` (`string`, optional): Filter tasks overlapping date range (end). Used with start_date to find tasks where task.start_date <= end_date AND task.end_date >= start_date. Format: YYYY-MM-DD. Example: 2026-09-01
- `estimated_mins_max` (`integer`, optional): Filter by estimated mins max. Example: 1234567
- `estimated_mins_min` (`integer`, optional): Filter by estimated mins min. Example: 1234567
- `has_time_entries` (`boolean`, optional): Filter tasks if it has time entries. Example: true
- `include_assignees` (`boolean`, optional): Includes the unified user and team assignees. Example: true
- `name` (`string`, optional): Filter tasks by task name, project name, or client name. Example: Website redesign
- `order_by` (`array`, optional): Order by. tag_ids and assignees order by the canonicalized (sorted) array, so tasks with the same set of tags or assignees cluster together regardless of storage order. Also accepts pcf_<id> / -pcf_<id> to sort tasks by the named custom field on the task's parent project, and cf_<id> / -cf_<id> to sort by the task's own custom field. Multi_select and users CF types use the same canonicalized-array semantics. sub_tasks_grouped orders top-level tasks by name (direction applies) with each task's subtasks directly after it in position order; it cannot be combined with other order_by values. Accepts a JSON array. Example: ["value"]
- `page` (`integer`, optional): Page number. Example: 1
- `parent_task_id` (`array`, optional): Filter by parent task ids. `?parent_task_id=` will include tasks with no parent. Accepts a JSON array. Example: [123456, 234567]
- `per_page` (`integer`, optional): Results per page. Example: 50
- `pinned` (`boolean`, optional): Filter by pinned state. Example: true
- `priority` (`array`, optional): Filter by priority. Accepts a JSON array. Example: ["value"]
- `private` (`boolean`, optional): Filter tasks by private state. Example: true
- `project_id` (`array`, optional): Filter by project ids. `?project_id=` will include tasks with no project. Accepts a JSON array. Example: [123456, 234567]
- `source` (`array`, optional): Filter by sources. Accepts a JSON array. Example: ["value"]
- `start_date` (`string`, optional): Filter tasks overlapping date range (start). Used with end_date to find tasks where task.start_date <= end_date AND task.end_date >= start_date. Format: YYYY-MM-DD. Example: 2026-09-01
- `state` (`array`, optional): Filter by state. Accepts a JSON array. Example: ["value"]
- `status_id` (`array`, optional): Filter in tasks by status' IDs. Accepts a JSON array. Example: [123456, 234567]
- `tag_id` (`array`, optional): Filter in tasks by tag IDs. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_list_time_entries`

List Time Entries · Read-only

List the authenticated user's time entries in a date range, optionally filtered by task or project.
Returns data (array of time entries) plus page and per_page.
Use to review tracked or planned time. It returns only the caller's own entries; use togglfocus_get_time_accounting_report for other members.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `date_from` (`string`, required): Range start, as an RFC 3339 timestamp, e.g. 2026-09-01T00:00:00Z (percent-encode a + offset). Example: 2026-09-01T09:00:00Z
- `date_to` (`string`, required): Range end, as an RFC 3339 timestamp, e.g. 2026-09-30T23:59:59Z. Example: 2026-09-01T09:00:00Z
- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `archived` (`boolean`, optional): True for archived entries only, false for unarchived only; omit for both. Example: true
- `include_taskless` (`boolean`, optional): Include entries without a task (default false). Example: true
- `order_by` (`array`, optional): Sort columns, repeated or comma-separated; prefix - for descending. Ties are broken by id. Accepts a JSON array. Example: ["value"]
- `page` (`integer`, optional): Page number, starting at 1 (default 1). Example: 1
- `per_page` (`integer`, optional): Results per page (default 20, max 100). Example: 50
- `project_id` (`integer`, optional): Only entries of this project (the entry's own project, else its task's). Example: 1234567
- `status_id` (`integer`, optional): Only entries whose task has this status. Example: 1234567
- `task_id` (`integer`, optional): Only entries of this task. Example: 1234567
- `type` (`string`, optional): Time entry type. Allowed values: activity, break. Example: activity. One of: `activity`, `break`.

Example input: `{"date_from":"<date_from>","date_to":"<date_to>","organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_list_timeoff_categories`

List Time Off Policies · Read-only

List the time off policies of an organization, archived ones included.
Returns an array of time off policies.
Use to find category_id values for togglfocus_list_timeoff_entries.
Needs organization_id. togglfocus_get_user_settings returns mcp_active_organization_id when set.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567

Example input: `{"organization_id":1234567}`

### `togglfocus_list_timeoff_entries`

List Time Off Entries · Read-only

List time off entries in any status, filtered by user, team, policy, status and date window.
Returns data (array of time off entries) plus page, rows and total.
Use to review requests and approved leave. Use togglfocus_list_timeoff_whos_out for a short who-is-away view.
Needs organization_id. togglfocus_get_user_settings returns mcp_active_organization_id when set.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `category_id` (`integer`, optional): Only this policy. Example: 1234567
- `from` (`string`, optional): Window start (YYYY-MM-DD). Example: 2026-09-01
- `page` (`integer`, optional): Page number, from 1. Example: 1
- `rows` (`integer`, optional): Page size, 1 to 500 (default 50). Example: 50
- `status` (`array`, optional): Only these statuses: pending, approved, rejected, canceled. Accepts a JSON array. Example: ["value"]
- `team_id` (`integer`, optional): Only this team; the caller must lead it or view the whole organization. Example: 1234567
- `to` (`string`, optional): Window end (YYYY-MM-DD). Example: 2026-09-01
- `user_id` (`array`, optional): Only these users. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"organization_id":1234567}`

### `togglfocus_list_timeoff_whos_out`

List Who's Out · Read-only

List members with pending or approved time off in a window of at most 7 days.
Returns an array of members with their overlapping time off.
Use for a quick team availability check.
Needs organization_id. togglfocus_get_user_settings returns mcp_active_organization_id when set.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `end_date` (`string`, required): Window end (YYYY-MM-DD). Example: 2026-09-01
- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `start_date` (`string`, required): Window start (YYYY-MM-DD). Example: 2026-09-01

Example input: `{"end_date":"<end_date>","organization_id":1234567,"start_date":"<start_date>"}`

### `togglfocus_list_timesheets`

List Timesheets · Read-only

List the timesheets visible to the caller whose period overlaps a date window of at most 90 days.
Returns an array of timesheets.
Use to see submission and approval status for members.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `date_from` (`string`, required): Inclusive start of the window; every period overlapping it is returned (YYYY-MM-DD). Example: 2026-09-01
- `date_to` (`string`, required): Inclusive end of the window, at most 90 days after date_from; every period overlapping it is returned (YYYY-MM-DD). Example: 2026-09-01
- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `approver_user_account_ids` (`array`, optional): Filter to setups staffed by these approvers, comma-separated or repeated. Accepts a JSON array. Example: [123456, 234567]
- `current_layer_approver_user_account_id` (`integer`, optional): Filter to timesheets whose current approval layer is staffed by this approver (their turn to act); combine with statuses=submitted for a pending-review view. Example: 1234567
- `page` (`integer`, optional): Page number. Example: 1
- `per_page` (`integer`, optional): Page size. Example: 50
- `setup_id` (`integer`, optional): Filter to a single setup. Example: 1234567
- `statuses` (`array`, optional): Filter to statuses, comma-separated or repeated (not_submitted, submitted, approved, changes_requested). Accepts a JSON array. Example: ["value"]
- `team_ids` (`array`, optional): Filter to members of these teams, comma-separated or repeated. Accepts a JSON array. Example: [123456, 234567]
- `user_account_ids` (`array`, optional): Filter to members, comma-separated or repeated. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"date_from":"<date_from>","date_to":"<date_to>","organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_search`

Search Workspace · Read-only

Search time entries by description, tasks by name and projects by name in one call.
Returns projects, tasks and time_entries, each an array of matches.
Use when you have a keyword but no id. Use togglfocus_list_tasks or togglfocus_list_projects for filtered browsing.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `keyword` (`string`, required): Search term, at least 3 characters. Matches time entry descriptions, task names and project names. Example: design
- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `assignee_user_id` (`integer`, optional): Scope tasks to this assignee. Example: 1234567
- `include_drafts` (`boolean`, optional): Include draft projects and tasks in the search results. Example: true
- `only_me` (`boolean`, optional): Scope the projects group to the projects the current user is assigned to, plus public projects when they hold view_public_projects (Track-shaped timer/picker scope; suppresses admin view_private_projects full-access). The time_entries and tasks groups are unaffected. Off by default. Example: true
- `per_group` (`integer`, optional): Max results per group (1-10, default 5). Example: 50
- `project_id` (`integer`, optional): Scope time-entry and task suggestions to this project. Example: 1234567
- `task_id` (`integer`, optional): Scope time-entry (description) suggestions to this task. Example: 1234567

Example input: `{"keyword":"<keyword>","organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_add_project_members`

Add Project Members · Write

Add users and teams to a project with a given role.
Returns no content on success (HTTP 204).
Use to grant access to a project. Use togglfocus_remove_project_member to revoke it.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set). role_id comes from togglfocus_list_organization_roles.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `project_id` (`integer`, required): Numeric ID of the project. Find it with togglfocus_list_projects. Example: 1234567
- `role_id` (`integer`, required): Numeric ID of the project role granted to the added users and teams. Find it with togglfocus_list_organization_roles. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `group_ids` (`array`, optional): Numeric IDs of teams (user groups) to add to the project. Find them with togglfocus_list_organization_teams. Accepts a JSON array. Example: [123456, 234567]
- `user_ids` (`array`, optional): Numeric IDs of users to add to the project. Find them with togglfocus_list_organization_users. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"organization_id":1234567,"project_id":1234567,"role_id":1234567,"workspace_id":1234567}`

### `togglfocus_archive_project`

Archive Project · Write

Archive a project by id.
Returns no content on success (HTTP 204).
Use to hide a finished project. Use togglfocus_unarchive_project to bring it back.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `project_id` (`integer`, required): Numeric ID of the project. Find it with togglfocus_list_projects. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"project_id":1234567,"workspace_id":1234567}`

### `togglfocus_archive_tag`

Archive Tag · Write

Archive a tag by id.
Returns no content on success (HTTP 204).
Use to retire a tag without deleting it. Use togglfocus_unarchive_tag to undo.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `tag_id` (`integer`, required): Numeric ID of the tag. Find it with togglfocus_list_tags. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"tag_id":1234567,"workspace_id":1234567}`

### `togglfocus_archive_task`

Archive Task · Write

Archive a task and its time entries.
Returns no content on success (HTTP 204).
Use to hide a finished task. Use togglfocus_unarchive_task to bring it back.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `task_id` (`integer`, required): Numeric ID of the task. Find it with togglfocus_list_tasks. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"task_id":1234567,"workspace_id":1234567}`

### `togglfocus_create_client`

Create Client · Write

Create a client in a workspace.
Returns the created client with its id.
Use to add a client before attaching projects to it.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the client. Example: Website redesign
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `currency` (`string`, optional): Currency is the client's optional default display currency (ISO 4217). Omitted or null means the client falls back to the workspace currency. On update (PUT) it is set directly, so send it to set/keep it or null to clear. Example: USD

Example input: `{"name":"<name>","workspace_id":1234567}`

### `togglfocus_create_milestone`

Create Milestone · Write

Create a milestone with a due date, optionally linked to projects and teams.
Returns the created milestone with its id.
Use to mark a deadline for one or more projects.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `color` (`string`, required): Milestone color as a hex code, for example #06aaf5. Example: #06aaf5
- `due_date` (`string`, required): Milestone due date, formatted YYYY-MM-DD. Example: 2026-09-01
- `name` (`string`, required): Name of the milestone. Example: Website redesign
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `completed_at` (`string`, optional): Timestamp (RFC 3339) at which the milestone was completed. Leave empty if not complete. Example: 2026-09-01T09:00:00Z
- `project_ids` (`array`, optional): Numeric IDs of the projects the milestone applies to. Accepts a JSON array. Example: [123456, 234567]
- `team_ids` (`array`, optional): Numeric IDs of the teams the milestone applies to. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"color":"<color>","due_date":"<due_date>","name":"<name>","workspace_id":1234567}`

### `togglfocus_create_project`

Create Project · Write

Create a project in a workspace.
Returns the created project with its id.
Use to add a project before creating tasks in it. Use togglfocus_update_project to change an existing one.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the project. Example: Website redesign
- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `auto_compute_estimates` (`boolean`, optional): When true, the project's estimate is computed automatically as the sum of its task estimates. Off by default. Example: true
- `billable` (`boolean`, optional): Whether the time or work is billable. Send true or false; leave empty to keep the default inherited from the task or project. Example: true
- `client_id` (`integer`, optional): Numeric ID of the client the project belongs to. Find it with togglfocus_list_clients. Example: 1234567
- `color` (`string`, optional): Project color as a hex code, for example #06aaf5. Example: #06aaf5
- `completion_mode` (`string`, optional): How the project is marked complete: manual (a person marks it) or automatic (it completes when its work is done). Allowed values: manual, automatic. Example: manual. One of: `manual`, `automatic`.
- `description` (`string`, optional): Free-text description of the project. Example: Prepare Q4 planning
- `draft` (`boolean`, optional): When true, the project is created or kept as a draft, which is hidden from listings unless drafts are requested. Example: true
- `end_date` (`string`, optional): Project end date, formatted YYYY-MM-DD. Example: 2026-09-01
- `estimate_source` (`string`, optional): Where the project estimate comes from: manual (estimated_mins on the project) or tasks (sum of task estimates). Allowed values: manual, tasks. Example: manual. One of: `manual`, `tasks`.
- `estimated_mins` (`integer`, optional): Project estimate in minutes, for example 4800. Used when estimate_source is manual. Example: 3600
- `parent_project_id` (`integer`, optional): Numeric ID of the parent project, to create a sub-project. Example: 1234567
- `pinned` (`boolean`, optional): When true, pins the item for the current user. Example: true
- `private` (`boolean`, optional): When true, only invited people can see the item. When omitted, it inherits the parent's visibility or the workspace default. Example: true
- `start_date` (`string`, optional): Project start date, formatted YYYY-MM-DD. Example: 2026-09-01
- `tag_ids` (`array`, optional): Numeric IDs of tags to apply to the project. Find them with togglfocus_list_tags. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"name":"<name>","organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_create_status`

Create Status · Write

Create a task status in a workspace.
Returns the created status with its id and type.
Use to add a column to the task workflow.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `emoji` (`string`, required): Emoji shown next to the status name, for example a single emoji character. Example: 🚀
- `name` (`string`, required): Name of the status. Example: Website redesign
- `position` (`integer`, required): Zero-based position of the status in the workflow order. Example: 1
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"emoji":"<emoji>","name":"<name>","position":1,"workspace_id":1234567}`

### `togglfocus_create_tag`

Create Tag · Write

Create a tag in a workspace.
Returns the created tag with its id.
Use to add a tag before applying it through tag_ids.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `color` (`string`, required): Tag color as a hex code, for example #06aaf5. Required by the API. Example: #06aaf5
- `name` (`string`, required): Name of the tag. Example: Website redesign
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"color":"<color>","name":"<name>","workspace_id":1234567}`

### `togglfocus_create_task`

Create Task · Write

Create a task in a workspace, optionally inside a project and assigned to users or teams.
Returns the created task with its id.
Use to add work to plan. Use togglfocus_update_task to change an existing task.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the task. Example: Website redesign
- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `assignee_user_ids` (`array`, optional): Numeric IDs of the users the task is assigned to. Find them with togglfocus_list_organization_users. Accepts a JSON array. Example: [123456, 234567]
- `billable` (`boolean`, optional): Whether the time or work is billable. Send true or false; leave empty to keep the default inherited from the task or project. Example: true
- `color` (`string`, optional): Task color as a hex code, for example #06aaf5. Example: #06aaf5
- `description` (`string`, optional): Free-text description of the task. Example: Prepare Q4 planning
- `end_date` (`string`, optional): Task end date (due date), formatted YYYY-MM-DD. Example: 2026-09-01
- `estimate_type` (`string`, optional): How estimated_mins is spread over the task's dates: total (spread across the whole date range) or daily (a per-day estimate). Allowed values: daily, total. Example: daily. One of: `daily`, `total`.
- `estimated_mins` (`integer`, optional): Estimated effort in minutes. Use a whole number, for example 480 for eight hours. Example: 3600
- `notes` (`string`, optional): Free-text notes on the task. Example: Prepare Q4 planning
- `parent_task_id` (`integer`, optional): Numeric ID of the parent task, to create a subtask. Example: 1234567
- `pinned` (`boolean`, optional): When true, pins the item for the current user. Example: true
- `priority` (`string`, optional): Task priority: none, low, medium or high. Allowed values: none, low, medium, high. Example: none. One of: `none`, `low`, `medium`, `high`.
- `private` (`boolean`, optional): When true, only invited people can see the item. When omitted, it inherits the parent's visibility or the workspace default. Example: true
- `project_id` (`integer`, optional): Numeric ID of the project the task belongs to. Find it with togglfocus_list_projects. Example: 1234567
- `start_date` (`string`, optional): Task start date, formatted YYYY-MM-DD. Example: 2026-09-01
- `status_id` (`integer`, optional): Numeric ID of the task's status. Find it with togglfocus_list_statuses. Example: 1234567
- `tag_ids` (`array`, optional): Numeric IDs of tags to apply to the task. Find them with togglfocus_list_tags. Accepts a JSON array. Example: [123456, 234567]
- `team_assignee_ids` (`array`, optional): Numeric IDs of the teams the task is assigned to. Find them with togglfocus_list_organization_teams. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"name":"<name>","organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_create_task_time_entry`

Create Task Time Entry · Write

Create a logged or planned time entry on a task.
Returns the created time entry with its id.
Use to log or plan time against a known task. Use togglfocus_create_time_entry for time without a task.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `task_id` (`integer`, required): Numeric ID of the task. Find it with togglfocus_list_tasks. Example: 1234567
- `type` (`string`, required): Kind of entry: activity (work) or break. Allowed values: activity, break. Example: activity. One of: `activity`, `break`.
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `billable` (`boolean`, optional): Whether the time or work is billable. Send true or false; leave empty to keep the default inherited from the task or project. Example: true
- `description` (`string`, optional): What the time was spent on. Example: Prepare Q4 planning
- `duration` (`integer`, optional): Tracked length in seconds, for logged time. For example 3600 for one hour. Example: 3600
- `planned_at` (`string`, optional): Timestamp (RFC 3339) of the planned slot, for planned time. Leave empty for logged time. Example: 2026-09-01T09:00:00Z
- `planned_duration` (`integer`, optional): Planned length in seconds, for planned time. For example 3600 for one hour. Example: 3600
- `planned_start` (`string`, optional): Start of the planned slot (RFC 3339), for time planned on the calendar. Example: 2026-09-01T09:00:00Z
- `project_id` (`integer`, optional): Numeric ID of the project, overriding the task's project. Find it with togglfocus_list_projects. Example: 1234567
- `start` (`string`, optional): Start of the tracked time (RFC 3339), for logged time. Leave empty for planned-only entries. Example: 2026-09-01T09:00:00Z
- `tag_ids` (`array`, optional): Numeric IDs of tags to apply to the entry. Find them with togglfocus_list_tags. Accepts a JSON array. Example: [123456, 234567]
- `tracked_at` (`string`, optional): Timestamp (RFC 3339) the time was tracked at. Usually left empty so the server sets it. Example: 2026-09-01T09:00:00Z
- `user_id` (`integer`, optional): Numeric ID of the user the entry is for. Omit to use the authenticated user; other users need the manage_time_entries permission. Example: 1234567

Example input: `{"organization_id":1234567,"task_id":1234567,"type":"activity","workspace_id":1234567}`

### `togglfocus_create_time_entry`

Create Time Entry · Write

Create a time entry that is not linked to a task, either logged (start and duration) or planned.
Returns the created time entry with its id.
Use for time without a task. Use togglfocus_create_task_time_entry to log time on a task, or togglfocus_start_tracking for a live timer.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `type` (`string`, required): Kind of entry: activity (work) or break. Allowed values: activity, break. Example: activity. One of: `activity`, `break`.
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `billable` (`boolean`, optional): Whether the time or work is billable. Send true or false; leave empty to keep the default inherited from the task or project. Example: true
- `description` (`string`, optional): What the time was spent on. Example: Prepare Q4 planning
- `duration` (`integer`, optional): Tracked length in seconds, for logged time. For example 3600 for one hour. Example: 3600
- `planned_at` (`string`, optional): Timestamp (RFC 3339) of the planned slot, for planned time. Leave empty for logged time. Example: 2026-09-01T09:00:00Z
- `planned_duration` (`integer`, optional): Planned length in seconds, for planned time. For example 3600 for one hour. Example: 3600
- `planned_start` (`string`, optional): Start of the planned slot (RFC 3339), for time planned on the calendar. Example: 2026-09-01T09:00:00Z
- `project_id` (`integer`, optional): Numeric ID of the project, overriding the task's project. Find it with togglfocus_list_projects. Example: 1234567
- `start` (`string`, optional): Start of the tracked time (RFC 3339), for logged time. Leave empty for planned-only entries. Example: 2026-09-01T09:00:00Z
- `tag_ids` (`array`, optional): Numeric IDs of tags to apply to the entry. Find them with togglfocus_list_tags. Accepts a JSON array. Example: [123456, 234567]
- `tracked_at` (`string`, optional): Timestamp (RFC 3339) the time was tracked at. Usually left empty so the server sets it. Example: 2026-09-01T09:00:00Z
- `user_id` (`integer`, optional): Numeric ID of the user the entry is for. Omit to use the authenticated user; other users need the manage_time_entries permission. Example: 1234567

Example input: `{"organization_id":1234567,"type":"activity","workspace_id":1234567}`

### `togglfocus_log_planned_time_entry`

Log Planned Time Entry · Write

Log a planned time entry by copying its planned start and duration to the logged side.
Returns the updated time entry.
Use to confirm planned time as done. It fails with 409 if the entry is already logged.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `time_entry_id` (`integer`, required): Numeric ID of the time entry. Find it with togglfocus_list_time_entries. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"time_entry_id":1234567,"workspace_id":1234567}`

### `togglfocus_restore_client`

Restore Client · Write

Restore a deleted client by id.
Returns no content on success (HTTP 204).
Use to undo togglfocus_delete_client.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `client_id` (`integer`, required): Numeric ID of the client. Find it with togglfocus_list_clients. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"client_id":1234567,"workspace_id":1234567}`

### `togglfocus_start_tracking`

Start Tracking · Write

Start a live timer, optionally on a task or project; a running timer is stopped first.
Returns the new running time entry.
Use for a live timer on a known task or project. Use togglfocus_start_tracking_from_description when you only have a name.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `type` (`string`, required): Kind of entry: activity (work) or break. Allowed values: activity, break. Example: activity. One of: `activity`, `break`.
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `billable` (`boolean`, optional): Whether the time or work is billable. Send true or false; leave empty to keep the default inherited from the task or project. Example: true
- `description` (`string`, optional): What the timer is tracking. Example: Prepare Q4 planning
- `project_id` (`integer`, optional): Numeric ID of the project to track against. Find it with togglfocus_list_projects. Example: 1234567
- `start` (`string`, optional): Start time of the timer (RFC 3339). Leave empty to start now. Example: 2026-09-01T09:00:00Z
- `tag_ids` (`array`, optional): Numeric IDs of tags to apply to the entry. Find them with togglfocus_list_tags. Accepts a JSON array. Example: [123456, 234567]
- `task_id` (`integer`, optional): Numeric ID of the task to track against. Find it with togglfocus_list_tasks. Example: 1234567

Example input: `{"organization_id":1234567,"type":"activity","workspace_id":1234567}`

### `togglfocus_start_tracking_from_description`

Start Tracking From Description · Write

Start a timer, or log a completed entry, by resolving or creating a task from a name, project name and tags.
Returns time_entry, task, match_reason, resolution_strategy and flags showing whether the task, project or tags were created.
Use when you have a task name but no task id. Use togglfocus_start_tracking when you have ids.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `extension_source` (`string`, required): Label for the client or integration starting the timer, for example 'scalekit-agentkit'. Required by the API. Example: scalekit-agentkit
- `name` (`string`, required): Task name used to find or create the task to track against. Example: Website redesign
- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `type` (`string`, required): Kind of entry: activity (work) or break. Allowed values: activity, break. Example: activity. One of: `activity`, `break`.
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `billable` (`boolean`, optional): Whether the time or work is billable. Send true or false; leave empty to keep the default inherited from the task or project. Example: true
- `create_project_if_not_found` (`boolean`, optional): When true and no project matches project_name, a new project with that name is created. Defaults to false. Example: true
- `create_tags_if_not_found` (`boolean`, optional): When true, any name in tag_names that does not exist yet is created as a tag. Defaults to false. Example: true
- `create_task_if_not_found` (`boolean`, optional): When true and no task matches name, a new task is created. Defaults to false. Example: true
- `description` (`string`, optional): What the timer is tracking. Example: Prepare Q4 planning
- `duration` (`integer`, optional): Length in seconds. When set, a completed entry is logged instead of a running timer, and start is then required. Example: 3600
- `project_name` (`string`, optional): Name of the project to attach the task to. Matched by name, and created only if create_project_if_not_found is true. Example: Website redesign
- `resolution_strategy` (`string`, optional): How an existing task is matched: uri, name, name_project or name_project_tags. When omitted, the server chooses. Allowed values: uri, name, name_project, name_project_tags. Example: uri. One of: `uri`, `name`, `name_project`, `name_project_tags`.
- `start` (`string`, optional): Start time of the timer (RFC 3339). Leave empty to start now. Example: 2026-09-01T09:00:00Z
- `tag_names` (`array`, optional): Tag names to apply. Missing tags are created only if create_tags_if_not_found is true. Accepts a JSON array. Example: ["design", "urgent"]

Example input: `{"extension_source":"<extension_source>","name":"<name>","organization_id":1234567,"type":"activity","workspace_id":1234567}`

### `togglfocus_stop_tracking`

Stop Tracking · Write

Stop the running timer at a given end time.
Returns the stopped time entry with its final duration.
Use after togglfocus_get_current_time_entry confirms a timer is running.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `end` (`string`, required): End time (RFC 3339) at which the running timer stops, for example the current time. Example: 2026-09-01T09:00:00Z
- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"end":"<end>","organization_id":1234567,"workspace_id":1234567}`

### `togglfocus_unarchive_project`

Unarchive Project · Write

Unarchive a previously archived project.
Returns no content on success (HTTP 204).
Use to restore a project hidden by togglfocus_archive_project.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `project_id` (`integer`, required): Numeric ID of the project. Find it with togglfocus_list_projects. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"project_id":1234567,"workspace_id":1234567}`

### `togglfocus_unarchive_tag`

Unarchive Tag · Write

Unarchive a tag by id.
Returns no content on success (HTTP 204).
Use to undo togglfocus_archive_tag.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `tag_id` (`integer`, required): Numeric ID of the tag. Find it with togglfocus_list_tags. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"tag_id":1234567,"workspace_id":1234567}`

### `togglfocus_unarchive_task`

Unarchive Task · Write

Unarchive a previously archived task and its time entries.
Returns no content on success (HTTP 204).
Use to restore a task hidden by togglfocus_archive_task.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `task_id` (`integer`, required): Numeric ID of the task. Find it with togglfocus_list_tasks. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"task_id":1234567,"workspace_id":1234567}`

### `togglfocus_update_client`

Update Client · Write

Update a client's name and currency.
Returns no content on success (HTTP 204).
Use to rename a client. name is required on every update.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `client_id` (`integer`, required): Numeric ID of the client. Find it with togglfocus_list_clients. Example: 1234567
- `name` (`string`, required): Name of the client. Example: Website redesign
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `currency` (`string`, optional): Currency is the client's optional default display currency (ISO 4217). Omitted or null means the client falls back to the workspace currency. On update (PUT) it is set directly, so send it to set/keep it or null to clear. Example: USD

Example input: `{"client_id":1234567,"name":"<name>","workspace_id":1234567}`

### `togglfocus_update_milestone`

Update Milestone · Write

Update fields of a milestone; only the fields you send change.
Returns no content on success (HTTP 204).
Use to move a due date or mark a milestone complete with completed_at.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `milestone_id` (`integer`, required): Numeric ID of the milestone. Find it with togglfocus_list_milestones. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `color` (`string`, optional): Milestone color as a hex code, for example #06aaf5. Example: #06aaf5
- `completed_at` (`string`, optional): Timestamp (RFC 3339) at which the milestone was completed. Leave empty if not complete. Example: 2026-09-01T09:00:00Z
- `due_date` (`string`, optional): Milestone due date, formatted YYYY-MM-DD. Example: 2026-09-01
- `name` (`string`, optional): Name of the milestone. Example: Website redesign
- `project_ids` (`array`, optional): Numeric IDs of the projects the milestone applies to. Accepts a JSON array. Example: [123456, 234567]
- `team_ids` (`array`, optional): Numeric IDs of the teams the milestone applies to. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"milestone_id":1234567,"workspace_id":1234567}`

### `togglfocus_update_project`

Update Project · Write

Update fields of an existing project; only the fields you send change.
Returns no content on success (HTTP 204).
Use to rename, recolor, reschedule or re-assign a project. Use togglfocus_archive_project to archive it.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `project_id` (`integer`, required): Numeric ID of the project. Find it with togglfocus_list_projects. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `auto_compute_estimates` (`boolean`, optional): When true, the project's estimate is computed automatically as the sum of its task estimates. Off by default. Example: true
- `billable` (`boolean`, optional): Whether the time or work is billable. Send true or false; leave empty to keep the default inherited from the task or project. Example: true
- `client_id` (`integer`, optional): Numeric ID of the client the project belongs to. Find it with togglfocus_list_clients. Example: 1234567
- `color` (`string`, optional): Project color as a hex code, for example #06aaf5. Example: #06aaf5
- `completion_mode` (`string`, optional): How the project is marked complete: manual (a person marks it) or automatic (it completes when its work is done). Allowed values: manual, automatic. Example: manual. One of: `manual`, `automatic`.
- `description` (`string`, optional): Free-text description of the project. Example: Prepare Q4 planning
- `draft` (`boolean`, optional): When true, the project is created or kept as a draft, which is hidden from listings unless drafts are requested. Example: true
- `end_date` (`string`, optional): Project end date, formatted YYYY-MM-DD. Example: 2026-09-01
- `estimate_source` (`string`, optional): Where the project estimate comes from: manual (estimated_mins on the project) or tasks (sum of task estimates). Allowed values: manual, tasks. Example: manual. One of: `manual`, `tasks`.
- `estimated_mins` (`integer`, optional): Project estimate in minutes, for example 4800. Used when estimate_source is manual. Example: 3600
- `name` (`string`, optional): Name of the project. Example: Website redesign
- `parent_project_id` (`integer`, optional): Numeric ID of the parent project, to create a sub-project. Example: 1234567
- `pinned` (`boolean`, optional): When true, pins the item for the current user. Example: true
- `private` (`boolean`, optional): When true, only invited people can see the item. When omitted, it inherits the parent's visibility or the workspace default. Example: true
- `start_date` (`string`, optional): Project start date, formatted YYYY-MM-DD. Example: 2026-09-01
- `tag_ids` (`array`, optional): Numeric IDs of tags to apply to the project. Find them with togglfocus_list_tags. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"organization_id":1234567,"project_id":1234567,"workspace_id":1234567}`

### `togglfocus_update_status`

Update Status · Write

Update a task status's name, emoji and position.
Returns the updated status.
Use to rename or reorder a status. name, emoji and position are all required.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `emoji` (`string`, required): Emoji shown next to the status name, for example a single emoji character. Example: 🚀
- `name` (`string`, required): Name of the status. Example: Website redesign
- `position` (`integer`, required): Zero-based position of the status in the workflow order. Example: 1
- `status_id` (`integer`, required): Numeric ID of the task status. Find it with togglfocus_list_statuses. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"emoji":"<emoji>","name":"<name>","position":1,"status_id":1234567,"workspace_id":1234567}`

### `togglfocus_update_tag`

Update Tag · Write

Update a tag's name and color.
Returns the updated tag.
Use to rename or recolor a tag. name and color are both required.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `color` (`string`, required): Tag color as a hex code, for example #06aaf5. Required by the API. Example: #06aaf5
- `name` (`string`, required): Name of the tag. Example: Website redesign
- `tag_id` (`integer`, required): Numeric ID of the tag. Find it with togglfocus_list_tags. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"color":"<color>","name":"<name>","tag_id":1234567,"workspace_id":1234567}`

### `togglfocus_update_task`

Update Task · Write

Update fields of an existing task; only the fields you send change.
Returns no content on success (HTTP 204).
Use to rename, reschedule, re-assign, re-prioritize or change the status of a task.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `task_id` (`integer`, required): Numeric ID of the task. Find it with togglfocus_list_tasks. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `assignee_user_ids` (`array`, optional): Numeric IDs of the users the task is assigned to. Find them with togglfocus_list_organization_users. Accepts a JSON array. Example: [123456, 234567]
- `billable` (`boolean`, optional): Whether the time or work is billable. Send true or false; leave empty to keep the default inherited from the task or project. Example: true
- `color` (`string`, optional): Task color as a hex code, for example #06aaf5. Example: #06aaf5
- `description` (`string`, optional): Free-text description of the task. Example: Prepare Q4 planning
- `end_date` (`string`, optional): Task end date (due date), formatted YYYY-MM-DD. Example: 2026-09-01
- `estimate_type` (`string`, optional): How estimated_mins is spread over the task's dates: total (spread across the whole date range) or daily (a per-day estimate). Allowed values: daily, total. Example: daily. One of: `daily`, `total`.
- `estimated_mins` (`integer`, optional): Estimated effort in minutes. Use a whole number, for example 480 for eight hours. Example: 3600
- `name` (`string`, optional): Name of the task. Example: Website redesign
- `notes` (`string`, optional): Free-text notes on the task. Example: Prepare Q4 planning
- `parent_task_id` (`integer`, optional): Numeric ID of the parent task, to create a subtask. Example: 1234567
- `pinned` (`boolean`, optional): When true, pins the item for the current user. Example: true
- `priority` (`string`, optional): Task priority: none, low, medium or high. Allowed values: none, low, medium, high. Example: none. One of: `none`, `low`, `medium`, `high`.
- `private` (`boolean`, optional): When true, only invited people can see the item. When omitted, it inherits the parent's visibility or the workspace default. Example: true
- `project_id` (`integer`, optional): Numeric ID of the project the task belongs to. Find it with togglfocus_list_projects. Example: 1234567
- `start_date` (`string`, optional): Task start date, formatted YYYY-MM-DD. Example: 2026-09-01
- `status_id` (`integer`, optional): Numeric ID of the task's status. Find it with togglfocus_list_statuses. Example: 1234567
- `tag_ids` (`array`, optional): Numeric IDs of tags to apply to the task. Find them with togglfocus_list_tags. Accepts a JSON array. Example: [123456, 234567]
- `team_assignee_ids` (`array`, optional): Numeric IDs of the teams the task is assigned to. Find them with togglfocus_list_organization_teams. Accepts a JSON array. Example: [123456, 234567]

Example input: `{"organization_id":1234567,"task_id":1234567,"workspace_id":1234567}`

### `togglfocus_update_time_entry`

Update Time Entry · Write

Update fields of an existing time entry; only the fields you send change.
Returns no content on success (HTTP 204).
Use to correct a description, duration, project, task or tags.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `time_entry_id` (`integer`, required): Numeric ID of the time entry. Find it with togglfocus_list_time_entries. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `billable` (`boolean`, optional): Whether the time or work is billable. Send true or false; leave empty to keep the default inherited from the task or project. Example: true
- `description` (`string`, optional): What the time was spent on. Example: Prepare Q4 planning
- `duration` (`integer`, optional): Tracked length in seconds, for logged time. For example 3600 for one hour. Example: 3600
- `planned_at` (`string`, optional): Timestamp (RFC 3339) of the planned slot, for planned time. Leave empty for logged time. Example: 2026-09-01T09:00:00Z
- `planned_duration` (`integer`, optional): Planned length in seconds, for planned time. For example 3600 for one hour. Example: 3600
- `planned_start` (`string`, optional): Start of the planned slot (RFC 3339), for time planned on the calendar. Example: 2026-09-01T09:00:00Z
- `project_id` (`integer`, optional): Numeric ID of the project, overriding the task's project. Find it with togglfocus_list_projects. Example: 1234567
- `start` (`string`, optional): Start of the tracked time (RFC 3339), for logged time. Leave empty for planned-only entries. Example: 2026-09-01T09:00:00Z
- `tag_ids` (`array`, optional): Numeric IDs of tags to apply to the entry. Find them with togglfocus_list_tags. Accepts a JSON array. Example: [123456, 234567]
- `task_id` (`integer`, optional): Numeric ID of the task the entry belongs to. Example: 1234567
- `tracked_at` (`string`, optional): Timestamp (RFC 3339) the time was tracked at. Usually left empty so the server sets it. Example: 2026-09-01T09:00:00Z
- `type` (`string`, optional): Kind of entry: activity (work) or break. Allowed values: activity, break. Example: activity. One of: `activity`, `break`.

Example input: `{"organization_id":1234567,"time_entry_id":1234567,"workspace_id":1234567}`

### `togglfocus_delete_client`

Delete Client · Destructive

Delete a client by id.
Returns no content on success (HTTP 204).
Use togglfocus_restore_client to undo a deletion.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `client_id` (`integer`, required): Numeric ID of the client. Find it with togglfocus_list_clients. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"client_id":1234567,"workspace_id":1234567}`

### `togglfocus_delete_milestone`

Delete Milestone · Destructive

Delete a milestone by id.
Returns no content on success (HTTP 204).
Use when a milestone is no longer relevant.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `milestone_id` (`integer`, required): Numeric ID of the milestone. Find it with togglfocus_list_milestones. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"milestone_id":1234567,"workspace_id":1234567}`

### `togglfocus_delete_project`

Delete Project · Destructive

Delete a project by id.
Returns no content on success (HTTP 204).
Use togglfocus_archive_project instead when the project may be needed again.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `project_id` (`integer`, required): Numeric ID of the project. Find it with togglfocus_list_projects. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"project_id":1234567,"workspace_id":1234567}`

### `togglfocus_delete_status`

Delete Status · Destructive

Delete a task status by id.
Returns no content on success (HTTP 204).
Use when a status is no longer needed in the task workflow.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `status_id` (`integer`, required): Numeric ID of the task status. Find it with togglfocus_list_statuses. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"status_id":1234567,"workspace_id":1234567}`

### `togglfocus_delete_tag`

Delete Tag · Destructive

Delete a tag by id.
Returns no content on success (HTTP 204).
Use togglfocus_archive_tag instead to keep history.
Needs workspace_id. togglfocus_get_user_settings returns current_workspace_id.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `tag_id` (`integer`, required): Numeric ID of the tag. Find it with togglfocus_list_tags. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"tag_id":1234567,"workspace_id":1234567}`

### `togglfocus_delete_task`

Delete Task · Destructive

Delete a task by id.
Returns no content on success (HTTP 204).
Use togglfocus_archive_task instead when the task may be needed again.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `task_id` (`integer`, required): Numeric ID of the task. Find it with togglfocus_list_tasks. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"task_id":1234567,"workspace_id":1234567}`

### `togglfocus_delete_time_entry`

Delete Time Entry · Destructive

Soft-delete a time entry by id.
Returns no content on success (HTTP 204).
Use to remove a wrong or duplicate entry.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `time_entry_id` (`integer`, required): Numeric ID of the time entry. Find it with togglfocus_list_time_entries. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567

Example input: `{"organization_id":1234567,"time_entry_id":1234567,"workspace_id":1234567}`

### `togglfocus_remove_project_member`

Remove Project Member · Destructive

Remove one user or one team from a project.
Returns no content on success (HTTP 204).
Use to revoke project access. Pass user_id or group_id, not both.
Needs organization_id and workspace_id. togglfocus_get_user_settings returns current_workspace_id (and mcp_active_organization_id when set).

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `organization_id` (`integer`, required): Numeric ID of the Toggl 2.0 organization that owns the workspace. Example: 1234567
- `project_id` (`integer`, required): Numeric ID of the project. Find it with togglfocus_list_projects. Example: 1234567
- `workspace_id` (`integer`, required): Numeric ID of the Toggl 2.0 workspace to operate in. Example: 1234567
- `group_id` (`integer`, optional): Numeric ID of the team (user group) to remove from the project. Send either group_id or user_id. Example: 1234567
- `user_id` (`integer`, optional): Numeric ID of the user to remove from the project. Send either user_id or group_id. Example: 1234567

Example input: `{"organization_id":1234567,"project_id":1234567,"workspace_id":1234567}`

## Related

Other Productivity connectors ([all 144](/agentkit/connectors/?category=productivity)):

- [Slack](/agentkit/connectors/slack/): Scalekit connector, OAuth, 96 tools
- [Microsoft 365](/agentkit/connectors/microsoft365/): Scalekit connector, OAuth, 317 tools
- [Notion](/agentkit/connectors/notion/): Scalekit connector, OAuth, 51 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
