ClickUp MCP

Integrate ClickUp project management with AI to manage tasks, lists, and spaces.


Properly Connect ClickUp to AI Agents and Agentic Workflows

A high-performance Model Context Protocol (MCP) server for managing tasks, checklists, sprints, comments, tags, spaces, lists, folders, files, docs, chat, and time using natural language.

⭐️ Proven Performance: 460+ Stars (from previous public repo) & thousands of weekly NPM downloads.
The industry-standard ClickUp integration for AI.


📚 Table of Contents

Links        Quick Start & Installation
• Features• Premium Access• Available Tools• Adv. Config• FAQ• Disclaimer OpenClaw Cursor VS Code Roo Code Claude Claude Code n8n Gemini CLI Antigravity Codex ChatGPT Augment Auggie Windsurf Other ➕ Add Agent

✨ Features


💎 Premium Access

This project transitioned from open-source to a paid model for sustainable full-time development and priority support. A license grants full, unrestricted access to all features across your agents⎯no limits.

Monthly ($9/mo)Annual ($59/yr)Lifetime ($89 w/ code)
• Pay-as-you-go flexibility• 3 device activations• Cancel anytimeSave 45% ($4.92/mo)• 3 device activations• Priority support all yearBest Value — One payment• 3 device activations25% OFF code: MAR25

⚡️ Instant Key Delivery (Polar.sh)   •   Setup takes less than 2 mins      


🚀 Quick Start

1. Prerequisites

  • License Key: See above

  • ClickUp API Key (Optional - not needed for Remote MCP)

  • ClickUp Team ID (Optional - not needed for Remote MCP)

    • Open ClickUp in your browser.
    • Look at the URL: https://app.clickup.com/1234567/v/li/987654321.
    • The first number (1234567) directly after clickup.com/ is your Team ID (Workspace ID).

2. Choose your MCP Host & Transport

1. Enable mcporter in ~/.openclaw/openclaw.json:

{"skills": {"allowBundled": ["mcporter"]}}

2. Configure & Auth Connect the server and authorize via browser (tokens are cached):

# Add ClickUp as a remote server
mcporter config add ClickUp https://clickup-mcp.taazkareem.com/mcp --auth oauth --header "X-License-Key=your-license-key"

# Authenticate session
mcporter auth ClickUp

Optional: Multiple Personas The most robust and flexible way to manage personas is to define multiple named configurations in your agent-specific mcporter.json file. This isolates credentials and policies per-agent.

# Define an Auditor persona (Read-only) in your workspace config
mcporter --config <agent-workspace>/config/mcporter.json config add ClickUp-Auditor https://clickup-mcp.taazkareem.com/mcp \
  --header "X-Persona=auditor" \
  --header "X-License-Key=your-license-key" \
  --header "X-ClickUp-Key=your-api-key" \
  --header "X-ClickUp-Team-Id=your-team-id"

# Define a Task Worker persona (Daily CRUD) in the same or different workspace 
mcporter --config <agent-workspace-2>/config/mcporter.json config add ClickUp-Worker https://clickup-mcp.taazkareem.com/mcp \
  --header "X-Persona=task_worker" \
  --header "X-License-Key=your-license-key" \
  --header "X-ClickUp-Key=your-api-key" \
  --header "X-ClickUp-Team-Id=your-team-id"

# Now the OpenClaw sub-agent can see the optimized schema and call its focused tools like:
mcporter list ClickUp-Auditor --schema
mcporter call ClickUp-Auditor.get_workspace

mcporter list ClickUp-Worker --schema
mcporter call ClickUp-Worker.create_task listId="123456789" name="New Task"

Isolation: You can add X-Enabled-Tools or X-Disabled-Tools to mix and match tools and personas, or perhaps enable just a single tool. You can assign different ClickUp API Keys, Team IDs, or even different License Keys to each config/persona. Since the agent only reads the tool definitions and not the sensitive headers directly, this is the most secure way to handle multi-agent ClickUp configurations.

To see all available personas and what they do, see the Advanced Configuration section below.

Configuration Path: <project-root>/.cursor/mcp.json

Option A: Remote / Streamable HTTP (Easiest)

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key"
      }
    }
  }
}

Option B: Local / STDIO

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

Configuration Paths:

  • Global: ~/Library/Application Support/Code/User/mcp.json
  • Local: <project-root>/.vscode/mcp.json

Option A: Remote / Streamable HTTP (Easiest)

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key"
      }
    }
  }
}

Option B: Local / STDIO

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

Configuration Path: <project-root>/.roo/mcp.json

Option A: Remote / Streamable HTTP (Easiest)

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key"
      }
    }
  }
}

Option B: Local / STDIO

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

Configuration Path: ~/Library/Application Support/Claude/claude_desktop_config.json

Remote Setup (Requires mcp-remote adapter):

{
  "mcpServers": {
    "ClickUp": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://clickup-mcp.taazkareem.com/mcp",
        "--header", "X-License-Key: your-license-key"
      ]
    }
  }
}

Run this command in your terminal:

claude mcp add --transport http ClickUp https://clickup-mcp.taazkareem.com/mcp \
  --header "X-License-Key: your-license-key"

Option A: Remote / Streamable HTTP (Recommended)

  1. In n8n, add an "MCP Client" node.
  2. Set Connection Type to Streamable HTTP.
  3. Auth Type: Multiple Headers Auth.
  4. Header: X-License-Key Value: your-license-key
  5. URL: https://clickup-mcp.taazkareem.com/mcp

Option B: Self-Hosted Docker Run the container:

docker run -d -p 3231:3231 ghcr.io/taazkareem/clickup-mcp-server:latest

In n8n, use URL: http://host.docker.internal:3231/mcp

Configuration Path: ~/.gemini/settings.json

{
  "mcpServers": {
    "ClickUp": {
      "httpUrl": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": { "X-License-Key": "your-license-key" }
    }
  }
}

Configuration Path: ~/.gemini/antigravity/mcp_config.json

{
  "mcpServers": {
    "ClickUp": {
      "serverUrl": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": { "X-License-Key": "your-license-key" }
    }
  }
}

Codex clients (CLI, Desktop App, and VS Code extension) share a single source of truth for configuration.

Configuration Paths:

  • Global: ~/.codex/config.toml
  • Local: <project-root>/.codex/config.toml

Option A: Remote / Streamable HTTP (Easiest)

[mcp_servers.ClickUp]
url = "https://clickup-mcp.taazkareem.com/mcp"
http_headers = { "X-License-Key" = "your-license-key" }

Option B: Local / STDIO

[mcp_servers.ClickUp]
command = "npx"
args = ["-y", "@taazkareem/clickup-mcp-server@latest"]
env = {
  CLICKUP_API_KEY = "your-api-key",
  CLICKUP_TEAM_ID = "your-team-id",
  CLICKUP_MCP_LICENSE_KEY = "your-license-key"
}

Quick Tips:

  • Codex CLI: Run codex mcp list to verify. Use codex mcp add ... as a CLI alternative to editing the file.
  • VS Code Extension: Click ⚙ → MCP settings → Open config.toml.
  • Desktop App: Go to Settings → Integrations & MCP.

Note: Requires a Business, Enterprise, or Edu workspace with Developer Mode enabled.

  1. Enable Developer Mode: Ask your workspace admin to enable this under Workspace Settings → Permissions & Roles → Connected Data.
  2. Connect MCP: Go to Settings → Connectors and toggle Developer Mode on.
  3. Add Custom Connector:
    • Click Add connector (or "Create custom connector").
    • Choose MCP as the source type.
  4. Configure:
    • Server URL: https://clickup-mcp.taazkareem.com/mcp
    • Authentication: Add HTTP header X-License-Key: your-license-key.
  5. Use: Start a Developer Mode chat and select your ClickUp connector via Add sources.

Configuration Path: <project-root>/.augment/settings.json

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key"
      }
    }
  }
}

Run this command in your terminal:

auggie mcp add ClickUp --url https://clickup-mcp.taazkareem.com/mcp \
  --header "X-License-Key: your-license-key"

Configuration Path: <project-root>/.codeium/windsurf/mcp_config.json

Option A: Remote / Streamable HTTP (Easiest)

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key"
      }
    }
  }
}

Option B: Local / STDIO

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

For most MCP-compliant hosts (e.g. Smithery, MCP Inspector, custom GUIs):

  • Server URL: https://clickup-mcp.taazkareem.com/mcp
  • Auth Header: X-License-Key: your-license-key (Required for HTTP/SSE connections)

Advanced: OpenAI Agents SDK For developers building custom agents.

Python SDK:

from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp

async with MCPServerStreamableHttp(
    name="clickup",
    params={
        "url": "https://clickup-mcp.taazkareem.com/mcp",
        "headers": {"X-License-Key": "your-license-key"},
    },
) as server:
    agent = Agent(
        name="Assistant",
        instructions="Use the ClickUp MCP tools when helpful.",
        mcp_servers=[server],
    )
    result = await Runner.run(agent, "List my workspaces.")

3. Restart

Restart your MCP Host (e.g., Cursor IDE). The server will validate your License Key and start automatically.


🛠️ Available Tools

CategoryToolDescription
Workspaceget_workspaceGet workspace structure and metadata (hierarchy, members, plan, seats, shared items, custom task types)
get_workspace_seatsGet member and guest seat utilization (used, total, available)
get_workspace_planGet plan details for the workspace (plan_name, plan_id)
get_audit_logsRetrieve workspace audit logs (Enterprise only)
Taskscreate_taskCreate a task
get_taskGet single task details
update_taskModify task properties
move_taskMove task to new list
duplicate_taskCopy task
delete_taskRemove task
add_task_to_listAssociate task with additional list (TIML)
remove_task_from_listRemove task list association (TIML)
create_bulk_tasksCreate multiple tasks
update_bulk_tasksUpdate multiple tasks
move_bulk_tasksMove multiple tasks
delete_bulk_tasksDelete multiple tasks
get_workspace_tasksSearch tasks with Deep Search filtering
get_commentsGet comments on a task, list, or view
create_commentCreate a comment on a task, list, or view
update_commentEdit or resolve a comment
delete_commentDelete a comment
get_comment_repliesGet threaded replies for a comment
create_comment_replyReply to a comment in a thread
add_comment_reactionAdd an emoji reaction to a comment
remove_comment_reactionRemove an emoji reaction from a comment
get_comment_subtypesGet post subtype IDs for the workspace
add_task_linkLink two tasks together
get_task_linksGet task links
delete_task_linkRemove a task link
add_task_dependencySet a blocking dependency between tasks
delete_task_dependencyRemove a blocking dependency between tasks
Attachmentslist_attachmentsList attachments for a task or file custom field (v3)
get_attachmentGet a specific attachment by ID or name (v3)
upload_attachmentUpload a file to a task or file custom field (v3)
Checklistscreate_checklistAdd a checklist to a task
edit_checklistRename or reorder a checklist
delete_checklistDelete a checklist and all its items
create_checklist_itemAdd an item to a checklist
edit_checklist_itemUpdate a checklist item (name, resolved, assignee, nesting)
delete_checklist_itemRemove an item from a checklist
Sprintsget_active_sprintAuto-detect the currently active sprint; returns tasks if exactly one found
list_sprintsList all sprints in a folder
get_sprint_tasksGet tasks for a specific sprint list
Listslist_listsRetrieve lists in a space (folderless) or in a folder
get_listGet list details
create_listCreate a list in a space or folder
create_list_from_templateCreate a new list from a template
update_listUpdate list properties
delete_listDelete a list
move_listMove a list to a different space or folder (high-integrity)
set_list_permissionsUpdate list privacy and sharing (ACLs)
Custom Fieldslist_custom_fieldsList field definitions for a list, folder, or space
create_custom_fieldAdd a new field definition to a list
set_custom_field_valueSet a field value on a task
remove_custom_field_valueClear a field value from a task
Spaceslist_spacesList all spaces in the workspace
get_spaceGet space details
create_spaceCreate a new space
update_spaceUpdate space properties
delete_spaceDelete a space
set_space_permissionsUpdate space privacy and sharing (ACLs)
Goalslist_goalsList all goals in the workspace
get_goalGet a goal with its key results
create_goalCreate a new goal
update_goalUpdate a goal's properties
delete_goalDelete a goal
create_key_resultAdd a key result to a goal
update_key_resultUpdate a key result
delete_key_resultDelete a key result
Viewslist_viewsList views for a space, folder, list, or workspace
get_viewGet a single view
create_viewCreate a new view
update_viewUpdate a view
delete_viewDelete a view
get_view_tasksGet tasks in a view
Folderslist_foldersList all folders in a space
get_folderGet folder details and its contained lists
create_folderCreate a folder in a space
update_folderUpdate folder properties
delete_folderDelete a folder
move_folderMove a folder to a different space (high-integrity)
set_folder_permissionsUpdate folder privacy and sharing (ACLs)
create_folder_from_templateCreate a folder from a template in a space
Tagslist_space_tagsList all tags in a space
create_space_tagCreate a new space tag
update_space_tagUpdate a space tag's name or colors
delete_space_tagDelete a tag from a space
add_tag_to_taskAdd tag to task
remove_tag_from_taskRemove tag from task
Time Trackingget_time_entriesFetch historical time entries
get_current_time_entryGet currently running timer
start_time_entryStart tracking time for a task
stop_time_entryStop the active timer
add_time_entryManually log a time entry
update_time_entryModify an existing time entry
delete_time_entryDelete a time entry
get_time_entry_tagsFetch all workspace time entry tags
add_time_entry_tagsAdd a tag to a time entry
update_time_entry_tagsRename a workspace time entry tag globally
delete_time_entry_tagsRemove a tag from a time entry
get_time_entry_historyView edit history of a time entry
get_time_in_statusGet time-in-status for multiple tasks
Docslist_documentsList documents in a workspace or container
get_documentGet document metadata
create_documentCreate a new standalone document
list_document_pagesList all pages in a document
get_document_pageGet content for a single page
get_document_pagesGet content for multiple pages in one call
create_document_pageAdd a new page to a document
update_document_pageModify an existing page (replace/append/prepend)
Chatlist_chat_channelsList all channels in the workspace
get_chat_channelGet a single channel
create_chat_channelCreate a new channel
update_chat_channelUpdate a channel
delete_chat_channelDelete a channel
get_chat_channel_membersGet members of a channel
get_chat_channel_followersGet followers of a channel
create_chat_dmCreate a direct message channel
get_chat_messagesGet messages from a channel
create_chat_messageSend a message to a channel
update_chat_messageEdit a message
delete_chat_messageDelete a message
get_chat_message_repliesGet threaded replies to a message
create_chat_message_replyReply to a message in a thread
add_chat_reactionAdd an emoji reaction to a message
remove_chat_reactionRemove an emoji reaction
get_chat_reactionsGet all reactions on a message
get_chat_tagged_usersGet users tagged in a message
get_chat_message_subtypesGet post subtype IDs for the workspace
Webhookslist_webhooksList all webhooks in the workspace
create_webhookCreate a new webhook
update_webhookUpdate an existing webhook
delete_webhookDelete a webhook permanently
User Groupslist_user_groupsList all user groups in the workspace
create_user_groupCreate a new user group
update_user_groupRename a group or add/remove members
delete_user_groupDelete a user group
Guestsinvite_guestInvite a guest to the workspace (Enterprise)
get_guestGet guest details (Enterprise)
edit_guestEdit guest display name or permissions (Enterprise)
remove_guestRemove a guest from the workspace (Enterprise)
add_guest_to_taskGrant guest access to a task (Enterprise)
remove_guest_from_taskRevoke guest access from a task (Enterprise)
add_guest_to_listGrant guest access to a list (Enterprise)
remove_guest_from_listRevoke guest access from a list (Enterprise)
add_guest_to_folderGrant guest access to a folder (Enterprise)
remove_guest_from_folderRevoke guest access from a folder (Enterprise)
Task Templatesget_task_templatesList available workspace templates
create_task_from_templateCreate a task from a template
Feedbacksubmit_feedbackSubmit feedback or bug reports

See full documentation for parameters and advanced usage.


⚙️ Advanced Configuration

Filter Available Tools

💡 Pro Tip! Reduce context noise for the AI by limiting available tools.

Local (Environment Variable):

"ENABLED_TOOLS": "tool_1,tool_2,tool_3"

-or- Remote (Header):

"X-Enabled-Tools": "tool_1,tool_2,tool_3"

Preset Configurations

Simplify setup by using Personas. You can set a persona via the CLICKUP_MCP_PERSONA environment variable or the X-Persona HTTP header to automatically filter a set of tools.

Multiple personas can be combined (e.g., "X-Persona": "task_worker,time_specialist").

Local (Environment Variable):

"CLICKUP_MCP_PERSONA": "task_worker"

-or- Remote (Header):

"X-Persona": "task_worker"

💡 Need to customize? To view the exact tools included in each preset or to build a custom list based on a persona, see the Personas Reference Guide.


❓ FAQ

Why isn't this free anymore? Building reliable MCP integrations requires significant maintenance. Moving to a paid model allows us to support this as a product rather than a hobby, ensuring compatibility with API changes.

I have an old version. Will it stop working? Existing local clones will continue to work, but you will not receive updates, bug fixes, or support without a license.

How do I get support? Premium users get priority support. Please open an issue in this repository.


⚖️ Disclaimer

Originally developed as open source and refined during a consultancy with ClickUp, this project is now independently maintained.

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.

Related Servers