ClickUp

by imjoshnewton

Not rated
GitHub

About

Interact with the ClickUp API to manage tasks, lists, and spaces, automating project planning and workflows.

Details

Author
imjoshnewton
Categories
Productivity, Project Management, Automation

Setup

Install ClickUp in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/imjoshnewton/clickup-mcp-server

Follow the installation instructions in the repository README, then restart your MCP client.

clickup-mcp-server: A ClickUp MCP Server

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.

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

- 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

- 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

- 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

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

The server provides the following tools for interacting with ClickUp:

- Gets all workspaces/teams
- Input: None
- Returns: List of workspaces with IDs and names

- Navigates through workspace hierarchy using path notation
- Input:

- path(string): Path through workspace hierarchy (team_id/space_name/folder_name/list_name)

- Gets all spaces in a workspace
- Input:

- workspace_id(string): ID of the workspace/team

- Creates a new space in a workspace
- Inputs:

- workspace_id(string): ID of the workspace/team
- name(string): Name of the new space

- Gets the full hierarchy of a space including folders and lists
- Input:

- space_id(string): ID of the space

- Gets all folders in a space
- Input:

- space_id(string): ID of the space

- Creates a new folder in a space
- Inputs:

- space_id(string): ID of the space
- name(string): Name of the new folder

- Updates a folder's name
- Inputs:

- folder_id(string): ID of the folder to update
- name(string): New name for the folder

- Deletes a folder
- Input:

- folder_id(string): ID of the folder to delete

- Gets all lists/boards in a space
- Input:

- space_id(string): ID of the space

- 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)

- 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

- Gets all tasks in a list/board
- Input:

- list_id(string): ID of the list/board

- 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

- 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

- Gets details of a specific task
- Input:

- task_id(string): ID of the 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

- Updates a task's status
- Inputs:

- task_id(string): ID of the task
- status(string): New status for the 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

- Gets subtasks for a task
- Input:

- task_id(string): ID of the task

- Deletes a task
- Input:

- task_id(string): ID of the task to delete

- 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

- 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

- 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

- Adds a comment to a task
- Inputs:

- task_id(string): ID of the task
- comment_text(string): Text content of the comment

- 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

- 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

- Deletes multiple tasks at once
- Input:

- task_ids(string[]): List of task IDs to delete

- Gets all custom fields for a list/board
- Input:

- list_id(string): ID of the list/board

- Sets a custom field value for a task using field ID
- Inputs:

- task_id(string): ID of the task
- field_id(string): ID of the custom field
- value(any): Value to set for the custom field

- Sets a custom field value for a task using field name
- Inputs:

- task_id(string): ID of the task
- list_id(string): ID of the list (needed to find custom field by name)
- field_name(string): Name of the custom field
- value(any): Value to set for the custom field

- Removes a custom field value from a task
- Inputs:

- task_id(string): ID of the task
- field_id(string): ID of the custom field

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

When usinguvno specific installation is needed. We will useuvxto directly runclickup-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).

Alternatively, you can installclickup-mcp-servervia pip:

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

python -m clickup_mcp_server --api-key YOUR_API_KEY

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

The API key can be provided in two ways:
- Command-line argument:--api-key YOUR_API_KEY
- Environment variable in a.envfile:

CLICKUP_API_KEY=your_api_key_here

Add this to yourclaude_desktop_config.json:

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

For manual installation, add the following JSON block to your User Settings (JSON) file in VS Code. You can do this by pressingCtrl + Shift + Pand typingPreferences: Open Settings (JSON).

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

Note that themcpkey is not needed in the.vscode/mcp.jsonfile.

{ "mcp": { "servers": { "clickup": { "command": "uvx", "args": ["clickup-mcp-server"], "env": { "CLICKUP_API_KEY": "YOUR_API_KEY" } } } } }
{ "mcp": { "servers": { "clickup": { "command": "docker", "args": [ "run", "--rm", "-i", "-e", "CLICKUP_API_KEY=YOUR_API_KEY", "mcp/clickup" ] } } } }
"context_servers": [ "mcp-server-clickup": { "command": { "path": "uvx", "args": ["clickup-mcp-server"] }, "env": { "CLICKUP_API_KEY": "YOUR_API_KEY" } } ],
"context_servers": { "mcp-server-clickup": { "command": { "path": "python", "args": ["-m", "clickup_mcp_server"] }, "env": { "CLICKUP_API_KEY": "YOUR_API_KEY" } } },

Claude can help you manage your ClickUp tasks:
-

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

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

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

Custom Field Management: Claude can work with custom fields to enhance your workflow:

- List all custom fields in a project to see available metadata
- Set custom field values like "GitHub Pull Request URL" when creating PRs
- Update project tracking fields like "Sprint", "Story Points", or "Priority"
- Example: "Create a PR for this branch and add the GitHub URL to the 'GitHub Pull Request URL' custom field in the related ClickUp task"

Run your server with the-vor-vvflag for increased verbosity:

You can use the MCP inspector to debug the server:

npx @modelcontextprotocol/inspector uvx clickup-mcp-server
git clone https://github.com/yourusername/clickup-mcp-server.git cd clickup-mcp-server

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

All core task management features have been implemented:

All workspace organization features have been implemented:

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

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.