Skip to main content
Glama

clickup-mcp

Servidor MCP de ClickUp para Claude: expone tareas, espacios, carpetas, listas y comentarios de ClickUp como herramientas MCP.

Stack tecnológico: Python 3.12 + uv + FastMCP (Starlette/FastAPI)

Inicio rápido

# 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

Configuración

Copia .env.example a .env y completa tus valores:

Variable

Por defecto

Descripción

CLICKUP_API_TOKEN

—

Token personal de la API de ClickUp (pk_xxxxx)

AUTH_MODE

env

env = token desde variable de entorno; gateway = token por solicitud desde la cabecera X-Clickup-Token

MCP_TRANSPORT

stdio

stdio (Claude Desktop) o http (gateway)

MCP_HTTP_PORT

8080

Puerto del servidor HTTP

CLICKUP_BASE_URL

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

URL base de la API

Obtén tu token de API: ClickUp → Ajustes → Apps → Token de API

Configuración de Claude Desktop

Añade a claude_desktop_config.json:

{
  "mcpServers": {
    "clickup": {
      "command": "uv",
      "args": ["run", "--directory", "D:/leo/mcp-server/clickup-mcp", "clickup-mcp"],
      "env": {
        "CLICKUP_API_TOKEN": "pk_xxxxx"
      }
    }
  }
}

Modos de transporte

stdio (Claude Desktop / CLI)

$env:CLICKUP_API_TOKEN="pk_xxxxx"
uv run clickup-mcp

HTTP — monousuario

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

HTTP — gateway / multiusuario

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

Herramientas disponibles (28)

Herramienta

Descripción

clickup_get_workspaces

Lista todos los espacios de trabajo/equipos

clickup_list_members

Lista los miembros del espacio de trabajo, aplanados a id/username/email/team_id/role — resuelve el email de una persona al user_id que esperan los filtros assignees

clickup_list_spaces

Lista los espacios en un espacio de trabajo

clickup_get_space

Obtiene los detalles de un espacio

clickup_get_space_folders

Lista las carpetas en un espacio

clickup_get_space_lists

Lista las listas sin carpeta en un espacio

clickup_get_folder

Obtiene los detalles de una carpeta

clickup_get_folder_lists

Lista las listas en una carpeta

clickup_create_folder

Crea una carpeta

clickup_update_folder

Actualiza una carpeta

clickup_delete_folder

Elimina una carpeta

clickup_get_list

Obtiene los detalles de una lista

clickup_create_list_in_folder

Crea una lista en una carpeta

clickup_create_folderless_list

Crea una lista en un espacio

clickup_update_list

Actualiza una lista

clickup_get_task

Obtiene una tarea por ID

clickup_search_tasks

Busca tareas con filtros (un solo espacio de trabajo, se requiere team_id)

clickup_list_tasks_for_person

Lista las tareas de una persona en TODOS los espacios de trabajo visibles en una sola llamada, por email o user_id — no se necesita team_id, ni paginación manual ni deduplicación

clickup_create_task

Crea una tarea

clickup_update_task

Actualiza una tarea

clickup_delete_task

Elimina una tarea

clickup_move_task

Mueve una tarea a una lista diferente

clickup_get_task_comments

Obtiene los comentarios de una tarea

clickup_create_task_comment

Añade un comentario a una tarea

clickup_get_doc_page

Obtiene una sola página de un Documento (v3)

clickup_attach_task_file

Sube un archivo (por ejemplo, una imagen) como adjunto a una tarea

clickup_create_comment_with_image

Sube un archivo y lo publica en línea dentro de un nuevo comentario de tarea, en una sola llamada

clickup_list_rocks_for_org

Lista todos los EOS Rocks (objetivos trimestrales) de toda la organización en una sola llamada, normalizados a un enum de estado fijo

Cómo encontrar el ID de usuario de ClickUp de una persona

Usa clickup_list_members. La respuesta nativa de ClickUp GET /team incluye una lista completa de miembros por equipo (teams[].members[].user.{id,username,email}), pero clickup_get_workspaces elimina eso para mantener su respuesta pequeña, por lo que no es el lugar para buscar personas. clickup_list_members lee el mismo endpoint subyacente y proyecta la lista de miembros a una forma plana y específica (id/username/email/team_id/role) para que los llamadores no tengan que extraerla del objeto completo del espacio de trabajo/equipo. clickup_list_tasks_for_person utiliza la misma búsqueda interna para resolver email -> user_id.

