clickup-mcp-server

clickup-mcp-server

1

The ClickUp MCP Server is a Model Context Protocol server that integrates with the ClickUp API to automate task and workspace management. It offers comprehensive task handling, workspace navigation, and markdown support, and is designed to integrate seamlessly with AI tools like Claude.

clickup-mcp-server: A ClickUp MCP Server

Overview

A Model Context Protocol server for ClickUp API interaction and automation. This server provides tools for AI systems to read, create, and update tasks, lists, and spaces in ClickUp.

This MCP server enables AI tools like Claude to interact with your ClickUp workspace, helping automate task management, project planning, and other workflows.

Features

This MCP server provides comprehensive integration with ClickUp, offering the following capabilities:

Task Management

  • Create, update, and delete tasks
  • Move and duplicate tasks between lists and boards
  • Set task properties including due dates, priorities, and tags
  • Create, view, and manage subtasks
  • Add comments and attachments to tasks
  • Support for both single and bulk task operations
  • Task grouping and filtering by status

Workspace Organization

  • Navigate and manage workspaces, spaces, folders, and lists
  • Create, update, and delete spaces and folders
  • Organize lists within spaces and folders
  • View comprehensive workspace hierarchy
  • Navigate efficiently through workspace using path notation
  • Create lists in spaces or inside folders

Formatting and Display

  • Full markdown support for task descriptions and comments
  • HTML conversion for proper rendering in ClickUp
  • Formatted display of task details, lists, and hierarchies
  • Enhanced display of complex project structures

Developer Experience

  • Comprehensive error handling and validation
  • Clear, consistent API responses
  • Detailed documentation for all tools
  • Easy integration with Claude and other AI systems

Tools

The server provides the following tools for interacting with ClickUp:

Workspace/Team Tools

  1. get_workspaces

    • Gets all workspaces/teams
    • Input: None
    • Returns: List of workspaces with IDs and names
  2. navigate_workspace

    • Navigates through workspace hierarchy using path notation
    • Input:
      • path (string): Path through workspace hierarchy (team_id/space_name/folder_name/list_name)
    • Returns: Details of the target entity and its full path

Space Tools

  1. get_spaces

    • Gets all spaces in a workspace
    • Input:
      • workspace_id (string): ID of the workspace/team
    • Returns: List of spaces with IDs and names
  2. create_space

    • Creates a new space in a workspace
    • Inputs:
      • workspace_id (string): ID of the workspace/team
      • name (string): Name of the new space
    • Returns: Details of the created space
  3. get_space_hierarchy

    • Gets the full hierarchy of a space including folders and lists
    • Input:
      • space_id (string): ID of the space
    • Returns: Complete hierarchical structure of the space

Folder Tools

  1. get_folders

    • Gets all folders in a space
    • Input:
      • space_id (string): ID of the space
    • Returns: List of folders with IDs and names
  2. create_folder

    • Creates a new folder in a space
    • Inputs:
      • space_id (string): ID of the space
      • name (string): Name of the new folder
    • Returns: Details of the created folder
  3. update_folder

    • Updates a folder's name
    • Inputs:
      • folder_id (string): ID of the folder to update
      • name (string): New name for the folder
    • Returns: Updated folder details
  4. delete_folder

    • Deletes a folder
    • Input:
      • folder_id (string): ID of the folder to delete
    • Returns: Confirmation of deletion

List/Board Tools

  1. get_lists

    • Gets all lists/boards in a space
    • Input:
      • space_id (string): ID of the space
    • Returns: List of lists/boards with IDs and names
  2. create_list

    • Creates a new list/board in a space or folder
    • Inputs:
      • space_id (string): ID of the space
      • name (string): Name of the new list/board
      • folder_id (string, optional): ID of the folder (if creating list in a folder)
    • Returns: Details of the created list/board
  3. organize_lists

    • Organizes lists by their location (in space or in folders)
    • Inputs:
      • space_id (string): ID of the space
      • folder_id (string, optional): ID of a specific folder
    • Returns: Lists organized by their containing folder

