← All integrations

ClickUp

Let an agent run the follow-ups in ClickUp without rewriting the plan. It finds and reads tasks, creates and updates them, changes status, tags, comments and works checklists, and deleting a task or assigning a person can wait for a person.

ClickUpsecret · CLICKUP
host
api.clickup.com
connect
API key, per user
  • Create task

    clickup-create-task

  • Update task

    clickup-update-task

  • Set task status

    clickup-set-task-status

  • Add assignee

    clickup-add-assignee

writes are off until switched on

Reads and writes in ClickUp. Writes are off until you switch them on.

Each one is a named operation from the pack. Reads change nothing.

Writes

  • Create task

    read back

    clickup-create-task

    Create one task in a list, with a name and optionally a description, status, priority, due date, assignees, tags or a parent task (which makes it a subtask). ClickUp notifies the assignees. Returns the task with its id.

  • Update task

    read back

    clickup-update-task

    Change a task's name, description, priority or due date. Fields left out stay as they are. Use set-task-status for the status and add-assignee or remove-assignee for people.

  • Set task status

    read back

    clickup-set-task-status

    Move a task to another status of its list, for example to close it. Take the status names from get-list. ClickUp can run the list's automations on a status change.

  • Add assignee

    read back

    clickup-add-assignee

    Assign one person to a task, keeping its other assignees. ClickUp notifies them.

  • Remove assignee

    read back

    clickup-remove-assignee

    Take one person off a task, keeping its other assignees.

  • Comment on task

    read back

    clickup-comment-on-task

    Add one comment to a task, as plain text. ClickUp notifies the task's assignees and watchers. Returns the comment's id.

  • Add tag

    read back

    clickup-add-tag

    Put one existing tag of the task's space on a task. Take the name from list-space-tags.

  • Remove tag

    read back

    clickup-remove-tag

    Take one tag off a task. The tag stays in the space.

  • Create checklist

    read back

    clickup-create-checklist

    Add an empty checklist to a task. Returns the checklist with its id; add items with add-checklist-item.

  • Add checklist item

    read back

    clickup-add-checklist-item

    Add one item to a checklist, optionally assigned to a person. The checklist id comes from get-task (checklists[].id) or create-checklist. Returns the checklist with its items.

  • Resolve checklist item

    acknowledged

    clickup-resolve-checklist-item

    Mark one checklist item done, or not done with resolved: false. The ids come from get-task (checklists[].id and checklists[].items[].id).

  • Delete task

    acknowledged

    clickup-delete-task

    Delete one task. ClickUp moves it to the workspace's trash, where a person can restore it in the ClickUp app.

Reads

  • List workspaces

    clickup-list-workspaces

    List the workspaces the token can reach, with each one's id, name and members (user id and name). A workspace id is the team_id the other actions take. ClickUp returns them all at once, with no paging; a workspace with very many members can be cut at 64 KB.

  • List spaces

    clickup-list-spaces

    List the spaces in one workspace, with each one's id, name, statuses and enabled features. ClickUp returns them all at once, with no paging.

  • List folders

    clickup-list-folders

    List the folders in one space, with each one's id, name, task count and the lists inside it. ClickUp returns them all at once, with no paging.

  • List lists

    clickup-list-lists

    List the lists in one folder, with each one's id, name, task count, status and due date. ClickUp returns them all at once, with no paging.

  • List folderless lists

    clickup-list-folderless-lists

    List the lists that sit directly in a space, outside any folder, with the same fields as list-lists. ClickUp returns them all at once, with no paging.

  • Get list

    clickup-get-list

    Get one list: name, description, task count, due date, folder, space, and the statuses its tasks can take (statuses[].status). Use those names with set-task-status and the status filters.

  • List tasks

    clickup-list-tasks

    List the tasks whose home is one list, with name, status, assignees, tags, priority, due date and URL. Filter by status, assignee, tag and dates; closed tasks and subtasks are left out unless asked for. Pass page (from 0) for the next page until last_page is true. ClickUp fixes the page at 100 tasks and has no smaller page size, so a page of long tasks can be cut at 64 KB: narrow it with the filters.

  • Search tasks

    clickup-search-tasks

    Find tasks across a workspace, narrowed to a space, folder or list, and by status, assignee, tag and dates. Returns the same fields as list-tasks. Closed tasks and subtasks are left out unless asked for. Pass page (from 0) for the next page; an empty tasks list means there are no more. ClickUp fixes the page at 100 tasks and has no smaller page size, so a page of long tasks can be cut at 64 KB: narrow it with the filters.

  • Get task

    clickup-get-task

    Get one task: name, description, status, assignees, watchers, tags, priority, dates, checklists with their items, custom fields, parent, list, folder, space and URL. Pass include_subtasks for its subtasks, and include_markdown_description for the description in Markdown. A very long task can be cut at 64 KB.

  • List task comments

    clickup-list-task-comments

    List a task's comments, 25 at a time, newest to oldest, with each one's id, text, author, date and reply count. For older comments, pass the date and id of the oldest comment on this page as start and start_id.

  • List comment replies

    clickup-list-comment-replies

    List the replies in one comment's thread, with each reply's id, text, author and date. The comment id comes from list-task-comments. ClickUp returns the whole thread at once, with no paging.

  • List space tags

    clickup-list-space-tags

    List the tags of one space, with each tag's name and colours. Use these names with add-tag, remove-tag and the tag filters. ClickUp returns them all at once, with no paging.

How do users connect? Each one brings their own ClickUp.

  1. 1.Call for the userYour server invokes the action for the signed-in user. Without a ClickUp connection, the SDK throws EndUserNotConnectedError with a connect link.
  2. 2.The user pastes a keyThe link opens a form that shows where in ClickUp's settings to create the key. The link lasts 10 minutes and works once.
  3. 3.Anlyon checks itThe key is checked with ClickUp before it is kept, and bound to api.clickup.com. It is never shown back.
  4. 4.Your server confirmsYour server confirms the connection for the user who is signed in, and the call goes through.

Guardrails. Suggested limits and approvals, for you to review.

Suggested limits

  • 100 tasks created a day
  • 200 task updates a day
  • 200 status changes a day
  • 50 assignees added a day
  • 50 assignees removed a day
  • 200 comments a day
  • 200 tags added a day
  • 200 tags removed a day
  • 50 checklists created a day
  • 200 checklist items added a day
  • 200 checklist items resolved a day
  • 20 tasks deleted a day

Suggested approvals

  • A person approves deleting a task
  • A person approves commenting on a task
  • A person approves assigning a person
  • A person approves unassigning a person

What the key must allow

  • A personal API token, which starts with pk_
  • It acts as you in every workspace you belong to

Good to know

  • Create the token from an account that is a member of only the spaces your agent should reach.
  • ClickUp has no idempotency key for these writes. Anlyon sends each one once and never repeats it.

For your own account

  1. 1.In ClickUp, open your avatar, Settings, Apps, and generate an API token.
  2. 2.In Anlyon, open Actions, then Integrations, choose ClickUp and paste the token.
  3. 3.Anlyon checks the token with ClickUp before storing it. It becomes a secret named CLICKUP, bound to api.clickup.com.

ClickUp in your code. For one of your users, or for your own account.

Act for one of your users from your server, or connect your company's own ClickUp with the CLI.

clickup.ts
import { Client, EndUserNotConnectedError } from "@anlyonhq/sdk";const anlyon = new Client({ apiKey: process.env.ANLYON_API_KEY! });try {  const { data } = await anlyon    .forUser(session.userId)    .actions.invoke("clickup-create-task", {      list_id: "901204567890",      name: "Follow up with Acme"    });  return { status: "done", grade: data.grade };} catch (error) {  if (error instanceof EndUserNotConnectedError) {    // The user connects their own ClickUp, then you call again.    return { status: "connect_required", url: error.connectUrl };  }  throw error;}

Let your agent act for your users, safely.

A few lines of server code, then send a user a connect link. Nothing to host.

$ claude mcp add --transport http anlyon https://api.anlyon.com/mcp