{
  "markdown": "# clickup-mcp\n\n[![npm version](https://img.shields.io/npm/v/@cavort-it-systems/clickup-mcp.svg)](https://www.npmjs.com/package/@cavort-it-systems/clickup-mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![MCP SDK](https://img.shields.io/badge/MCP%20SDK-1.12.1-blue.svg)](https://modelcontextprotocol.io)\n\nLightweight ClickUp MCP server focused on task management. 39 tools with **token-optimized responses** - API responses automatically slimmed from thousands of characters to essentials.\n\n## Why This Server?\n\nClickUp's API returns extremely verbose JSON. This server strips it down:\n\n| Response | Before | After | Reduction |\n|----------|--------|-------|-----------|\n| `clickup_whoami` | ~3,500 chars | ~160 chars | **95%** |\n| `clickup_create_comment` | ~1,500 chars | ~38 chars | **97%** |\n\nLess tokens = faster responses, lower costs, more context for your AI.\n\n## Installation\n\n```bash\nnpm install -g @cavort-it-systems/clickup-mcp\n```\n\nOr run directly:\n\n```bash\nnpx @cavort-it-systems/clickup-mcp\n```\n\n## Configuration\n\n### Claude Code CLI\n\n```bash\nclaude mcp add clickup -e CLICKUP_API_TOKEN=your-token -- npx @cavort-it-systems/clickup-mcp\n```\n\n### Claude Desktop / Manual\n\nAdd to your MCP config (`~/.claude.json` or Claude Desktop settings):\n\n```json\n{\n  \"mcpServers\": {\n    \"clickup\": {\n      \"command\": \"npx\",\n      \"args\": [\"@cavort-it-systems/clickup-mcp\"],\n      \"env\": {\n        \"CLICKUP_API_TOKEN\": \"your-token\"\n      }\n    }\n  }\n}\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/cvrt-jh/clickup-mcp.git\ncd clickup-mcp\nnpm install && npm run build\n```\n\nThen configure with the built path:\n\n```bash\nclaude mcp add clickup -e CLICKUP_API_TOKEN=your-token -- node /path/to/clickup-mcp/build/index.js\n```\n\n## Get Your API Token\n\n1. Go to ClickUp Settings > Apps\n2. Generate a Personal API Token\n3. Set as `CLICKUP_API_TOKEN`\n\n## Response Slimming\n\nAll responses are automatically trimmed to save tokens. The ClickUp API returns extremely verbose JSON - this server strips it down to what matters.\n\n**`clickup_whoami`** - from ~3,500 chars to ~160:\n```json\n// Before (ClickUp API raw)\n{\"user\":{\"id\":12345678,\"username\":\"Jane Doe\",\"email\":\"jane@example.com\",\"color\":\"#0388d1\",\n\"profilePicture\":\"https://attachments.clickup.com/...\",\"initials\":\"JD\",\n\"week_start_day\":1,\"global_font_support\":true,\"timezone\":\"Europe/Berlin\"},\n\"teams\":{\"teams\":[{\"id\":\"99999999\",\"name\":\"My Workspace\",\"color\":\"#40BC86\",\n\"avatar\":\"https://attachments2.clickup.com/...?Expires=...&Key-Pair-Id=...&Signature=...\",\n\"members\":[{\"user\":{\"id\":11111111,\"username\":\"Bob Smith\",\"email\":\"bob@example.com\",\n\"color\":\"#aa2fff\",\"profilePicture\":null,\"initials\":\"BS\",\"role\":4,\"role_subtype\":2,\n\"role_key\":\"guest\",\"custom_role\":null,\"last_active\":\"...\",\"date_joined\":\"...\",\n\"date_invited\":\"...\"},\"invited_by\":{\"id\":22222222,...},\n\"can_see_time_spent\":true,...}, ...]}]}}\n\n// After (slimmed)\n{\"id\":12345678,\"username\":\"Jane Doe\",\"email\":\"jane@example.com\",\n\"timezone\":\"Europe/Berlin\",\"workspaces\":[{\"id\":\"99999999\",\n\"name\":\"My Workspace\",\"member_count\":4}]}\n```\n\n**`clickup_create_comment`** - from ~1,500 chars to 38:\n```json\n// Before\n{\"id\":90150191300876,\"hist_id\":\"...\",\"date\":1770053982842,\n\"version\":{\"object_type\":\"comment\",\"object_id\":\"...\",\"workspace_id\":99999999,\n\"operation\":\"c\",\"data\":{\"context\":{\"root_parent_type\":1,\"is_chat\":false,\n\"audit_context\":{\"userid\":12345678,\"current_time\":...,\"route\":\"*\"},...},...},...}}\n\n// After\n{\"id\":90150191300876,\"date\":1770053982842}\n```\n\n**What gets stripped:**\n\n| Field | Where | Why |\n|-------|-------|-----|\n| `features{}` | spaces | ~50 lines of boolean flags per space |\n| `sharing{}`, `permission_level` | tasks | Internal access config, not useful |\n| `watchers[]` | tasks | Usually same as assignees |\n| Full user objects | everywhere | Reduced to `{id, username, email}` |\n| `profilePicture`, `initials`, `color` | users | Visual metadata, not useful for LLMs |\n| `version{}` blobs | comment/reply creates | Internal versioning data |\n| `invited_by`, `profileInfo` | members | Invitation metadata |\n| Pretty-print JSON | all responses | Compact single-line output |\n| Empty arrays | tasks | `checklists`, `dependencies`, `custom_fields` omitted when empty |\n\n## Tools (37)\n\n### Navigation (7)\n- `clickup_whoami` - Current user + workspaces\n- `clickup_get_spaces` - Spaces in workspace\n- `clickup_get_folders` - Folders in space\n- `clickup_get_lists` - Lists in folder or space\n- `clickup_get_list` - Single list details\n- `clickup_create_list` - Create list in folder or space\n- `clickup_delete_list` - Delete a list (permanent)\n\n### Task CRUD (5)\n- `clickup_get_task` - Get task by ID\n- `clickup_create_task` - Create task with all fields\n- `clickup_update_task` - Update any task field\n- `clickup_get_tasks` - List tasks in a list\n- `clickup_search_tasks` - Search tasks across workspace\n\n### Custom Fields (1)\n- `clickup_set_custom_field` - Set custom field value\n\n### Tags (6)\n- `clickup_get_space_tags` - List space tags\n- `clickup_create_space_tag` - Create tag\n- `clickup_edit_space_tag` - Edit tag\n- `clickup_delete_space_tag` - Delete tag\n- `clickup_add_tag_to_task` - Tag a task\n- `clickup_remove_tag_from_task` - Untag a task\n\n### Checklists (6)\n- `clickup_create_checklist` - Create checklist\n- `clickup_edit_checklist` - Edit checklist\n- `clickup_delete_checklist` - Delete checklist\n- `clickup_create_checklist_item` - Add item\n- `clickup_edit_checklist_item` - Edit item\n- `clickup_delete_checklist_item` - Delete item\n\n### Dependencies (4)\n- `clickup_add_dependency` - Add dependency\n- `clickup_delete_dependency` - Remove dependency\n- `clickup_add_task_link` - Link tasks\n- `clickup_delete_task_link` - Unlink tasks\n\n### Comments (5)\n- `clickup_create_comment` - Add comment\n- `clickup_get_comments` - Get comments\n- `clickup_update_comment` - Edit/resolve comment\n- `clickup_create_reply` - Threaded reply\n- `clickup_get_replies` - Get replies\n\n### Delete Task (1)\n- `clickup_delete_task` - Delete a task\n\n### Multi-List Membership (2)\n- `clickup_add_task_to_list` - Add a task to an **additional** list (multi-homing)\n- `clickup_remove_task_from_list` - Remove a task from an additional list\n\n> **These do not move a task.** The ClickUp v2 API has no move-between-lists\n> endpoint. Verified against the live API 2026-08-12: `POST /list/{list}/task/{task}`\n> adds a secondary location and leaves the home list unchanged, while a `list_id`\n> in `PUT /task/{id}` returns HTTP 200 and is silently ignored. To genuinely move a\n> task and keep its custom ID and history, use the ClickUp web UI (right-click ->\n> Move). Multi-list membership also requires the paid Tasks-in-Multiple-Lists feature.\n\n### Workspace Members (2)\n- `clickup_get_workspace_members` - All workspace members\n- `clickup_get_list_members` - List-specific members\n\n## Architecture\n\n```\nsrc/\n  index.ts          # Entry: McpServer + StdioServerTransport\n  client.ts         # ClickUp API v2 fetch wrapper\n  types.ts          # Shared Zod schemas + jsonResult helper\n  slim.ts           # Response slimming transformers\n  tools/\n    navigation.ts   # 7 tools\n    tasks.ts        # 9 tools (CRUD + custom fields + delete + multi-list)\n    tags.ts         # 6 tools\n    checklists.ts   # 6 tools\n    dependencies.ts # 4 tools\n    comments.ts     # 5 tools\n    members.ts      # 2 tools\n```\n\n## License\n\nMIT\n",
  "bytes": 7398,
  "sha": "eaaa30c13da1f91463ec6cb4114bd741f40035aa6ce112cd4ab08ed5ee596b31",
  "repo_slug": "cvrt-jh/clickup-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_cvrt_jh_clickup_mcp_410b3ac1/readme"
}