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
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:
- https://www.anthropic.com/news/model-context-protocol
- https://modelcontextprotocol.io/introduction
- https://github.com/modelcontextprotocol
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:

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.gidda 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:
-
Use
asana_get_taskcom o parâmetroopt_fieldsdefinido para incluir campos personalizados:asana_get_task({ task_id: "TASK_ID", opt_fields: "custom_fields,custom_fields.enum_options" }) -
Na resposta, procure pelo array
custom_fields. Cada campo personalizado terá:gid: O identificador exclusivo do campo personalizadoname: O nome de exibição do campo personalizadoresource_subtype: O tipo do campo personalizado (texto, número, enumeração, etc.)- Para campos de enumeração, examine o array
enum_optionspara 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
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
-
Crie uma conta no Asana:
- Visite o Asana.
- Clique em "Inscrever-se".
-
Obtenha o token de acesso do Asana:
- Você pode gerar um token de acesso pessoal no console de desenvolvedor do Asana.
- Mais detalhes aqui: https://developers.asana.com/docs/personal-access-token
-
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_workspacespara obter a lista de workspaces disponíveis.
-
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:
- Verifique se o plano do Asana que você possui permite acesso à API
- 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.