Task Tools

  1. get_tasks
  • Gets all tasks in a list/board
  • Input:
    • list_id (string): ID of the list/board
  • Returns: List of tasks with IDs, names, and other details
  1. get_tasks_by_status

    • Gets tasks with a specific status in a list/board
    • Inputs:
      • list_id (string): ID of the list/board
      • status (string): Status to filter tasks by
    • Returns: List of tasks with the specified status
  2. create_task

    • Creates a new task in a list/board
    • Inputs:
      • list_id (string): ID of the list/board
      • name (string): Name of the task
      • description (string, optional): Task description
      • priority (number, optional): Task priority (1-4)
      • due_date (number, optional): Task due date in milliseconds
      • tags (string[], optional): List of tag names to add to task
    • Returns: Details of the created task
  3. get_task

    • Gets details of a specific task
    • Input:
      • task_id (string): ID of the task
    • Returns: Full details of the task including description, status, etc.
  4. update_task

    • Updates a task's properties
    • Inputs:
      • task_id (string): ID of the task
      • name (string, optional): New task name
      • description (string, optional): New task description
      • priority (number, optional): New task priority (1-4)
      • due_date (number, optional): New due date in milliseconds
      • tags (string[], optional): New list of tag names
    • Returns: Updated task details
  5. update_task_status

    • Updates a task's status
    • Inputs:
      • task_id (string): ID of the task
      • status (string): New status for the task
    • Returns: Updated task details
  6. assign_task

    • Assigns users to a task
    • Inputs:
      • task_id (string): ID of the task
      • assignee_ids (string[]): List of user IDs to assign to the task
    • Returns: Confirmation of assignment
  7. get_task_subtasks

    • Gets subtasks for a task
    • Input:
      • task_id (string): ID of the task
    • Returns: List of subtasks with their details
  8. delete_task

    • Deletes a task
    • Input:
      • task_id (string): ID of the task to delete
    • Returns: Confirmation of deletion
  9. move_task

    • Moves a task to a different list/board
    • Inputs:
      • task_id (string): ID of the task to move
      • list_id (string): ID of the destination list/board
    • Returns: Updated task details
  10. duplicate_task

    • Duplicates a task, optionally to a different list/board
    • Inputs:
      • task_id (string): ID of the task to duplicate
      • list_id (string, optional): ID of the destination list/board
    • Returns: Details of the duplicated task
  11. create_subtask

    • Creates a subtask for a parent task
    • Inputs:
      • parent_task_id (string): ID of the parent task
      • name (string): Name of the subtask
      • description (string, optional): Subtask description
      • priority (number, optional): Subtask priority (1-4)
      • due_date (number, optional): Subtask due date in milliseconds
      • tags (string[], optional): List of tag names for the subtask
    • Returns: Details of the created subtask
  12. add_comment

    • Adds a comment to a task
    • Inputs:
      • task_id (string): ID of the task
      • comment_text (string): Text content of the comment
    • Returns: Details of the added comment
  13. add_attachment

    • Adds an attachment to a task by URL
    • Inputs:
      • task_id (string): ID of the task
      • attachment_url (string): URL of the attachment to add
    • Returns: Details of the added attachment
  14. bulk_update_tasks

    • Updates multiple tasks in a list at once
    • Inputs:
      • list_id (string): ID of the list/board containing the tasks
      • task_ids (string[]): List of task IDs to update
      • name (string, optional): New task name for all tasks
      • description (string, optional): New task description for all tasks
      • status (string, optional): New status for all tasks
      • priority (number, optional): New priority for all tasks (1-4)
      • due_date (number, optional): New due date for all tasks in milliseconds
      • tags (string[], optional): New list of tag names for all tasks
    • Returns: Confirmation of bulk update
  15. bulk_delete_tasks

    • Deletes multiple tasks at once
    • Input:
      • task_ids (string[]): List of task IDs to delete
    • Returns: Confirmation of bulk deletion

Installation

Prerequisites

  • Python 3.10 or higher
  • A ClickUp account with an API key

Using uv (recommended)

When using uv no specific installation is needed. We will use uvx to directly run clickup-mcp-server.

uv --directory "/path/to/clickup-mcp-server" run clickup-mcp-server --api-key YOUR_API_KEY

Or use a .env file (see Configuration section).

Using PIP

Alternatively, you can install clickup-mcp-server via pip:

pip install clickup-mcp-server

After installation, you can run it as a script using:

python -m clickup_mcp_server --api-key YOUR_API_KEY

Configuration

API Key

You need a ClickUp API key to use this server. You can get one from ClickUp API Settings.

The API key can be provided in two ways:

  1. Command-line argument: --api-key YOUR_API_KEY
  2. Environment variable in a .env file:
    CLICKUP_API_KEY=your_api_key_here
    

Usage with Claude Desktop

Add this to your claude_desktop_config.json:

Using uvx
"mcpServers": {
  "clickup": {
    "command": "uvx",
    "args": ["clickup-mcp-server", "--api-key", "YOUR_API_KEY"]
  }
}
Using docker
"mcpServers": {
  "clickup": {
    "command": "docker",
    "args": ["run", "--rm", "-i", "-e", "CLICKUP_API_KEY=YOUR_API_KEY", "mcp/clickup"]
  }
}
Using pip installation
"mcpServers": {
  "clickup": {
    "command": "python",
    "args": ["-m", "clickup_mcp_server", "--api-key", "YOUR_API_KEY"]
  }
}

Usage with VS Code

For manual installation, add the following JSON block to your User Settings (JSON) file in VS Code. You can do this by pressing Ctrl + Shift + P and typing Preferences: Open Settings (JSON).

