Skip to main content
Glama

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-mcp

Related MCP server: Clickup Universal MCP Server

Konfiguration

Kopieren Sie .env.example nach .env und füllen Sie Ihre Werte ein:

Variable

Standard

Beschreibung

CLICKUP_API_TOKEN

—

Persönlicher ClickUp-API-Token (pk_xxxxx)

AUTH_MODE

env

env = Token aus Umgebungsvariable; gateway = Token pro Anfrage aus dem X-Clickup-Token-Header

MCP_TRANSPORT

stdio

stdio (Claude Desktop) oder http (Gateway)

MCP_HTTP_PORT

8080

HTTP-Server-Port

CLICKUP_BASE_URL

https://api.clickup.com/api/v2

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-mcp

HTTP – Einzelmandant

$env:CLICKUP_API_TOKEN="pk_xxxxx"
$env:MCP_TRANSPORT="http"
$env:MCP_HTTP_PORT="8080"
uv run clickup-mcp

HTTP – Gateway / Mehrfachmandant

$env:MCP_TRANSPORT="http"
$env:AUTH_MODE="gateway"
uv run clickup-mcp
# Each request must include: X-Clickup-Token: pk_xxxxx

Verfügbare Tools (28)

Tool

Beschreibung

clickup_get_workspaces

Alle Arbeitsbereiche/Teams auflisten

clickup_list_members

Arbeitsbereichsmitglieder auflisten, reduziert auf id/username/email/team_id/role – lösen Sie die E-Mail einer Person in die user_id auf, die assignees-Filter erwarten

clickup_list_spaces

Spaces in einem Arbeitsbereich auflisten

clickup_get_space

Space-Details abrufen

clickup_get_space_folders

Ordner in einem Space auflisten

clickup_get_space_lists

Ordnerlose Listen in einem Space auflisten

clickup_get_folder

Ordnerdetails abrufen

clickup_get_folder_lists

Listen in einem Ordner auflisten

clickup_create_folder

Einen Ordner erstellen

clickup_update_folder

Einen Ordner aktualisieren

clickup_delete_folder

Einen Ordner löschen

clickup_get_list

Listendetails abrufen

clickup_create_list_in_folder

Liste in einem Ordner erstellen

clickup_create_folderless_list

Liste in einem Space erstellen

clickup_update_list

Eine Liste aktualisieren

clickup_get_task

Aufgabe anhand der ID abrufen

clickup_search_tasks

Aufgaben mit Filtern durchsuchen (einzelner Arbeitsbereich, team_id erforderlich)

clickup_list_tasks_for_person

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

clickup_create_task

Eine Aufgabe erstellen

clickup_update_task

Eine Aufgabe aktualisieren

clickup_delete_task

Eine Aufgabe löschen

clickup_move_task

Aufgabe in eine andere Liste verschieben

clickup_get_task_comments

Aufgabenkommentare abrufen

clickup_create_task_comment

Einen Kommentar zu einer Aufgabe hinzufügen

clickup_get_doc_page

Eine einzelne Seite aus einem Dokument (v3) abrufen

clickup_attach_task_file

Eine Datei (z. B. ein Bild) als Anhang an eine Aufgabe hochladen

clickup_create_comment_with_image

Eine Datei hochladen und in einem Aufruf inline in einem neuen Aufgabenkommentar posten

clickup_list_rocks_for_org

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 in 2026-Q3 umgewandelt (und zurück, für den quarter-Eingabefilter).

  • status: ClickUps 6 Rohoptionen werden auf den 5-Werte-Vertrag abgebildet (on_track/off_track/done/missed/open) – siehe den _STATUS_MAP-Kommentar in rocks.py für die genaue Zuordnung und warum missed nie 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 = "![filename](url)"

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"![{filename}]({result['url']})"
   )

API-Referenz

Available Tools

1 tool
clickup_test_connectionA

Test ClickUp connection. Shows configuration requirements when credentials are missing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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. 1 tool updatev0.1.0
    • First observedclickup_test_connection

TDQS

A3.7/5.0

Scored across 1 tool

Disambiguation5/5

Only one tool exists, so there is no possibility of confusion between tools.

Naming Consistency5/5

With a single tool, naming consistency is not applicable, but the tool name follows a clear verb_noun pattern.

Tool Count1/5

A single 'test connection' tool is severely insufficient for a platform like ClickUp, which typically requires many tools for tasks, issues, lists, etc.

Completeness1/5

The tool only tests the connection, lacking any actual CRUD operations or meaningful interactions with ClickUp resources.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers