ClickUp MCP Server
T

taazkareem

Integrates ClickUp task management with AI systems to enable automated task creation, updates, and retrieval for enhanced project workflow efficiency.

Content

Tools

ClickUp MCP Server

Total Supporters GitHub Stars Maintenance

A Model Context Protocol (MCP) server for integrating ClickUp tasks with AI applications. This server allows AI agents to interact with ClickUp tasks, spaces, lists, and folders through a standardized protocol.

🚧 Status Update: Working with the ClickUp team... ✨

Requirements

  • Node.js v18.0.0 or higher (required for MCP SDK compatibility)
  • ClickUp API key and Team ID

Setup

  1. Get your credentials:
  2. Choose either hosted installation (sends webhooks) or NPX installation (downloads to local path and installs dependencies)
  3. Use natural language to manage your workspace!

Smithery Installation (Quick Start)

smithery badge

The server is hosted on Smithery. There, you can preview the available tools or copy the commands to run on your specific client app.

NPX Installation

NPM Version Dependency Status NPM Downloads

Add this entry to your client's MCP settings JSON file:

{
  "mcpServers": {
    "ClickUp": {
      "command": "npx",
      "args": [
        "-y",
        "@taazkareem/clickup-mcp-server@latest"
      ],
      "env": {
        "CLICKUP_API_KEY": "your-api-key",
        "CLICKUP_TEAM_ID": "your-team-id",
        "DOCUMENT_SUPPORT": "true"
      }
    }
  }
}

Or use this npx command:

npx -y @taazkareem/clickup-mcp-server@latest --env CLICKUP_API_KEY=your-api-key --env CLICKUP_TEAM_ID=your-team-id

Obs: if you don't pass "DOCUMENT_SUPPORT": "true", the default is false and document support will not be active.

Tool Filtering

You can control which tools are available using two complementary environment variables:

ENABLED_TOOLS (Recommended)

Use ENABLED_TOOLS to specify exactly which tools should be available:

# Environment variable
export ENABLED_TOOLS="create_task,get_task,update_task,get_workspace_hierarchy"

# Command line argument
--env ENABLED_TOOLS=create_task,get_task,update_task,get_workspace_hierarchy

DISABLED_TOOLS (Legacy)

Use DISABLED_TOOLS to disable specific tools while keeping all others enabled:

# Environment variable
export DISABLED_TOOLS="delete_task,delete_bulk_tasks"

# Command line argument
--env DISABLED_TOOLS=delete_task,delete_bulk_tasks

Precedence Rules

  • If ENABLED_TOOLS is specified, only those tools will be available (takes precedence over DISABLED_TOOLS)
  • If only DISABLED_TOOLS is specified, all tools except those listed will be available
  • If neither is specified, all tools are available (default behavior)

Example:

# Only enable task creation and reading tools
npx -y @taazkareem/clickup-mcp-server@latest \
  --env CLICKUP_API_KEY=your-api-key \
  --env CLICKUP_TEAM_ID=your-team-id \
  --env ENABLED_TOOLS=create_task,get_task,get_workspace_hierarchy

Please filter tools you don't need if you are having issues with the number of tools or any context limitations.

Running with HTTP Transport Support

The server supports both modern HTTP Streamable transport (MCP Inspector compatible) and legacy SSE (Server-Sent Events) transport for backwards compatibility.

{
  "mcpServers": {
    "ClickUp": {
      "command": "npx",
      "args": [
        "-y",
        "@taazkareem/clickup-mcp-server@latest"
      ],
      "env": {
        "CLICKUP_API_KEY": "your-api-key",
        "CLICKUP_TEAM_ID": "your-team-id",
        "ENABLE_SSE": "true",
        "PORT": "3231"
      }
    }
  }
}

Endpoints:

  • Primary: http://127.0.0.1:3231/mcp (Streamable HTTP)
  • Legacy: http://127.0.0.1:3231/sse (SSE for backwards compatibility)

Command Line Usage

npx -y @taazkareem/clickup-mcp-server@latest --env CLICKUP_API_KEY=your-api-key --env CLICKUP_TEAM_ID=your-team-id --env ENABLE_SSE=true --env PORT=3231

Available configuration options:

