ClickUp MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MAX_RETRIES | No | Max retry attempts for failed/rate-limited requests | 3 |
| API_BASE_URL | No | ClickUp API base URL | https://api.clickup.com/api/v2 |
| WORKSPACE_ID | Yes | Your ClickUp workspace (team) ID | |
| REQUEST_TIMEOUT | No | HTTP request timeout in seconds | 15.0 |
| CLICKUP_API_TOKEN | Yes | Personal API token from https://app.clickup.com/settings/apps | |
| SPRINTS_FOLDER_ID | No | Folder ID within the space that holds sprint lists. Required for sprint tools. | |
| CLICKUP_TEAM_LABELS | No | JSON mapping of team names to label IDs | |
| DEVELOPMENT_SPACE_ID | No | Space ID containing your sprints. Required for sprint tools. | |
| COMPONENT_TEAM_FIELD_ID | No | Custom field ID for Component/Team labels |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_current_sprintA | Get the current sprint's info (list ID, name, date range). Auto-detected by date. Cached per session — use refresh_sprint_cache if the sprint rolled over. Requires DEVELOPMENT_SPACE_ID and SPRINTS_FOLDER_ID to be configured. |
| refresh_sprint_cacheA | Clear and re-fetch the cached sprint info. Use when a sprint rolls over mid-session or if get_current_sprint returns stale data. |
| get_sprint_tasksA | List tasks in the current sprint, optionally filtered. Includes tasks directly in the sprint list and tasks tagged for the sprint. Args: assignee: Filter by assignee. Use "me" for the current user, or a username. status: Filter by status (e.g., "in progress", "done", "todo"). |
| get_taskA | Get detailed info for a task. Accepts custom IDs (DEV-1234) or UUIDs. Returns status, assignees, description, subtasks, priority, team label, and more. Args: task_id: Task ID (custom like DEV-1234 or UUID). include_subtasks: Include subtask details (default: true). |
| create_taskA | Create a new task in a specific list. For sprint tasks, prefer create_sprint_task which auto-resolves the sprint list. Args: name: Task title. list_id: Target list ID. Use get_current_sprint or get_workspace_hierarchy to find IDs. Always required, but if parent_task_id names a task in a different list, the task is created there instead (ClickUp requires parent and child to share a list) — see list_id_override in the result. description: Task description (markdown supported). assignee_id: User ID to assign. Use get_current_user to find your ID. status: Initial status. Omitted unless given, so the target list's own default status applies. ClickUp configures status sets per list, so no value is safe to impose on an arbitrary list_id. points: Story points. team: Component/Team label. See list_teams for available values. parent_task_id: Parent task ID for creating subtasks. Its list wins over list_id when the two differ. priority: 1=urgent, 2=high, 3=normal, 4=low. |
| create_sprint_taskA | Create a task in the current sprint with sensible defaults. Auto-resolves the current sprint list and (optionally) the current user. If parent_task_id lives in a different list than the current sprint, the task is created there instead (ClickUp requires parent and child to share a list) and will not appear in sprint queries — check list_id_override in the result. Requires DEVELOPMENT_SPACE_ID and SPRINTS_FOLDER_ID to be configured. Args: name: Task title. team: Component/Team label. See list_teams for available values. description: Task description. points: Story points. Omitted unless given. assign_to_me: Assign to the authenticated user (default: true). parent_task_id: Parent task ID (custom like DEV-1234 or UUID) for creating subtasks. status: Initial status. Omitted unless given, so the sprint list's own default status applies. Pass an explicit value to override it. |
| update_taskA | Update fields on a task. Only specified fields are changed. Args: task_id: Task ID (custom like DEV-1234 or UUID). name: New task name. status: New status (e.g., "done", "in progress", "in review"). priority: 1=urgent, 2=high, 3=normal, 4=low. points: Story points. description: Replace entire description. Use append_description to add text instead. append_description: Append text to existing description (separated by newline). assignee_add: User ID to add as assignee. assignee_remove: User ID to remove from assignees. parent_task_id: Parent task ID to nest this task under (custom like DEV-1234 or UUID), including re-parenting a task that has never had a parent. Setting this also moves the task to the parent's list. |
| search_tasksA | Search tasks across the workspace. Supports filtering by query text, status, assignee, list, and dates. Returns paginated results with has_more indicator. Note: Args: query: Text search query (client-side filtered — see note above). status: Filter by status(es). assignee_id: Filter by assignee user ID. Use get_current_user for your ID. list_id: Limit to a specific list. include_closed: Include closed/done tasks (default: false). date_created_after: ISO date or Unix millis — only tasks created after this. date_updated_after: ISO date or Unix millis — only tasks updated after this. page: Page number (0-indexed). Check has_more in response for pagination. subtasks: Include subtasks in results (default: false). |
| get_my_tasksA | Get tasks assigned to the current user across all lists. Convenience wrapper around search_tasks with automatic user resolution. Args: query: Text search query (client-side filtered — see search_tasks). status: Filter by status(es). list_id: Limit to a specific list. date_created_after: ISO date or Unix millis — only tasks created after this. date_updated_after: ISO date or Unix millis — only tasks updated after this. include_closed: Include closed/done tasks (default: false). page: Page number (0-indexed). subtasks: Include subtasks in results (default: true). Inverts search_tasks' own default, since a personal task list is mostly subtasks; pass false to match search_tasks. |
| get_list_tasksA | Get all tasks in a specific list (backlog, epic, tech debt, etc.). Args: list_id: List ID. Use get_workspace_hierarchy to discover list IDs. status: Filter by status (e.g., "todo", "in progress"). include_closed: Include closed/done tasks (default: false). subtasks: Include subtasks in results (default: true). Inverts search_tasks' own default; pass false to match it. |
| move_task_to_listA | Move a task to a different list. Args: task_id: Task ID (custom like DEV-1234 or UUID). list_id: Target list ID. |
| bulk_update_tasksA | Update multiple tasks at once. Verify the task_ids list before calling. This is a convenience tool that applies the same update to multiple tasks. Partial failures are reported — some tasks may succeed while others fail. Args: task_ids: List of task IDs (custom or UUID). Double-check before calling. status: Set status on all tasks. assignee_add: Add assignee (user ID) to all tasks. team: Set Component/Team label on all tasks. points: Set story points on all tasks. |
| ensure_task_fieldsA | Check (and optionally fix) that tasks have required fields set. By default checks assignee, team, and points. Useful for sprint compliance. Args: task_ids: List of task IDs to check. required_fields: Fields to check. Default: ["assignee", "team", "points"]. fix: If true, apply defaults to fill missing fields. If false, report only. default_assignee_id: User ID to assign if assignee is missing and fix=true. default_team: Team label to set if team is missing and fix=true. default_points: Points to set if missing and fix=true. |
| delete_taskA | Delete a task permanently. This action cannot be undone. Args: task_id: Task ID, either a custom ID or ClickUp UUID. |
| add_task_commentA | Add a comment to a task. Args: task_id: Task ID (custom like DEV-1234 or UUID). comment_text: Comment text (plain text). |
| get_task_commentsA | Get all comments on a task. Args: task_id: Task ID (custom like DEV-1234 or UUID). |
| get_sprint_reportA | Generate a structured sprint status report. Returns tasks grouped by assignee with status summary, at-risk flags, unassigned task warnings, and optionally linked GitHub PRs. Requires DEVELOPMENT_SPACE_ID and SPRINTS_FOLDER_ID to be configured. Args: team: Filter to a Component/Team label (e.g., "backend", "devops"). If omitted, includes all tasks in the sprint. Requires CLICKUP_TEAM_LABELS to be configured for filtering. include_pr_links: Extract GitHub PR links from task descriptions and comments (default: true). Adds latency for comment fetching. |
| get_current_userA | Get the current authenticated user's info (ID, username, email). Cached per session. Use the ID for assignee operations. |
| get_workspace_hierarchyA | Browse the workspace folder/list hierarchy. Returns folders and lists in the given space. Use this to discover list IDs for creating tasks or browsing backlogs. Args: space_id: Space to browse. Defaults to the configured DEVELOPMENT_SPACE_ID. max_depth: How deep to recurse (1=folders only, 2=folders+lists, 3=+sublists). |
| task_urlA | Get the ClickUp URL for a task. Accepts custom IDs (DEV-1234) or UUIDs. Args: task_id: Task ID (custom like DEV-1234 or UUID). |
| add_tag_to_taskB | Add a tag to a task. Args: task_id: Task ID (custom like DEV-1234 or UUID). tag_name: Tag name to add. |
| list_teamsA | List available Component/Team labels and their IDs. Use team names (lowercase) when creating or updating tasks with a team parameter. Returns the configured CLICKUP_TEAM_LABELS mapping, or an empty object if not configured. |
| check_team_labelsA | Audit configured team label IDs against live ClickUp field options. Args: space_id: Space to check. Defaults to the configured development space. |
| create_docA | Create a native ClickUp Doc with one page of content, and return its URL. Use this for shareable reports/RFCs that need real markdown tables and headers — a task description degrades tables and isn't a durable review surface. The doc is created PRIVATE by default; sharing it with specific people or the workspace is a separate step you take in the ClickUp UI, not something this tool does. Two sequential API calls (create doc, then create its page) with no rollback: ClickUp's v3 Docs API exposes no delete endpoint for docs or pages, so if the page call fails after the doc call succeeds, an empty Doc is left behind — check the workspace for it if this raises. For the same reason, correcting a mistake (wrong content, a bad title) should use update_doc_page on the existing doc_id/page_id rather than calling create_doc again — a second create_doc call orphans the first Doc with no way to remove it. Args: name: Doc title. content: Page body. Markdown by default (see content_format). parent_id: Space/Folder/List/Workspace ID to create the doc under. Defaults to the configured development space — which is a Space, so if parent_type is "workspace"/"everything" you must pass a matching parent_id explicitly or the doc lands in the wrong place. parent_type: One of "space", "folder", "list", "everything", "workspace" — must match what parent_id actually refers to. content_format: "text/md" (default) or "text/plain". visibility: "PRIVATE" (default), "PUBLIC", "PERSONAL", or "HIDDEN". |
| update_doc_pageA | Overwrite an existing Doc page's content in place, and return its URL. Use this to correct a previously published Doc (wrong content, a bad title) instead of calling create_doc again — the v3 Docs API has no delete endpoint, so a second create_doc call orphans the first Doc with no way to remove it. This edits the original doc_id/page_id directly, so the existing URL keeps working. Always replaces the full page content — the underlying API also supports append/prepend edit modes, but this tool doesn't expose them: the shared HTTP client retries transport failures, and a retry after a lost response (server applied the edit, client never saw it) would silently double-apply an append/prepend. A retried replace converges to the same content either way, so it's safe. Args: doc_id: The Doc's ID, as returned by create_doc. page_id: The page's ID, as returned by create_doc. content: New page content, replacing the page in full. name: New page title. Leave unset to keep the existing title. content_format: "text/md" (default) or "text/plain". |
| get_docA | Get a Doc's metadata — name, parent location, visibility. Use get_doc_page or get_doc_pages to read page content. ClickUp's public API has no Doc-comment endpoint, so this cannot retrieve comment threads on a Doc. Args: doc_id: The Doc's ID, as returned by create_doc. |
| get_doc_pagesA | Get every page of a Doc, content included, as a flat list. Use this to read a whole multi-page Doc in one call. Sub-pages (nested under a parent page in the ClickUp v3 response) are flattened into the same list alongside their parent, not dropped. For a single known page, get_doc_page avoids fetching pages you don't need. Args: doc_id: The Doc's ID, as returned by create_doc. content_format: "text/md" (default) or "text/plain". max_page_depth: How many levels of nested sub-pages to include. -1 (default) returns every page. |
| get_doc_pageA | Get a single Doc page's content. Mirrors update_doc_page's doc_id/page_id pair — most useful when you already have both IDs from a prior create_doc/update_doc_page call. Args: doc_id: The Doc's ID, as returned by create_doc. page_id: The page's ID, as returned by create_doc. content_format: "text/md" (default) or "text/plain". |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/asaphe/clickup-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server