Asana

Interaja com tarefas, projetos, espaços de trabalho e comentários do Asana usando a API do Asana.

Documentação

Servidor MCP para Asana

npm version

Esta implementação do servidor Model Context Protocol para Asana permite que você fale com a API do Asana a partir de um cliente MCP, como o Claude Desktop da Anthropic, e muitos outros.

Mais detalhes sobre MCP aqui:

mcp-server-asana MCP server

Uso

Na ferramenta de IA de sua escolha (ex: Claude Desktop), pergunte algo sobre tarefas, projetos, espaços de trabalho e/ou comentários do Asana. Mencionar a palavra "asana" aumentará a chance de o LLM escolher a ferramenta certa.

Exemplo:

Quantas tarefas asana não concluídas temos no nosso projeto Sprint 30?

Outro exemplo:

Claude Desktop Example

Trabalhando com Campos Personalizados

Ao atualizar ou criar tarefas com campos personalizados, use o seguinte formato:

asana_update_task({
  task_id: "TASK_ID",
  custom_fields: {
    "custom_field_gid": value  // The value format depends on the field type
  }
})

O formato do valor varia de acordo com o tipo de campo:

  • Campos de enumeração: Use o enum_option.gid da opção (NÃO o nome de exibição)
  • Campos de texto: Use uma string
  • Campos numéricos: Use um número
  • Campos de data: Use uma string no formato YYYY-MM-DD
  • Campos de múltipla enumeração: Use um array de GIDs de opções de enumeração

Encontrando GIDs de Campos Personalizados

Para encontrar os GIDs dos campos personalizados e suas opções de enumeração:

  1. Use asana_get_task com o parâmetro opt_fields definido para incluir campos personalizados:

    asana_get_task({
      task_id: "TASK_ID",
      opt_fields: "custom_fields,custom_fields.enum_options"
    })
    
  2. Na resposta, procure pelo array custom_fields. Cada campo personalizado terá:

    • gid: O identificador exclusivo do campo personalizado
    • name: O nome de exibição do campo personalizado
    • resource_subtype: O tipo do campo personalizado (texto, número, enumeração, etc.)
    • Para campos de enumeração, examine o array enum_options para encontrar o GID de cada opção

Exemplo: Atualizando um Campo Personalizado do Tipo Enumeração

// 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
  }
});

