<!-- Generated by `just docs` from catalog/toolkits/clickup.yaml, catalog/expansions/clickup.yaml, catalog/evals/scorecard.json. Edit the source, not this file. -->

# ClickUp

Project and task tracking. Create and move tasks, comment on them, break them into checklists, and organize the lists holding them.

| Property | Value |
| --- | --- |
| Slug | `clickup` |
| Definition version | `0.1.0` |
| Base URL | `https://api.clickup.com/api/v2` |
| Auth schemes | `oauth2`, `api_key` |
| Action tools | 39 |
| By class | 14 read, 17 write, 8 destructive |
| Triggers | 0 |
| Provider rate limit | 100 requests per 1m, per account |

## Measured routing accuracy

98 golden cases replayed through the router over the whole index: measured over corpus `ea4f12ad2948` (65 toolkits, 2283 tools indexed and 13 declared uncallable), 39 cases written by hand and 59 cases from the paraphrase pass. A case counts as top-1 when its gold tool ranked first and top-8 when it reached the slate at all.

| Measure | Cases | Share |
| --- | --- | --- |
| top-1 | 29/98 | 29.6% |
| top-8 | 72/98 | 73.5% |

The sweep is offline: the reranker is a deterministic identity fake that returns candidates in the order retrieval produced them, so top-1 measures retrieval order rather than a reranked slate. `just eval-live` measures the same cases through the live reranker.

## Authentication

Connect an entity with `ConnectionsService.InitiateConnection`, naming this toolkit's slug. Credentials stay in the connections vault; callers hold connected-account ids only.

### `oauth2`

| Property | Value |
| --- | --- |
| Authorization URL | `https://app.clickup.com/api` |
| Token URL | `https://api.clickup.com/api/v2/oauth/token` |
| Refresh tokens | no, so the end user reauthorizes when the token expires |

### `api_key`

| Property | Value |
| --- | --- |
| Placement | `header` |
| Name | `Authorization` |
| Rendered as | `{key}` |

Submit the key with `ConnectionsService` rather than putting it in a request; it is sealed at rest and never returned.

## Tools

39 action tools. The catalog-wide slug is `clickup.<tool>`, which is what `search_tools` returns and `call_tool` takes.

### `clickup.list_workspaces`

