MCP Server
clickup-cli includes a built-in Model Context Protocol server, allowing LLMs to interact with ClickUp through structured tool calls instead of shell commands.
143 tools covering 100% of the ClickUp API — every endpoint available via CLI is also available as an MCP tool.
Setup
Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"clickup": {
"command": "clickup",
"args": ["mcp", "serve"]
}
}
}
Cursor
Add to your Cursor MCP settings:
{
"mcpServers": {
"clickup": {
"command": "clickup",
"args": ["mcp", "serve"]
}
}
}
Claude Code
Add .mcp.json to your project root:
{
"mcpServers": {
"clickup-cli": {
"command": "/opt/homebrew/bin/clickup",
"args": ["mcp", "serve"]
}
}
}
Or generate it automatically:
clickup agent-config init --mcp
Note: Use the full path to clickup (run which clickup to find it). Use clickup-cli as the server name to avoid conflicts with other ClickUp MCP integrations.
Docker
Run the MCP server as a Docker container:
# Build
docker build -t clickup-cli .
# Run MCP server (stdio)
docker run -i --rm \
-v ~/.config/clickup-cli:/root/.config/clickup-cli \
clickup-cli mcp serve
Or configure with environment variable:
docker run -i --rm \
-e CLICKUP_TOKEN=pk_your_token \
-e CLICKUP_WORKSPACE=your_workspace_id \
clickup-cli mcp serve
Use in .mcp.json:
{
"mcpServers": {
"clickup-cli": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "CLICKUP_TOKEN=pk_your_token", "-e", "CLICKUP_WORKSPACE=your_workspace_id", "clickup-cli", "mcp", "serve"]
}
}
}
Prerequisites
Run clickup setup --token pk_your_token first, or create a project-level .clickup.toml:
clickup agent-config init --token pk_your_token --workspace 12345 --mcp
This creates both .clickup.toml (auth config) and .mcp.json (MCP server config) in one command.
Available Tools (143)
| Category | Tools | Count |
|---|---|---|
| Auth | whoami, auth_check | 2 |
| Workspaces | workspace_list, workspace_seats, workspace_plan | 3 |
| Spaces | space_list, space_get, space_create, space_update, space_delete | 5 |
| Folders | folder_list, folder_get, folder_create, folder_update, folder_delete | 5 |
| Lists | list_list, list_get, list_create, list_update, list_delete, list_add_task, list_remove_task | 7 |
| Tasks | task_list, task_get, task_create, task_update, task_delete, task_search, task_time_in_status, task_move, task_set_estimate, task_replace_estimates, task_add_dep, task_remove_dep, task_link, task_unlink, task_add_tag, task_remove_tag | 16 |
| Checklists | checklist_create, checklist_update, checklist_delete, checklist_add_item, checklist_update_item, checklist_delete_item | 6 |
| Comments | comment_list, comment_create, comment_update, comment_delete, comment_replies, comment_reply | 6 |
| Tags | tag_list, tag_create, tag_update, tag_delete | 4 |
| Custom Fields | field_list, field_set, field_unset | 3 |
| Task Types | task_type_list | 1 |
| Attachments | attachment_list, attachment_upload | 2 |
| Time Tracking | time_list, time_get, time_create, time_update, time_delete, time_start, time_stop, time_current, time_tags, time_add_tags, time_remove_tags, time_rename_tag, time_history | 13 |
| Goals | goal_list, goal_get, goal_create, goal_update, goal_delete, goal_add_kr, goal_update_kr, goal_delete_kr | 8 |
| Views | view_list, view_get, view_create, view_update, view_delete, view_tasks | 6 |
| Members | member_list | 1 |
| Users | user_get, user_invite, user_update, user_remove | 4 |
| Chat (v3) | chat_channel_list, chat_channel_create, chat_channel_get, chat_channel_update, chat_channel_delete, chat_channel_followers, chat_channel_members, chat_dm, chat_message_list, chat_message_send, chat_message_update, chat_message_delete, chat_reaction_list, chat_reaction_add, chat_reaction_remove, chat_reply_list, chat_reply_send, chat_tagged_users | 18 |
| Docs (v3) | doc_list, doc_get, doc_create, doc_pages, doc_get_page, doc_add_page, doc_edit_page | 7 |
| Webhooks | webhook_list, webhook_create, webhook_update, webhook_delete | 4 |
| Templates | template_list, template_apply_task, template_apply_list, template_apply_folder | 4 |
| Guests | guest_get, guest_invite, guest_update, guest_remove, guest_share_task, guest_unshare_task, guest_share_list, guest_unshare_list, guest_share_folder, guest_unshare_folder | 10 |
| Groups | group_list, group_create, group_update, group_delete | 4 |
| Roles | role_list | 1 |
| Shared | shared_list | 1 |
| Audit Logs | audit_log_query | 1 |
| ACLs | acl_update | 1 |
All tool names are prefixed with clickup_ (e.g., clickup_task_list).
How It Works
The MCP server uses JSON-RPC 2.0 over stdio. It reads requests from stdin and writes responses to stdout. The server uses the same HTTP client and authentication as the CLI commands, and returns token-efficient compact responses — the same field flattening as the CLI’s table output, but as JSON. Status objects, priority objects, assignee arrays, and timestamps are all flattened to simple values.
LLM ↔ JSON-RPC (stdio) ↔ clickup mcp serve ↔ ClickUp API
↓
Compact JSON response
(flattened, essential fields only)
CLI vs MCP
| CLI Mode (recommended) | MCP Mode | |
|---|---|---|
| Setup cost | ~1,000 tokens (once) | 143 tool schemas loaded into context |
| Setup | clickup agent-config inject |
Add to MCP server config |
| Output | Token-efficient tables (default) | Token-efficient compact JSON |
| Integration | Shell commands via agent | Native tool calls |
| Coverage | All ~130 endpoints | All ~130 endpoints (143 tools) |
| Best for | Claude Code, shell-based agents | Claude Desktop, Cursor, VS Code |
The CLI approach is preferred for token efficiency — it costs ~1,000 tokens once for the full command reference, while MCP tool schemas consume significantly more context per session. Both have 100% API coverage with token-efficient output.
Use MCP when your tool requires native tool integration (e.g., Claude Desktop doesn’t run shell commands).
Both modes deliver ~98% token reduction compared to raw API JSON. Both use the same authentication and config file.