Ferramentas

  1. asana_list_workspaces
    • Listar todos os espaços de trabalho disponíveis no Asana
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Lista de espaços de trabalho
    • Nota: Se DEFAULT_WORKSPACE_ID estiver definido, isso retornará apenas esse espaço de trabalho em vez de buscar todos os espaços de trabalho
  2. asana_search_projects
    • Pesquisar projetos no Asana usando correspondência de padrão de nome
    • Entrada obrigatória:
      • name_pattern (string): Padrão de expressão regular para corresponder aos nomes dos projetos
    • Entrada opcional:
      • workspace (string): O espaço de trabalho no qual pesquisar (opcional se DEFAULT_WORKSPACE_ID estiver definido)
      • team (string): A equipe para filtrar os projetos
      • archived (boolean): Retornar apenas projetos arquivados (padrão: false)
      • limit (number): Resultados por página (1-100)
      • offset (string): Token de deslocamento para paginação
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Lista de projetos correspondentes
    • Nota: É necessário especificar workspace ou team se DEFAULT_WORKSPACE_ID não estiver definido
  3. asana_search_tasks
    • Pesquisar tarefas em um espaço de trabalho com opções avançadas de filtro
    • Entrada obrigatória:
      • workspace (string): O espaço de trabalho no qual pesquisar (opcional se DEFAULT_WORKSPACE_ID estiver definido)
    • Entrada opcional:
      • text (string): Texto para pesquisar em nomes e descrições de tarefas
      • resource_subtype (string): Filtrar por subtipo de tarefa (ex.: milestone)
      • completed (boolean): Filtrar por tarefas concluídas
      • is_subtask (boolean): Filtrar por subtarefas
      • has_attachment (boolean): Filtrar por tarefas com anexos
      • is_blocked (boolean): Filtrar por tarefas com dependências incompletas
      • is_blocking (boolean): Filtrar por tarefas incompletas com dependentes
      • assignee, projects, sections, tags, teams e muitos outros filtros avançados
      • sort_by (string): Ordenar por due_date, created_at, completed_at, likes, modified_at (padrão: modified_at)
      • sort_ascending (boolean): Ordenar em ordem crescente (padrão: false)
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
      • custom_fields (object): Objeto contendo filtros de campos personalizados
    • Retorna: Lista de tarefas correspondentes
  4. asana_get_task
    • Obter informações detalhadas sobre uma tarefa específica
    • Entrada obrigatória:
      • task_id (string): O ID da tarefa a ser recuperado
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Informações detalhadas da tarefa
  5. asana_create_task
    • Criar uma nova tarefa em um projeto
    • Entrada obrigatória:
      • project_id (string): O projeto no qual criar a tarefa
      • name (string): Nome da tarefa
    • Entrada opcional:
      • notes (string): Descrição da tarefa
      • html_notes (string): Descrição da tarefa formatada em HTML
      • due_on (string): Data de vencimento no formato YYYY-MM-DD
      • assignee (string): Responsável (pode ser 'me' ou um ID de usuário)
      • followers (array of strings): Matriz de IDs de usuários para adicionar como seguidores
      • parent (string): O ID da tarefa pai para definir esta tarefa sob ela
      • projects (array of strings): Matriz de IDs de projetos para adicionar esta tarefa
      • resource_subtype (string): O tipo da tarefa (default_task ou milestone)
      • custom_fields (object): Objeto mapeando strings de GID de campos personalizados para seus valores
    • Retorna: Informações da tarefa criada
  6. asana_get_task_stories
    • Obter comentários e histórias de uma tarefa específica
    • Entrada obrigatória:
      • task_id (string): O ID da tarefa para obter as histórias
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Lista de histórias/comentários da tarefa
  7. asana_update_task
    • Atualizar os detalhes de uma tarefa existente
    • Entrada obrigatória:
      • task_id (string): O ID da tarefa a ser atualizada
    • Entrada opcional:
      • name (string): Novo nome para a tarefa
      • notes (string): Nova descrição para a tarefa
      • due_on (string): Nova data de vencimento no formato YYYY-MM-DD
      • assignee (string): Novo responsável (pode ser 'me' ou um ID de usuário)
      • completed (boolean): Marcar a tarefa como concluída ou não
      • resource_subtype (string): O tipo da tarefa (default_task ou milestone)
      • custom_fields (object): Objeto mapeando strings de GID de campos personalizados para seus valores
    • Retorna: Informações da tarefa atualizada
  8. asana_get_project
    • Obter informações detalhadas sobre um projeto específico
    • Entrada obrigatória:
      • project_id (string): O ID do projeto a ser recuperado
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Informações detalhadas do projeto
  9. asana_get_project_task_counts
    • Obter o número de tarefas em um projeto
    • Entrada obrigatória:
      • project_id (string): O ID do projeto para obter a contagem de tarefas
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Informações da contagem de tarefas
  10. asana_get_project_sections
    • Obter seções em um projeto
    • Entrada obrigatória:
      • project_id (string): O ID do projeto para obter as seções
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Lista de seções do projeto
  11. asana_create_task_story
    • Criar um comentário ou história em uma tarefa
    • Entrada obrigatória:
      • task_id (string): O ID da tarefa para adicionar a história
      • text (string): O conteúdo de texto da história/comentário
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Informações da história criada
  12. asana_add_task_dependencies
    • Definir dependências para uma tarefa
    • Entrada obrigatória:
      • task_id (string): O ID da tarefa para adicionar dependências
      • dependencies (array of strings): Matriz de IDs de tarefas das quais esta tarefa depende
    • Retorna: Dependências da tarefa atualizadas
  13. asana_add_task_dependents
    • Definir dependentes para uma tarefa (tarefas que dependem desta tarefa)
    • Entrada obrigatória:
      • task_id (string): O ID da tarefa para adicionar dependentes
      • dependents (array of strings): Matriz de IDs de tarefas que dependem desta tarefa
    • Retorna: Dependentes da tarefa atualizados
  14. asana_create_subtask
    • Criar uma nova subtarefa para uma tarefa existente
    • Entrada obrigatória:
      • parent_task_id (string): O ID da tarefa pai para criar a subtarefa sob ela
      • name (string): Nome da subtarefa
    • Entrada opcional:
      • notes (string): Descrição da subtarefa
      • due_on (string): Data de vencimento no formato YYYY-MM-DD
      • assignee (string): Responsável (pode ser 'me' ou um ID de usuário)
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Informações da subtarefa criada
  15. asana_add_followers_to_task
    • Adicionar seguidores a uma tarefa
    • Entrada obrigatória:
      • task_id (string): O ID da tarefa para adicionar seguidores
      • followers (array of strings): Matriz de IDs de usuários para adicionar como seguidores da tarefa
    • Retorna: Informações da tarefa atualizada
  16. asana_get_multiple_tasks_by_gid
    • Obter informações detalhadas de várias tarefas por seus GIDs (máximo de 25 tarefas)
    • Entrada obrigatória:
      • task_ids (array of strings ou string separada por vírgulas): GIDs das tarefas a recuperar (máx. 25)
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Lista de informações detalhadas das tarefas
  17. asana_get_project_status
    • Obter uma atualização de status de um projeto
    • Entrada obrigatória:
      • project_status_gid (string): O GID do status do projeto a recuperar
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Informações do status do projeto
  18. asana_get_project_statuses
    • Obter todas as atualizações de status de um projeto
    • Entrada obrigatória:
      • project_gid (string): O GID do projeto para obter os status
    • Entrada opcional:
      • limit (number): Resultados por página (1-100)
      • offset (string): Token de deslocamento para paginação
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Lista de atualizações de status do projeto
  19. asana_create_project_status
    • Criar uma nova atualização de status para um projeto
    • Entrada obrigatória:
      • project_gid (string): O GID do projeto para criar o status
      • text (string): O conteúdo de texto da atualização de status
    • Entrada opcional:
      • color (string): A cor do status (green, yellow, red)
      • title (string): O título da atualização de status
      • html_text (string): Texto formatado em HTML para a atualização de status
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Informações do status do projeto criado
  20. asana_delete_project_status
    • Excluir uma atualização de status de um projeto
    • Entrada obrigatória:
      • project_status_gid (string): O GID do status do projeto a excluir
    • Retorna: Confirmação de exclusão
  21. asana_set_parent_for_task
    • Definir o pai de uma tarefa e posicionar a subtarefa entre as outras subtarefas desse pai
    • Entrada obrigatória:
      • task_id (string): O ID da tarefa na qual operar
      • parent (string): O novo pai da tarefa, ou null para nenhum pai
    • Entrada opcional:
      • insert_after (string): Uma subtarefa do pai após a qual inserir a tarefa, ou null para inserir no início da lista
      • insert_before (string): Uma subtarefa do pai antes da qual inserir a tarefa, ou null para inserir no final da lista
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Informações da tarefa atualizada
  22. asana_get_tasks_for_tag
    • Obter tarefas para uma tag específica
    • Entrada obrigatória:
      • tag_gid (string): O GID da tag para recuperar tarefas
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
      • opt_pretty (boolean): Fornece a resposta em um formato 'bonito'
      • limit (integer): O número de objetos a retornar por página. O valor deve estar entre 1 e 100.
      • offset (string): Um deslocamento para a próxima página retornada pela API.
    • Retorna: Lista de tarefas para a tag especificada
  23. asana_get_tags_for_workspace
    • Obter tags em um espaço de trabalho
    • Entrada obrigatória:
      • workspace_gid (string): Identificador globalmente exclusivo para o espaço de trabalho ou organização (opcional se DEFAULT_WORKSPACE_ID estiver definido)
    • Entrada opcional:
      • limit (integer): Resultados por página. O número de objetos a retornar por página. O valor deve estar entre 1 e 100.
      • offset (string): Token de deslocamento. Um deslocamento para a próxima página retornada pela API.
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Lista de tags no espaço de trabalho
  24. asana_create_section_for_project
    • Criar uma nova seção em um projeto
    • Entrada obrigatória:
      • project_id (string): O ID do projeto no qual criar a seção
      • name (string): Nome da seção a criar
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Informações da seção criada
  25. asana_add_task_to_section
    • Adicionar uma tarefa a uma seção específica em um projeto
    • Entrada obrigatória:
      • section_id (string): O ID da seção para adicionar a tarefa
      • task_id (string): O ID da tarefa a adicionar à seção
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Resultado da operação
  26. asana_create_project
    • Criar um novo projeto em um espaço de trabalho
    • Entrada obrigatória:
      • workspace_id (string): O ID do espaço de trabalho no qual criar o projeto (opcional se DEFAULT_WORKSPACE_ID estiver definido)
      • name (string): Nome do projeto a criar
      • team_id (string): OBRIGATÓRIO para espaços de trabalho de organização - O GID da equipe para compartilhar o projeto
    • Entrada opcional:
      • public (boolean): Se o projeto é público para a organização (padrão: false)
      • archived (boolean): Se o projeto está arquivado (padrão: false)
  • color (string): Cor do projeto (light-green, light-orange, light-blue, etc.) * layout (string): O layout do projeto (board, list, timeline, ou calendar) * default_view (string): A visualização padrão do projeto (list, board, calendar, timeline, ou gantt) * due_on (string): A data em que este projeto vence (formato YYYY-MM-DD) * start_on (string): O dia em que o trabalho deste projeto começa (formato YYYY-MM-DD) * notes (string): Informações textuais de formato livre associadas ao projeto * opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Informações do projeto criado
  1. asana_get_teams_for_user

    • Obter equipes às quais o usuário tem acesso
    • Entrada obrigatória:
      • user_gid (string): O GID do usuário para obter equipes. Use 'me' para obter equipes do usuário atual.
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Lista de equipes às quais o usuário tem acesso
  2. asana_get_teams_for_workspace

    • Obter equipes em um espaço de trabalho
    • Entrada obrigatória:
      • workspace_gid (string): O GID do espaço de trabalho para obter equipes (opcional se DEFAULT_WORKSPACE_ID estiver definido)
    • Entrada opcional:
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Lista de equipes no espaço de trabalho
  3. asana_list_workspace_users

    • Obter usuários em um espaço de trabalho
    • Entrada obrigatória:
      • workspace_id (string): O ID do espaço de trabalho para obter usuários (opcional se DEFAULT_WORKSPACE_ID estiver definido)
    • Entrada opcional:
      • limit (integer): Resultados por página (1-100)
      • offset (string): Token de deslocamento de paginação
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir (padrão: "name,email")
      • auto_paginate (boolean): Se deve buscar automaticamente todas as páginas
      • max_pages (integer): Número máximo de páginas a buscar quando auto_paginate for verdadeiro
    • Retorna: Lista de usuários no espaço de trabalho
  4. asana_get_project_hierarchy

    • Obter a estrutura hierárquica completa de um projeto Asana, incluindo seções, tarefas e subtarefas
    • Entrada obrigatória:
      • project_id (string): O ID do projeto para obter a hierarquia
    • Entrada opcional:
      • include_completed_tasks (boolean): Incluir tarefas concluídas (padrão: false)
      • include_subtasks (boolean): Incluir subtarefas para cada tarefa (padrão: true)
      • include_completed_subtasks (boolean): Incluir subtarefas concluídas (padrão: segue include_completed_tasks)
      • max_subtask_depth (number): Profundidade máxima de subtarefas a recuperar (padrão: 1)
      • opt_fields_tasks (string): Campos opcionais para tarefas
      • opt_fields_subtasks (string): Campos opcionais para subtarefas
      • opt_fields_sections (string): Campos opcionais para seções
      • opt_fields_project (string): Campos opcionais para o projeto
      • limit (number): Máximo de resultados por página (1-100)
      • offset (string): Token de paginação da resposta anterior
      • auto_paginate (boolean): Se deve buscar automaticamente todas as páginas
      • max_pages (number): Máximo de páginas a buscar quando auto_paginate for verdadeiro
    • Retorna: Estrutura hierárquica do projeto com estatísticas
  5. asana_get_attachments_for_object

    • Lista anexos de um objeto específico (tarefa, projeto, etc.)
    • Entrada obrigatória:
      • object_gid (string): O GID do objeto para recuperar os anexos
    • Entrada opcional:
      • limit (number): Resultados por página (1-100)
      • offset (string): Token de deslocamento de paginação
      • opt_fields (string): Lista separada por vírgulas de campos opcionais a incluir
    • Retorna: Lista de anexos
  6. asana_upload_attachment_for_object

    • Envia um arquivo local como anexo a uma tarefa ou outro objeto
    • Entrada obrigatória:
      • object_gid (string): O GID do objeto ao qual anexar o arquivo
      • file_path (string): Caminho para o arquivo local a ser enviado
    • Entrada opcional:
      • file_name (string): Nome personalizado do arquivo
      • file_type (string): Tipo MIME do arquivo enviado
    • Retorna: Metadados do anexo enviado
  7. asana_download_attachment

    • Baixa um anexo para um diretório local
    • Entrada obrigatória:
      • attachment_gid (string): O GID do anexo a ser baixado
    • Entrada opcional:
      • output_dir (string): Diretório para salvar o arquivo (padrão: ~/downloads)
    • Retorna: Caminho e tipo MIME do arquivo baixado

