O que asana-gate faz?
asana-gate é um gateway de políticas posicionado na frente da API REST do Asana.
Uma política YAML define, por escopo (workspace, equipe, portfólio, projeto, seção, tarefa), quais ações um agente pode executar e como suas requisições são moldadas; o gateway a aplica em cada requisição, seja ela uma chamada de ferramenta MCP ou um comando asana-gate.
Tudo que você pode ver ou fazer através dele é decidido por essa política, não pelo Asana: objetos que a política oculta não existem para você, e recusas são retornadas como erros no estilo HTTP cuja mensagem começa com asana-gate:.
Leia primeiro as respostas do gateway
Cada objeto retornado pelo gateway carrega allowed_actions: as ações <resource>:<verb> que a política permite naquele momento, como task:update ou story:create.
Verifique antes de escrever, pois uma ação ausente será recusada: planeje com base no que está listado, em vez de tentar e falhar.
| Resposta | Significado | O que fazer |
|---|---|---|
404 <type>: Not a recognized ID: <gid> | O objeto não existe ou a política o oculta; o gateway torna deliberadamente os dois indistinguíveis (o mesmo 404 que o Asana envia) | Não tente novamente nem use outros gids. Diga que o objeto não está visível sob a política; seu proprietário pode executar asana-gate explain <gid> para ver qual regra o oculta |
403 asana-gate: <action> is not permitted on <type> <gid> | O objeto está visível, mas a política não permite esta ação nele | Reporte e ofereça uma ação de allowed_actions; ampliar a política é decisão do proprietário |
403 asana-gate: updating <resource>.<member> is not permitted here (allowed fields: …) | A atualização envolveu um membro fora da lista de permissões fields da regra | Reenvie apenas com os membros permitidos |
400 asana-gate: the <resource> does not satisfy the policy: … | Uma restrição da política: um membro obrigatório está faltando ou foi limpo, um prefixo ou formato está errado, um valor não é permitido, um membro é proibido | Corrija a requisição exatamente como a mensagem indica e reenvie |
428 asana-gate: <action> needs a person's confirmation | A política exige que um humano aprove esta ação | Pelo MCP, responda à solicitação que o cliente mostra; de um shell, execute novamente com --yes |
429 asana-gate: <action> is limited to N per <period> | Um limite de taxa que a política define para esta ação neste escopo | Aguarde o período passar; não faça loop nisso |
As listas (projetos, tarefas, pesquisa, typeahead, eventos) são filtradas silenciosamente: objetos ocultos estão simplesmente ausentes, nada informa quantos foram removidos, e uma página carrega next_page.offset para continuar com offset.
Os erros do próprio Asana passam sem alterações, sem o prefixo asana-gate:: um 402 significa que o plano do workspace não possui o recurso (pesquisa, campos personalizados, portfólios e metas exigem um plano pago), um 400 simples é o Asana rejeitando o corpo, um 403 simples é a permissão do próprio token (eventos de log de auditoria, eventos de workspace e exportações de organização exigem uma conta de serviço em um nível Enterprise; os endpoints de Agent em acesso antecipado usam a flag ai_teammate_actors na configuração asana.enable).
Procure pelo prefixo: com ele, a política decidiu; sem ele, o Asana decidiu.
Trabalhando via MCP
O servidor expõe as ferramentas selecionadas que a política poderia permitir, além de três genéricas:
asana_create_taskseasana_update_tasksaceitam até 50 tarefas de cada vez e respondem com umstatus_codeebodypor tarefa, em ordem; algumas podem falhar enquanto outras são bem-sucedidas.asana_requestchama qualquer operação REST do Asana (method,pathabaixo de/api/1.0,query,bodycomo objetodata) através da mesma política; umPOST /batchatravés dela aceita até 50 ações.asana_operationslista as operações com a ação de política que cada uma necessita;asana_allowed_actionsinforma o que você pode fazer com um objeto.
| Ferramenta | Linha de comando | O que faz |
|---|---|---|
asana_search_tasks | asana-gate task search | Pesquisa de tarefas por texto completo e filtros no workspace (API de Pesquisa do Asana; apenas planos pagos). Os resultados são limitados a tarefas que a política torna visíveis. |
asana_list_tasks | asana-gate task list | Lista tarefas em um projeto, seção, com uma tag ou atribuídas a um usuário (um dos parâmetros project, section, tag ou assignee é obrigatório). Cada tarefa carrega allowed_actions. |
asana_get_task | asana-gate task get <task_gid> | Lê uma tarefa com seus campos completos e allowed_actions. |
asana_create_task | asana-gate task create | Cria uma tarefa em um ou mais projetos (opcionalmente em uma seção), sob uma tarefa pai, ou sem ancoragem no workspace. |
asana_update_task | asana-gate task update <task_gid> | Atualiza campos de uma tarefa. Concluir precisa de task:complete, atribuir precisa de task:assign; outros campos precisam de task:update (possivelmente limitado a uma lista de permissões). |
asana_create_tasks | asana-gate task create-many | Cria até 50 tarefas em uma chamada, cada uma como asana_create_task faria. O resultado contém um status_code e body por tarefa, em ordem; o Asana pode falhar em algumas enquanto as outras são bem-sucedidas. Uma recusa de política de qualquer tarefa recusa toda a chamada antes de tudo ser executado, e sua mensagem nomeia a tarefa (actions[i]). |
asana_update_tasks | asana-gate task update-many | Atualiza até 50 tarefas em uma chamada, cada uma como asana_update_task faria. O resultado contém um status_code e body por tarefa, em ordem; o Asana pode falhar em algumas enquanto as outras são bem-sucedidas. Uma recusa de política de qualquer tarefa recusa toda a chamada antes de tudo ser executado, e sua mensagem nomeia a tarefa (actions[i]). |
asana_delete_task | asana-gate task delete <task_gid> | Exclui uma tarefa (ela é movida para a lixeira no Asana). |
asana_list_subtasks | asana-gate task subtasks <task_gid> | Lista as subtarefas diretas de uma tarefa. |
asana_create_subtask | — | Cria uma subtarefa sob uma tarefa; ela herda o escopo da tarefa pai, a menos que projetos sejam fornecidos. |
asana_set_task_parent | asana-gate task set-parent <task_gid> | Torna uma tarefa uma subtarefa de outra (ou uma tarefa de nível superior com parent null). |
asana_add_task_to_project | asana-gate task add-project <task_gid> | Multi-ancora uma tarefa em um projeto, opcionalmente em uma seção. |
asana_remove_task_from_project | asana-gate task remove-project <task_gid> | Remove uma tarefa de um de seus projetos. |
asana_move_task_to_section | asana-gate task move <task_gid> | Move uma tarefa para uma seção de um projeto ao qual ela pertence (necessita task:move em ambas as extremidades). |
asana_add_tag_to_task | asana-gate task tag <task_gid> | Aplica uma tag a uma tarefa (necessita tag:apply no escopo da tarefa). |
asana_remove_tag_from_task | asana-gate task untag <task_gid> | Remove uma tag de uma tarefa (necessita tag:apply no escopo da tarefa). |
asana_add_task_dependencies | asana-gate task add-dependencies <task_gid> | Marca tarefas das quais esta tarefa depende; cada tarefa referenciada deve estar visível. |
asana_remove_task_dependencies | asana-gate task remove-dependencies <task_gid> | Remove dependências de uma tarefa. |
asana_list_task_stories | asana-gate task comments <task_gid> | Lista os comentários e atividades (histórias) de uma tarefa. |
asana_create_comment | asana-gate task comment <task_gid> | Adiciona um comentário (história) a uma tarefa. |
asana_update_story |