Communitygithub.com

sincekmori/asana-gate

透過 asana-gate(一個在 Asana REST API 前方放置聲明式 YAML 政策的策略閘道),以 MCP 工具(asana_*)和 asana-gate 命令列操作 Asana。每當任務以任何方式涉及 asana-gate(編寫或修復政策、執行 asana-gate 命令、呼叫其 MCP 工具、讀取其拒絕訊息)時,請使用此技能。

asana-gate 是什麼?

asana-gate 是一個位於 Asana REST API 前方的策略閘道,專為 AI 代理設計。它透過一個 YAML 檔案定義策略,針對每個範圍(工作區、團隊、投資組合、專案、區段、任務)指定代理可以執行哪些操作以及如何處理其請求。無論請求是透過 MCP 工具呼叫還是 asana-gate 命令列到達,閘道都會強制執行這些策略。如果某個物件被策略隱藏,對代理而言它就等於不存在;拒絕回應會以 HTTP 錯誤形式返回,訊息開頭為 `asana-gate:`。此技能支援多種平台,如 Claude Code、Cursor 和 Codex,並提供豐富的 MCP 工具集(例如 `asana_search_tasks`、`asana_create_task`)以及對應的命令列版本。使用時,應先檢查每個物件返回的 `allowed_actions` 集合,以避免執行不允許的操作。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sincekmori/asana-gate/tree/HEAD/skills/asana-gate

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

asana-gate 是做什麼的?

asana-gate 是一個位於 Asana REST API 前方的策略閘道。 一個 YAML 策略針對每個範圍(工作區、團隊、投資組合、專案、區段、任務)指定代理可以採取的動作以及如何塑造其請求;閘道會在每個請求上強制執行該策略,無論請求是透過 MCP 工具呼叫還是 asana-gate 命令到達。 您能透過它看到或執行的所有內容都由該策略決定,而非由 Asana 決定:策略隱藏的物件對您來說不存在,且拒絕回應會以 HTTP 風格的錯誤返回,其訊息開頭為 asana-gate:。

首先閱讀閘道的回覆

閘道傳回的每個物件都帶有 allowed_actions:策略目前允許對其進行的 <resource>:<verb> 動作,例如 task:update 或 story:create。 在進行寫入操作前請檢查此清單,因為清單中缺少的動作將會被拒絕:請根據列出的項目進行規劃,而不是嘗試後失敗。

回覆含義應採取的動作
404 <type>: Not a recognized ID: <gid>物件不存在,或策略將其隱藏;閘道刻意使兩者無法區分(與 Asana 傳送的 404 相同)不要重試或嘗試其他 gid。說明該物件在目前策略下不可見;其擁有者可執行 asana-gate explain <gid> 來查看是哪條規則隱藏了它
403 asana-gate: <action> is not permitted on <type> <gid>物件可見,但策略不允許對其執行此動作回報此情況,並提供 allowed_actions 中的一個動作;放寬策略是擁有者的決定
403 asana-gate: updating <resource>.<member> is not permitted here (allowed fields: …)更新觸及了規則 fields 允許清單之外的成員僅使用允許的成員重新發送請求
400 asana-gate: the <resource> does not satisfy the policy: …策略的約束:必需的成員缺失或被清空,前綴或格式錯誤,值不被允許,或成員被禁止完全按照訊息描述修正請求並重新發送
428 asana-gate: <action> needs a person's confirmation策略希望人工核准此動作對於 MCP,回應客戶端顯示的提示;在 shell 中,使用 --yes 重新執行
429 asana-gate: <action> is limited to N per <period>策略對該範圍中的此動作設定的速率上限等待該週期結束;不要對此進行迴圈

清單(專案、任務、搜尋、類型預測、事件)會被靜默過濾:隱藏的物件直接不存在,不會說明移除了多少個,且頁面會攜帶 next_page.offset 以使用 offset 繼續。 Asana 自身的錯誤會直接通過,不帶 asana-gate: 前綴:402 表示工作區的方案缺少該功能(搜尋、自訂欄位、投資組合和目標需要付費方案);純粹的 400 是 Asana 拒絕請求主體;純粹的 403 是權杖自身的權限(稽核日誌事件、工作區事件和組織匯出需要 Enterprise 層級的服務帳戶;早期存取 Agents 端點需要設定中 asana.enable 的 ai_teammate_actors 旗標)。 尋找前綴:帶有前綴表示是策略的決定,不帶前綴則表示是 Asana 的決定。