Prompts

  1. task-summary
    • Obtém um resumo e atualização de status de uma tarefa com base em suas notas, campos personalizados e comentários
    • Entrada obrigatória:
      • task_id (string): O ID da tarefa para obter o resumo
    • Retorna: Um prompt detalhado com instruções para gerar um resumo da tarefa

Recursos

Nenhum

Configuração

  1. Crie uma conta no Asana:

    • Visite o Asana.
    • Clique em "Inscrever-se".
  2. Obtenha o token de acesso do Asana:

  3. Opcional: Obtenha o ID do seu workspace padrão:

    • Se você trabalha principalmente com um workspace, pode definir um ID de workspace padrão.
    • Use a API do Asana para listar seus workspaces, ou acesse seu workspace no Asana e copie o ID da URL.
    • Ao definir um ID de workspace padrão, você não precisará especificar o workspace em cada chamada de API.
    • Sem um workspace padrão, o servidor chamará asana_list_workspaces para obter a lista de workspaces disponíveis.
  4. Configure o Claude Desktop: Adicione o seguinte ao seu 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"
          }
        }
      }
    }
    

Solução de problemas

Se você encontrar erros de permissão:

  1. Verifique se o plano do Asana que você possui permite acesso à API
  2. Confirme se o token de acesso e a configuração estão definidos corretamente em claude_desktop_config.json.

Contribuição

Clone este repositório e comece a desenvolver.

Teste localmente com o MCP Inspector

Se quiser testar suas alterações, você pode usar o MCP Inspector da seguinte forma:

npm run inspector

Isso exporá o cliente na porta 5173 e o servidor na porta 3000.

Se essas portas já estiverem em uso por outra coisa, você pode usar:

CLIENT_PORT=5009 SERVER_PORT=3009 npm run inspector

Licença

Este servidor MCP é licenciado sob a Licença MIT. Isso significa que você é livre para usar, modificar e distribuir o software, sujeito aos termos e condições da Licença MIT. Para mais detalhes, consulte o arquivo LICENSE no repositório do projeto.