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 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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