ClickUp MCP

Live

OAUTH 2.1

TASK MANAGEMENT

Project Management

Tasks, docs, and sprint state for the whole org sit inside ClickUp spaces. ClickUp MCP gives your agent authenticated access scoped to the user who authorized it.

  • Acts as the user: access and write actions stay tied to the ClickUp account that authorized the agent.
  • Credentials stay vaulted: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: permissions enforced. 90-day audit trail.
ClickUp MCP
agent · Acme Q3
Run
What is assigned to me in the platform space this sprint?
S
clickup_tasks_list
128ms
ClickUp agent
9 open tasks in Platform. 3 are overdue, 2 blocked, and 4 in progress with due dates this Friday.
Sources: 1 space, 3 lists, 9 tasks
clickupmcp
4 calls
18:29
Message Claude...

Tools your project management agent reaches for on ClickUp MCP, scoped per user.

CALL ANY TOOL
Task management across spaces, folders, and lists: create and update tasks, post comments, manage time entries, and read custom fields.
clickupmcp_clickup_add_tag_to_task
Clickup add tag to task
Add existing tag to task. Tag must exist in space. Note: Will fail if tag doesn't exist.
Parameters
Name
Type
Required
Description
tag_name
string
Required
Name of the tag to add to the task. The tag must already exist in the space.
task_id
string
Required
ID of task. Works with both regular task IDs and custom IDs (like 'DEV-1234'). Use clickup_search to find task ID by name if needed.
workspace_id
string
Optional
Workspace ID (digits only). Only needed when you have multiple workspaces.
clickupmcp_clickup_add_task_link
Clickup add task link
clickupmcp_clickup_add_task_to_list
List clickup add task to
clickupmcp_clickup_attach_task_file
Clickup attach task file
clickupmcp_clickup_create_comment
Clickup create comment
clickupmcp_clickup_create_document
Clickup create document
clickupmcp_clickup_create_folder
Clickup create folder
clickupmcp_clickup_create_list
List clickup create
clickupmcp_clickup_create_task
Clickup create task
clickupmcp_clickup_delete_comment
Clickup delete comment
clickupmcp_clickup_download_task_attachment
Clickup download task attachment
clickupmcp_clickup_find_member_by_name
Clickup find member by name
clickupmcp_clickup_get_bulk_tasks_time_in_status
Clickup get bulk tasks time in status
clickupmcp_clickup_get_chat_message_replies
Clickup get chat message replies
clickupmcp_clickup_get_folder
Clickup get folder
clickupmcp_clickup_get_list
List clickup get
clickupmcp_clickup_get_threaded_comments
Clickup get threaded comments
clickupmcp_clickup_merge_document_page
Clickup merge document page
clickupmcp_clickup_move_task
Clickup move task
clickupmcp_clickup_remove_tag_from_task
Clickup remove tag from task
clickupmcp_clickup_remove_task_dependency
Clickup remove task dependency
clickupmcp_clickup_remove_task_from_list
List clickup remove task from
clickupmcp_clickup_request_attachment_upload
Upload clickup request attachment
clickupmcp_clickup_search
Search clickup
clickupmcp_clickup_send_chat_message
Clickup send chat message
clickupmcp_clickup_start_time_tracking
Clickup start time tracking
clickupmcp_clickup_stop_time_tracking
Clickup stop time tracking
clickupmcp_clickup_update_comment
Clickup update comment
clickupmcp_clickup_update_document_page
Clickup update document page
clickupmcp_clickup_update_reminder
Clickup update reminder

For more tools, view docs.

Build your Agent
Drop the toolkit in, point it at the user, and your project management agent can use ClickUp from the first run.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// ClickUp MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["clickupmcp"], toolNames: [
"clickupmcp_clickup_add_tag_to_task",
"clickupmcp_clickup_add_task_dependency",
"clickupmcp_clickup_add_task_link"
] },
pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "What is assigned to me in the platform space this sprint?" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// ClickUp MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["clickupmcp"], toolNames: [
"clickupmcp_clickup_add_tag_to_task",
"clickupmcp_clickup_add_task_dependency",
"clickupmcp_clickup_add_task_link"
] },
pageSize: 100,
});

const openai = new OpenAI();
const res = await openai.responses.create({
model: "gpt-5",
tools: tools.map((t) => t.openai),
input: "What is assigned to me in the platform space this sprint?",
});
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// ClickUp MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["clickupmcp"], toolNames: [
"clickupmcp_clickup_add_tag_to_task",
"clickupmcp_clickup_add_task_dependency",
"clickupmcp_clickup_add_task_link"
] },
pageSize: 100,
});