OptionDescriptionDefault
ENABLED_TOOLSComma-separated list of tools to enable (takes precedence)All tools
DISABLED_TOOLSComma-separated list of tools to disableNone
ENABLE_SSEEnable the HTTP/SSE transportfalse
PORTPort for the HTTP server3231
ENABLE_STDIOEnable the STDIO transporttrue
ENABLE_SECURITY_FEATURESEnable security headers and loggingfalse
ENABLE_HTTPSEnable HTTPS/TLS encryptionfalse
ENABLE_ORIGIN_VALIDATIONValidate Origin header against whitelistfalse
ENABLE_RATE_LIMITEnable rate limiting protectionfalse

🔒 Security Features

The server includes optional security enhancements for production deployments. All security features are opt-in and disabled by default to maintain backwards compatibility.

Quick security setup:

# Generate SSL certificates for HTTPS
./scripts/generate-ssl-cert.sh

# Start with full security
ENABLE_SECURITY_FEATURES=true \
ENABLE_HTTPS=true \
ENABLE_ORIGIN_VALIDATION=true \
ENABLE_RATE_LIMIT=true \
SSL_KEY_PATH=./ssl/server.key \
SSL_CERT_PATH=./ssl/server.crt \
npx @taazkareem/clickup-mcp-server@latest --env CLICKUP_API_KEY=your-key --env CLICKUP_TEAM_ID=your-team --env ENABLE_SSE=true

HTTPS Endpoints:

  • Primary: https://127.0.0.1:3443/mcp (Streamable HTTPS)
  • Legacy: https://127.0.0.1:3443/sse (SSE HTTPS for backwards compatibility)
  • Health: https://127.0.0.1:3443/health (Health check)

For detailed security configuration, see Security Features Documentation.

n8n Integration

To integrate with n8n:

  1. Start the clickup-mcp-server with SSE enabled
  2. In n8n, add a new "MCP AI Tool" node
  3. Configure the node with:
    • Transport: SSE
    • Server URL: http://localhost:3231 (or your server address)
    • Tools: Select the ClickUp tools you want to use

Example Client

An example SSE client is provided in the examples directory. To run it:

# Start the server with SSE enabled
ENABLE_SSE=true PORT=3231 npx -y @taazkareem/clickup-mcp-server@latest --env CLICKUP_API_KEY=your-api-key --env CLICKUP_TEAM_ID=your-team-id

# In another terminal, run the example client
cd examples
npm install
npm run sse-client

Features

📝 Task Management🏷️ Tag Management
• Create, update, and delete tasks
• Move and duplicate tasks anywhere
• Support for single and bulk operations
• Set start/due dates with natural language
• Create and manage subtasks
• Add comments and attachments
• Create, update, and delete space tags
• Add and remove tags from tasks
• Use natural language color commands
• Automatic contrasting foreground colors
• View all space tags
• Tag-based task organization across workspace
⏱️ Time Tracking🌳 Workspace Organization
• View time entries for tasks
• Start/stop time tracking on tasks
• Add manual time entries
• Delete time entries
• View currently running timer
• Track billable and non-billable time
• Navigate spaces, folders, and lists
• Create and manage folders
• Organize lists within spaces
• Create lists in folders
• View workspace hierarchy
• Efficient path navigation
📄 Document Management👥 Member Management
• Document Listing through all workspace
• Document Page listing
• Document Page Details
• Document Creation
• Document page update (append & prepend)
• Find workspace members by name or email
• Resolve assignees for tasks
• View member details and permissions
• Assign tasks to users during creation and updates
• Support for user IDs, emails, or usernames
• Team-wide user management
Integration Features🏗️ Architecture & Performance
• Global name or ID-based lookups
• Case-insensitive matching
• Markdown formatting support
• Built-in rate limiting
• Error handling and validation
• Comprehensive API coverage
70% codebase reduction for improved performance
Unified architecture across all transport types
Zero code duplication
HTTP Streamable transport (MCP Inspector compatible)
Legacy SSE support for backwards compatibility

Available Tools (36 Total)