透過 MCP 運作

伺服器會公開策略可能允許的所有策展工具,以及三個通用工具:

  • asana_create_tasks 和 asana_update_tasks 一次最多接受 50 個任務,並按順序為每個任務回傳一個 status_code 和 body;部分可能失敗,而其餘成功。
  • asana_request 透過相同的策略呼叫任何 Asana REST 操作(method、path(在 /api/1.0 之下)、query、body(作為 data 物件));透過它進行的 POST /batch 最多接受 50 個動作。
  • asana_operations 列出每個操作所需的策略動作;asana_allowed_actions 告訴您可以使用一個物件做什麼。
工具命令列功能
asana_search_tasksasana-gate task search在工作區中進行全文和過濾任務搜尋(Asana Search API;僅限付費方案)。結果限制為策略可見的任務。
asana_list_tasksasana-gate task list列出專案、區段、帶有標籤或分配給使用者的任務(需要 project、section、tag 或 assignee 其中之一)。每個任務都帶有 allowed_actions。
asana_get_taskasana-gate task get <task_gid>讀取一個任務及其完整欄位和 allowed_actions。
asana_create_taskasana-gate task create在一個或多個專案中(可選擇在區段中)、在父任務下、或在工作區中無歸屬地建立任務。
asana_update_taskasana-gate task update <task_gid>更新任務的欄位。完成需要 task:complete,指派需要 task:assign;其他欄位需要 task:update(可能受限於允許清單)。
asana_create_tasksasana-gate task create-many一次呼叫最多建立 50 個任務,每個如同 asana_create_task 一樣。結果按順序包含每個任務的 status_code 和 body;Asana 可能使部分任務失敗而其他成功。任何任務的策略拒絕會在執行前拒絕整個呼叫,其訊息會指明任務(actions[i])。
asana_update_tasksasana-gate task update-many一次呼叫最多更新 50 個任務,每個如同 asana_update_task 一樣。結果按順序包含每個任務的 status_code 和 body;Asana 可能使部分任務失敗而其他成功。任何任務的策略拒絕會在執行前拒絕整個呼叫,其訊息會指明任務(actions[i])。
asana_delete_taskasana-gate task delete <task_gid>刪除一個任務(在 Asana 中會移至垃圾桶)。
asana_list_subtasksasana-gate task subtasks <task_gid>列出一個任務的直接子任務。
asana_create_subtask—在一個任務下建立子任務;除非指定了 projects,否則會繼承父項目的範圍。
asana_set_task_parentasana-gate task set-parent <task_gid>將一個任務設為另一個任務的子任務(或設為 parent null 的頂層任務)。
asana_add_task_to_projectasana-gate task add-project <task_gid>將任務多重歸屬到一個專案中,可選擇歸屬到區段。
asana_remove_task_from_projectasana-gate task remove-project <task_gid>從任務的其中一個專案中移除它。
asana_move_task_to_sectionasana-gate task move <task_gid>將任務移到其所屬專案的一個區段中(需要在兩端都有 task:move)。
asana_add_tag_to_taskasana-gate task tag <task_gid>對任務套用標籤(需要在任務範圍內有 tag:apply)。
asana_remove_tag_from_taskasana-gate task untag <task_gid>從任務移除標籤(需要在任務範圍內有 tag:apply)。
asana_add_task_dependenciesasana-gate task add-dependencies <task_gid>標記此任務依賴的任務;每個引用的任務都必須可見。
asana_remove_task_dependenciesasana-gate task remove-dependencies <task_gid>移除任務的依賴關係。
asana_list_task_storiesasana-gate task comments <task_gid>列出任務的評論和活動(動態)。
asana_create_commentasana-gate task comment <task_gid>為任務新增評論(動態)。
asana_update_story…更新動態。

(由於原文被截斷,此處省略了完整表格的其餘部分。)

相關技能