clickup-mcp
clickup-mcp
ClickUp MCP-Server für Claude – stellt ClickUp-Aufgaben, Spaces, Ordner, Listen und Kommentare als MCP-Tools bereit.
Technologie-Stack: Python 3.12 + uv + FastMCP (Starlette/FastAPI)
Schnellstart
# Install dependencies
cd D:\leo\mcp-server\clickup-mcp
uv sync
# Run in stdio mode (for Claude Desktop)
$env:CLICKUP_API_TOKEN="pk_xxxxx"
uv run clickup-mcpRelated MCP server: Clickup Universal MCP Server
Konfiguration
Kopieren Sie .env.example nach .env und füllen Sie Ihre Werte ein:
Variable | Standard | Beschreibung |
| — | Persönlicher ClickUp-API-Token ( |
|
|
|
|
|
|
|
| HTTP-Server-Port |
|
| API-Basis-URL |
Holen Sie sich Ihren API-Token: ClickUp → Einstellungen → Apps → API-Token
Claude Desktop Einrichtung
Fügen Sie zu claude_desktop_config.json hinzu:
{
"mcpServers": {
"clickup": {
"command": "uv",
"args": ["run", "--directory", "D:/leo/mcp-server/clickup-mcp", "clickup-mcp"],
"env": {
"CLICKUP_API_TOKEN": "pk_xxxxx"
}
}
}
}Transportmodi
stdio (Claude Desktop / CLI)
$env:CLICKUP_API_TOKEN="pk_xxxxx"
uv run clickup-mcpHTTP – Einzelmandant
$env:CLICKUP_API_TOKEN="pk_xxxxx"
$env:MCP_TRANSPORT="http"
$env:MCP_HTTP_PORT="8080"
uv run clickup-mcpHTTP – Gateway / Mehrfachmandant
$env:MCP_TRANSPORT="http"
$env:AUTH_MODE="gateway"
uv run clickup-mcp
# Each request must include: X-Clickup-Token: pk_xxxxxVerfügbare Tools (28)
Tool | Beschreibung |
| Alle Arbeitsbereiche/Teams auflisten |
| Arbeitsbereichsmitglieder auflisten, reduziert auf id/username/email/team_id/role – lösen Sie die E-Mail einer Person in die user_id auf, die |
| Spaces in einem Arbeitsbereich auflisten |
| Space-Details abrufen |
| Ordner in einem Space auflisten |
| Ordnerlose Listen in einem Space auflisten |
| Ordnerdetails abrufen |
| Listen in einem Ordner auflisten |
| Einen Ordner erstellen |
| Einen Ordner aktualisieren |
| Einen Ordner löschen |
| Listendetails abrufen |
| Liste in einem Ordner erstellen |
| Liste in einem Space erstellen |
| Eine Liste aktualisieren |
| Aufgabe anhand der ID abrufen |
| Aufgaben mit Filtern durchsuchen (einzelner Arbeitsbereich, team_id erforderlich) |
| Aufgaben einer Person in ALLEN sichtbaren Arbeitsbereichen in einem Aufruf auflisten, per E-Mail oder user_id – kein team_id, keine manuelle Paginierung/Deduplizierung nötig |
| Eine Aufgabe erstellen |
| Eine Aufgabe aktualisieren |
| Eine Aufgabe löschen |
| Aufgabe in eine andere Liste verschieben |
| Aufgabenkommentare abrufen |
| Einen Kommentar zu einer Aufgabe hinzufügen |
| Eine einzelne Seite aus einem Dokument (v3) abrufen |
| Eine Datei (z. B. ein Bild) als Anhang an eine Aufgabe hochladen |
| Eine Datei hochladen und in einem Aufruf inline in einem neuen Aufgabenkommentar posten |
| Alle EOS-Rocks (quartalsweise Ziele) organisationsweit in einem Aufruf auflisten, normalisiert auf eine feste Status-Enum |
Die ClickUp-Benutzer-ID einer Person finden
Verwenden Sie clickup_list_members. Die native GET /team-Antwort von ClickUp enthält eine
vollständige Mitgliederliste pro Team (teams[].members[].user.{id,username,email}), aber
clickup_get_workspaces entfernt diese, um die Antwort klein zu halten, daher ist es nicht
der richtige Ort, um Personen nachzuschlagen. clickup_list_members liest denselben
zugrundeliegenden Endpunkt und projiziert die Mitgliederliste in eine flache, zweckgerichtete
Form (id/username/email/team_id/role), sodass Aufrufer sie nicht selbst aus dem
vollständigen Arbeitsbereichs-/Team-Objekt extrahieren müssen. clickup_list_tasks_for_person
verwendet intern dieselbe zugrundeliegende Suche, um email -> user_id aufzulösen.
Bekannte Lücke: Das ClickUp-Teammitglied-Objekt hat kein zuverlässiges Feld "ist dieses Mitglied
deaktiviert" – clickup_list_members gibt kein active-Feld zurück,
da nichts Reales dahinterstehen würde (das einzige status-Feld, das
im Rohobjekt vorhanden ist, invited_by.status, beschreibt den Einladenden, nicht das
Mitglied).
clickup_search_tasks gibt bereits status.type zurück
Wie jedes andere Lesetool hier geben clickup_search_tasks und
clickup_get_task das rohe ClickUp-Aufgabenobjekt unverändert weiter –
einschließlich des type-Felds des status-Objekts (open / custom / closed /
done), das die einzige zuverlässige Möglichkeit ist, festzustellen, ob ein
benutzerdefinierter Status als erledigt gilt. Dafür war keine Codeänderung erforderlich; es
war bereits vorhanden. clickup_list_tasks_for_person zeigt es explizit als
status_type auf jeder zurückgegebenen Aufgabe zur Vereinfachung an.
Wie EOS-Rocks in diesem ClickUp-Arbeitsbereich dargestellt werden
Bestätigt am 18.08.2026 durch direkte Inspektion der Felder einer echten Rock-Aufgabe (nicht
geraten): Rocks sind normale ClickUp-Aufgaben, die sich in einer Liste mit dem Namen
"Rocks" befinden (gefunden unter Space "Company" > Ordner "EOS Traction"), die jeweils
dedizierte benutzerdefinierte Felder tragen: Quarter (Dropdown, "Q1 2024".."Q4 2026"),
Rocks Status (On Hold / Off Track / On Track / Completed / Blocked / At
Risk), Rock Type (Company / Individual / Departmental / Team Rock),
Department und Fortschritt entweder über Progress (manuell) oder Progress % (automatisch,
Checklisten-Zusammenfassung). Dies ist weder die ClickUp-Goals-API noch eine
einfache Aufgabenliste ohne Metadaten – es sind Aufgaben plus benutzerdefinierte Felder.
clickup_list_rocks_for_org findet jede Liste mit dem Namen "Rocks" (anhand des Namens,
nicht einer fest codierten ID, falls Spaces/Ordner neu organisiert werden) in jedem
für das Token sichtbaren Arbeitsbereich, liest diese Felder und normalisiert sie:
quarter: ClickUps "Q3 2026"-Label wird in2026-Q3umgewandelt (und zurück, für denquarter-Eingabefilter).status: ClickUps 6 Rohoptionen werden auf den 5-Werte-Vertrag abgebildet (on_track/off_track/done/missed/open) – siehe den_STATUS_MAP-Kommentar inrocks.pyfür die genaue Zuordnung und warummissednie ausgegeben wird (nichts in ClickUps Daten unterscheidet "Zeit abgelaufen" von generischem "off track"; die Ableitung aus einem überfälligen due_date wäre eine unbestätigte Geschäftslogik-Annahme, daher wird dies hier nicht gemacht).measurable: kein dediziertes Feld existiert in dieser Liste. Fallback auf die Aufgabenbeschreibung;null, wenn auch diese leer ist (niemals erfunden).weekly_status: es wurde keine strukturierte Quelle gefunden (weder ein benutzerdefiniertes Feld noch etwas, das von Kommentaren abgeleitet ist) – wird immer als[]zurückgegeben. Falls die Organisation dies auf andere Weise in ClickUp zu verfolgen beginnt, überprüfen Sie dies erneut.
Anhänge und Bilder
ClickUps REST-API hat keine Möglichkeit, eine Datei direkt an einen Kommentar anzuhängen –
nur an eine Aufgabe (POST /task/{task_id}/attachment, was
clickup_attach_task_file kapselt). Es gibt auch keinen Endpunkt zum Löschen/Aktualisieren von
Anhängen; erneutes Hochladen fügt einen neuen Anhang hinzu, anstatt den alten zu ersetzen,
und das Entfernen eines Anhangs erfordert die ClickUp-Web-/Desktop-App.
Bestätigt durch Überprüfung der Tool-Beschreibungen des offiziellen ClickUp-MCP-Servers –
derselbe Split (ein Create Task Comment-Tool ohne Anhangsunterstützung
und ein separates Attach File to Task-Tool).
Damit ein Bild inline in einem Kommentar angezeigt wird, ist der
zugrundeliegende Trick: Laden Sie die Datei zuerst zur Aufgabe hoch und verweisen Sie dann auf die
zurückgegebene URL aus der Dateiantwort mit der Markdown-Bildsyntax im
Kommentartext – ClickUps Kommentar-Renderer zeigt es als echtes Bild inline an,
nicht nur als Link. clickup_create_comment_with_image führt beide
Schritte in einem Aufruf aus:
clickup_create_comment_with_image(task_id, file_content_base64, filename)
# internally:
# 1. POST /task/{task_id}/attachment -> {"url": "...", ...}
# 2. POST /task/{task_id}/comment comment_text = ""Um es stattdessen manuell zu tun (z. B. um anderen Text um das Bild herum hinzuzufügen), rufen Sie die beiden Tools selbst auf:
1. result = clickup_attach_task_file(task_id, file_content_base64, filename)
-> result["url"] is the uploaded file's URL
2. clickup_create_task_comment(
task_id,
comment_text=f""
)API-Referenz
Available Tools
1 toolclickup_test_connectionA
Test ClickUp connection. Shows configuration requirements when credentials are missing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses it is a test operation and shows config requirements on failure. No annotations, so description carries full burden. Does not clarify if it is read-only, has side effects, or what output format looks like (though output schema exists). Minimal disclosure.
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?
Two concise sentences, front-loaded with purpose. No extraneous words. Efficient and clear.
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?
Simple tool with no parameters and low complexity. Description covers purpose and a key failure behavior. Output schema exists to document return values, so completeness is high. Minor gap: could mention safe/read-only nature explicitly.
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?
No parameters, so input schema is empty. Description adds meaning by explaining tool purpose and special behavior. Baseline for 0 params is 4; description fulfills this adequately.
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?
Clear verb ('Test') and resource ('ClickUp connection'), with specific additional behavior: shows configuration requirements when credentials missing. No sibling tools to differentiate, but purpose is unambiguous.
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?
Implied usage: use to verify connection and get config hints if incomplete. No explicit when-to-use, when-not-to-use, or alternatives provided. Lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.0- First observed
clickup_test_connection
TDQS
Scored across 1 tool
Only one tool exists, so there is no possibility of confusion between tools.
With a single tool, naming consistency is not applicable, but the tool name follows a clear verb_noun pattern.
A single 'test connection' tool is severely insufficient for a platform like ClickUp, which typically requires many tools for tasks, issues, lists, etc.
The tool only tests the connection, lacking any actual CRUD operations or meaningful interactions with ClickUp resources.
Maintenance
Related MCP Connectors
ClickUp MCP — wraps the ClickUp REST API v2 (BYO API key)
Read and write Mission Control state via MCP — projects, tasks, subtasks, templates, status updates.
Manage Timequip projects, tasks, comments, members, and dashboards through MCP.
Read and write shared BitsWeave context, projects, tasks, and work sessions through MCP.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides integration with ClickUp's API, allowing you to retrieve task information and manage ClickUp data through MCP-compatible clients.-
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Clickup's project management tools through the MCP protocol, allowing task and project operations via natural language.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI applications to interact with ClickUp's project management API through the MCP protocol, supporting resources like Teams, Spaces, Goals, and Key Results.26 PyPI4MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage ClickUp workspaces, teams, spaces, folders, lists, tasks, and custom fields via 29 MCP tools with full CRUD operations.28 npm5MIT