Brecha conocida: el objeto de miembro de equipo de ClickUp no tiene un campo fiable "este miembro está desactivado" — clickup_list_members no devuelve un campo active, ya que nada real lo respaldaría (el único campo status presente en el objeto sin procesar, invited_by.status, describe al invitador, no al miembro).

clickup_search_tasks ya devuelve status.type

Como cualquier otra herramienta de lectura aquí, clickup_search_tasks y clickup_get_task pasan el objeto de tarea sin procesar de ClickUp sin modificar, incluido el campo type del objeto status (open / custom / closed / done), que es la única forma fiable de saber si un estado con nombre personalizado cuenta como completado. No fue necesario ningún cambio de código para esto; ya estaba ahí. clickup_list_tasks_for_person lo muestra explícitamente como status_type en cada tarea devuelta por conveniencia.

Cómo se representan los EOS Rocks en este espacio de trabajo de ClickUp

Confirmado el 18/08/2026 inspeccionando directamente los campos de una tarea rock real (no adivinado): Los Rocks son tareas regulares de ClickUp que viven en una lista literalmente llamada "Rocks" (encontrada bajo Espacio "Company" > Carpeta "EOS Traction"), cada una con campos personalizados dedicados: Quarter (desplegable, "Q1 2024".."Q4 2026"), Rocks Status (En espera / Fuera de camino / En camino / Completado / Bloqueado / En riesgo), Rock Type (Empresa / Individual / Departamental / Rock de equipo), Department, y progreso a través de Progress (manual) o Progress % (automático, resumen de lista de verificación). Esto no es la API de Objetivos de ClickUp ni una lista de tareas simple sin metadatos: son tareas más campos personalizados.

clickup_list_rocks_for_org descubre cada lista llamada "Rocks" (por nombre, no un ID fijo, en caso de que los espacios/carpetas se reorganizen) en todos los espacios de trabajo visibles para el token, lee estos campos y los normaliza:

  • quarter: la etiqueta "Q3 2026" de ClickUp se convierte a 2026-Q3 (y viceversa, para el filtro de entrada quarter).

  • status: las 6 opciones sin procesar de ClickUp se asignan al contrato de 5 valores (on_track/off_track/done/missed/open) — consulta el comentario _STATUS_MAP en rocks.py para conocer la asignación exacta y por qué missed nunca se emite (nada en los datos de ClickUp distingue "se quedó sin tiempo" de "fuera de camino" genérico; derivarlo de una fecha de vencimiento vencida sería una suposición de lógica empresarial no confirmada, por lo que no se hace aquí).

  • measurable: no existe un campo dedicado en esta lista. Se recurre a la descripción de la tarea; null si también está vacía (nunca se fabrica).

  • weekly_status: no se encontró ninguna fuente estructurada en ninguna parte (ni un campo personalizado, ni derivado de comentarios) — siempre se devuelve como []. Si la organización comienza a rastrear esto en ClickUp de otra manera, revisar.

Archivos adjuntos e imágenes

La API REST de ClickUp no tiene forma de adjuntar un archivo directamente a un comentario, solo a una tarea (POST /task/{task_id}/attachment, que es lo que envuelve clickup_attach_task_file). Tampoco hay un endpoint para eliminar/actualizar archivos adjuntos; volver a subir añade un nuevo adjunto en lugar de reemplazar el anterior, y eliminar uno requiere la aplicación web/escritorio de ClickUp. Confirmado también revisando las descripciones de herramientas del servidor MCP oficial de ClickUp: la misma división (una herramienta Create Task Comment sin soporte para adjuntos, y una herramienta separada Attach File to Task).

Para que una imagen aparezca en línea dentro de un comentario, el truco subyacente es: subir el archivo a la tarea primero, luego hacer referencia a la URL devuelta desde la respuesta del archivo usando la sintaxis de imagen Markdown en el texto del comentario; el renderizador de comentarios de ClickUp lo muestra como una imagen real, no solo un enlace. clickup_create_comment_with_image realiza ambos pasos en una sola llamada:

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)"

Para hacerlo manualmente (por ejemplo, para añadir otro texto alrededor de la imagen), llama tú mismo a las dos herramientas:

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']})"
   )

Referencia de la API

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