Custom ClickUp
FreeNot checkedLocal MCP server for essential ClickUp workflows over stdio, exposing a bounded set of tools for search, task management, comments, tags, and workspace hierarch
About
Local MCP server for essential ClickUp workflows over stdio, exposing a bounded set of tools for search, task management, comments, tags, and workspace hierarchy.
README
Local MCP server for the essential ClickUp workflows. It runs over stdio, uses one ClickUp personal API token per process, and exposes a deliberately bounded P0 tool set.
Requirements
- Node.js 20 or newer
- A ClickUp personal API token
- Access to a disposable ClickUp Workspace for smoke tests
Install and build
npm ci
npm run build
Set secrets through the process environment or the MCP client's secret store. Do not commit a real token to an MCP configuration file.
export CLICKUP_API_TOKEN="pk_replace_me"
export CLICKUP_DEFAULT_WORKSPACE_ID="123456"
npm start
The process communicates through standard input/output. Seeing no ordinary output on stdout is expected; operational logs are JSON lines on stderr.
MCP client configuration
Use the absolute path to the built entry point:
{
"mcpServers": {
"clickup": {
"command": "node",
"args": ["/absolute/path/to/custom-clickup-mcp/dist/index.js"],
"env": {
"CLICKUP_API_TOKEN": "<from-your-client-secret-store>",
"CLICKUP_DEFAULT_WORKSPACE_ID": "123456"
}
}
}
}
Any client that supports MCP over stdio can launch the same command. The SDK serves the current MCP protocol and negotiates the supported legacy era by default.
Configuration
| Variable | Required | Default | Purpose |
|---|---|---|---|
CLICKUP_API_TOKEN |
yes | — | Personal ClickUp API token. Never logged or persisted. |
CLICKUP_DEFAULT_WORKSPACE_ID |
no | — | Default Workspace when a tool does not receive workspace_id. |
CLICKUP_TOOL_PROFILE |
no | full |
Tool catalog: all 40 tools with full, or the compact common-workflow catalog with core. |
CLICKUP_ENABLE_DESTRUCTIVE |
no | false |
Allows confirmed Task/comment deletion, task merging, and Custom Field value removal. |
CLICKUP_ENABLE_BULK_WRITES |
no | false |
Allows confirmed bulk task writes and multi-field Custom Field writes. |
CLICKUP_BULK_MAX_ITEMS |
no | 25 |
Per-call bulk limit; maximum allowed value is 100. |
CLICKUP_SEARCH_MAX_PAGES |
no | 5 |
Default Task pages scanned; maximum allowed value is 20. |
CLICKUP_REQUEST_TIMEOUT_MS |
no | 15000 |
Timeout for each upstream API request. |
.env.example documents the same values, but the server intentionally does not load .env files itself.
Tools
The default full profile exposes exactly 40 tools in P0. Set
CLICKUP_TOOL_PROFILE=core to expose only the common search, Task, comment, Tag,
hierarchy, and assignee-resolution workflow. The compact profile contains 14 tools and
reduces the tool-discovery payload without changing any tool's request or response shape.
Search
search_workspacefilter_tasks
search_workspace performs a bounded API sweep over Tasks, Spaces, Folders, and Lists. It does not search Docs. A truncated result includes a continuation cursor and scan counters; it never walks an unbounded Workspace implicitly.
filter_tasks composes tags, statuses, assignees, List/Folder/Space scopes, due and completion date ranges, task types, subtask inclusion, and sorting in one server-side request. Arrays are OR within one dimension and dimensions are ANDed. Like the other searches, each call is bounded by limit and max_pages and returns a continuation cursor when truncated.
Task management
create_taskget_taskupdate_taskset_task_custom_fieldsget_custom_fieldsdelete_taskmerge_taskscreate_bulk_tasksupdate_bulk_tasks
create_task and update_task accept either description for plain text or
markdown_description for formatted Markdown, but not both. The server maps
markdown_description to ClickUp's upstream markdown_content field. The same input
contract applies to items in create_bulk_tasks and update_bulk_tasks.
time_estimate is expressed in minutes; the server converts it to the milliseconds ClickUp
expects. update_task clears an estimate when it receives an explicit null.
priority accepts either a ClickUp label (urgent, high, normal, low) or the matching
wire number (1 through 4). The scale is fixed at those four values in every Workspace.
update_task clears a priority when it receives an explicit null.
create_task and update_task accept task_type as either a custom_item_id such as 7 or
a display name such as Bug, matched case-insensitively against the Workspace task types plus
the built-in Task and Milestone. An unmatched or ambiguous name fails with
TASK_TYPE_NOT_FOUND or TASK_TYPE_AMBIGUOUS, lists the candidates, and writes nothing.
update_task resets a task to the built-in Task type when it receives an explicit null.
Resolution needs a Workspace, so pass workspace_id when CLICKUP_DEFAULT_WORKSPACE_ID is
unset; a bulk call resolves the type list once for every item.
get_custom_fields accepts a Task, List, Folder, Space, or Workspace location and returns
field IDs, types, applicability metadata, and dropdown/label option UUIDs. Task-scoped
discovery automatically resolves the home List and excludes fields that do not apply to
the Task's custom task type.
Attachments
request_attachment_uploadattach_task_filedownload_task_attachment
Uploads use a two-step flow: stage an explicit local file path, a base64 payload, or an
HTTPS URL (optionally with an Authorization header),
then pass the short-lived upload_id to attach_task_file. Staged payloads expire after
ten minutes, are consumed only after a successful multipart upload, and are limited to
25 MiB to keep MCP messages and process memory bounded. Downloads can return ClickUp's
signed URL or write the file to an explicit local path; existing files are preserved unless
overwrite: true is supplied.
Comments
get_task_commentsget_threaded_repliescreate_commentcreate_task_commentupdate_commentdelete_comment
create_comment targets a Task, List, or Chat view, can create a threaded reply with
reply_to_id, and supports user or group assignment. create_task_comment remains as a
compatibility tool for its original Task-only contract.
Tags
add_tag_to_taskremove_tag_from_task
Task relationships
add_task_linkremove_task_linkadd_dependencyremove_dependency
Move and additional Lists
move_task_to_listadd_task_to_listremove_task_from_list
add_task_to_list and remove_task_from_list require the ClickUp Tasks in Multiple Lists ClickApp. The removal tool refuses to remove a Task from its home List.
Workspace hierarchy
get_workspace_hierarchycreate_list_in_spacecreate_list_in_folderget_listupdate_listget_foldercreate_folderupdate_folder
Members and assignees
get_workspace_membersfind_member_by_nameresolve_assignees
Member resolution returns candidates instead of choosing automatically when a name or email is ambiguous.
Safe writes
Task/comment deletion, task merging, Custom Field removals, and multi-item writes use a two-step flow:
- Call the tool with
dry_run: trueto receive the exact preview and a short-lived confirmation token. - Enable the relevant environment flag and call again with the unchanged payload,
dry_run: false,confirm: true, and the confirmation token.
Confirmation tokens expire after ten minutes, are tied to the exact operation payload, and can only be consumed once. Bulk operations use a maximum concurrency of three, have no implicit rollback, and report the result of every item.
set_task_custom_fields also defaults to preview mode. A single non-destructive field update may be executed with dry_run: false directly; removals and multi-field changes require the corresponding feature flag plus confirmation. Field applicability and value shapes are validated before any write begins.
Errors and limits
Tool failures return a structured error with code, message, retryable, and optional details. Read requests retry transient 408, 429, and 5xx failures up to three attempts. Writes are not automatically repeated after an uncertain failure.
The server observes ClickUp rate-limit headers. Search and bulk calls are intentionally bounded because ClickUp enforces limits per token and Workspace plan.
Development
npm run typecheck
npm run lint
npm test
npm run build
Tests use mocked ClickUp responses and in-memory MCP transports. CI must not use a production token. A final manual smoke test should use a sandbox Workspace and disposable Tasks.
Troubleshooting
CONFIG_MISSING: provideCLICKUP_API_TOKENthrough the process environment.WORKSPACE_REQUIRED: configureCLICKUP_DEFAULT_WORKSPACE_IDor passworkspace_idto the tool.WORKSPACE_NOT_AUTHORIZED: reconnect with a token that can access the configured Workspace.CLICKUP_HTTP_429: reduce the search/bulk limits and wait for the reset time.CONFIRMATION_MISMATCH: repeat the preview after changing any delete or bulk payload.- Additional-List errors: enable Tasks in Multiple Lists in the ClickUp Workspace.
Architecture
MCP stdio → tool registry and policies → domain tool modules → ClickUpClient → ClickUp API v2/v3
The stdio transport starts immediately; ClickUp credentials and the optional default Workspace are validated lazily before the first tool operation. The API client centralizes timeouts, pagination primitives, rate limiting, retries, error normalization, and redacted telemetry. Hierarchy/member caches and confirmation state exist only in memory and are discarded when the process exits.
Installing Custom ClickUp
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/Blackklegend/custom-clickup-mcpFAQ
Is Custom ClickUp MCP free?
Yes, Custom ClickUp MCP is free — one-click install via Unyly at no cost.
Does Custom ClickUp need an API key?
No, Custom ClickUp runs without API keys or environment variables.
Is Custom ClickUp hosted or self-hosted?
A hosted option is available: Unyly runs the server in the cloud, no local setup required.
How do I install Custom ClickUp in Claude Desktop, Claude Code or Cursor?
Open Custom ClickUp on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Notion
Read and write pages in your workspace
by NotionLinear
Issues, cycles, triage — from Claude
by LinearGoogle Drive
Search and read your Drive files
by Googlemindsdb/mindsdb
Connect and unify data across various platforms and databases with [MindsDB as a single MCP server](https://docs.mindsdb.com/mcp/overview).
by mindsdbfulcradynamics/fulcra-context-mcp
MCP server for accessing personal health and biometric data including sleep stages, heart rate, HRV, glucose, workouts, calendar, and location via the Fulcra Li
by fulcradynamicsaymericzip/intlayer
A MCP Server that enhance your IDE with AI-powered assistance for Intlayer i18n / CMS tool: smart CLI access, access to the docs.
by aymericziprinadelph/Agent-MCP
A framework for creating multi-agent systems using MCP for coordinated AI collaboration, featuring task management, shared context, and RAG capabilities.
by rinadelphWhenLabs-org/when
Developer toolkit: auto-detect stack for AI context files, catch port conflicts, validate .env schemas, spot docs drift, audit dependency licenses, and time cod
by WhenLabs-orgBeltran12138/wecom-docs-mcp-server
WeCom (Enterprise WeChat) document operations via MCP: create, read, and edit Docs and Smartsheets (9 tools). Fills the doc-CRUD gap — existing WeCom MCP server
by Beltran12138madbonez/caldav-mcp
Universal MCP server for CalDAV protocol integration. Works with any CalDAV-compatible calendar server including Yandex Calendar, Google Calendar (via CalDAV),
by madbonezCompare Custom ClickUp with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All productivity MCPs
