Asana
Interactúa con tareas, proyectos, espacios de trabajo y comentarios de Asana usando la API de Asana.
Documentación
Servidor MCP para Asana
Esta implementación del servidor de Protocolo de Contexto de Modelo (MCP) para Asana te permite hablar con la API de Asana desde un cliente MCP como la aplicación de escritorio Claude de Anthropic, y muchos más.
Más detalles sobre MCP aquí:
- https://www.anthropic.com/news/model-context-protocol
- https://modelcontextprotocol.io/introduction
- https://github.com/modelcontextprotocol
Uso
En la herramienta de IA de tu elección (ej: Claude Desktop) pregunta algo sobre tareas, proyectos, espacios de trabajo y/o comentarios de Asana. Mencionar la palabra "asana" aumentará la probabilidad de que el LLM elija la herramienta correcta.
Ejemplo:
¿Cuántas tareas de asana sin terminar tenemos en nuestro proyecto Sprint 30?
Otro ejemplo:

Trabajando con Campos Personalizados
Al actualizar o crear tareas con campos personalizados, usa el siguiente formato:
asana_update_task({
task_id: "TASK_ID",
custom_fields: {
"custom_field_gid": value // The value format depends on the field type
}
})
El formato del valor varía según el tipo de campo:
- Campos de enumeración: Usa el
enum_option.gidde la opción (NO el nombre mostrado) - Campos de texto: Usa una cadena
- Campos numéricos: Usa un número
- Campos de fecha: Usa una cadena en formato YYYY-MM-DD
- Campos multi-enumeración: Usa un arreglo de GIDs de opciones de enumeración
Encontrando GIDs de Campos Personalizados
Para encontrar los GIDs de los campos personalizados y sus opciones de enumeración:
-
Usa
asana_get_taskcon el parámetroopt_fieldsconfigurado para incluir campos personalizados:asana_get_task({ task_id: "TASK_ID", opt_fields: "custom_fields,custom_fields.enum_options" }) -
En la respuesta, busca el arreglo
custom_fields. Cada campo personalizado tendrá:gid: El identificador único del campo personalizadoname: El nombre mostrado del campo personalizadoresource_subtype: El tipo de campo personalizado (texto, número, enumeración, etc.)- Para campos de enumeración, examina el arreglo
enum_optionspara encontrar el GID de cada opción
Ejemplo: Actualizando un Campo Personalizado de Enumeración
// First, get the task with custom fields
const taskDetails = asana_get_task({
task_id: "1234567890",
opt_fields: "custom_fields,custom_fields.enum_options"
});
// Find the custom field GID and enum option GID
const priorityFieldGid = "11112222"; // From taskDetails.custom_fields
const highPriorityOptionGid = "33334444"; // From the enum_options of the priority field
// Update the task with the custom field
asana_update_task({
task_id: "1234567890",
custom_fields: {
[priorityFieldGid]: highPriorityOptionGid
}
});
Herramientas
-
asana_list_workspaces- Lista todos los espacios de trabajo disponibles en Asana
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Lista de espacios de trabajo
- Nota: Si DEFAULT_WORKSPACE_ID está configurado, esto solo devolverá ese espacio de trabajo en lugar de obtener todos los espacios de trabajo
-
asana_search_projects- Busca proyectos en Asana usando coincidencia de patrones de nombre
- Entrada requerida:
- name_pattern (string): Patrón de expresión regular para coincidir con los nombres de proyectos
- Entrada opcional:
- workspace (string): El espacio de trabajo en el que buscar (opcional si DEFAULT_WORKSPACE_ID está configurado)
- team (string): El equipo para filtrar proyectos
- archived (boolean): Solo devolver proyectos archivados (predeterminado: false)
- limit (number): Resultados por página (1-100)
- offset (string): Token de desplazamiento de paginación
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Lista de proyectos coincidentes
- Nota: Se debe especificar workspace o team si DEFAULT_WORKSPACE_ID no está configurado
-
asana_search_tasks- Busca tareas en un espacio de trabajo con opciones de filtrado avanzadas
- Entrada requerida:
- workspace (string): El espacio de trabajo en el que buscar (opcional si DEFAULT_WORKSPACE_ID está configurado)
- Entrada opcional:
- text (string): Texto para buscar en nombres y descripciones de tareas
- resource_subtype (string): Filtrar por subtipo de tarea (por ejemplo, hito)
- completed (boolean): Filtrar tareas completadas
- is_subtask (boolean): Filtrar subtareas
- has_attachment (boolean): Filtrar tareas con archivos adjuntos
- is_blocked (boolean): Filtrar tareas con dependencias incompletas
- is_blocking (boolean): Filtrar tareas incompletas con dependientes
- assignee, projects, sections, tags, teams y muchos otros filtros avanzados
- sort_by (string): Ordenar por due_date, created_at, completed_at, likes, modified_at (predeterminado: modified_at)
- sort_ascending (boolean): Ordenar en orden ascendente (predeterminado: false)
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- custom_fields (object): Objeto que contiene filtros de campos personalizados
- Devuelve: Lista de tareas coincidentes
-
asana_get_task- Obtiene información detallada sobre una tarea específica
- Entrada requerida:
- task_id (string): El ID de la tarea a recuperar
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Información detallada de la tarea
-
asana_create_task- Crea una nueva tarea en un proyecto
- Entrada requerida:
- project_id (string): El proyecto en el que crear la tarea
- name (string): Nombre de la tarea
- Entrada opcional:
- notes (string): Descripción de la tarea
- html_notes (string): Descripción de la tarea con formato similar a HTML
- due_on (string): Fecha de vencimiento en formato YYYY-MM-DD
- assignee (string): Asignado (puede ser 'me' o un ID de usuario)
- followers (array of strings): Matriz de IDs de usuario para agregar como seguidores
- parent (string): El ID de la tarea principal bajo la cual establecer esta tarea
- projects (array of strings): Matriz de IDs de proyecto para agregar esta tarea
- resource_subtype (string): El tipo de la tarea (default_task o milestone)
- custom_fields (object): Objeto que mapea cadenas GID de campos personalizados a sus valores
- Devuelve: Información de la tarea creada
-
asana_get_task_stories- Obtiene comentarios e historias para una tarea específica
- Entrada requerida:
- task_id (string): El ID de la tarea para obtener historias
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Lista de historias/comentarios de la tarea
-
asana_update_task- Actualiza los detalles de una tarea existente
- Entrada requerida:
- task_id (string): El ID de la tarea a actualizar
- Entrada opcional:
- name (string): Nuevo nombre para la tarea
- notes (string): Nueva descripción para la tarea
- due_on (string): Nueva fecha de vencimiento en formato YYYY-MM-DD
- assignee (string): Nuevo asignado (puede ser 'me' o un ID de usuario)
- completed (boolean): Marcar la tarea como completada o no
- resource_subtype (string): El tipo de la tarea (default_task o milestone)
- custom_fields (object): Objeto que mapea cadenas GID de campos personalizados a sus valores
- Devuelve: Información de la tarea actualizada
-
asana_get_project- Obtiene información detallada sobre un proyecto específico
- Entrada requerida:
- project_id (string): El ID del proyecto a recuperar
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Información detallada del proyecto
-
asana_get_project_task_counts- Obtiene el número de tareas en un proyecto
- Entrada requerida:
- project_id (string): El ID del proyecto para obtener conteos de tareas
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Información del conteo de tareas
-
asana_get_project_sections- Obtiene secciones en un proyecto
- Entrada requerida:
- project_id (string): El ID del proyecto para obtener secciones
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Lista de secciones del proyecto
-
asana_create_task_story- Crea un comentario o historia en una tarea
- Entrada requerida:
- task_id (string): El ID de la tarea a la que agregar la historia
- text (string): El contenido de texto de la historia/comentario
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Información de la historia creada
-
asana_add_task_dependencies- Establece dependencias para una tarea
- Entrada requerida:
- task_id (string): El ID de la tarea a la que agregar dependencias
- dependencies (array of strings): Matriz de IDs de tareas de las que depende esta tarea
- Devuelve: Dependencias de tarea actualizadas
-
asana_add_task_dependents- Establece dependientes para una tarea (tareas que dependen de esta tarea)
- Entrada requerida:
- task_id (string): El ID de la tarea a la que agregar dependientes
- dependents (array of strings): Matriz de IDs de tareas que dependen de esta tarea
- Devuelve: Dependientes de tarea actualizados
-
asana_create_subtask- Crea una nueva subtarea para una tarea existente
- Entrada requerida:
- parent_task_id (string): El ID de la tarea principal bajo la cual crear la subtarea
- name (string): Nombre de la subtarea
- Entrada opcional:
- notes (string): Descripción de la subtarea
- due_on (string): Fecha de vencimiento en formato YYYY-MM-DD
- assignee (string): Asignado (puede ser 'me' o un ID de usuario)
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Información de la subtarea creada
-
asana_add_followers_to_task- Agrega seguidores a una tarea
- Entrada requerida:
- task_id (string): El ID de la tarea a la que agregar seguidores
- followers (array of strings): Matriz de IDs de usuario para agregar como seguidores a la tarea
- Devuelve: Información de la tarea actualizada
-
asana_get_multiple_tasks_by_gid- Obtiene información detallada sobre múltiples tareas por sus GIDs (máximo 25 tareas)
- Entrada requerida:
- task_ids (array of strings o cadena separada por comas): GIDs de tareas a recuperar (máx. 25)
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Lista de información detallada de tareas
-
asana_get_project_status- Obtiene una actualización de estado de un proyecto
- Entrada requerida:
- project_status_gid (string): El GID de estado del proyecto a recuperar
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Información de estado del proyecto
-
asana_get_project_statuses- Obtiene todas las actualizaciones de estado de un proyecto
- Entrada requerida:
- project_gid (string): El GID del proyecto para obtener estados
- Entrada opcional:
- limit (number): Resultados por página (1-100)
- offset (string): Token de desplazamiento de paginación
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Lista de actualizaciones de estado del proyecto
-
asana_create_project_status- Crea una nueva actualización de estado para un proyecto
- Entrada requerida:
- project_gid (string): El GID del proyecto para crear el estado
- text (string): El contenido de texto de la actualización de estado
- Entrada opcional:
- color (string): El color del estado (verde, amarillo, rojo)
- title (string): El título de la actualización de estado
- html_text (string): Texto con formato HTML para la actualización de estado
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Información de estado del proyecto creada
-
asana_delete_project_status- Elimina una actualización de estado de un proyecto
- Entrada requerida:
- project_status_gid (string): El GID de estado del proyecto a eliminar
- Devuelve: Confirmación de eliminación
-
asana_set_parent_for_task- Establece el padre de una tarea y posiciona la subtarea entre las otras subtareas de ese padre
- Entrada requerida:
- task_id (string): El ID de la tarea sobre la que operar
- parent (string): El nuevo padre de la tarea, o null para sin padre
- Entrada opcional:
- insert_after (string): Una subtarea del padre después de la cual insertar la tarea, o null para insertar al principio de la lista
- insert_before (string): Una subtarea del padre antes de la cual insertar la tarea, o null para insertar al final de la lista
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Información de la tarea actualizada
-
asana_get_tasks_for_tag- Obtiene tareas para una etiqueta específica
- Entrada requerida:
- tag_gid (string): El GID de la etiqueta para recuperar tareas
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- opt_pretty (boolean): Proporciona la respuesta en un formato 'bonito'
- limit (integer): El número de objetos a devolver por página. El valor debe estar entre 1 y 100.
- offset (string): Un desplazamiento a la siguiente página devuelta por la API.
- Devuelve: Lista de tareas para la etiqueta especificada
-
asana_get_tags_for_workspace- Obtiene etiquetas en un espacio de trabajo
- Entrada requerida:
- workspace_gid (string): Identificador único global para el espacio de trabajo u organización (opcional si DEFAULT_WORKSPACE_ID está configurado)
- Entrada opcional:
- limit (integer): Resultados por página. El número de objetos a devolver por página. El valor debe estar entre 1 y 100.
- offset (string): Token de desplazamiento. Un desplazamiento a la siguiente página devuelta por la API.
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Lista de etiquetas en el espacio de trabajo
-
asana_create_section_for_project- Crea una nueva sección en un proyecto
- Entrada requerida:
- project_id (string): El ID del proyecto en el que crear la sección
- name (string): Nombre de la sección a crear
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Información de la sección creada
-
asana_add_task_to_section- Agrega una tarea a una sección específica en un proyecto
- Entrada requerida:
- section_id (string): El ID de la sección a la que agregar la tarea
- task_id (string): El ID de la tarea a agregar a la sección
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Resultado de la operación
-
asana_create_project- Crea un nuevo proyecto en un espacio de trabajo
- Entrada requerida:
- workspace_id (string): El ID del espacio de trabajo en el que crear el proyecto (opcional si DEFAULT_WORKSPACE_ID está configurado)
- name (string): Nombre del proyecto a crear
- team_id (string): REQUERIDO para espacios de trabajo de organización - El GID del equipo con el que compartir el proyecto
- Entrada opcional:
- public (boolean): Si el proyecto es público para la organización (predeterminado: false)
- archived (boolean): Si el proyecto está archivado (predeterminado: false)* color (string): Color del proyecto (light-green, light-orange, light-blue, etc.)
- layout (string): El diseño del proyecto (board, list, timeline, o calendar)
- default_view (string): La vista predeterminada del proyecto (list, board, calendar, timeline, o gantt)
- due_on (string): La fecha en que este proyecto vence (formato YYYY-MM-DD)
- start_on (string): El día en que comienza el trabajo para este proyecto (formato YYYY-MM-DD)
- notes (string): Información textual libre asociada con el proyecto
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Returns: Información del proyecto creado
-
asana_get_teams_for_user- Obtener los equipos a los que el usuario tiene acceso
- Entrada requerida:
- user_gid (string): El GID del usuario para obtener los equipos. Usa 'me' para obtener los equipos del usuario actual.
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Returns: Lista de equipos a los que el usuario tiene acceso
-
asana_get_teams_for_workspace- Obtener equipos en un espacio de trabajo
- Entrada requerida:
- workspace_gid (string): El GID del espacio de trabajo para obtener los equipos (opcional si DEFAULT_WORKSPACE_ID está configurado)
- Entrada opcional:
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Returns: Lista de equipos en el espacio de trabajo
-
asana_list_workspace_users- Obtener usuarios en un espacio de trabajo
- Entrada requerida:
- workspace_id (string): El ID del espacio de trabajo para obtener los usuarios (opcional si DEFAULT_WORKSPACE_ID está configurado)
- Entrada opcional:
- limit (integer): Resultados por página (1-100)
- offset (string): Token de desplazamiento de paginación
- opt_fields (string): Lista separada por comas de campos opcionales a incluir (por defecto "name,email")
- auto_paginate (boolean): Si se deben obtener automáticamente todas las páginas
- max_pages (integer): Número máximo de páginas a obtener cuando auto_paginate es verdadero
- Returns: Lista de usuarios en el espacio de trabajo
-
asana_get_project_hierarchy- Obtener la estructura jerárquica completa de un proyecto de Asana, incluyendo secciones, tareas y subtareas
- Entrada requerida:
- project_id (string): El ID del proyecto para obtener la jerarquía
- Entrada opcional:
- include_completed_tasks (boolean): Incluir tareas completadas (por defecto: false)
- include_subtasks (boolean): Incluir subtareas para cada tarea (por defecto: true)
- include_completed_subtasks (boolean): Incluir subtareas completadas (por defecto: sigue a include_completed_tasks)
- max_subtask_depth (number): Profundidad máxima de subtareas a recuperar (por defecto: 1)
- opt_fields_tasks (string): Campos opcionales para tareas
- opt_fields_subtasks (string): Campos opcionales para subtareas
- opt_fields_sections (string): Campos opcionales para secciones
- opt_fields_project (string): Campos opcionales para el proyecto
- limit (number): Máximo de resultados por página (1-100)
- offset (string): Token de paginación de la respuesta anterior
- auto_paginate (boolean): Si se deben obtener automáticamente todas las páginas
- max_pages (number): Máximo de páginas a obtener cuando auto_paginate es verdadero
- Returns: Estructura jerárquica del proyecto con estadísticas
-
asana_get_attachments_for_object- Lista los archivos adjuntos de un objeto específico (tarea, proyecto, etc.)
- Entrada requerida:
- object_gid (string): El GID del objeto del que se obtendrán los archivos adjuntos
- Entrada opcional:
- limit (number): Resultados por página (1-100)
- offset (string): Token de desplazamiento de paginación
- opt_fields (string): Lista separada por comas de campos opcionales a incluir
- Devuelve: Lista de archivos adjuntos
-
asana_upload_attachment_for_object- Sube un archivo local como adjunto a una tarea u otro objeto
- Entrada requerida:
- object_gid (string): El GID del objeto al que se adjuntará el archivo
- file_path (string): Ruta al archivo local que se subirá
- Entrada opcional:
- file_name (string): Nombre de archivo personalizado
- file_type (string): Tipo MIME del archivo subido
- Devuelve: Metadatos del archivo adjunto subido
-
asana_download_attachment- Descarga un archivo adjunto a un directorio local
- Entrada requerida:
- attachment_gid (string): El GID del archivo adjunto que se descargará
- Entrada opcional:
- output_dir (string): Directorio para guardar el archivo (predeterminado: ~/downloads)
- Devuelve: Ruta y tipo MIME del archivo descargado
Prompts
task-summary- Obtén un resumen y una actualización de estado de una tarea basada en sus notas, campos personalizados y comentarios
- Entrada requerida:
- task_id (string): El ID de la tarea para la que se obtendrá el resumen
- Devuelve: Un prompt detallado con instrucciones para generar un resumen de la tarea
Recursos
Ninguno
Configuración
-
Crea una cuenta de Asana:
- Visita Asana.
- Haz clic en "Registrarse".
-
Obtén el token de acceso de Asana:
- Puedes generar un token de acceso personal desde la consola de desarrollador de Asana.
- Más detalles aquí: https://developers.asana.com/docs/personal-access-token
-
Opcional: Obtén tu ID de espacio de trabajo predeterminado:
- Si trabajas principalmente con un espacio de trabajo, puedes establecer un ID de espacio de trabajo predeterminado.
- Usa la API de Asana para listar tus espacios de trabajo, o ve a tu espacio de trabajo en Asana y copia el ID de la URL.
- Cuando estableces un ID de espacio de trabajo predeterminado, no necesitarás especificar el espacio de trabajo en cada llamada a la API.
- Sin un espacio de trabajo predeterminado, el servidor llamará a
asana_list_workspacespara obtener la lista de espacios de trabajo disponibles.
-
Configura Claude Desktop: Añade lo siguiente a tu
claude_desktop_config.json:{ "mcpServers": { "asana": { "command": "npx", "args": ["-y", "@cristip73/mcp-server-asana"], "env": { "ASANA_ACCESS_TOKEN": "your-asana-access-token", "DEFAULT_WORKSPACE_ID": "your-default-workspace-id" } } } }
Solución de problemas
Si encuentras errores de permisos:
- Asegúrate de que el plan de Asana que tienes permita el acceso a la API
- Confirma que el token de acceso y la configuración estén correctamente establecidos en
claude_desktop_config.json.
Contribuciones
Clona este repositorio y empieza a hackear.
Pruébalo localmente con el MCP Inspector
Si quieres probar tus cambios, puedes usar el MCP Inspector de esta manera:
npm run inspector
Esto expondrá el cliente en el puerto 5173 y el servidor en el puerto 3000.
Si esos puertos ya están en uso por otra cosa, puedes usar:
CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector
Licencia
Este servidor MCP está licenciado bajo la Licencia MIT. Esto significa que eres libre de usar, modificar y distribuir el software, sujeto a los términos y condiciones de la Licencia MIT. Para más detalles, consulta el archivo LICENSE en el repositorio del proyecto.