ToolDescriptionRequired Parameters
get_workspace_hierarchyGet workspace structureNone
create_taskCreate a taskname, (listId/listName)
create_bulk_tasksCreate multiple taskstasks[]
update_taskModify tasktaskId/taskName
update_bulk_tasksUpdate multiple taskstasks[] with IDs or names
get_tasksGet tasks from listlistId/listName
get_taskGet single task detailstaskId/taskName (with smart disambiguation)
get_workspace_tasksGet tasks with filteringAt least one filter (tags, list_ids, space_ids, etc.)
get_task_commentsGet comments on a tasktaskId/taskName
create_task_commentAdd a comment to a taskcommentText, (taskId/(taskName+listName))
attach_task_fileAttach file to a tasktaskId/taskName, (file_data or file_url)
delete_taskRemove tasktaskId/taskName
delete_bulk_tasksRemove multiple taskstasks[] with IDs or names
move_taskMove tasktaskId/taskName, listId/listName
move_bulk_tasksMove multiple taskstasks[] with IDs or names, target list
duplicate_taskCopy tasktaskId/taskName, listId/listName
create_listCreate list in spacename, spaceId/spaceName
create_folderCreate foldername, spaceId/spaceName
create_list_in_folderCreate list in foldername, folderId/folderName
get_folderGet folder detailsfolderId/folderName
update_folderUpdate folder propertiesfolderId/folderName
delete_folderDelete folderfolderId/folderName
get_listGet list detailslistId/listName
update_listUpdate list propertieslistId/listName
delete_listDelete listlistId/listName
get_space_tagsGet space tagsspaceId/spaceName
create_space_tagCreate tagtagName, spaceId/spaceName
update_space_tagUpdate tagtagName, spaceId/spaceName
delete_space_tagDelete tagtagName, spaceId/spaceName
add_tag_to_taskAdd tag to tasktagName, taskId/(taskName+listName)
remove_tag_from_taskRemove tag from tasktagName, taskId/(taskName+listName)
get_task_time_entriesGet time entries for a tasktaskId/taskName
start_time_trackingStart time tracking on a tasktaskId/taskName
stop_time_trackingStop current time trackingNone
add_time_entryAdd manual time entry to a tasktaskId/taskName, start, duration
delete_time_entryDelete a time entrytimeEntryId
get_current_time_entryGet currently running timerNone
get_workspace_membersGet all workspace membersNone
find_member_by_nameFind member by name or emailnameOrEmail
resolve_assigneesResolve member names to IDsassignees[]
create_documentCreate a documentworkspaceId, name, parentId/parentType, visibility, create_pages
get_documentGet a documentworkspaceId/documentId
list_documentsList documentsworkspaceId, documentId/creator/deleted/archived/parent_id/parent_type/limit/next_cursor
list_document_pagesList document pagesdocumentId/documentName
get_document_pagesGet document pagesdocumentId/documentName, pageIds
create_document_pagesCreate a document pageworkspaceId/documentId, parent_page_id/name/sub_title,content/content_format
update_document_pageUpdate a document pageworkspaceId/documentId, name/sub_title,content/content_edit_mode/content_format

See full documentation for optional parameters and advanced usage.

Member Management Tools

When creating or updating tasks, you can assign users using the assignees parameter. The parameter accepts an array of user IDs, emails, or usernames:

Creating tasks with assignees:

{
  "name": "New Task",
  "description": "This is a new task.",
  "assignees": ["jdoe@example.com", "Jane Smith"]  // Emails, usernames, or user IDs
}

Updating task assignees:

{
  "taskId": "abc123",
  "assignees": ["newuser@example.com"]  // Replace existing assignees
}

The member management tools help resolve user references when needed.

Prompts

Not yet implemented and not supported by all client apps. Request a feature for a Prompt implementation that would be most beneficial for your workflow (without it being too specific). Examples:

PromptPurposeFeatures
summarize_tasksTask overviewStatus summary, priorities, relationships
analyze_prioritiesPriority optimizationDistribution analysis, sequencing
generate_descriptionTask description creationObjectives, criteria, dependencies

Error Handling

The server provides clear error messages for:

  • Missing required parameters
  • Invalid IDs or names
  • Items not found
  • Permission issues
  • API errors
  • Rate limiting

The LOG_LEVEL environment variable can be specified to control the verbosity of server logs. Valid values are trace, debug, info, warn, and error (default). This can be also be specified on the command line as, e.g. --env LOG_LEVEL=info.

Support the Developer

When using this server, you may occasionally see a small sponsor message with a link to this repository included in tool responses. I hope you can support the project! If you find this project useful, please consider supporting:

Sponsor TaazKareem

