ConnectGet API Key API Key https://gateway.mewcp.com/clickup/mcp Copy Infrastructure You Can Trust for Agentic Products
© 2026 MewCP. All rights reserved.
Manage tasks, projects, and team workflows in ClickUp through the Model Context Protocol.
A Model Context Protocol (MCP) server that exposes ClickUp's API for managing workspaces, tasks, time tracking, and team collaboration.
Overview
The CL ClickUp MCP Server provides stateless, multi-user access to the ClickUp API with server-side credential injection:
Full workspace hierarchy management — spaces, folders, lists, and tasks
Time tracking, goals, checklists, custom fields, tags, and views
Team collaboration tools — comments, members, webhooks, docs, and chat
Perfect for:
Automating task creation, updates, and assignment from AI workflows
Querying and reporting across projects, sprints, and workspaces
Integrating ClickUp data into custom pipelines and productivity tools
Utility
ping → Health check for the MCP serverVerifies the server is running and reachable. No credentials required.
Inputs:
No inputs required.
Output:
{
"status" : "ok" ,
"server" : "CL ClickUp MCP Server" ,
"message" : "Server is running successfully!" ,
"api_base" : "https://api.clickup.com/api/v2"
} usage Example:
Authorization
get_authorized_user → Get the authenticated user's profileReturns the ClickUp user associated with the injected OAuth access token.
Inputs:
No inputs required.
Output:
{
"user" : {
"id" : 1234567 ,
"username" : "jane_doe" ,
"email" : "jane@example.com" ,
"color" : "#7B68EE" ,
"profilePicture" : "https://..."
}
} usage Example:
get_authorized_teams → List all accessible WorkspacesReturns all ClickUp Workspaces (teams) the authenticated user has access to.
Inputs:
No inputs required.
Output:
{
"teams" : [
{
"id" : "9876543" ,
"name" : "My Workspace" ,
"color" : "#536DFE" ,
"members" : [{ "user" : { "id" : 1234567 , "username" : "jane_doe" } }]
}
Spaces
get_spaces → List all Spaces in a WorkspaceReturns all Spaces within the specified Workspace, with optional filtering for archived spaces.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
archived (boolean, optional) → Include archived spaces. Default: false .
Output:
{
"spaces" : [
{
"id" : "90110011" ,
"name" : "Engineering" ,
"archived" : false ,
get_space → Get a specific SpaceReturns full details for a single Space by its ID.
Inputs:
space_id (string, required) → The ID of the Space.
Output:
{
"id" : "90110011" ,
"name" : "Engineering" ,
"archived" : false ,
"multiple_assignees" : true ,
"features" : { "due_dates" : { "enabled" : true }, "time_tracking" : {
create_space → Create a new Space in a WorkspaceCreates a Space with the specified name and feature configuration inside a Workspace.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
body (string, required) → JSON string of the space definition.
Body fields:
name (string, required) → Space name.
multiple_assignees (boolean, optional) → Allow multiple assignees on tasks.
features (object, optional) → Feature flags (e.g. due_dates , time_tracking ).
Output:
update_space → Update an existing SpaceUpdates the name, settings, or feature flags of an existing Space.
Inputs:
space_id (string, required) → The ID of the Space to update.
body (string, required) → JSON string of fields to update.
Body fields:
name (string, optional) → New Space name.
multiple_assignees (boolean, optional) → Allow multiple assignees.
features (object, optional) → Updated feature flags.
Output:
delete_space → Delete a SpacePermanently deletes a Space and all its contents.
Inputs:
space_id (string, required) → The ID of the Space to delete.
Output:
usage Example:
POST /mcp/clickup/delete_space
{
"space_id" : "90110011"
}
Folders
get_folders → List all Folders in a SpaceReturns all Folders within the specified Space.
Inputs:
space_id (string, required) → The ID of the Space.
archived (boolean, optional) → Include archived folders. Default: false .
Output:
{
"folders" : [
{ "id" : "78901234" , "name" : "Sprint 1" , "task_count" : "12" , "lists" : [] }
]
get_folder → Get a specific FolderReturns full details for a single Folder by its ID.
Inputs:
folder_id (string, required) → The ID of the Folder.
Output:
{
"id" : "78901234" ,
"name" : "Sprint 1" ,
"task_count" : "12" ,
"lists" : [{ "id" : "56789012" , "name" : "Backlog" }]
}
create_folder → Create a new Folder in a SpaceCreates a named Folder inside the specified Space.
Inputs:
space_id (string, required) → The ID of the Space.
body (string, required) → JSON string of the folder definition.
Body fields:
name (string, required) → Folder name.
Output:
{
"id" : "78901299" ,
"name" : "Sprint 2" ,
"task_count" : "0"
}
update_folder → Update an existing FolderRenames or modifies an existing Folder.
Inputs:
folder_id (string, required) → The ID of the Folder to update.
body (string, required) → JSON string of fields to update.
Body fields:
name (string, optional) → New Folder name.
Output:
{
"id" : "78901234" ,
"name" : "Sprint 1 (Completed)"
} usage Example:
delete_folder → Delete a FolderPermanently deletes a Folder and all its lists.
Inputs:
folder_id (string, required) → The ID of the Folder to delete.
Output:
usage Example:
POST /mcp/clickup/delete_folder
{
"folder_id" : "78901234"
}
Lists
get_lists → List all Lists in a FolderReturns all Lists within the specified Folder.
Inputs:
folder_id (string, required) → The ID of the Folder.
archived (boolean, optional) → Include archived lists. Default: false .
Output:
{
"lists" : [
{ "id" : "56789012" , "name" : "Backlog" , "task_count" : 8 , "status" : null
get_folderless_lists → List all Lists not in a FolderReturns Lists that belong directly to a Space (not inside any Folder).
Inputs:
space_id (string, required) → The ID of the Space.
archived (boolean, optional) → Include archived lists. Default: false .
Output:
{
"lists" : [
{ "id" : "56789099" , "name" : "Inbox" , "task_count" : 3 }
]
}
get_list → Get a specific ListReturns full details for a single List by its ID.
Inputs:
list_id (string, required) → The ID of the List.
Output:
{
"id" : "56789012" ,
"name" : "Backlog" ,
"task_count" : 8 ,
"due_date" : null ,
"priority" : null
} usage Example:
create_list → Create a new List in a FolderCreates a named List inside the specified Folder.
Inputs:
folder_id (string, required) → The ID of the Folder.
body (string, required) → JSON string of the list definition.
Body fields:
name (string, required) → List name.
content (string, optional) → List description.
due_date (integer, optional) → Due date as Unix timestamp in ms.
priority (integer, optional) → Priority level (1–4).
assignee (integer, optional) → Default assignee user ID.
status (string, optional) → List status.
create_folderless_list → Create a List directly in a SpaceCreates a List at the Space level, not inside any Folder.
Inputs:
space_id (string, required) → The ID of the Space.
body (string, required) → JSON string of the list definition (same fields as create_list ).
Output:
{
"id" : "56789100" ,
"name" : "General"
} usage Example:
update_list → Update an existing ListUpdates the name, description, due date, or other properties of a List.
Inputs:
list_id (string, required) → The ID of the List to update.
body (string, required) → JSON string of fields to update.
Body fields:
name (string, optional) → New List name.
content (string, optional) → Updated description.
due_date (integer, optional) → New due date (Unix ms).
priority (integer, optional) → Priority level (1–4).
assignee (integer, optional) → Updated default assignee.
unset_status (boolean, optional) → Clear the list status.
delete_list → Delete a ListPermanently deletes a List and all its tasks.
Inputs:
list_id (string, required) → The ID of the List to delete.
Output:
usage Example:
POST /mcp/clickup/delete_list
{
"list_id" : "56789012"
}
Tasks
get_tasks → List tasks in a ListReturns tasks in the specified List with optional pagination and filtering.
Inputs:
list_id (string, required) → The ID of the List.
archived (boolean, optional) → Include archived tasks. Default: false .
include_closed (boolean, optional) → Include closed tasks. Default: false .
page (integer, optional) → Page number (0-indexed). Default: 0 .
order_by (string, optional) → Sort field: id , , , .
get_task → Get a specific taskReturns full details for a single task by its ID.
Inputs:
task_id (string, required) → The ID of the task.
include_subtasks (boolean, optional) → Include subtasks in response. Default: false .
include_markdown_description (boolean, optional) → Return description as markdown. Default: false .
Output:
{
"id" : "abc123" ,
"name" : "Fix login bug" ,
"description"
create_task → Create a new task in a ListCreates a task with the specified properties inside a List.
Inputs:
list_id (string, required) → The ID of the List.
body (string, required) → JSON string of the task definition.
Body fields:
name (string, required) → Task name.
description (string, optional) → Task description (plain text).
markdown_description (string, optional) → Task description in markdown.
assignees (array of integers, optional) → List of assignee user IDs.
tags (array of strings, optional) → Tag names to apply.
status (string, optional) → Initial status name.
update_task → Update an existing taskUpdates any combination of task fields including name, status, priority, assignees, and due date.
Inputs:
task_id (string, required) → The ID of the task to update.
body (string, required) → JSON string of fields to update.
Body fields:
name (string, optional) → New task name.
description (string, optional) → Updated description.
status (string, optional) → New status name.
priority (integer, optional) → New priority (1–4, or null to clear).
due_date (integer, optional) → New due date (Unix ms, or to clear).
delete_task → Delete a taskPermanently deletes a task.
Inputs:
task_id (string, required) → The ID of the task to delete.
Output:
usage Example:
POST /mcp/clickup/delete_task
{
"task_id" : "abc123"
}
get_filtered_team_tasks → List tasks across a Workspace with filtersReturns tasks across an entire Workspace with optional filtering by space, folder, list, status, assignee, and date ranges.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
page (integer, optional) → Page number (0-indexed). Default: 0 .
order_by (string, optional) → Sort field: id , created , updated , due_date .
reverse (boolean, optional) → Reverse the sort order.
(boolean, optional) → Include subtasks.
get_task_comments → List comments on a taskReturns all comments on the specified task, with optional pagination by date or comment ID.
Inputs:
task_id (string, required) → The ID of the task.
start (integer, optional) → Return comments after this Unix ms timestamp.
start_id (string, optional) → Return comments after this comment ID.
Output:
{
"comments" : [
{
"id" : "55001122" ,
"comment_text" : "Looks good, merging tomorrow." ,
"user" : { "id"
create_task_comment → Post a comment on a taskAdds a new comment to the specified task.
Inputs:
task_id (string, required) → The ID of the task.
body (string, required) → JSON string of the comment.
Body fields:
comment_text (string, required) → The comment text.
assignee (integer, optional) → Assign the comment to a user ID.
notify_all (boolean, optional) → Notify all task watchers. Default: false .
Output:
get_list_comments → List comments on a ListReturns all comments posted on the specified List.
Inputs:
list_id (string, required) → The ID of the list.
start (integer, optional) → Return comments after this Unix ms timestamp.
start_id (string, optional) → Return comments after this comment ID.
Output:
{
"comments" : [
{
"id" : "55001123" ,
"comment_text" : "This list needs triage." ,
"user" : { "id" :
create_list_comment → Post a comment on a ListAdds a new comment to the specified List.
Inputs:
list_id (string, required) → The ID of the list.
body (string, required) → JSON string of the comment.
Body fields:
comment_text (string, required) → The comment text.
notify_all (boolean, optional) → Notify all list members. Default: false .
Output:
{
"id" : "55001200" ,
"comment" : [{
update_comment → Update an existing commentEdits the text or resolved state of a comment.
Inputs:
comment_id (string, required) → The ID of the comment to update.
body (string, required) → JSON string of fields to update.
Body fields:
comment_text (string, optional) → Updated comment text.
assignee (integer, optional) → Updated assignee user ID.
resolved (boolean, optional) → Mark or unmark as resolved.
Output:
delete_comment → Delete a commentPermanently deletes a comment.
Inputs:
comment_id (string, required) → The ID of the comment to delete.
Output:
usage Example:
POST /mcp/clickup/delete_comment
{
"comment_id" : "55001122"
}
Time Tracking
get_time_entries → List time entries in a WorkspaceReturns time entries within an optional date range, filterable by assignee.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
start_date (integer, optional) → Start of range as Unix ms timestamp.
end_date (integer, optional) → End of range as Unix ms timestamp.
assignee (string, optional) → Filter by user ID.
include_task_tags (boolean, optional) → Include task tags in response. Default: false .
include_location_names (boolean, optional) → Include space/folder/list names. Default: false .
Output:
get_single_time_entry → Get a specific time entryReturns full details for a single time entry.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
timer_id (string, required) → The ID of the time entry.
Output:
{
"data" : {
"id" : "1234567890" ,
"task" : { "id" : "abc123" },
"duration" : "3600000" ,
"start" : "1717100000000" ,
create_time_entry → Create a manual time entryLogs time against a task with explicit start time and duration.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
body (string, required) → JSON string of the time entry.
Body fields:
start (integer, required) → Start time as Unix ms timestamp.
duration (integer, required) → Duration in milliseconds.
tid (string, optional) → Task ID to log time against.
description (string, optional) → Note about the work done.
billable (boolean, optional) → Mark as billable.
Output:
update_time_entry → Update a time entryModifies the start time, duration, task, or description of an existing time entry.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
timer_id (string, required) → The ID of the time entry to update.
body (string, required) → JSON string of fields to update.
Body fields:
start (integer, optional) → Updated start time (Unix ms).
duration (integer, optional) → Updated duration (ms).
description (string, optional) → Updated description.
tid (string, optional) → Updated task ID.
billable (boolean, optional) → Updated billable flag.
delete_time_entry → Delete a time entryPermanently deletes a time entry.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
timer_id (string, required) → The ID of the time entry to delete.
Output:
usage Example:
POST /mcp/clickup/delete_time_entry
{
"team_id" : "9876543" ,
start_time_entry → Start a running timerStarts a live timer optionally linked to a task.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
body (string, required) → JSON string of the timer details.
Body fields:
tid (string, optional) → Task ID to track time against.
description (string, optional) → Note about what's being worked on.
billable (boolean, optional) → Mark as billable.
Output:
stop_time_entry → Stop the running timerStops the currently running timer for the authenticated user.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
Output:
{
"data" : {
"id" : "9876543211" ,
"start" : "1717200000000" ,
"end" : "1717203600000" ,
"duration" : "3600000"
}
} usage Example:
get_running_time_entry → Get the currently running timerReturns the active timer for the authenticated user, if one is running.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
Output:
{
"data" : {
"id" : "9876543211" ,
"start" : "1717200000000" ,
"task" : { "id" : "abc123" , "name" : "Fix login bug" }
}
}
Members
get_workspace_members → List all members in a WorkspaceReturns the Workspace details including all member profiles.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
Output:
{
"team" : {
"id" : "9876543" ,
"name" : "My Workspace" ,
"members" : [
{ "user" : { "id" : 1234567 , "username" : "jane_doe" , "email" :
get_task_members → List members assigned to a taskReturns all users who are assignees or watchers of the specified task.
Inputs:
task_id (string, required) → The ID of the task.
Output:
{
"members" : [
{ "id" : 1234567 , "username" : "jane_doe" , "email" : "jane@example.com" }
]
} usage Example:
get_list_members → List members with access to a ListReturns all users who have access to the specified List.
Inputs:
list_id (string, required) → The ID of the list.
Output:
{
"members" : [
{ "id" : 1234567 , "username" : "jane_doe" , "email" : "jane@example.com" }
]
} usage Example:
get_space_tags → List all tags in a SpaceReturns all tags defined within the specified Space.
Inputs:
space_id (string, required) → The ID of the Space.
Output:
{
"tags" : [
{ "name" : "bug" , "tag_fg" : "#FFFFFF" , "tag_bg" : "#FF0000" },
{ "name" : "feature" , "tag_fg" : "#FFFFFF" , "tag_bg" :
create_space_tag → Create a tag in a SpaceCreates a new named tag with custom foreground and background colors.
Inputs:
space_id (string, required) → The ID of the Space.
body (string, required) → JSON string of the tag definition.
Body fields:
tag.name (string, required) → Tag name.
tag.tag_fg (string, optional) → Foreground color hex (e.g. #FFFFFF ).
tag.tag_bg (string, optional) → Background color hex (e.g. #FF 0000 ).
Output:
update_space_tag → Update a tag in a SpaceUpdates the name or colors of an existing tag.
Inputs:
space_id (string, required) → The ID of the Space.
tag_name (string, required) → The current name of the tag to update.
body (string, required) → JSON string of tag fields to update.
Body fields:
tag.name (string, optional) → New tag name.
tag.tag_fg (string, optional) → New foreground color hex.
tag.tag_bg (string, optional) → New background color hex.
Output:
delete_space_tag → Delete a tag from a SpaceRemoves a tag from the Space and detaches it from all tasks.
Inputs:
space_id (string, required) → The ID of the Space.
tag_name (string, required) → The name of the tag to delete.
Output:
usage Example:
POST /mcp/clickup/delete_space_tag
{
"space_id" : "90110011"
add_tag_to_task → Apply a tag to a taskAttaches an existing Space tag to the specified task.
Inputs:
task_id (string, required) → The ID of the task.
tag_name (string, required) → The name of the tag to apply.
Output:
usage Example:
POST /mcp/clickup/add_tag_to_task
{
"task_id" : "abc123" ,
remove_tag_from_task → Remove a tag from a taskDetaches a tag from the specified task.
Inputs:
task_id (string, required) → The ID of the task.
tag_name (string, required) → The name of the tag to remove.
Output:
usage Example:
POST /mcp/clickup/remove_tag_from_task
{
"task_id" : "abc123" ,
Goals
get_goals → List all goals in a WorkspaceReturns all goals in the Workspace, optionally including completed ones.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
include_completed (boolean, optional) → Include completed goals. Default: false .
Output:
{
"goals" : [
{
"id" : "goal001" ,
"name" : "Q2 OKRs" ,
"due_date" : "1719792000000" ,
get_goal → Get a specific goalReturns full details for a single goal including key results.
Inputs:
goal_id (string, required) → The ID of the goal.
Output:
{
"goal" : {
"id" : "goal001" ,
"name" : "Q2 OKRs" ,
"percent_completed" : 45 ,
"key_results" : [],
"owners" : [{ "id" : 1234567 }]
}
}
create_goal → Create a new goalCreates a goal with a name, due date, owners, and optional color.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
body (string, required) → JSON string of the goal definition.
Body fields:
name (string, required) → Goal name.
due_date (integer, required) → Due date as Unix ms timestamp.
description (string, optional) → Goal description.
multiple_owners (boolean, optional) → Allow multiple owners.
owners (array of integers, optional) → List of owner user IDs.
color (string, optional) → Goal color hex.
update_goal → Update a goalUpdates the name, description, due date, or owners of a goal.
Inputs:
goal_id (string, required) → The ID of the goal to update.
body (string, required) → JSON string of fields to update.
Body fields:
name (string, optional) → New goal name.
due_date (integer, optional) → New due date (Unix ms).
description (string, optional) → Updated description.
rem_owners (array of integers, optional) → Owner user IDs to remove.
add_owners (array of integers, optional) → Owner user IDs to add.
color (string, optional) → Updated color hex.
delete_goal → Delete a goalPermanently deletes a goal.
Inputs:
goal_id (string, required) → The ID of the goal to delete.
Output:
usage Example:
POST /mcp/clickup/delete_goal
{
"goal_id" : "goal001"
}
Checklists
create_checklist → Create a checklist on a taskAdds a named checklist to the specified task.
Inputs:
task_id (string, required) → The ID of the task.
body (string, required) → JSON string of the checklist definition.
Body fields:
name (string, required) → Checklist name.
Output:
{
"checklist" : {
"id" : "chk001" ,
"name" : "Pre-launch QA" ,
"task_id" : "abc123"
update_checklist → Update a checklistRenames a checklist or changes its position.
Inputs:
checklist_id (string, required) → The ID of the checklist.
body (string, required) → JSON string of fields to update.
Body fields:
name (string, optional) → New checklist name.
position (integer, optional) → Display position (0-indexed).
Output:
{
"checklist" : {
"id" : "chk001" ,
"name" : "Pre-launch QA (Final)"
delete_checklist → Delete a checklistPermanently deletes a checklist and all its items.
Inputs:
checklist_id (string, required) → The ID of the checklist to delete.
Output:
usage Example:
POST /mcp/clickup/delete_checklist
{
"checklist_id" : "chk001"
}
create_checklist_item → Add an item to a checklistAdds a new item to the specified checklist with optional assignee.
Inputs:
checklist_id (string, required) → The ID of the checklist.
body (string, required) → JSON string of the checklist item.
Body fields:
name (string, required) → Item text.
assignee (integer, optional) → User ID to assign the item to.
Output:
{
"checklist" : {
"id" : "chk001" ,
"items" : [
update_checklist_item → Update a checklist itemEdits the text, assignee, or resolved state of a checklist item.
Inputs:
checklist_id (string, required) → The ID of the checklist.
checklist_item_id (string, required) → The ID of the checklist item.
body (string, required) → JSON string of fields to update.
Body fields:
name (string, optional) → Updated item text.
assignee (integer, optional) → Updated assignee user ID.
resolved (boolean, optional) → Mark as complete or incomplete.
parent (string, optional) → Parent item ID (to nest items).
Output:
delete_checklist_item → Delete a checklist itemPermanently removes an item from a checklist.
Inputs:
checklist_id (string, required) → The ID of the checklist.
checklist_item_id (string, required) → The ID of the checklist item to delete.
Output:
usage Example:
POST /mcp/clickup/delete_checklist_item
{
"checklist_id" : "chk001"
Custom Fields
get_accessible_custom_fields → List custom fields for a ListReturns all custom fields accessible within the specified List.
Inputs:
list_id (string, required) → The ID of the list.
Output:
{
"fields" : [
{
"id" : "field001" ,
"name" : "Story Points" ,
"type" : "number" ,
"type_config" : { "precision" : 0 },
"required" : false
set_custom_field_value → Set a custom field value on a taskAssigns a value to a specific custom field on a task. The value format depends on the field type.
Inputs:
task_id (string, required) → The ID of the task.
field_id (string, required) → The ID of the custom field.
body (string, required) → JSON string containing the value.
Body fields:
value (any, required) → The value to set. Type depends on the field: string for text, integer for number, boolean for checkbox, ISO date string for date fields.
Output:
remove_custom_field_value → Clear a custom field value from a taskRemoves the value of a custom field from a task, resetting it to empty.
Inputs:
task_id (string, required) → The ID of the task.
field_id (string, required) → The ID of the custom field to clear.
Output:
usage Example:
POST /mcp/clickup/remove_custom_field_value
{
"task_id" :
Views
get_team_views → List views at the Workspace levelReturns all views defined at the top level of a Workspace.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
Output:
{
"views" : [
{ "id" : "view001" , "name" : "All Tasks" , "type" : "list" },
{ "id" : "view002" , "name" : "Gantt" , "type" :
get_space_views → List views in a SpaceReturns all views defined within the specified Space.
Inputs:
space_id (string, required) → The ID of the Space.
Output:
{
"views" : [
{ "id" : "view003" , "name" : "Sprint Board" , "type" : "board" }
]
} usage Example:
get_folder_views → List views in a FolderReturns all views defined within the specified Folder.
Inputs:
folder_id (string, required) → The ID of the Folder.
Output:
{
"views" : [
{ "id" : "view004" , "name" : "Sprint Timeline" , "type" : "gantt" }
]
} usage Example:
get_list_views → List views in a ListReturns all views defined within the specified List.
Inputs:
list_id (string, required) → The ID of the List.
Output:
{
"views" : [
{ "id" : "view005" , "name" : "Task List" , "type" : "list" }
]
} usage Example:
get_view → Get a specific viewReturns full configuration details for a single view.
Inputs:
view_id (string, required) → The ID of the view.
Output:
{
"view" : {
"id" : "view001" ,
"name" : "All Tasks" ,
"type" : "list" ,
"grouping" : { "field" : "status" },
"filters" : {}
}
}
get_view_tasks → List tasks in a viewReturns the tasks visible in the specified view, with pagination support.
Inputs:
view_id (string, required) → The ID of the view.
page (integer, optional) → Page number (0-indexed). Default: 0 .
Output:
{
"tasks" : [
{ "id" : "abc123" , "name" : "Fix login bug" , "status" : { "status" : "in progress" } }
Webhooks
get_webhooks → List all webhooks in a WorkspaceReturns all registered webhooks for the specified Workspace.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
Output:
{
"webhooks" : [
{
"id" : "wh001" ,
"endpoint" : "https://example.com/webhook" ,
"events" : [ "taskCreated" , "taskUpdated" ],
"health" : { "status" : "active" }
create_webhook → Register a new webhookCreates a webhook that fires on specified ClickUp events.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
body (string, required) → JSON string of the webhook definition.
Body fields:
endpoint (string, required) → URL to send webhook payloads to.
events (array of strings, required) → Events to subscribe to (e.g. taskCreated , taskUpdated , taskDeleted , listCreated , spaceCreated ).
(integer, optional) → Limit events to a specific Space.
update_webhook → Update a webhookUpdates the endpoint URL, event subscriptions, or status of a webhook.
Inputs:
webhook_id (string, required) → The ID of the webhook.
body (string, required) → JSON string of fields to update.
Body fields:
endpoint (string, optional) → New endpoint URL.
events (array of strings, optional) → Updated event list.
status (string, optional) → active or inactive .
Output:
delete_webhook → Delete a webhookPermanently removes a webhook registration.
Inputs:
webhook_id (string, required) → The ID of the webhook to delete.
Output:
usage Example:
POST /mcp/clickup/delete_webhook
{
"webhook_id" : "wh001"
}
Docs
search_docs → Search for Docs in a WorkspaceSearches ClickUp Docs within the specified Workspace by query string.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
query (string, optional) → Search query string.
Output:
{
"docs" : [
{
"id" : "doc001" ,
"name" : "Engineering Handbook" ,
"date_created" : "1717100000000"
}
]
}
get_doc_pages → List all pages in a DocReturns all pages within the specified Doc.
Inputs:
doc_id (string, required) → The ID of the Doc.
Output:
{
"pages" : [
{ "id" : "page001" , "name" : "Introduction" , "date_created" : "1717100000000" },
{ "id" : "page002" , "name" : "Setup Guide" , "date_created" :
create_doc_page → Create a new page in a DocAdds a new page with a title and markdown content to the specified Doc.
Inputs:
doc_id (string, required) → The ID of the Doc.
body (string, required) → JSON string of the page definition.
Body fields:
name (string, required) → Page title.
content (string, optional) → Page content in markdown.
parent_page_id (string, optional) → Parent page ID for nested pages.
Output:
Chat
get_chat_channels → List chat channels in a WorkspaceReturns all chat channels available in the specified Workspace.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
Output:
{
"channels" : [
{ "id" : "ch001" , "name" : "general" },
{ "id" : "ch002" , "name" : "engineering" }
]
}
send_chat_message → Post a message to a chat channelSends a message to the specified chat channel.
Inputs:
channel_id (string, required) → The ID of the chat channel.
body (string, required) → JSON string of the message.
Body fields:
content (string, required) → Message text.
Output:
{
"id" : "msg001" ,
"content" : "Hello team!" ,
"date" : "1717200000000"
}
Shared Hierarchy
get_shared_hierarchy → List resources shared with the authenticated userReturns all Spaces, Folders, Lists, and tasks that have been explicitly shared with the authenticated user.
Inputs:
team_id (string, required) → The ID of the Workspace (team).
Output:
{
"shared" : {
"tasks" : [{ "id" : "abc123" , "name" : "Fix login bug" }],
"lists" : [{ "id" : "56789012" , "name" : "Backlog" }],
"folders" : []
API Parameters Reference Common Parameters
team_id → ClickUp Workspace (team) identifier. Find yours via get_authorized_teams .
page → Zero-indexed page number for paginated responses. Increment to fetch subsequent pages.
archived → Pass true to include archived resources alongside active ones.
include_closed → Pass true in task queries to include tasks in closed/completed statuses.
order_by → Sort tasks by field: id , created , , or .
OAuth Setup Guide Credentials are injected server-side via fastmcp-credentials . No tool accepts auth parameters directly — you configure credentials once on the platform and every tool call uses them automatically.
Step 1: Create a ClickUp OAuth App
Log in to ClickUp
Go to Settings → Integrations → ClickUp API
Click Create an App
Enter a name and your redirect URI
Copy the Client ID and Client Secret
Step 2: Authorize and Obtain an Access Token
Direct users to the authorization URL:
https: //app.clickup.com/api?client_id={client_id}&redirect_uri={redirect_uri}
After the user approves, exchange the returned code for an access token:
Troubleshooting Missing or Invalid Credential
Cause: OAuth access token not injected by the platform or the token is malformed.
Solution:
Verify the credential is configured in your Curious Layer account for ClickUp.
Re-authorize the ClickUp integration to obtain a fresh access token.
Check that the platform is passing X-MCP-Cred-Access-Token to the server.
Insufficient Credits
Cause: API calls have exceeded your request limits.
Solution:
Check credit usage in your Curious Layer dashboard.
Upgrade to a paid plan or add credits for higher limits.
Contact support for credit adjustments.
Cause: The body parameter contains invalid JSON or is missing required fields.
Solution:
Validate your JSON string before passing it as body .
Ensure all required fields for the specific operation are included.
Check that numeric values (IDs, timestamps) are not wrapped in quotes where integers are expected.
Resource Not Found (404)
POST /mcp/clickup/get_authorized_user ]
}
POST /mcp/clickup/get_authorized_teams "features"
: {
"due_dates"
: {
"enabled"
:
true
} }
}
]
}
POST /mcp/clickup/get_spaces
{
"team_id" : "9876543"
} "enabled"
:
true
} }
}
POST /mcp/clickup/get_space
{
"space_id" : "90110011"
} {
"id" : "90110099" ,
"name" : "New Space" ,
"archived" : false
}
POST /mcp/clickup/create_space
{
"team_id" : "9876543" ,
"body" : "{ \" name \" : \" New Space \" , \" multiple_assignees \" : true}"
} "name"
:
"Engineering (Updated)"
,
"archived" : false
}
POST /mcp/clickup/update_space
{
"space_id" : "90110011" ,
"body" : "{ \" name \" : \" Engineering (Updated) \" }"
} }
POST /mcp/clickup/get_folders
{
"space_id" : "90110011"
} POST /mcp/clickup/get_folder
{
"folder_id" : "78901234"
} POST /mcp/clickup/create_folder
{
"space_id" : "90110011" ,
"body" : "{ \" name \" : \" Sprint 2 \" }"
} POST /mcp/clickup/update_folder
{
"folder_id" : "78901234" ,
"body" : "{ \" name \" : \" Sprint 1 (Completed) \" }"
} }
]
}
POST /mcp/clickup/get_lists
{
"folder_id" : "78901234"
} POST /mcp/clickup/get_folderless_lists
{
"space_id" : "90110011"
} POST /mcp/clickup/get_list
{
"list_id" : "56789012"
} Output:
{
"id" : "56789099" ,
"name" : "In Review"
} POST /mcp/clickup/create_list
{
"folder_id" : "78901234" ,
"body" : "{ \" name \" : \" In Review \" , \" content \" : \" Tasks under code review \" }"
} POST /mcp/clickup/create_folderless_list
{
"space_id" : "90110011" ,
"body" : "{ \" name \" : \" General \" }"
}
{
"id" : "56789012" ,
"name" : "Backlog (Archived)"
} POST /mcp/clickup/update_list
{
"list_id" : "56789012" ,
"body" : "{ \" name \" : \" Backlog (Archived) \" }"
} created
updated
due_date
reverse (boolean, optional) → Reverse the sort order.
subtasks (boolean, optional) → Include subtasks.
statuses (string, optional) → Comma-separated status names to filter by.
assignees (string, optional) → Comma-separated assignee user IDs to filter by.
due_date_gt (integer, optional) → Tasks with due date after this Unix ms timestamp.
due_date_lt (integer, optional) → Tasks with due date before this Unix ms timestamp.
date_created_gt (integer, optional) → Tasks created after this Unix ms timestamp.
date_created_lt (integer, optional) → Tasks created before this Unix ms timestamp.
date_updated_gt (integer, optional) → Tasks updated after this Unix ms timestamp.
date_updated_lt (integer, optional) → Tasks updated before this Unix ms timestamp.{
"tasks" : [
{
"id" : "abc123" ,
"name" : "Fix login bug" ,
"status" : { "status" : "in progress" , "color" : "#4169E1" },
"priority" : { "id" : "2" , "priority" : "high" },
"assignees" : [{ "id" : 1234567 , "username" : "jane_doe" }],
"due_date" : "1717200000000"
}
]
} POST /mcp/clickup/get_tasks
{
"list_id" : "56789012" ,
"include_closed" : false ,
"order_by" : "due_date"
} :
"Investigate session token expiry"
,
"status" : { "status" : "in progress" },
"priority" : { "priority" : "high" },
"assignees" : [{ "id" : 1234567 }],
"due_date" : "1717200000000" ,
"tags" : [],
"subtasks" : []
}
POST /mcp/clickup/get_task
{
"task_id" : "abc123" ,
"include_subtasks" : true
}
priority (integer, optional) → Priority level: 1 Urgent, 2 High, 3 Normal, 4 Low.
due_date (integer, optional) → Due date as Unix timestamp in ms.
due_date_time (boolean, optional) → Whether due_date includes a time component.
time_estimate (integer, optional) → Time estimate in milliseconds.
start_date (integer, optional) → Start date as Unix timestamp in ms.
notify_all (boolean, optional) → Notify all assignees.
parent (string, optional) → Parent task ID (to create a subtask).{
"id" : "abc999" ,
"name" : "Implement dark mode" ,
"status" : { "status" : "Open" },
"priority" : { "priority" : "normal" },
"assignees" : []
} POST /mcp/clickup/create_task
{
"list_id" : "56789012" ,
"body" : "{ \" name \" : \" Implement dark mode \" , \" priority \" : 3, \" assignees \" : [1234567]}"
} null
assignees (object, optional) → { "add" : [ id ], "rem" : [ id ]} to add/remove assignees.
archived (boolean, optional) → Archive or unarchive the task.{
"id" : "abc123" ,
"name" : "Fix login bug" ,
"status" : { "status" : "in review" },
"priority" : { "priority" : "urgent" }
} POST /mcp/clickup/update_task
{
"task_id" : "abc123" ,
"body" : "{ \" status \" : \" in review \" , \" priority \" : 1}"
} subtasks
space_ids (string, optional) → Comma-separated Space IDs to filter by.
project_ids (string, optional) → Comma-separated Folder IDs to filter by.
list_ids (string, optional) → Comma-separated List IDs to filter by.
statuses (string, optional) → Comma-separated status names to filter by.
include_closed (boolean, optional) → Include closed tasks. Default: false .
assignees (string, optional) → Comma-separated assignee user IDs to filter by.
due_date_gt (integer, optional) → Tasks with due date after this Unix ms timestamp.
due_date_lt (integer, optional) → Tasks with due date before this Unix ms timestamp.
date_created_gt (integer, optional) → Tasks created after this Unix ms timestamp.
date_created_lt (integer, optional) → Tasks created before this Unix ms timestamp.
date_updated_gt (integer, optional) → Tasks updated after this Unix ms timestamp.
date_updated_lt (integer, optional) → Tasks updated before this Unix ms timestamp.{
"tasks" : [
{
"id" : "abc123" ,
"name" : "Fix login bug" ,
"list" : { "id" : "56789012" , "name" : "Backlog" },
"folder" : { "id" : "78901234" , "name" : "Sprint 1" },
"space" : { "id" : "90110011" }
}
]
} POST /mcp/clickup/get_filtered_team_tasks
{
"team_id" : "9876543" ,
"statuses" : "in progress,in review" ,
"assignees" : "1234567"
} :
1234567
,
"username"
:
"jane_doe"
},
"date" : "1717200000000" ,
"resolved" : false
}
]
}
POST /mcp/clickup/get_task_comments
{
"task_id" : "abc123"
} :
"55001199"
,
"comment" : [{ "text" : "Looks good, merging tomorrow." }],
"date" : "1717200000000"
}
POST /mcp/clickup/create_task_comment
{
"task_id" : "abc123" ,
"body" : "{ \" comment_text \" : \" Looks good, merging tomorrow. \" , \" notify_all \" : false}"
} 1234567
},
"date" : "1717100000000"
}
]
}
POST /mcp/clickup/get_list_comments
{
"list_id" : "56789012"
} "text"
:
"This list needs triage."
}],
"date" : "1717100000000"
}
POST /mcp/clickup/create_list_comment
{
"list_id" : "56789012" ,
"body" : "{ \" comment_text \" : \" This list needs triage. \" }"
} POST /mcp/clickup/update_comment
{
"comment_id" : "55001122" ,
"body" : "{ \" resolved \" : true}"
} {
"data" : [
{
"id" : "1234567890" ,
"task" : { "id" : "abc123" , "name" : "Fix login bug" },
"duration" : "3600000" ,
"start" : "1717100000000" ,
"user" : { "id" : 1234567 }
}
]
} POST /mcp/clickup/get_time_entries
{
"team_id" : "9876543" ,
"start_date" : 1717100000000 ,
"end_date" : 1717200000000
} "end" : "1717103600000"
}
}
POST /mcp/clickup/get_single_time_entry
{
"team_id" : "9876543" ,
"timer_id" : "1234567890"
} {
"data" : {
"id" : "9876543210" ,
"duration" : "3600000" ,
"start" : "1717100000000"
}
} POST /mcp/clickup/create_time_entry
{
"team_id" : "9876543" ,
"body" : "{ \" tid \" : \" abc123 \" , \" start \" : 1717100000000, \" duration \" : 3600000}"
} {
"data" : {
"id" : "1234567890" ,
"duration" : "7200000"
}
} POST /mcp/clickup/update_time_entry
{
"team_id" : "9876543" ,
"timer_id" : "1234567890" ,
"body" : "{ \" duration \" : 7200000}"
} "timer_id"
:
"1234567890"
}
"9876543211"
,
"start" : "1717200000000" ,
"task" : { "id" : "abc123" }
}
}
POST /mcp/clickup/start_time_entry
{
"team_id" : "9876543" ,
"body" : "{ \" tid \" : \" abc123 \" , \" description \" : \" Working on login fix \" }"
} POST /mcp/clickup/stop_time_entry
{
"team_id" : "9876543"
} POST /mcp/clickup/get_running_time_entry
{
"team_id" : "9876543"
} "jane@example.com"
,
"role"
:
2
} }
]
}
}
POST /mcp/clickup/get_workspace_members
{
"team_id" : "9876543"
} POST /mcp/clickup/get_task_members
{
"task_id" : "abc123"
}
POST /mcp/clickup/get_list_members
{
"list_id" : "56789012"
}
"#4169E1"
}
]
}
POST /mcp/clickup/get_space_tags
{
"space_id" : "90110011"
} {
"success" : true
}
POST /mcp/clickup/create_space_tag
{
"space_id" : "90110011" ,
"body" : "{ \" tag \" : { \" name \" : \" urgent \" , \" tag_fg \" : \" #FFFFFF \" , \" tag_bg \" : \" #FF0000 \" }}"
} "success" : true
}
POST /mcp/clickup/update_space_tag
{
"space_id" : "90110011" ,
"tag_name" : "urgent" ,
"body" : "{ \" tag \" : { \" name \" : \" critical \" , \" tag_bg \" : \" #CC0000 \" }}"
} ,
"tag_name" : "critical"
}
"tag_name" : "bug"
}
"tag_name" : "bug"
}
"description"
:
"Quarterly objectives"
,
"percent_completed" : 45 ,
"owners" : [{ "id" : 1234567 }]
}
]
}
POST /mcp/clickup/get_goals
{
"team_id" : "9876543" ,
"include_completed" : false
} POST /mcp/clickup/get_goal
{
"goal_id" : "goal001"
} {
"goal" : {
"id" : "goal002" ,
"name" : "Q3 OKRs" ,
"due_date" : "1727740800000"
}
} POST /mcp/clickup/create_goal
{
"team_id" : "9876543" ,
"body" : "{ \" name \" : \" Q3 OKRs \" , \" due_date \" : 1727740800000, \" owners \" : [1234567]}"
} {
"goal" : {
"id" : "goal001" ,
"name" : "Q2 OKRs (Extended)" ,
"percent_completed" : 45
}
} POST /mcp/clickup/update_goal
{
"goal_id" : "goal001" ,
"body" : "{ \" name \" : \" Q2 OKRs (Extended) \" }"
} ,
"items" : []
}
}
POST /mcp/clickup/create_checklist
{
"task_id" : "abc123" ,
"body" : "{ \" name \" : \" Pre-launch QA \" }"
} }
}
POST /mcp/clickup/update_checklist
{
"checklist_id" : "chk001" ,
"body" : "{ \" name \" : \" Pre-launch QA (Final) \" }"
} { "id" : "item001" , "name" : "Smoke test all pages" , "resolved" : false }
]
}
}
POST /mcp/clickup/create_checklist_item
{
"checklist_id" : "chk001" ,
"body" : "{ \" name \" : \" Smoke test all pages \" , \" assignee \" : 1234567}"
} {
"checklist" : {
"id" : "chk001" ,
"items" : [
{ "id" : "item001" , "name" : "Smoke test all pages" , "resolved" : true }
]
}
} POST /mcp/clickup/update_checklist_item
{
"checklist_id" : "chk001" ,
"checklist_item_id" : "item001" ,
"body" : "{ \" resolved \" : true}"
} ,
"checklist_item_id" : "item001"
}
}
]
}
POST /mcp/clickup/get_accessible_custom_fields
{
"list_id" : "56789012"
} usage Example:
POST /mcp/clickup/set_custom_field_value
{
"task_id" : "abc123" ,
"field_id" : "field001" ,
"body" : "{ \" value \" : 8}"
} "abc123"
,
"field_id" : "field001"
}
"gantt"
}
]
}
POST /mcp/clickup/get_team_views
{
"team_id" : "9876543"
} POST /mcp/clickup/get_space_views
{
"space_id" : "90110011"
}
POST /mcp/clickup/get_folder_views
{
"folder_id" : "78901234"
}
POST /mcp/clickup/get_list_views
{
"list_id" : "56789012"
}
POST /mcp/clickup/get_view
{
"view_id" : "view001"
} ],
"last_page" : false
}
POST /mcp/clickup/get_view_tasks
{
"view_id" : "view001" ,
"page" : 0
} }
]
}
POST /mcp/clickup/get_webhooks
{
"team_id" : "9876543"
} space_id
folder_id (integer, optional) → Limit events to a specific Folder.
list_id (integer, optional) → Limit events to a specific List.
task_id (string, optional) → Limit events to a specific task.{
"id" : "wh002" ,
"webhook" : {
"id" : "wh002" ,
"endpoint" : "https://example.com/webhook" ,
"events" : [ "taskCreated" ]
}
} POST /mcp/clickup/create_webhook
{
"team_id" : "9876543" ,
"body" : "{ \" endpoint \" : \" https://example.com/webhook \" , \" events \" : [ \" taskCreated \" , \" taskUpdated \" ]}"
} {
"webhook" : {
"id" : "wh001" ,
"endpoint" : "https://example.com/new-webhook" ,
"status" : "active"
}
}
POST /mcp/clickup/update_webhook
{
"webhook_id" : "wh001" ,
"body" : "{ \" endpoint \" : \" https://example.com/new-webhook \" }"
} POST /mcp/clickup/search_docs
{
"team_id" : "9876543" ,
"query" : "onboarding"
} "1717110000000"
}
]
}
POST /mcp/clickup/get_doc_pages
{
"doc_id" : "doc001"
} "name"
:
"API Reference"
,
"date_created" : "1717200000000"
}
POST /mcp/clickup/create_doc_page
{
"doc_id" : "doc001" ,
"body" : "{ \" name \" : \" API Reference \" , \" content \" : \" ## Endpoints \\ n... \" }"
} POST /mcp/clickup/get_chat_channels
{
"team_id" : "9876543"
} POST /mcp/clickup/send_chat_message
{
"channel_id" : "ch001" ,
"body" : "{ \" content \" : \" Hello team! \" }"
} }
}
POST /mcp/clickup/get_shared_hierarchy
{
"team_id" : "9876543"
} updated
due_date
reverse → Pass true to reverse the sort direction of order_by .
Priority Levels Value Priority 1 Urgent 2 High 3 Normal 4 Low
Timestamps All date/time values use Unix milliseconds (epoch × 1000).
example: 1717200000000 → 2024-06-01 00 : 00 : 00 UTC
format: numeric string
Example: "9876543" format: numeric string
Example: "90110011" format: alphanumeric string
Example: "abc123" format: numeric string
Example: "1234567890"
Webhook Events Event Description taskCreated A task was created taskUpdated A task field was changed taskDeleted A task was deleted taskCommentPosted A comment was added to a task taskStatusUpdated A task's status changed listCreated A list was created listUpdated A list was updated listDeleted A list was deleted folderCreated A folder was created folderUpdated A folder was updated folderDeleted A folder was deleted spaceCreated A space was created spaceUpdated A space was updated spaceDeleted A space was deleted
POST https://api.clickup.com/api/v2/oauth/token
Content-Type: application/json
{
"client_id" : "YOUR_CLIENT_ID",
"client_secret" : "YOUR_CLIENT_SECRET",
"code" : "AUTHORIZATION_CODE"
}
The response contains the access_token to use for all API calls.
Provide the access token to the Curious Layer platform. It will be injected into every tool call via the X-MCP-Cred-Access-Token header — no token is ever passed as a tool parameter.
Required Scopes ClickUp's OAuth does not use granular scopes. An authorized token grants access to all Workspaces and resources the user has permission to see within their account.
Cause: An ID refers to a resource that does not exist, has been deleted, or belongs to a different Workspace.
Solution:
Verify the ID using the corresponding get_* or get_authorized_teams tool.
Confirm the resource belongs to the Workspace associated with the authenticated token.
Check whether the resource was archived (use archived: true to surface it).
Authentication Token Invalid or Expired
Cause: ClickUp rejected the access token.
Solution:
Re-authorize the ClickUp integration on the Curious Layer platform.
Verify the token has not been revoked in ClickUp Settings → Integrations.
Obtain a fresh token via the OAuth flow and update the platform credential.
Rate Limit Exceeded (429)
Cause: Too many requests in a short period.
Solution:
Reduce the frequency of API calls.
Add delays between bulk operations.
Refer to ClickUp Rate Limits for current limits.