ClickUp MCP Server
Provides tools for managing ClickUp tasks and lists, including retrieving, creating, and updating tasks, with support for task details, assignees, due dates, and statuses.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ClickUp MCP Servershow me the open tasks from list 987654321"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ClickUp MCP Server
A Model Context Protocol (MCP) server that provides integration with the ClickUp API, allowing clients to interact with ClickUp tasks and lists through standardized MCP tools.
Overview
This server implements the MCP protocol to expose ClickUp functionality as tools that can be called by MCP-compatible clients. It supports retrieving, creating, updating, and getting details of tasks in ClickUp lists.
Related MCP server: ClickUp MCP Server
Origin
This MCP server implementation originated from the need to connect KiloCode with ClickUp, enabling seamless integration between the AI-powered code assistant and ClickUp's task management platform.
Features
Task Management: Get, create, and update ClickUp tasks
List Integration: Work with specific ClickUp lists
MCP Compliant: Full MCP protocol implementation using the official SDK
TypeScript: Written in TypeScript for type safety
Installation
Clone or download this repository
Install dependencies:
npm installBuild the project:
npm run build
Configuration
Environment Variables
Set the following environment variable before running the server:
CLICKUP_ACCESS_TOKEN: Your ClickUp API access token. You can generate this from your ClickUp account settings under "Apps" > "API Token".
Example:
export CLICKUP_ACCESS_TOKEN=your_clickup_token_hereUsage
Running the Server
After building, run the server:
node build/index.jsThe server communicates via stdio (standard input/output), making it suitable for integration with MCP clients.
Client Integration
MCP clients connect to this server and can call the available tools. The server uses JSON-RPC 2.0 protocol for communication.
Client Configuration
To connect an MCP client to this server, configure the client with the server's command and environment variables.
For example, in Claude Desktop, add the following to your claude_desktop_config.json:
{
"mcpServers": {
"clickup": {
"command": "node",
"args": ["path/to/clickup-mcp-server/build/index.js"],
"env": {
"CLICKUP_ACCESS_TOKEN": "your_clickup_token_here"
}
}
}
}Replace path/to/clickup-mcp-server with the actual path to this project directory.
Tool: get_tasks
Retrieves a list of tasks from a ClickUp list.
Parameters:
list_id(string, required): The ClickUp List IDlimit(number, optional): Number of tasks to retrieve (max 100, default 50)
Example Request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_tasks",
"arguments": {
"list_id": "987654321",
"limit": 25
}
}
}Example Response:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "[{\"id\": \"abc123\", \"name\": \"Sample Task\", \"status\": \"open\", \"assignees\": [], \"due_date\": null}, ...]"
}
]
}
}Tool: create_task
Creates a new task in a ClickUp list.
Parameters:
list_id(string, required): The ClickUp List IDname(string, required): Task namedescription(string, optional): Task descriptionassignees(array of numbers, optional): Array of assignee user IDsdue_date(string, optional): Due date as Unix timestamp in milliseconds
Example Request:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "create_task",
"arguments": {
"list_id": "987654321",
"name": "New Task",
"description": "Task description",
"due_date": "1640995200000"
}
}
}Tool: update_task
Updates an existing ClickUp task.
Parameters:
task_id(string, required): The ClickUp Task IDname(string, optional): New task namedescription(string, optional): New task descriptionstatus(string, optional): New statusassignees(array of numbers, optional): New array of assignee user IDsdue_date(string, optional): New due date as Unix timestamp in milliseconds
Example Request:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "update_task",
"arguments": {
"task_id": "abc123",
"status": "in progress"
}
}
}Tool: get_task
Retrieves details of a specific ClickUp task.
Parameters:
task_id(string, required): The ClickUp Task ID
Example Request:
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "get_task",
"arguments": {
"task_id": "abc123"
}
}
}Finding ClickUp IDs
List ID: In ClickUp, navigate to your list. The URL will be something like
https://app.clickup.com/1234567/v/li/987654321. The number after/li/is the list ID.Task ID: Task URLs contain the task ID, or you can get it from the API responses.
User IDs: Use ClickUp's API or interface to find user IDs for assignees.
Error Handling
If an API call fails, the response will include an isError: true field with the error message:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "ClickUp API error: Invalid list ID"
}
],
"isError": true
}
}Testing
A test script is provided to verify that the MCP server is working correctly.
Set your ClickUp access token:
export CLICKUP_ACCESS_TOKEN=your_clickup_token_hereRun the test with a valid list ID:
node test-mcp.js <list_id>Replace
<list_id>with a valid ClickUp list ID (e.g.,901110500007).
The test will:
Verify that the server initializes correctly
Check that all tools are available
Test the
get_taskstool with the provided list ID
For more comprehensive testing of other tools, you can modify test-mcp.js to include calls to create_task, update_task, and get_task. Note that create_task will create real tasks in ClickUp, so use with caution.
Development
To run in development mode with TypeScript watching:
npm run devDependencies
@modelcontextprotocol/sdk: MCP protocol implementationaxios: HTTP client for ClickUp APIzod: Schema validationtypescript: TypeScript compiler
License
This project is open source. Please check the license file for details.
Available Tools
4 toolscreate_taskC
Create a new task in a ClickUp list
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | ClickUp List ID | |
| name | Yes | Task name | |
| description | No | Task description | |
| assignees | No | Array of assignee user IDs | |
| due_date | No | Due date in Unix timestamp (milliseconds) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Create a new task,' implying a write/mutation operation, but fails to disclose critical traits such as required permissions, whether the operation is idempotent, error handling, or any rate limits. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Create a new task') and specifies the context ('in a ClickUp list') without any wasted words. It is appropriately sized for a straightforward tool, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity as a mutation operation with no annotations and no output schema, the description is incomplete. It lacks information on behavioral aspects (e.g., permissions, side effects), usage guidelines, and what the tool returns. For a create tool with 5 parameters and significant implications, the description should provide more context to aid the agent effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, meaning all parameters are documented in the input schema (e.g., 'list_id' as ClickUp List ID, 'due_date' in Unix timestamp). The description adds no additional semantic context beyond what the schema provides, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't detract either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('new task in a ClickUp list'), making the purpose immediately understandable. It distinguishes from siblings like 'get_task' or 'update_task' by specifying creation. However, it doesn't explicitly mention what distinguishes it from other potential creation tools beyond the ClickUp context, keeping it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'update_task' or other task management operations. It lacks context about prerequisites (e.g., needing an existing list), exclusions, or typical scenarios for task creation, leaving the agent to infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskC
Get details of a ClickUp task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ClickUp Task ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a read operation ('Get details'), implying it's likely safe and non-destructive, but doesn't confirm this or address other behaviors like error handling, authentication needs, rate limits, or response format. This leaves significant gaps for a tool that interacts with external data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized for a simple retrieval tool and front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is incomplete. It doesn't explain what 'details' are returned (e.g., task fields, status, assignees), error conditions, or how it differs from sibling tools. This leaves the agent with insufficient context to use the tool effectively beyond basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'task_id' documented as 'ClickUp Task ID'. The description doesn't add any meaning beyond this (e.g., format examples, where to find the ID, or validation rules), so it meets the baseline for adequate but unenlightening parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get details') and resource ('ClickUp task'), making the purpose specific and understandable. However, it doesn't distinguish this tool from its sibling 'get_tasks' (which likely retrieves multiple tasks), leaving some ambiguity about when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_tasks' or 'create_task'. It doesn't mention prerequisites (e.g., needing a valid task ID) or contextual factors that might influence tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tasksC
Get tasks from a ClickUp list
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | ClickUp List ID | |
| limit | No | Number of tasks to retrieve (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the basic action without behavioral details. It doesn't disclose if this is read-only (implied but not explicit), rate limits, pagination, error handling, or what the return format looks like (e.g., list of tasks). This is inadequate for a tool with parameters and no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's front-loaded and directly states the tool's purpose, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has parameters, no annotations, and no output schema, the description is incomplete. It lacks behavioral context (e.g., read-only confirmation, return format), usage differentiation from siblings, and any mention of limitations like the max limit of 100. This leaves significant gaps for an agent to operate effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are documented in the schema. The description adds no additional meaning beyond implying retrieval from a list, which aligns with the schema. Baseline 3 is appropriate as the schema handles parameter documentation effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('tasks from a ClickUp list'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_task' (singular vs. plural) or specify scope (e.g., all tasks vs. filtered), which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_task' (singular) or 'create_task'. The description implies retrieval but lacks context on prerequisites, such as needing a valid list ID, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskC
Update an existing ClickUp task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ClickUp Task ID | |
| name | No | New task name | |
| description | No | New task description | |
| status | No | New status | |
| assignees | No | New array of assignee user IDs | |
| due_date | No | New due date in Unix timestamp (milliseconds) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits. It doesn't mention permissions needed, whether updates are reversible, rate limits, or what happens to unspecified fields, leaving significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero waste, front-loading the essential action. It's appropriately sized for the tool's purpose without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations, no output schema, and 6 parameters, the description is incomplete. It lacks behavioral context, usage guidelines, and details on return values or error handling, making it inadequate for safe and effective use by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional meaning beyond what's in the schema, such as format details or constraints, but this meets the baseline since the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Update') and resource ('existing ClickUp task'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'create_task' or 'get_task' beyond the basic action, missing explicit comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'create_task' for new tasks or 'get_task' for viewing. The description assumes context without explaining prerequisites or appropriate scenarios for updating tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: create_task, get_task, get_tasks, and update_task target specific actions on tasks with no overlap. The singular vs. plural distinction between get_task and get_tasks is clear, and create/update are unambiguous.
All tools follow a consistent verb_noun pattern with snake_case, using clear action verbs (create, get, update) paired with the noun 'task'. There are no deviations in naming conventions.
Four tools are appropriate for a task management server, covering core CRUD operations. It is slightly thin as it lacks delete_task and operations for other ClickUp entities like lists or spaces, but the scope is reasonable for basic task handling.
The tool set covers create, read (single and multiple), and update operations for tasks, providing a solid foundation. However, it lacks delete_task and tools for managing other ClickUp resources like lists or comments, which are minor gaps agents might need to work around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
ClickUp MCP — wraps the ClickUp REST API v2 (BYO API key)
Manage your ClickUp workspace by creating, updating, and organizing tasks, lists, folders, and tag…
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Manage tasks, Focus Zone, notes, projects, and task history from compatible AI assistants.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI agents to interact with ClickUp workspaces, allowing task creation, management, and workspace organization through natural language commands.2124,9212MIT
- FlicenseNot gradedqualityNot gradedmaintenanceEnables integration with ClickUp project management platform through a Model Context Protocol server, providing tooling for task management, workspace operations, and team collaboration with flexible authentication and deployment options.252
- AlicenseNot gradedqualityDmaintenanceProvides comprehensive tools for AI systems to manage ClickUp tasks, lists, folders, and workspaces through the Model Context Protocol. It enables automated task creation, status updates, subtask management, and custom field manipulation using natural language interfaces.3MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with tasks, spaces, lists, and folders across multiple ClickUp workspaces via the Model Context Protocol.601MIT
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/rubenaguir/clickup-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server