Buy Me A Coffee

Acknowledgements

Special thanks to ClickUp for their excellent API and services that make this integration possible.

Contributing

Contributions are welcome! Please read our Contributing Guide for details.

License

License: MIT

This project is licensed under the MIT License - see the LICENSE file for details.

Disclaimer

This software makes use of third-party APIs and may reference trademarks or brands owned by third parties. The use of such APIs or references does not imply any affiliation with or endorsement by the respective companies. All trademarks and brand names are the property of their respective owners. This project is an independent work and is not officially associated with or sponsored by any third-party company mentioned.

get_list

Gets details of a ClickUp list. Use listId (preferred) or listName. Returns list details including name, content, and space info. ListId more reliable as names may not be unique.

get_task

Gets task details by taskId (automatically handles both regular and custom IDs) or taskName. For taskName search, provide listName for faster lookup. Set subtasks=true to include all subtask details.

move_task

Moves task to different list. Use taskId + (listId/listName) preferred, or taskName + sourceListName + (listId/listName). WARNING: Task statuses may reset if destination list has different status options.

get_folder

Gets folder details. Use folderId (preferred) or folderName + (spaceId/spaceName). Helps understand folder structure before creating/updating lists.

create_list

Creates a list in a ClickUp space. Use spaceId (preferred) or spaceName + list name. Name is required. For lists in folders, use create_list_in_folder. Optional: content, dueDate, priority, assignee, status.

create_task

Creates a single task in a ClickUp list. Use listId (preferred) or listName. Required: name + list info. For multiple tasks use create_bulk_tasks. Can create subtasks via parent param. Supports custom fields as array of {id, value}. Supports assignees as array of user IDs, emails, or usernames.

delete_list

PERMANENTLY deletes a ClickUp list and all its tasks. Use listId (preferred/safest) or listName. WARNING: Cannot be undone, all tasks will be deleted, listName risky if not unique.

delete_task

PERMANENTLY deletes task. Use taskId (preferred/safest) or taskName + optional listName. WARNING: Cannot be undone. Using taskName without listName may match multiple tasks.

update_list

Updates a ClickUp list. Use listId (preferred) or listName + at least one update field (name/content/status). ListId more reliable as names may not be unique. Only specified fields updated.

update_task

Updates task properties. Use taskId (preferred) or taskName + optional listName. At least one update field required. Custom fields supported as array of {id, value}. Supports assignees as array of user IDs, emails, or usernames. WARNING: Using taskName without listName may match multiple tasks.

create_folder

Creates folder in ClickUp space. Use spaceId (preferred) or spaceName + folder name. Optional: override_statuses for folder-specific statuses. Use create_list_in_folder to add lists after creation.

delete_folder

PERMANENTLY deletes folder and all contents. Use folderId (preferred/safest) or folderName + (spaceId/spaceName). WARNING: Cannot be undone, all lists/tasks deleted, folderName risky if not unique.

update_folder

Updates folder properties. Use folderId (preferred) or folderName + (spaceId/spaceName). At least one update field (name/override_statuses) required. Changes apply to all lists in folder.

add_time_entry

Adds a manual time entry to a task. Use taskId (preferred) or taskName + optional listName. Required: start time, duration. Optional: description, billable, tags.

duplicate_task

Creates copy of task in same/different list. Use taskId + optional (listId/listName), or taskName + sourceListName + optional (listId/listName). Preserves original properties. Default: same list as original.

get_space_tags

Gets all tags in a ClickUp space. Use spaceId (preferred) or spaceName. Tags are defined at space level - check available tags before adding to tasks.

add_tag_to_task

Adds existing tag to task. Use taskId (preferred) or taskName + optional listName. Tag must exist in space (use get_space_tags to verify, create_space_tag if needed). WARNING: Will fail if tag doesn't exist.

move_bulk_tasks

Moves multiple tasks to one list. For each task: use taskId (preferred) or taskName + listName. Target list: use targetListId/Name. Configure batch size/concurrency via options. WARNING: Task statuses may reset, taskName needs listName.

attach_task_file

Attaches file to task. Use taskId (preferred) or taskName + optional listName. File sources: 1) base64 + filename (≤10MB), 2) URL (http/https), 3) local path (absolute), 4) chunked for large files. WARNING: taskName without listName may match multiple tasks.

