PSA Tool Map · git:20261012.86a11c5 · 2026-10-12 · sha256 446a055a431ac61b
PSA Tool Map git:20261012.86a11c5A
Immutable. This exact content never changes and is served at /api/v1/blob/446a055a431ac61b.
--- name: "PSA Tool Map" description: > Maps abstract PSA/ticketing operations (list new tickets, get ticket detail, update priority + status, list statuses, list priorities) to concrete Conduit tool names for Autotask, HaloPSA, and ConnectWise PSA. when_to_use: >- Fetched by another advanced-workflow skill that needs PSA access, never used standalone. Use when: PSA tool names, Autotask tools, HaloPSA tools, ConnectWise PSA tools, ticket status IDs, ticket priority IDs. --- ## Curated vendors This role is curated for: Autotask, HaloPSA, ConnectWise PSA. A connected PSA not listed here needs guided discovery: inspect the org's available tools for that connector, reason from naming and shape, and tell the human this vendor isn't fully vetted yet. ## Operation map | Abstract operation | Autotask | HaloPSA | ConnectWise PSA | |---|---|---|---| | List new/untriaged tickets | `autotask__autotask_search_tickets` | `halopsa__halopsa_tickets_list` | `connectwise-psa__cw_search_tickets` | | Get ticket detail | `autotask__autotask_get_ticket_details` | `halopsa__halopsa_tickets_get` | `connectwise-psa__cw_get_ticket` | | Update ticket (priority/status/etc.) | `autotask__autotask_update_ticket` | `halopsa__halopsa_tickets_update` | `connectwise-psa__cw_update_ticket` | | Add a ticket note/action | `autotask__autotask_create_ticket_note` | `halopsa__halopsa_tickets_add_action` | `connectwise-psa__cw_add_ticket_note` | | List valid ticket statuses (discover once, don't call per-run) | `autotask__autotask_list_ticket_statuses` | no dedicated list tool observed — confirm via `halopsa__halopsa_tickets_list` field values before baking in IDs | `connectwise-psa__cw_list_statuses` | | List valid ticket priorities (discover once, don't call per-run) | `autotask__autotask_list_ticket_priorities` | no dedicated list tool observed — confirm via ticket field values before baking in IDs | `connectwise-psa__cw_list_priorities` | ## Vendor-specific gotchas ### Autotask - Priority IDs are typically **not** ordered by severity — discover them by name, never assume numeric ordering. - Status/priority/queue IDs are tenant-specific — always discover once at build time, never hardcode across tenants. - Don't call `list_*` discovery tools on every routine run — it's slow enough to hit the 60-second tool timeout. Discover once, bake the IDs into the routine prompt. ### HaloPSA - No dedicated "list statuses"/"list priorities" tool was found in this vendor's observed tool surface — confirm the actual field values by reading a sample ticket via `halopsa_tickets_get` before baking any ID into a routine, don't assume symmetry with Autotask's shape. ### ConnectWise PSA - Tool names are `cw_`-prefixed, not `connectwise_manage_`-prefixed — verified against `connectwise/manage/GOVERNANCE.md`'s `VENDOR_TOOL_CONFIG` listing, registered under the gateway slug `connectwise-psa` (so gateway names are `connectwise-psa__cw_*`, e.g. `connectwise-psa__cw_search_tickets`). - `cw_add_ticket_note` writes a **customer-visible** note by default — pass `internalAnalysisFlag: true` explicitly for an internal-only note, or an agent's internal analysis gets emailed to the contact immediately. There is no delete-note tool to undo a mistaken send. - `cw_update_ticket` is the **only** route to closing a ticket (it takes raw JSON Patch, so `op: "remove"` can strip a field outright). Closing stops the SLA clock and can fire close notifications/satisfaction surveys, and Conduit's access tiers gate the whole tool at `write` regardless of which field the patch touches — there's no way to allow priority/owner patches while blocking status/closure patches at the gateway level. Treat `cw_update_ticket` as requiring a named human approver per invocation; never grant it to unattended/nightly automation. - Closure must pass through `Completed` before `Closed`, with a populated `resolution` field, or the patch fails with an error that reads like a permissions failure rather than a workflow-ordering one. - The 60-requests/minute rate limit is shared across all operators on the same ConnectWise API member — a wide `cw_search_*` discovery sweep by one routine can 429 everyone else's concurrent calls.