Optionally, you can add it to a file called .vscode/mcp.json in your workspace. This will allow you to share the configuration with others.

Note that the mcp key is not needed in the .vscode/mcp.json file.

{
  "mcp": {
    "servers": {
      "clickup": {
        "command": "uvx",
        "args": ["clickup-mcp-server"],
        "env": {
          "CLICKUP_API_KEY": "YOUR_API_KEY"
        }
      }
    }
  }
}

For Docker installation:

{
  "mcp": {
    "servers": {
      "clickup": {
        "command": "docker",
        "args": [
          "run",
          "--rm",
          "-i",
          "-e", "CLICKUP_API_KEY=YOUR_API_KEY",
          "mcp/clickup"
        ]
      }
    }
  }
}

Usage with Zed

Add to your Zed settings.json:

Using uvx
"context_servers": [
  "mcp-server-clickup": {
    "command": {
      "path": "uvx",
      "args": ["clickup-mcp-server"]
    },
    "env": {
      "CLICKUP_API_KEY": "YOUR_API_KEY"
    }
  }
],
Using pip installation
"context_servers": {
  "mcp-server-clickup": {
    "command": {
      "path": "python",
      "args": ["-m", "clickup_mcp_server"]
    },
    "env": {
      "CLICKUP_API_KEY": "YOUR_API_KEY"
    }
  }
},

Example Usage Scenarios

Task Management with Claude

Claude can help you manage your ClickUp tasks:

  1. Creating a Task Plan: Ask Claude to create a plan based on a specific task in ClickUp. Claude will:

    • Find the task by name or ID
    • Analyze its description and subtasks
    • Generate a structured plan for completing the task
  2. Task Automation: For a task containing code-related instructions, Claude can:

    • Get the task details from ClickUp
    • Update the task status to "In Progress"
    • Implement the code according to the task requirements
    • Check off subtasks as they're completed
    • Update the status to "Ready for Review" when finished
  3. Task Reporting: Ask Claude to generate summaries of tasks with specific statuses:

    • Get all tasks marked "In Progress"
    • Compile a status report with completion estimates
    • Create new tasks for blockers or dependencies

Debugging

Run your server with the -v or -vv flag for increased verbosity:

uvx clickup-mcp-server -vv

You can use the MCP inspector to debug the server:

npx @modelcontextprotocol/inspector uvx clickup-mcp-server

Development

Setting Up Development Environment

  1. Clone the repository:

    git clone https://github.com/yourusername/clickup-mcp-server.git
    cd clickup-mcp-server
    
  2. Install development dependencies:

    uv pip install -e ".[dev]"
    
  3. Run tests:

    pytest
    

Docker Build

Build the Docker image:

docker build -t mcp/clickup .

Implementation Status

This MCP server implements the majority of essential ClickUp features. Below is a detailed breakdown of implemented features and those planned for future implementation.

Task Management ✅

All core task management features have been implemented:

FeatureStatusDescription
Create tasksCreate new tasks in any list or board
Update tasksModify task properties including name, description, and more
Delete tasksRemove tasks from ClickUp
Move tasksRelocate tasks between different lists and boards
Duplicate tasksCreate copies of tasks, optionally in different locations
Set datesSet start and due dates for tasks
View subtasksRetrieve subtasks for any parent task
Create subtasksAdd subtasks to existing tasks
Manage subtasksUpdate and delete subtasks
Add commentsAdd comments to tasks with markdown support
Add attachmentsAttach files via URL to tasks
Single operationsPerform actions on individual tasks
Bulk operationsPerform actions on multiple tasks simultaneously

Workspace Organization ✅

All workspace organization features have been implemented:

FeatureStatusDescription
Navigate spacesBrowse and select spaces in workspaces
Navigate foldersBrowse and select folders within spaces
Navigate listsBrowse and select lists in spaces or folders
Create spacesCreate new spaces in workspaces
Create listsCreate new lists in spaces or folders
Create foldersCreate new folders within spaces
Organize listsGroup and organize lists by location
Lists in foldersCreate and manage lists inside folders
View hierarchySee the complete workspace structure
Path navigationNavigate efficiently using path notation

Miscellaneous Features 🔧

Some advanced features are implemented, with others planned for future releases:

FeatureStatusDescription
Global lookups🔄Find items by name or ID across workspaces (planned)
Case-insensitive🔄Match names regardless of capitalization (planned)
Basic markdownSupport for basic markdown in descriptions
Enhanced markdownAdvanced markdown with proper rendering in ClickUp
Rate limiting🔄Built-in handling of API rate limits (planned)
Error handlingComprehensive error detection and reporting
Input validationValidation of all inputs before API submission
API coverage🔄Support for additional ClickUp API features (in progress)

Legend:

  • ✅ Implemented
  • 🔄 Planned or in progress

License

This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository. EOF < /dev/null