create_bulk_tasks

Creates multiple tasks in one list. Use listId (preferred) or listName + array of tasks (each needs name). Configure batch size/concurrency via options. Tasks can have custom fields as {id, value} array and assignees as array of user IDs, emails, or usernames.

delete_bulk_tasks

PERMANENTLY deletes multiple tasks. For each task: use taskId (preferred/safest) or taskName + listName. Configure batch size/concurrency via options. WARNING: Cannot be undone, taskName without listName is dangerous.

delete_time_entry

Deletes a time entry. Required: time entry ID.

get_task_comments

Gets task comments. Use taskId (preferred) or taskName + optional listName. Use start/startId params for pagination. Task names may not be unique across lists.

resolve_assignees

Resolves an array of assignee names or emails to ClickUp user IDs. Returns an array of user IDs, or errors for any that cannot be resolved.

update_bulk_tasks

Updates multiple tasks efficiently. For each task: use taskId (preferred) or taskName + listName. At least one update field per task. Supports assignees as array of user IDs, emails, or usernames. Configure batch size/concurrency via options. WARNING: taskName without listName will fail.

stop_time_tracking

Stops the currently running time tracker. Optional fields: description and tags. Returns the completed time entry details.

create_task_comment

Creates task comment. Use taskId (preferred) or taskName + listName. Required: commentText. Optional: notifyAll to notify assignees, assignee to assign comment.

find_member_by_name

Finds a member in the ClickUp workspace by name or email. Returns the member object if found, or null if not found.

get_workspace_tasks

Purpose: Retrieve tasks from across the entire workspace with powerful filtering options, including tag-based filtering. Valid Usage: 1. Apply any combination of filters (tags, lists, folders, spaces, statuses, etc.) 2. Use pagination to manage large result sets 3. Include subtasks by setting subtasks=true Requirements: - At least one filter parameter is REQUIRED (tags, list_ids, folder_ids, space_ids, statuses, assignees, or date filters) - Pagination parameters (page, order_by, reverse) alone are not considered filters Notes: - Provides workspace-wide task access (unlike get_tasks which only searches in one list) - Returns complete task details including descriptions, assignees, custom fields, and all metadata - Tag filtering is especially useful for cross-list organization (e.g., "project-x", "blocker", "needs-review") - Combine multiple filters to narrow down your search scope - Use pagination for large result sets - Set subtasks=true to include subtask details in the response IMPORTANT: subtasks=true enables subtasks to appear in results, but subtasks must still match your other filter criteria (tags, lists, etc.) to be returned. To see all subtasks of a specific task regardless of filters, use the get_task tool with subtasks=true instead. - Use the detail_level parameter to control the amount of data returned: - "summary": Returns lightweight task data (name, status, list, tags) - "detailed": Returns complete task data with all fields (DEFAULT if not specified) - Responses exceeding 50,000 tokens automatically switch to summary format to avoid hitting LLM token limits - **Enhanced List Filtering**: When list_ids are provided, the tool leverages ClickUp's Views API to include tasks that are *associated with* the specified lists, including tasks that have been added to multiple lists. This provides comprehensive coverage of all tasks related to your specified lists, not just tasks that were originally created in those lists.

start_time_tracking

Starts time tracking on a task. Use taskId (preferred) or taskName + optional listName. Optional fields: description, billable status, and tags. Only one timer can be running at a time.

remove_tag_from_task

Removes tag from task. Use taskId (preferred) or taskName + optional listName. Only removes tag-task association, tag remains in space. For multiple tasks, provide listName to disambiguate.

create_list_in_folder

Creates a list in a ClickUp folder. Use folderId (preferred) or folderName + space info + list name. Name is required. When using folderName, spaceId/spaceName required as folder names may not be unique. Optional: content, status.

get_task_time_entries

Gets all time entries for a task with filtering options. Use taskId (preferred) or taskName + optional listName. Returns all tracked time with user info, descriptions, tags, start/end times, and durations.

get_workspace_members

Returns all members (users) in the ClickUp workspace/team. Useful for resolving assignees by name or email.

get_current_time_entry

Gets the currently running time entry, if any. No parameters needed.

get_workspace_hierarchy

Gets complete workspace hierarchy (spaces, folders, lists). No parameters needed. Returns tree structure with names and IDs for navigation.

Connect MCP Server