¿Qué hace asana-gate?
asana-gate es una puerta de enlace de políticas frente a la API REST de Asana.
Una política YAML define, por ámbito (workspace, equipo, portfolio, proyecto, sección, tarea), qué acciones puede realizar un agente y cómo se moldean sus solicitudes; la puerta de enlace la aplica en cada solicitud, ya sea que llegue como una llamada a una herramienta MCP o como un comando asana-gate.
Todo lo que puedas ver o hacer a través de ella está decidido por esa política, no por Asana: los objetos que la política oculta no existen para ti, y las denegaciones se devuelven como errores de estilo HTTP cuyo mensaje comienza con asana-gate:.
Lee primero las respuestas de la puerta de enlace
Cada objeto que devuelve la puerta de enlace lleva allowed_actions: las acciones <recurso>:<verbo> que la política permite sobre él en ese momento, como task:update o story:create.
Compruébalo antes de escribir, porque una acción que falte será denegada: planifica en función de lo que esté listado, en lugar de intentar y fallar.
| Respuesta | Significado | Qué hacer |
|---|---|---|
404 <tipo>: No es un ID reconocido: <gid> | El objeto no existe, o la política lo oculta; la puerta de enlace hace deliberadamente indistinguibles ambas (el mismo 404 que envía Asana) | No reintentes ni pruebes otros gid. Indica que el objeto no es visible bajo la política; su propietario puede ejecutar asana-gate explain <gid> para ver qué regla lo oculta |
403 asana-gate: <acción> no está permitida en <tipo> <gid> | El objeto es visible, pero la política no permite esta acción allí | Infórmalo y ofrece una acción de allowed_actions; ampliar la política es decisión del propietario |
403 asana-gate: la actualización de <recurso>.<miembro> no está permitida aquí (campos permitidos: …) | La actualización tocó un miembro fuera de la lista de campos permitidos de la regla | Reenvía solo con los miembros permitidos |
400 asana-gate: el <recurso> no cumple la política: … | Una restricción de la política: falta un miembro requerido o se ha limpiado, un prefijo o formato es incorrecto, un valor no está permitido, un miembro está prohibido | Corrige la solicitud exactamente como indica el mensaje y reenvía |
428 asana-gate: <acción> necesita la confirmación de una persona | La política requiere que un humano apruebe esta acción | A través de MCP, responde a la pregunta que muestra el cliente; desde un shell, vuelve a ejecutar con --yes |
429 asana-gate: <acción> está limitada a N por <período> | Un límite de tasa que la política establece para esta acción en este ámbito | Espera a que pase el período; no hagas un bucle sobre él |
Las listas (proyectos, tareas, búsqueda, autocompletado, eventos) se filtran en silencio: los objetos ocultos simplemente no aparecen, no se indica cuántos se eliminaron, y una página lleva next_page.offset para continuar con offset.
Los errores propios de Asana pasan sin cambios, sin el prefijo asana-gate:: un 402 significa que el plan del workspace carece de la función (búsqueda, campos personalizados, portfolios y metas necesitan un plan de pago), un 400 simple es Asana rechazando el cuerpo, un 403 simple es el permiso del propio token (eventos de registro de auditoría, eventos del workspace y exportaciones de organización requieren una cuenta de servicio en un nivel Enterprise; los endpoints de Agents en acceso anticipado toman la marca ai_teammate_actors en la configuración asana.enable).
Busca el prefijo: con él, la política decidió; sin él, lo hizo Asana.
Trabajar a través de MCP
El servidor expone las herramientas seleccionadas que la política podría permitir, más tres genéricas:
asana_create_tasksyasana_update_taskstoman hasta 50 tareas a la vez y responden con unstatus_codeybodypor tarea, en orden; algunas pueden fallar mientras otras tienen éxito.asana_requestllama a cualquier operación REST de Asana (method,pathdebajo de/api/1.0,query,bodycomo el objetodata) a través de la misma política; unPOST /batcha través de ella toma hasta 50 acciones.asana_operationslista las operaciones con la acción de política que necesita cada una;asana_allowed_actionsindica lo que puedes hacer con un objeto.
| Herramienta | Línea de comandos | Qué hace |
|---|---|---|
asana_search_tasks | asana-gate task search | Búsqueda de texto completo y filtrada de tareas en el workspace (API de Búsqueda de Asana; solo planes de pago). Los resultados se limitan a las tareas que la política hace visibles. |
asana_list_tasks | asana-gate task list | Lista tareas en un proyecto, una sección, con una etiqueta, o asignadas a un usuario (se requiere uno de: proyecto, sección, etiqueta o asignado). Cada tarea lleva allowed_actions. |
asana_get_task | asana-gate task get <task_gid> | Lee una tarea con todos sus campos y allowed_actions. |
asana_create_task | asana-gate task create | Crea una tarea en uno o más proyectos (opcionalmente en una sección), bajo una tarea padre, o sin hogar en el workspace. |
asana_update_task | asana-gate task update <task_gid> | Actualiza campos de una tarea. Completar necesita task:complete, asignar necesita task:assign; otros campos necesitan task:update (posiblemente limitado a una lista de campos permitidos). |
asana_create_tasks | asana-gate task create-many | Crea hasta 50 tareas en una sola llamada, cada una como lo haría asana_create_task. El resultado contiene un status_code y body por tarea, en orden; Asana puede fallar algunas mientras otras tienen éxito. Una denegación de política de cualquier tarea rechaza toda la llamada antes de ejecutarse, y su mensaje nombra la tarea (actions[i]). |
asana_update_tasks | asana-gate task update-many | Actualiza hasta 50 tareas en una sola llamada, cada una como lo haría asana_update_task. El resultado contiene un status_code y body por tarea, en orden; Asana puede fallar algunas mientras otras tienen éxito. Una denegación de política de cualquier tarea rechaza toda la llamada antes de ejecutarse, y su mensaje nombra la tarea (actions[i]). |
asana_delete_task | asana-gate task delete <task_gid> | Elimina una tarea (se mueve a la papelera en Asana). |
asana_list_subtasks | asana-gate task subtasks <task_gid> | Lista las subtareas directas de una tarea. |
asana_create_subtask | — | Crea una subtarea debajo de una tarea; hereda el ámbito del padre a menos que se proporcionen proyectos. |
asana_set_task_parent | asana-gate task set-parent <task_gid> | Convierte una tarea en subtarea de otra (o en tarea de nivel superior con padre null). |
asana_add_task_to_project | asana-gate task add-project <task_gid> | Agrega una tarea a varios proyectos, opcionalmente en una sección. |
asana_remove_task_from_project | asana-gate task remove-project <task_gid> | Elimina una tarea de uno de sus proyectos. |
asana_move_task_to_section | asana-gate task move <task_gid> | Mueve una tarea a una sección de un proyecto al que pertenece (necesita task:move en ambos extremos). |
asana_add_tag_to_task | asana-gate task tag <task_gid> | Aplica una etiqueta a una tarea (necesita tag:apply en el ámbito de la tarea). |
asana_remove_tag_from_task | asana-gate task untag <task_gid> | Elimina una etiqueta de una tarea (necesita tag:apply en el ámbito de la tarea). |
asana_add_task_dependencies | asana-gate task add-dependencies <task_gid> | Marca tareas de las que esta tarea depende; cada tarea referenciada debe ser visible. |
asana_remove_task_dependencies | asana-gate task remove-dependencies <task_gid> | Elimina dependencias de una tarea. |
asana_list_task_stories | asana-gate task comments <task_gid> | Lista los comentarios y la actividad (historias) de una tarea. |
asana_create_comment | asana-gate task comment <task_gid> | Agrega un comentario (historia) a una tarea. |
asana_update_story |