const anthropic = new Anthropic();
const msg = await anthropic.messages.create({
model: "claude-opus-4-6",
max_tokens: 1024,
tools: tools.map((t) => t.anthropic),
messages: [{ role: "user", content: "What is assigned to me in the platform space this sprint?" }],
});
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// ClickUp MCP tools, scoped to the signed-in user
const { tools } = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["clickupmcp"], toolNames: [
"clickupmcp_clickup_add_tag_to_task",
"clickupmcp_clickup_add_task_dependency",
"clickupmcp_clickup_add_task_link"
] },
pageSize: 100,
});

const agent = new Agent({
name: "clickupmcp_agent",
model: "gemini-2.5-pro",
instruction: "Act as the project management agent for the signed-in user.",
tools,
});
await agent.run("What is assigned to me in the platform space this sprint?");
Try these prompts
Paste any prompt into your agent to start using ClickUp.
Sprint triage
Copy the prompt
Copied
What is assigned to me and due this week?
Copy the prompt
Copied
List blocked tasks in the platform space.
Copy the prompt
Copied
Show tasks with no estimate in the current sprint.
Task upkeep
Copy the prompt
Copied
Create a task for the SSO rollout in the Platform list.
Copy the prompt
Copied
Move the billing bug to In progress and set priority to urgent.
Copy the prompt
Copied
Add a comment on the migration task summarizing today's status.
Rollups
Copy the prompt
Copied
Summarize what closed in the platform space this week.
Copy the prompt
Copied
Which assignee has the most overdue tasks?
Copy the prompt
Copied
Total time logged against the onboarding list this month.
SEE HOW AUTH WORKS
Users authorize ClickUp once. Their credentials stay vaulted, every call is checked, and every action is logged.
1
Authorize
Your user connects
ClickUp MCP
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
ClickUp MCP
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
ClickUp MCP
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
ClickUp MCP
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
Same per-user auth pattern across other agents and MCP connectors. Working code, live demos, fork what fits.
Engineering Teams
Engineering standup agent
Pulls commits from GitHub and GitLab, tracks issue movement in Jira, and posts a per-engineer standup brief to Slack. Each engineer's activity is read on their own delegated OAuth.
Engineering Teams
DevOps assistant agent
Polls GitHub for failing checks and stale PRs, opens Linear issues for the ones that need work, and posts a daily digest to Slack. It acts as the engineer, not a shared service account.
Engineering Teams
Slack triage
Polls Slack for new messages, classifies bugs and support requests with a LangGraph router, files GitHub issues or Zendesk tickets, and confirms in the thread.
People Ops and HR teams
Performance review collector
Collects review feedback from Airtable and Google Forms scoped to each manager's direct reports, writes per-employee summaries to Notion, and DMs the manager a Slack digest.
Test other agents
Same per-user auth pattern across other agents and MCP connectors. Working code, live demos, fork what fits.
ENGINEERING
DevOps assistant agent
Poll GitHub for failing checks and stale pull requests, open Linear issues for the ones that need work, and digest to Slack.
ENGINEERING
Engineering standup agent
Pull commits from GitHub and GitLab, track Jira issue movement, and post a per-engineer standup brief to Slack.
ENGINEERING
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
PEOPLE OPS
Performance review collector agent
Collect review feedback from Airtable and Google Forms per manager, summarise each report in Notion, and DM the digest in Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared token looks fine in a demo. In production every call looks like a service account. Scalekit resolves the real user credential so attribution, audit, and scope stay accurate.
// shared token
audit → bot_service_account
user_filter → broken

// scalekit
audit → user_abc
scope → enforced ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
ClickUp today. Others tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access ClickUp as the user or as a shared key?
As the user. Each member authorizes once and Scalekit resolves their credential at request time. Audit logs attribute every action to that user, not a shared service account.
Where is the ClickUp oauth 2.1 credential stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent is allowed to do in ClickUp?
Yes. Pass a tool name filter to listScopedTools so the project management agent only sees the subset you authorize. Pre-API-call scope checks block out-of-policy actions before the request reaches ClickUp.
What happens when a user revokes ClickUp access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Does the agent see every space in the workspace?
Only the spaces the authorizing user can already open. ClickUp resolves visibility per member, so a guest with access to one folder gives the agent exactly that folder. Nothing is widened by connecting the agent.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""clickupmcp"": {
""url"": ""https://mcp.scalekit.com/clickupmcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.clickupmcp]
url = ""https://mcp.scalekit.com/clickupmcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""clickupmcp"": {
""url"": ""https://mcp.scalekit.com/clickupmcp"",
""type"": ""http""
}
}
}