Skip to main content
Glama
Leanware-io

ClickUp MCP Integration

by Leanware-io

clickup_update_task

Modify ClickUp task details including name, description, priority, due dates, tags, time estimates, assignees, and parent relationships by providing the task ID.

Instructions

Update a task by its ID

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
task_idYesClickUp task ID
nameNoTask name
markdown_descriptionNoTask description in markdown format
priorityNoTask priority (1-4): 1=Urgent, 2=High, 3=Normal, 4=Low
due_dateNoDue date as Unix timestamp in milliseconds
tagsNoArray of tag names to add to the task
time_estimateNoTime estimate in milliseconds
assigneesNoUser IDs to add or remove from the task
parentNoParent task ID to move this task as a subtask

Implementation Reference

  • Full definition of the 'clickup_update_task' tool, including name, input schema, description, and handler function that maps inputs to UpdateTaskParams and calls taskService.updateTask
    const updateTaskTool = defineTool((z) => ({
      name: "clickup_update_task",
      description: "Update a task by its ID",
      inputSchema: {
        task_id: z.string().describe("ClickUp task ID"),
        name: z.string().optional().describe("Task name"),
        markdown_description: z
          .string()
          .optional()
          .describe("Task description in markdown format"),
        priority: z
          .number()
          .optional()
          .describe("Task priority (1-4): 1=Urgent, 2=High, 3=Normal, 4=Low"),
        due_date: z
          .number()
          .optional()
          .describe("Due date as Unix timestamp in milliseconds"),
        tags: z
          .array(z.string())
          .optional()
          .describe("Array of tag names to add to the task"),
        time_estimate: z
          .number()
          .optional()
          .describe("Time estimate in milliseconds"),
        assignees: z
          .object({
            add: z
              .array(z.number())
              .optional()
              .describe("Array of user IDs to add to the task"),
            rem: z
              .array(z.number())
              .optional()
              .describe("Array of user IDs to remove from the task"),
          })
          .optional()
          .describe("User IDs to add or remove from the task"),
        parent: z
          .string()
          .optional()
          .describe("Parent task ID to move this task as a subtask"),
      },
      handler: async (input): Promise<any> => {
        const { task_id, ...updateData } = input;
        const taskParams: UpdateTaskParams = {
          name: updateData.name,
          markdown_description: updateData.markdown_description,
          priority: updateData.priority,
          due_date: updateData.due_date,
          tags: updateData.tags,
          time_estimate: updateData.time_estimate,
          assignees: updateData.assignees,
          parent: updateData.parent,
        };
    
        const response = await taskService.updateTask(task_id, taskParams);
        return {
          content: [{ type: "text", text: JSON.stringify(response) }],
        };
      },
    }));
  • The TaskService.updateTask helper method that sends a PUT request to the ClickUp API to update the specified task.
    async updateTask(
      taskId: string,
      params: UpdateTaskParams
    ): Promise<ClickUpTask> {
      return this.request<ClickUpTask>(`/task/${taskId}`, {
        method: "PUT",
        body: JSON.stringify(params),
      });
    }
  • src/index.ts:89-91 (registration)
    Registration loop where all imported tools, including 'clickup_update_task', are registered on the MCP server using server.tool()
    tools.forEach((tool) => {
      server.tool(tool.name, tool.description, tool.inputSchema, tool.handler);
    });
  • Private request helper method in TaskService used by updateTask to make HTTP requests to ClickUp API.
    private async request<T>(
      endpoint: string,
      options: RequestInit = {}
    ): Promise<T> {
      const response = await fetch(`${BASE_URL}${endpoint}`, {
        ...options,
        headers: this.headers,
      });
      return response.json();
    }
  • Zod-based input schema for validating parameters to the clickup_update_task tool.
    inputSchema: {
      task_id: z.string().describe("ClickUp task ID"),
      name: z.string().optional().describe("Task name"),
      markdown_description: z
        .string()
        .optional()
        .describe("Task description in markdown format"),
      priority: z
        .number()
        .optional()
        .describe("Task priority (1-4): 1=Urgent, 2=High, 3=Normal, 4=Low"),
      due_date: z
        .number()
        .optional()
        .describe("Due date as Unix timestamp in milliseconds"),
      tags: z
        .array(z.string())
        .optional()
        .describe("Array of tag names to add to the task"),
      time_estimate: z
        .number()
        .optional()
        .describe("Time estimate in milliseconds"),
      assignees: z
        .object({
          add: z
            .array(z.number())
            .optional()
            .describe("Array of user IDs to add to the task"),
          rem: z
            .array(z.number())
            .optional()
            .describe("Array of user IDs to remove from the task"),
        })
        .optional()
        .describe("User IDs to add or remove from the task"),
      parent: z
        .string()
        .optional()
        .describe("Parent task ID to move this task as a subtask"),
    },

Latest Blog Posts

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/Leanware-io/clickup-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server