Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the ClickUp MCP server

Vendor MCP
Open markdown

The ClickUp MCP connector routes your AI agent's tool calls to ClickUp's own MCP server through Scalekit. Each user signs in to ClickUp once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 57 tools.

Tools
57
What they doRead · write · destructive
23 · 25 · 923 read25 write9 destructive
Users sign in with
OAuth app
Scalekit's or your own

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the ClickUp MCP connection

    In AgentKit > Connections, create a ClickUp MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for ClickUp, so you don't need to register an OAuth app.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'clickupmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize ClickUp MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'clickupmcp_clickup_filter_tasks',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • clickupmcp_clickup_download_task_attachmentDownload a ClickUp task attachment (get attachment IDs from clickup_get_task with include: ["attachments"]).Read-only

    Download Task Attachment

    Download a ClickUp task attachment (get attachment IDs from clickup_get_task with include: ["attachments"]). Returns a short-lived download URL plus attachment metadata. IMPORTANT: the URL is short-lived and, on workspaces with private attachments enabled, single-use — it expires within ~5 minutes. Fetch it immediately and exactly once; do not preview, HEAD-request, retry, or store it. If a download fails or the URL expired, call this tool again for a fresh URL.

    Inputs

    attachment_idstringrequired
    Attachment ID. List a task's attachments with clickup_get_task using include: ["attachments"].
    task_idstringrequired
    Task ID (supports custom IDs like 'DEV-1234')
    workspace_idstring
    Workspace ID (digits only). Only needed when you have multiple workspaces.
  • clickupmcp_clickup_filter_tasksRetrieve tasks with combined filters (tags, lists, folders, spaces, statuses, assignees, due date range, completion date range).Read-only

    Filter Tasks

    Retrieve tasks with combined filters (tags, lists, folders, spaces, statuses, assignees, due date range, completion date range). Multiple values within a filter use OR logic; across filters, AND logic applies. Best for filtering tasks by structured field values. For text/keyword search across all workspace content, use search instead. Results are paginated at 100 tasks per page: the response includes has_more and next_page, and when has_more is true you MUST call again with page set to next_page (repeating until has_more is false) to retrieve every matching task — a single call is not guaranteed to be complete. Assignees must be numeric user IDs — use clickup_resolve_assignees to convert names/emails/"me". Date filters use YYYY-MM-DD. For a single task by ID, use clickup_get_task.

    Inputs

    assigneesarray
    Filter by assignee user IDs. Multiple IDs use OR logic. Use clickup_resolve_assignees to convert names/emails/"me" first.
    date_closed_fromstring
    Filter tasks completed on or after. Format: YYYY-MM-DD
    date_closed_tostring
    Filter tasks completed on or before. Format: YYYY-MM-DD
    due_date_fromstring
    Filter tasks with due date on or after. Format: YYYY-MM-DD
    due_date_tostring
    Filter tasks with due date on or before. Format: YYYY-MM-DD
    folder_idsarray
    Filter by Folder IDs. Multiple IDs use OR logic (matches tasks in ANY of the specified folders).
    include_closedboolean
    Include closed tasks in results
    list_idsarray
    Filter by List IDs. Multiple IDs use OR logic (matches tasks in ANY of the specified lists).
    order_bystring
    Sort results by fieldone of idcreatedupdateddue_date
    pagenumber
    0-indexed page number. Each page returns up to 100 tasks. When a response has has_more=true, request the next page using its next_page value, and keep going until has_more=false to retrieve every matching task.
    reverseboolean
    Reverse sort order
    space_idsarray
    Filter by Space IDs. Multiple IDs use OR logic (matches tasks in ANY of the specified spaces).
    statusesarray
    Filter by task status names. Multiple statuses use OR logic (matches tasks with ANY of the specified statuses).
    subtasksboolean
    Include subtasks in results (default: true)default true
    tagsarray
    Filter by tag names. Multiple tags use OR logic (matches tasks with ANY of the specified tags).
    workspace_idstring
    Workspace ID (digits only). Only needed when you have multiple workspaces.
  • clickupmcp_clickup_find_member_by_nameGet a member in the ClickUp workspace by name or email.Read-only

    Find Member By Name

    Get a member in the ClickUp workspace by name or email. Returns the member object if found, or null if not found.

    Inputs

    name_or_emailstringrequired
    The name or email of the member to find.
    workspace_idstring
    Workspace ID (digits only). Only needed when you have multiple workspaces.
  • clickupmcp_clickup_get_bulk_tasks_time_in_statusGet the time multiple tasks have spent in each status (bulk operation, up to 100 tasks).Read-only

    Get Bulk Tasks Time In Status

    Get the time multiple tasks have spent in each status (bulk operation, up to 100 tasks). Returns a map of task IDs to their status history and current status time data. Requires the "Total time in Status" ClickApp to be enabled in the workspace.

    Inputs

    task_idsarrayrequired
    Array of task IDs to get time in status for (1-100 tasks). Works with both regular task IDs and custom IDs (like 'DEV-1234').
    workspace_idstring
    Workspace ID (digits only). Only needed when you have multiple workspaces.
  • clickupmcp_clickup_get_chat_channel_messagesGet messages for a chat channel.Read-only

    Get Chat Channel Messages

    Get messages for a chat channel. Messages with has_replies=true have threads fetchable via clickup_get_chat_message_replies. Supports pagination.

    Inputs

    channel_idstringrequired
    ID of the chat channel to get messages from.
    content_formatstring
    Response content format.one of text/plaintext/mddefault text/plain
    cursorstring
    Cursor for pagination. Use the next_cursor value from the previous response to fetch the next page of results.
    limitnumber
    Maximum number of messages to return (1-100).default 100
    workspace_idstring
    Workspace ID (digits only). Only needed when you have multiple workspaces.
  • clickupmcp_clickup_get_chat_channelsList chat channels in the workspace with pagination support.Read-only

    Get Chat Channels

    List chat channels in the workspace with pagination support.

    Inputs

    cursorstring
    Cursor for pagination. Use the next_cursor value from the previous response to fetch the next page of results.
    limitnumber
    Maximum number of channels to return (1-100).default 100
    workspace_idstring
    Workspace ID (digits only). Only needed when you have multiple workspaces.
  • clickupmcp_clickup_get_chat_message_repliesGet threaded replies for a chat message by message_id.Read-only

    Get Chat Message Replies

    Get threaded replies for a chat message by message_id. Supports pagination.

    Inputs

    message_idstringrequired
    ID of the chat message to get replies from.
    content_formatstring
    Response content format.one of text/plaintext/mddefault text/plain
    cursorstring
    Cursor for pagination. Use the next_cursor value from the previous response to fetch the next page of results.
    limitnumber
    Maximum number of replies to return (1-100).default 100
    workspace_idstring
    Workspace ID (digits only). Only needed when you have multiple workspaces.
  • clickupmcp_clickup_get_current_time_entryGet the currently running time entry, if any.Read-only

    Get Current Time Entry

    Get the currently running time entry, if any. No parameters needed.

    Inputs

    workspace_idstring
    Workspace ID (digits only). Only needed when you have multiple workspaces.