List every ClickUp workspace (called a "team" in ClickUp's API) the connected account belongs to, with its members. Use first when a call below needs a team_id and the user has not named one, or to answer who is on a ClickUp workspace.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /team`.

Takes no arguments.

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `teams` | array of object |  |
| `teams[].id` | string |  |
| `teams[].members` | array of object |  |
| `teams[].members[].user` | object |  |
| `teams[].name` | string |  |

Also retrieved by: "what clickup workspaces do I have", "show every clickup team I belong to", "which clickup workspaces can I use", "list the places I have access to in clickup", "what clickup teams can I access right now".

### `clickup.get_current_user`

Get the ClickUp profile of the connected account itself: id, username, and email. Use to answer "who am I in ClickUp" or to get the caller's own user id for assigning a ClickUp task to itself.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /user`.

Takes no arguments.

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `user` | object |  |
| `user.email` | string |  |
| `user.id` | integer |  |
| `user.username` | string |  |

Also retrieved by: "who am I logged in as in clickup", "what's my own clickup profile", "show my clickup account info".

### `clickup.list_spaces`

List the spaces in a ClickUp workspace. Use when the user asks what ClickUp spaces exist, or to find a space_id for a folder or list call. For one space's own detail use get_space.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /team/{{params.team_id}}/space`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `archived` | boolean | no | Include archived spaces. Default false. |
| `team_id` | string | **yes** | Workspace id, from list_workspaces. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `spaces` | array of object |  |
| `spaces[].id` | string |  |
| `spaces[].name` | string |  |
| `spaces[].private` | boolean |  |

Also retrieved by: "what clickup spaces exist in this workspace", "show me every clickup space we have set up", "find the clickup space id for engineering", "what areas exist in this clickup workspace".

### `clickup.get_space`

Get one ClickUp space's own detail by id: name, privacy, and its enabled features (due dates, time tracking, tags). Use when the user names a specific ClickUp space. For the whole list use list_spaces.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /space/{{params.space_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `space_id` | string | **yes** | Space id, from list_spaces. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |
| `private` | boolean |  |
| `statuses` | array of object |  |
| `statuses[].status` | string |  |

Also retrieved by: "tell me about this clickup space", "is this clickup space private or shared", "what features are turned on for this clickup space", "pull up clickup space details", "is this clickup area private or shared with everyone".

### `clickup.create_space`

Create a new space in a ClickUp workspace. Use when the user wants to start, set up, or spin up a new ClickUp space to organize folders and lists under.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /team/{{params.team_id}}/space`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `multiple_assignees` | boolean | no | Allow a task in this space to carry more than one assignee. |
| `name` | string | **yes** | Space display name. |
| `team_id` | string | **yes** | Workspace id the space belongs to. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |

Also retrieved by: "spin up a new clickup space for the design team", "start a fresh space in clickup", "set up a clickup space to organize this initiative", "spin up a fresh area for the design team in clickup".

### `clickup.update_space`

Edit an existing ClickUp space's name, privacy, or color. Use when the user wants to rename or reconfigure a ClickUp space itself, not the folders or lists inside it.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PUT /space/{{params.space_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `color` | string | no | New display color, e.g. "#FF0000". |
| `name` | string | no | New space display name. |
| `private` | boolean | no | Make the space private (true) or shared (false). |
| `space_id` | string | **yes** | Space id to edit. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |

Also retrieved by: "rename this clickup space", "make this clickup space private", "change the color on this clickup space", "give this clickup area a new name".

### `clickup.delete_space`

Permanently delete a ClickUp space and every folder, list, and task inside it. Use when the user explicitly asks to delete or remove a whole ClickUp space. Irreversible.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /space/{{params.space_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `space_id` | string | **yes** | Space id to delete. |

Also retrieved by: "remove this whole clickup space", "get rid of a clickup space for good", "wipe out a clickup space entirely", "get rid of this clickup area for good".

### `clickup.list_folders`

List the folders in a ClickUp space. Use when the user asks what ClickUp folders exist, or to find a folder_id for a list call. For one folder's own detail use get_folder.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /space/{{params.space_id}}/folder`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `archived` | boolean | no | Include archived folders. Default false. |
| `space_id` | string | **yes** | Space id, from list_spaces. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `folders` | array of object |  |
| `folders[].id` | string |  |
| `folders[].name` | string |  |
| `folders[].task_count` | string |  |

Also retrieved by: "what clickup folders exist in this space", "show me every clickup folder here", "find the clickup folder id for sprint planning", "what groupings exist inside this clickup space".

### `clickup.get_folder`

Get one ClickUp folder's own detail by id: name and the lists inside it. Use when the user names a specific ClickUp folder. For the whole list use list_folders.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /folder/{{params.folder_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `folder_id` | string | **yes** | Folder id, from list_folders. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `lists` | array of object |  |
| `lists[].id` | string |  |
| `lists[].name` | string |  |
| `name` | string |  |

Also retrieved by: "tell me about this clickup folder", "what clickup lists are inside this folder", "pull up clickup folder details", "what's inside this clickup grouping".

### `clickup.create_folder`

Create a new folder in a ClickUp space. Use when the user wants to add, create, or set up a new ClickUp folder to group lists under, before adding lists to it with create_list.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /space/{{params.space_id}}/folder`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `name` | string | **yes** | Folder display name. |
| `space_id` | string | **yes** | Space id the folder belongs to. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |

Also retrieved by: "add a new folder to this clickup space", "set up a clickup folder to group our lists", "create a clickup folder for this quarter's work", "set up a new grouping under this clickup space".

### `clickup.update_folder`

Rename an existing ClickUp folder. Use when the user wants to rename or relabel a ClickUp folder itself, not the lists inside it.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PUT /folder/{{params.folder_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `folder_id` | string | **yes** | Folder id to edit. |
| `name` | string | **yes** | New folder display name. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |

Also retrieved by: "rename this clickup folder", "relabel the sprint planning folder in clickup", "change the name on an existing clickup folder", "relabel this clickup grouping".

### `clickup.delete_folder`

Permanently delete a ClickUp folder and every list and task inside it. Use when the user explicitly asks to delete or remove a whole ClickUp folder. Irreversible.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /folder/{{params.folder_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `folder_id` | string | **yes** | Folder id to delete. |

Also retrieved by: "remove this whole clickup folder", "get rid of a clickup folder and everything in it", "wipe out a clickup folder entirely", "wipe out this clickup grouping for good".

### `clickup.list_lists`

List the ClickUp lists inside a folder. Use when the user asks what lists a ClickUp folder has. For lists that live directly under a space with no folder use list_folderless_lists instead.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /folder/{{params.folder_id}}/list`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `archived` | boolean | no | Include archived lists. Default false. |
| `folder_id` | string | **yes** | Folder id, from list_folders. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `lists` | array of object |  |
| `lists[].id` | string |  |
| `lists[].name` | string |  |
| `lists[].task_count` | integer |  |

Also retrieved by: "what clickup lists are inside this folder", "show me every clickup list under sprint planning", "find the clickup list id for a specific board in this folder", "show me every board nested under this clickup folder".

### `clickup.list_folderless_lists`

List the ClickUp lists that live directly under a space, with no folder. Use when the user asks what lists a ClickUp space has and the space is not organized into folders. For lists inside a folder use list_lists.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /space/{{params.space_id}}/list`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `archived` | boolean | no | Include archived lists. Default false. |
| `space_id` | string | **yes** | Space id, from list_spaces. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `lists` | array of object |  |
| `lists[].id` | string |  |
| `lists[].name` | string |  |
| `lists[].task_count` | integer |  |

Also retrieved by: "what clickup lists does this space have with no folder", "show me the clickup lists directly under this space", "find a clickup board that isn't nested inside any folder".

### `clickup.get_list`

Get one ClickUp list's own detail by id: name, its folder and space, task count, and default status. Use when the user names a specific ClickUp list.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /list/{{params.list_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `list_id` | string | **yes** | List id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `folder` | object |  |
| `folder.id` | string |  |
| `folder.name` | string |  |
| `id` | string |  |
| `name` | string |  |
| `space` | object |  |
| `space.id` | string |  |
| `task_count` | integer |  |

Also retrieved by: "tell me about this clickup list", "what's the default status on this clickup list", "pull up clickup list details", "what's the default status on this clickup board".

### `clickup.create_list`

Create a new ClickUp list inside a folder. Use when the user wants to add, create, or set up a new list to hold ClickUp tasks, and the target already has a folder. For a list with no folder use create_folderless_list.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /folder/{{params.folder_id}}/list`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `assignee` | integer | no | User id to set as the list's default assignee. |
| `content` | string | no | Plain-text list description. |
| `due_date` | integer | no | List-level due date, unix milliseconds. |
| `folder_id` | string | **yes** | Folder id the list belongs to. |
| `name` | string | **yes** | List display name. |
| `priority` | integer, one of 1, 2, 3, 4 | no | List-level default priority, 1 urgent to 4 low. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |

Also retrieved by: "add a new clickup list inside this folder", "set up a clickup list to hold tasks in this folder", "create a fresh clickup list under sprint planning".

### `clickup.create_folderless_list`

Create a new ClickUp list directly under a space, with no folder. Use when the user wants a new list to hold ClickUp tasks and the space is not organized into folders. For a list inside an existing folder use create_list.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /space/{{params.space_id}}/list`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `assignee` | integer | no | User id to set as the list's default assignee. |
| `content` | string | no | Plain-text list description. |
| `due_date` | integer | no | List-level due date, unix milliseconds. |
| `name` | string | **yes** | List display name. |
| `priority` | integer, one of 1, 2, 3, 4 | no | List-level default priority, 1 urgent to 4 low. |
| `space_id` | string | **yes** | Space id the list belongs to. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |

Also retrieved by: "add a new clickup list directly under this space", "set up a clickup list with no folder", "create a fresh clickup list that isn't nested in a folder".

### `clickup.update_list`

Edit an existing ClickUp list's name, description, due date, or priority. Use when the user wants to rename or reconfigure a ClickUp list itself, not the tasks inside it.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PUT /list/{{params.list_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `content` | string | no | New plain-text list description. |
| `due_date` | integer | no | New list-level due date, unix milliseconds. |
| `list_id` | string | **yes** | List id to edit. |
| `name` | string | no | New list display name. |
| `priority` | integer, one of 1, 2, 3, 4 | no | New list-level default priority, 1 urgent to 4 low. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |

Also retrieved by: "rename this clickup list", "change the due date on this clickup list", "edit the clickup list description", "push out the due date on this clickup board".

### `clickup.delete_list`

Permanently delete a ClickUp list and every task inside it. Use when the user explicitly asks to delete or remove a whole ClickUp list. Irreversible.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /list/{{params.list_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `list_id` | string | **yes** | List id to delete. |

Also retrieved by: "remove this whole clickup list", "get rid of a clickup list and everything on it", "wipe out a clickup list entirely", "wipe out this clickup board and everything on it".

### `clickup.list_tasks`

List the ClickUp tasks in one list. Use for what's on this ClickUp list. For a multi-filter query across a whole workspace use search_tasks instead. For one known task use get_task.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /list/{{params.list_id}}/task`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `include_closed` | boolean | no | Include tasks in a closed (done) status. Default false. |
| `list_id` | string | **yes** | List id, from list_lists or list_folderless_lists. |
| `order_by` | string, one of id, created, updated, due_date | no | Sort field, default created. |
| `page` | integer | no | Zero-based page number for pagination. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `tasks` | array of object |  |
| `tasks[].assignees` | array of object |  |
| `tasks[].assignees[].id` | integer |  |
| `tasks[].assignees[].username` | string |  |
| `tasks[].due_date` | string |  |
| `tasks[].id` | string |  |
| `tasks[].name` | string |  |
| `tasks[].status` | object |  |
| `tasks[].status.status` | string |  |

Also retrieved by: "what's on this clickup list right now", "show every to-do in this clickup list", "what does the team have open on this clickup board", "what's on this clickup board at the moment".

### `clickup.get_task`

Get one ClickUp task's full detail by id: name, description, status, priority, due date, assignees, tags, and its list and space. Use when the user names a specific ClickUp task. For many tasks at once use list_tasks or search_tasks.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /task/{{params.task_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `task_id` | string | **yes** | Task id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `assignees` | array of object |  |
| `assignees[].id` | integer |  |
| `assignees[].username` | string |  |
| `date_created` | string |  |
| `date_updated` | string |  |
| `description` | string |  |
| `due_date` | string |  |
| `id` | string |  |
| `list` | object |  |
| `list.id` | string |  |
| `list.name` | string |  |
| `name` | string |  |
| `priority` | object |  |
| `priority.priority` | string |  |
| `status` | object |  |
| `status.status` | string |  |
| `tags` | array of object |  |
| `tags[].name` | string |  |

Also retrieved by: "pull up the details on this clickup to-do", "what does this clickup ticket say", "show me one specific clickup task", "what's the status of this clickup card".

### `clickup.create_task`

Create a new task in a ClickUp list. Use when the user wants to add, file, or log something to do in ClickUp. Requires a list and a name; description, assignees, tags, priority, and due date are optional.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /list/{{params.list_id}}/task`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `assignees` | array of integer | no | User ids to assign the task to. |
| `description` | string | no | Plain-text task description. |
| `due_date` | integer | no | Due date, unix milliseconds. |
| `due_date_time` | boolean | no | Whether due_date carries a time of day rather than just a date. |
| `list_id` | string | **yes** | List id the task belongs to. |
| `name` | string | **yes** | Task title. |
| `priority` | integer, one of 1, 2, 3, 4 | no | Priority, 1 urgent to 4 low. |
| `status` | string | no | Status name to create the task in. Defaults to the list's default status. |
| `tags` | array of string | no | Tag names to apply. Each tag must already exist in the space. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |

Also retrieved by: "add a new to-do to this clickup list", "file a new ticket under this clickup list", "log something for someone to do in clickup", "open a new card on this clickup list".

### `clickup.update_task`

Edit an existing ClickUp task's name, description, status, priority, due date, or assignees. Use when the user wants to change, retitle, reassign, reschedule, or move a ClickUp task to a different status.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PUT /task/{{params.task_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `add_assignees` | array of integer | no | User ids to add as assignees. |
| `description` | string | no | New plain-text task description. |
| `due_date` | integer | no | New due date, unix milliseconds. |
| `name` | string | no | New task title. |
| `priority` | integer, one of 1, 2, 3, 4 | no | New priority, 1 urgent to 4 low. |
| `remove_assignees` | array of integer | no | User ids to remove as assignees. |
| `status` | string | no | New status name, e.g. "in progress" or "complete". |
| `task_id` | string | **yes** | Task id to edit. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `id` | string |  |
| `name` | string |  |
| `status` | object |  |
| `status.status` | string |  |

Also retrieved by: "reschedule this clickup to-do", "reassign this clickup ticket to someone else", "move this clickup card to a different status", "change the priority on this clickup task".

### `clickup.delete_task`

Permanently delete a ClickUp task. Use when the user wants to delete or remove a ClickUp task entirely, not just mark it done. Irreversible.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /task/{{params.task_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `task_id` | string | **yes** | Task id to delete. |

Also retrieved by: "remove this clickup to-do entirely", "get rid of this clickup ticket for good", "wipe this clickup card off the list".

### `clickup.search_tasks`

Filter ClickUp tasks across a whole workspace by status, assignee, tag, or due date, without needing to know which list they're in. Has no free-text keyword search; ClickUp's API filters by these fields only, and each filter here takes one value, not a set (ClickUp expects a repeated query key for more than one, which a request template cannot express; narrow with one status, assignee, or tag per call instead). For tasks in one known list use list_tasks; for one known task use get_task.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /team/{{params.team_id}}/task`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `assignee` | string | no | Restrict to tasks assigned to this user id. |
| `due_date_gt` | integer | no | Restrict to tasks due after this unix millisecond timestamp. |
| `due_date_lt` | integer | no | Restrict to tasks due before this unix millisecond timestamp. |
| `include_closed` | boolean | no | Include tasks in a closed (done) status. Default false. |
| `page` | integer | no | Zero-based page number for pagination. |
| `status` | string | no | Restrict to tasks in this status name. |
| `tag` | string | no | Restrict to tasks carrying this tag name. |
| `team_id` | string | **yes** | Workspace id to search within. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `tasks` | array of object |  |
| `tasks[].assignees` | array of object |  |
| `tasks[].assignees[].id` | integer |  |
| `tasks[].assignees[].username` | string |  |
| `tasks[].due_date` | string |  |
| `tasks[].id` | string |  |
| `tasks[].name` | string |  |
| `tasks[].status` | object |  |
| `tasks[].status.status` | string |  |

Also retrieved by: "find every clickup task assigned to sam across the workspace", "what clickup tickets are still open anywhere in the workspace", "look through the whole clickup workspace for tasks tagged urgent", "filter every clickup task due before Friday".

### `clickup.list_task_comments`

List the comments on a ClickUp task, newest first. Use when the user wants to read the discussion or history on a ClickUp task.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /task/{{params.task_id}}/comment`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `task_id` | string | **yes** | Task id. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `comments` | array of object |  |
| `comments[].comment_text` | string |  |
| `comments[].date` | string |  |
| `comments[].id` | string |  |
| `comments[].user` | object |  |
| `comments[].user.id` | integer |  |
| `comments[].user.username` | string |  |

Also retrieved by: "what have people said on this clickup ticket", "read the notes on this clickup to-do", "show the conversation history on this clickup card".

### `clickup.add_task_comment`

Post a new comment on a ClickUp task. Use when the user wants to comment, note, or leave an update on a ClickUp task. To change a comment already posted use update_comment.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /task/{{params.task_id}}/comment`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `assignee` | integer | no | User id to assign the comment to as an action item. |
| `comment_text` | string | **yes** | Comment body, plain text. |
| `notify_all` | boolean | no | Notify every task watcher, not just the assignee. Default true. |
| `task_id` | string | **yes** | Task id to comment on. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `comment_text` | string |  |
| `id` | string |  |

Also retrieved by: "leave a note on this clickup ticket", "post an update for the team on this clickup to-do", "tell them the fix shipped on this clickup card".

### `clickup.update_comment`

Edit the text of a ClickUp comment already posted, or mark it resolved. Use when the user wants to fix, correct, or resolve something written on a ClickUp task.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PUT /comment/{{params.comment_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `comment_id` | string | **yes** | Comment id, from list_task_comments. |
| `comment_text` | string | **yes** | Replacement comment body, plain text. |
| `resolved` | boolean | no | Mark the comment resolved (true) or reopen it (false). |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `comment_text` | string |  |
| `id` | string |  |

Also retrieved by: "fix a typo in my last note on this clickup task", "correct what I wrote on this clickup ticket", "mark this clickup comment resolved".

### `clickup.delete_comment`

Permanently delete a comment from a ClickUp task. Use when the user wants to delete or remove a ClickUp comment, not the whole task. Irreversible.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /comment/{{params.comment_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `comment_id` | string | **yes** | Comment id to delete, from list_task_comments. |

Also retrieved by: "remove that note on this clickup task", "take down what I posted on this clickup ticket by mistake", "delete a remark on this clickup ticket".

### `clickup.create_checklist`

Add a new checklist to a ClickUp task. Use when the user wants to break a ClickUp task into steps, or start a checklist on it, before adding items with create_checklist_item.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /task/{{params.task_id}}/checklist`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `name` | string | **yes** | Checklist title. |
| `task_id` | string | **yes** | Task id the checklist belongs to. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `checklist` | object |  |
| `checklist.id` | string |  |
| `checklist.name` | string |  |

Also retrieved by: "break this clickup ticket into steps", "add a checklist to this clickup to-do", "start a step-by-step list on this clickup card".

### `clickup.delete_checklist`

Permanently delete a ClickUp checklist and every item on it. Use when the user wants to delete or remove a whole checklist from a ClickUp task, not one item on it. Irreversible.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /checklist/{{params.checklist_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `checklist_id` | string | **yes** | Checklist id to delete. |

Also retrieved by: "remove this whole checklist from a clickup task", "get rid of a clickup checklist entirely", "wipe out the steps on this clickup ticket".

### `clickup.create_checklist_item`

Add a new item to an existing ClickUp checklist. Use when the user wants to add a step, or a checklist line, to a ClickUp checklist that already exists.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /checklist/{{params.checklist_id}}/checklist_item`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `assignee` | integer | no | User id to assign the item to. Optional. |
| `checklist_id` | string | **yes** | Checklist id the item belongs to. |
| `name` | string | **yes** | Checklist item text. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `checklist` | object |  |
| `checklist.id` | string |  |

Also retrieved by: "add a step to this clickup checklist", "add a new clickup checklist line", "put another item on this clickup list of steps".

### `clickup.update_checklist_item`

Rename a ClickUp checklist item, reassign it, or check it off. Use when the user wants to mark a step done, reopen it, or edit its text on a ClickUp task.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `PUT /checklist/{{params.checklist_id}}/checklist_item/{{params.checklist_item_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `assignee` | integer | no | New assignee user id. |
| `checklist_id` | string | **yes** | Checklist id the item belongs to. |
| `checklist_item_id` | string | **yes** | Checklist item id to edit. |
| `name` | string | no | New item text. |
| `resolved` | boolean | no | Mark the item checked off (true) or unchecked (false). |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `checklist` | object |  |
| `checklist.id` | string |  |

Also retrieved by: "check off this clickup checklist step", "mark this clickup checklist item done", "reopen a clickup checklist step that was closed", "rename this clickup checklist line".

### `clickup.delete_checklist_item`

Permanently delete one item from a ClickUp checklist, leaving the rest of the checklist in place. Use when the user wants to delete or remove a single checklist item, not the whole checklist. Irreversible.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /checklist/{{params.checklist_id}}/checklist_item/{{params.checklist_item_id}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `checklist_id` | string | **yes** | Checklist id the item belongs to. |
| `checklist_item_id` | string | **yes** | Checklist item id to delete. |

Also retrieved by: "remove this one step from a clickup checklist", "get rid of a single clickup checklist line", "delete an item from this clickup checklist".

### `clickup.list_space_tags`

List the tags defined in a ClickUp space, e.g. "urgent" or "blocked". Use when the user asks what labels or tags exist in ClickUp, or to check a tag name before add_tag_to_task.

Class `read` (reads only). No scopes beyond the connection's defaults. Calls `GET /space/{{params.space_id}}/tag`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `space_id` | string | **yes** | Space id, from list_spaces. |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `tags` | array of object |  |
| `tags[].name` | string |  |
| `tags[].tag_bg` | string |  |
| `tags[].tag_fg` | string |  |

Also retrieved by: "what labels exist in this clickup space", "show me every clickup tag we have set up here", "find the clickup tag name for urgent".

### `clickup.create_space_tag`

Create a new tag in a ClickUp space. Use when the user wants a new label that does not exist yet in ClickUp, before applying it with add_tag_to_task.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /space/{{params.space_id}}/tag`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `name` | string | **yes** | Tag name. |
| `space_id` | string | **yes** | Space id the tag belongs to. |
| `tag_bg` | string | no | Background color, e.g. "#FF0000". |
| `tag_fg` | string | no | Foreground (text) color, e.g. "#FFFFFF". |

Result fields (the payload is trimmed to these before it reaches the model):

| Field | Type | Notes |
| --- | --- | --- |
| `tag` | object |  |
| `tag.name` | string |  |

Also retrieved by: "make a new label called blocked in clickup", "set up a fresh tag in this clickup space", "add a new clickup marker we can apply to tickets".

### `clickup.delete_space_tag`

Permanently delete a tag from a ClickUp space, removing it from every task that carried it. Use when the user wants to delete or remove a ClickUp tag itself, not just untag one task. Irreversible.

Class `destructive` (held by the mutation gate until the call's own arguments carry `"confirm": true`). No scopes beyond the connection's defaults. Calls `DELETE /space/{{params.space_id}}/tag/{{params.tag_name}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `space_id` | string | **yes** | Space id the tag belongs to. |
| `tag_name` | string | **yes** | Tag name to delete, from list_space_tags. |

Also retrieved by: "remove this label from the clickup space entirely", "get rid of a clickup tag for good", "wipe out a clickup marker we no longer use".

### `clickup.add_tag_to_task`

Apply an existing tag to a ClickUp task. Use when the user wants to label, flag, or mark a ClickUp task with a tag that already exists. To make a new tag first use create_space_tag.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `POST /task/{{params.task_id}}/tag/{{params.tag_name}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `tag_name` | string | **yes** | Tag name to apply, from list_space_tags. |
| `task_id` | string | **yes** | Task id to tag. |

Also retrieved by: "flag this clickup ticket as urgent", "label this clickup to-do with the blocked marker", "put an existing clickup tag on this card".

### `clickup.remove_tag_from_task`

Remove a tag from one ClickUp task without deleting the tag itself. Use when the user wants to untag, unflag, or unlabel a single ClickUp task.

Class `write` (writes, no confirmation needed). No scopes beyond the connection's defaults. Calls `DELETE /task/{{params.task_id}}/tag/{{params.tag_name}}`.

Arguments:

| Argument | Type | Required | Notes |
| --- | --- | --- | --- |
| `tag_name` | string | **yes** | Tag name to remove, from list_space_tags. |
| `task_id` | string | **yes** | Task id to untag. |

Also retrieved by: "unflag this clickup ticket", "take the urgent label off this clickup to-do", "clear a clickup marker from this card".
