@salesforce/afv-skills 1.40.0 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/package.json +1 -1
  2. package/skills/automation-flow-generate/SKILL.md +32 -43
  3. package/skills/experience-portal-create/SKILL.md +497 -0
  4. package/skills/experience-portal-create/assets/report-template.md +30 -0
  5. package/skills/experience-portal-create/references/mcp-invocation.md +288 -0
  6. package/skills/experience-portal-create/references/post-creation-activate-publish.md +165 -0
  7. package/skills/experience-portal-create/references/templates.md +253 -0
  8. package/skills/experience-ui-bundle-features-generate/SKILL.md +5 -1
  9. package/skills/experience-ui-bundle-frontend-generate/SKILL.md +2 -0
  10. package/skills/experience-ui-bundle-frontend-generate/references/page.md +1 -0
  11. package/skills/platform-datamask-run/SKILL.md +345 -0
  12. package/skills/platform-datamask-run/references/api-surface.md +130 -0
  13. package/skills/platform-datamask-run/references/policy-authoring.md +185 -0
  14. package/skills/platform-datamask-run/references/run-and-abort.md +116 -0
  15. package/skills/platform-datamask-run/scripts/poll-job.sh +115 -0
  16. package/skills/platform-dataspace-access-configure/SKILL.md +51 -3
  17. package/skills/platform-dataspace-access-configure/scripts/inspect-dataspace-scopes.sh +56 -0
  18. package/skills/platform-lightning-type-widget-coordinate/references/build-plan-format.md +1 -0
  19. package/skills/platform-sandbox-configure/SKILL.md +17 -2
  20. package/skills/platform-trial-org-create/SKILL.md +175 -0
  21. package/skills/platform-trial-org-create/examples/create_request.json +9 -0
  22. package/skills/platform-trial-org-create/examples/error_response.json +41 -0
  23. package/skills/platform-trial-org-create/examples/success_response.json +27 -0
  24. package/skills/platform-trial-org-create/references/error_codes.md +42 -0
  25. package/skills/platform-trial-org-create/references/signup_request_fields.md +69 -0
  26. package/skills/platform-trial-org-create/scripts/create_signup_request.sh +175 -0
  27. package/skills/platform-trial-org-create/scripts/get_signup_request.sh +155 -0
  28. package/skills/platform-widget-generate/SKILL.md +47 -6
  29. package/skills/platform-widget-generate/examples/conditional.json +3 -3
  30. package/skills/platform-widget-generate/examples/list-with-foreach.json +2 -2
  31. package/skills/platform-widget-generate/examples/single-object.json +2 -2
  32. package/skills/platform-widget-generate/references/widget-bundle-layout.md +1 -1
  33. package/skills/service-agentforce-channel-configure/SKILL.md +271 -0
  34. package/skills/service-agentforce-channel-configure/references/agent-wiring.md +97 -0
  35. package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +145 -0
  36. package/skills/service-agentforce-channel-configure/references/channel-branch-voice.md +69 -0
  37. package/skills/service-agentforce-channel-configure/references/channel-types.md +61 -0
  38. package/skills/service-agentforce-channel-configure/references/live-traffic-gate.md +86 -0
  39. package/skills/service-agentforce-channel-configure/references/queue-resolution.md +135 -0
  40. package/skills/service-agentforce-channel-configure/references/routing-flow.md +384 -0
  41. package/skills/service-catalog-template-deploy/SKILL.md +310 -0
  42. package/skills/service-catalog-template-deploy/references/cli-invocation.md +258 -0
  43. package/skills/service-catalog-template-deploy/scripts/activate-verify.mjs +164 -0
  44. package/skills/service-catalog-template-deploy/scripts/build-deploy-payload.mjs +94 -0
  45. package/skills/service-catalog-template-deploy/scripts/resolve-template.mjs +331 -0
  46. package/skills/service-catalog-template-search/SKILL.md +212 -0
  47. package/skills/service-catalog-template-search/references/cli-invocation.md +128 -0
  48. package/skills/service-catalog-template-search/scripts/classify-catalog.mjs +205 -0
  49. package/skills/service-concierge-portal-generate/SKILL.md +126 -0
  50. package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +1428 -0
  51. package/skills/service-digital-engagement-channel-configure/SKILL.md +46 -6
  52. package/skills/service-digital-engagement-channel-configure/assets/messaging_channel_template.xml +2 -1
  53. package/skills/service-digital-engagement-channel-configure/examples/asa_agent_channel.xml +4 -1
  54. package/skills/service-helpagent-coordinate/README.md +8 -2
  55. package/skills/service-helpagent-coordinate/SKILL.md +126 -130
  56. package/skills/service-helpagent-coordinate/assets/help-agent-spec.md +70 -53
  57. package/skills/service-helpagent-coordinate/references/agent-script.md +571 -457
  58. package/skills/service-helpagent-coordinate/references/channel-voice.md +38 -9
  59. package/skills/service-helpagent-coordinate/references/channel-web-chat.md +173 -49
  60. package/skills/service-helpagent-coordinate/references/output-report-format.md +126 -0
  61. package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +153 -0
  62. package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +79 -0
  63. package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +35 -0
  64. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +271 -0
  65. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +265 -0
  66. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +220 -0
  67. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-final-report.mjs +102 -0
  68. package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/record-enable-result.mjs +73 -0
  69. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +206 -0
  70. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +194 -0
  71. package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +223 -0
  72. package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +45 -7
  73. package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +45 -5
  74. package/skills/service-itsm-agentic-setup-configure/SKILL.md +116 -0
  75. package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +64 -0
  76. package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +158 -0
  77. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/cli-invocation.md +361 -0
  78. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/error-taxonomy.md +44 -0
  79. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/reactivation.md +66 -0
  80. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +66 -0
  81. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/specialized-templates.md +148 -0
  82. package/skills/service-itsm-agentic-setup-employee-agent-configure/references/workflow-detail.md +169 -0
  83. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/build-create-body.mjs +116 -0
  84. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/classify-agent-existence.mjs +185 -0
  85. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/classify-preflight.mjs +168 -0
  86. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/create-scratch-dir.mjs +58 -0
  87. package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +197 -0
  88. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +186 -0
  89. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +51 -0
  90. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/cli-invocation.md +345 -0
  91. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/error-taxonomy.md +44 -0
  92. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/reactivation.md +63 -0
  93. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +44 -0
  94. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/workflow-detail.md +149 -0
  95. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +110 -0
  96. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +201 -0
  97. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-activate-result.mjs +135 -0
  98. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-agent-existence.mjs +194 -0
  99. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-preflight.mjs +158 -0
  100. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/create-scratch-dir.mjs +58 -0
  101. package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +191 -0
  102. package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +133 -0
  103. package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +71 -0
  104. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +308 -0
  105. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +23 -0
  106. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +193 -0
  107. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +57 -0
  108. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +394 -0
  109. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +266 -0
  110. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +106 -0
  111. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +142 -0
  112. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +82 -0
  113. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-action-surface.mjs +137 -0
  114. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-assignment-state.mjs +99 -0
  115. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +120 -0
  116. package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/resolve-target-user.mjs +86 -0
  117. package/skills/service-itsm-agentic-setup-uel-user-create/SKILL.md +284 -0
  118. package/skills/service-itsm-agentic-setup-uel-user-create/references/mcp-invocation.md +302 -0
  119. package/skills/service-itsm-channels-coordinate/SKILL.md +472 -0
  120. package/skills/service-itsm-incident-mgmt-configure/SKILL.md +212 -0
  121. package/skills/service-itsm-incident-mgmt-configure/references/mcp-invocation.md +225 -0
  122. package/skills/service-itsm-incident-priority-configure/SKILL.md +53 -12
  123. package/skills/service-itsm-swarming-configure/SKILL.md +212 -0
  124. package/skills/service-itsm-teams-configure/SKILL.md +395 -0
  125. package/skills/service-itsm-teams-configure/references/azure-credential-population.md +213 -0
  126. package/skills/service-itsm-teams-configure/references/gotchas.md +23 -0
  127. package/skills/service-itsm-teams-coordinate/SKILL.md +175 -0
  128. package/skills/service-itsm-teams-coordinate/examples/output-templates.md +85 -0
  129. package/skills/service-itsm-teams-debug/SKILL.md +144 -0
  130. package/skills/service-itsm-teams-debug/references/configuration-checklists.md +277 -0
  131. package/skills/service-itsm-teams-debug/references/report-generation.md +95 -0
  132. package/skills/service-itsm-teams-employee-agent-configure/SKILL.md +139 -0
  133. package/skills/service-itsm-teams-employee-agent-configure/assets/Teams_AgentForce.EmbeddedServiceConfig-meta.xml +43 -0
  134. package/skills/service-itsm-teams-employee-agent-configure/references/teams-embedded-employee-agent.md +480 -0
  135. package/skills/service-itsm-teams-itdesk-configure/SKILL.md +232 -0
  136. package/skills/service-itsm-teams-itservice-configure/SKILL.md +391 -0
@@ -0,0 +1,225 @@
1
+ # MCP invocation reference — service-itsm-incident-mgmt-configure
2
+
3
+ This skill toggles the **master ITSM Incident Management** org preference through the Salesforce-hosted **Headless-360 MCP server** (server key `headless-360`). The master pref reads and writes via the **Setup Discovery Connect API** (`/services/data/v67.0/connect/setup/discovery/*`, `apiName = service-cloud-itsm-incident`); enabling it cascades the sub-preferences on server-side, so the common enablement flow is a single POST.
4
+
5
+ Every read and every write dispatches through the four meta-tools that Headless-360 exposes: `discover`, `describe`, `dispatch`, `dispatch_readonly`. URLs are addressed by `url` + `method` on the dispatch tools — **not** by `operation_id`.
6
+
7
+ Public reference: `https://developer.salesforce.com/docs/platform/hosted-mcp-servers/references/reference/headless-360-mcp.html`
8
+
9
+ ## Tool argument shape (IMPORTANT)
10
+
11
+ Both `mcp__headless-360__dispatch` and `mcp__headless-360__dispatch_readonly` take:
12
+
13
+ ```json
14
+ {
15
+ "url": "/services/data/v67.0/...",
16
+ "method": "GET|POST|PATCH|...",
17
+ "body": { /* optional; POST/PATCH only */ },
18
+ "query_params": { /* optional; alternative to inline querystring */ }
19
+ }
20
+ ```
21
+
22
+ They do **not** take `{operation_id, arguments}` — that shape returns `INVALID_ARGUMENT: 'url' and 'method' are required`. Every example in this file uses the `{url, method, body?, query_params?}` shape.
23
+
24
+ `mcp__headless-360__describe` takes `{id: "<sor_id>"}` — a different arg name from the dispatch tools.
25
+
26
+ ## MCP client registration
27
+
28
+ The MCP client (adk-eval, Claude Code session, Postman, Cursor, etc.) needs an `additionalServers.headless-360` entry pointing at the correct env URL. Working example (from `packages/adk-eval/mcp-config.json`):
29
+
30
+ ```json
31
+ {
32
+ "enabled": true,
33
+ "toolsets": ["data", "orgs", "metadata", "testing", "users"],
34
+ "additionalServers": {
35
+ "headless-360": {
36
+ "disabled": false,
37
+ "timeout": 900000,
38
+ "type": "streamableHttp",
39
+ "url": "<pick from Server URLs table below>",
40
+ "autoApprove": ["discover", "describe", "dispatch_readonly"]
41
+ }
42
+ }
43
+ }
44
+ ```
45
+
46
+ Server URLs by environment:
47
+
48
+ | Environment | URL |
49
+ |-------------|-----|
50
+ | Production | `https://api.salesforce.com/platform/mcp/v1/platform/headless-360` |
51
+ | Sandbox / Scratch | `https://api.salesforce.com/platform/mcp/v1/sandbox/platform/headless-360` |
52
+ | Login-restricted org (`/d/` form) | `https://api.salesforce.com/platform/mcp/v1/d/{mydomain}/{develop\|scratch}/platform/headless-360` |
53
+
54
+ The `/d/` variant is required for orgs that have disabled login through `login.salesforce.com` / `test.salesforce.com`. `{mydomain}` is the org's My Domain prefix — the value before `.my.salesforce.com` in the org's login host.
55
+
56
+ Notes:
57
+
58
+ - **`timeout` is milliseconds** in the Vibes SDK contract, not seconds. `900000` = 15 minutes; a smaller value will kill `discover` / `dispatch` calls prematurely.
59
+ - `dispatch` is intentionally omitted from `autoApprove` — mutations should be user-approved per invocation. `dispatch_readonly` is auto-approved because it cannot change state.
60
+ - The URL's env segment (`platform` / `sandbox` / `develop` / `scratch`) must match the target org's tier and the tier of the ECA used for OAuth. A prod URL with a sandbox-tier ECA (or vice versa) will cause `OAUTH_AUTHORIZATION_BLOCKED` errors.
61
+
62
+ ## External Client App setup (one-time, org-admin task)
63
+
64
+ `headless-360` requires an **External Client App** (ECA) with:
65
+
66
+ - OAuth Scopes (Salesforce scope names): `MCP`, `RefreshToken`
67
+ - OIDC `.well-known` names for the same scopes: `mcp_api`, `refresh_token`
68
+ - **Issue JSON Web Token (JWT)-based access tokens for named users**: on
69
+ - All other security options: off unless the org requires them
70
+ - PKCE required (Authorization Code + PKCE grant only)
71
+ - Callback URL: one per MCP client (see below)
72
+
73
+ Callback URLs by client:
74
+
75
+ | Client | Callback URL |
76
+ |--------|--------------|
77
+ | Claude.ai (web app) | `https://claude.ai/api/mcp/auth_callback` |
78
+ | Claude Code CLI | `http://localhost:<port>/callback` — port matches the `oauth.callbackPort` set on the `mcpServers.<name>` entry in the Claude Code MCP client configuration. Register the same port on the ECA. Default port when unset is dynamic (a random high port each session), which will fail against a pre-registered ECA — always set `callbackPort` explicitly. |
79
+ | Postman (HTTP) | `https://oauth.pstmn.io/v1/callback` |
80
+ | Postman (browser) | `https://oauth.pstmn.io/v1/browser-callback` |
81
+ | Cursor (recent) | `http://localhost:8787/callback` |
82
+ | Cursor (legacy) | `cursor://anysphere.cursor-mcp/oauth/callback` |
83
+
84
+ Propagation: an ECA can take up to **30 minutes** to become operational after Create. Server activation (Setup → MCP Servers → `headless-360` → Activate) can take up to **2 minutes**.
85
+
86
+ Auth URLs (used by the MCP client at OAuth time):
87
+
88
+ | Env | Auth URL | Token URL |
89
+ |-----|----------|-----------|
90
+ | Production | `https://login.salesforce.com/services/oauth2/authorize` | `https://login.salesforce.com/services/oauth2/token` |
91
+ | Sandbox / Scratch | `https://test.salesforce.com/services/oauth2/authorize` | `https://test.salesforce.com/services/oauth2/token` |
92
+ | Login-restricted org (`/d/` form) | `https://{mydomain}.my.salesforce.com/services/oauth2/authorize` | `https://{mydomain}.my.salesforce.com/services/oauth2/token` |
93
+
94
+ For the `/d/` variant, the Auth/Token URLs point at the org's My Domain host directly — not at `login.salesforce.com` / `test.salesforce.com`. This is why the `/d/` server URL exists in the first place: those orgs have login through the shared hosts disabled.
95
+
96
+ Header prefix on tool calls: `Bearer <access_token>`. The org against which each tool call runs is derived from the JWT issuer — callers do not pass an orgId in the body.
97
+
98
+ ## API contract — master ITSM Incident Management toggle
99
+
100
+ **User-visible label**: Enable Incident Management. **Backing**: **Setup Discovery Connect API** at `/services/data/v67.0/connect/setup/discovery/*`. **Identifier on the wire**: `apiName = service-cloud-itsm-incident`.
101
+
102
+ **Access guard**: requires View Setup + Setup Admin (`UserPermissions.CustomizeApplication`). Org must have `IncidentMgmt.orgHasITSMOrgPermission`. Does not require the Headless-360 Aura dispatcher — this pref routes entirely through the Connect API.
103
+
104
+ Always call `describe` at runtime to confirm the exact schema — the examples here are working expectations, not contracts.
105
+
106
+ ### Read endpoint
107
+
108
+ `GET /services/data/v67.0/connect/setup/discovery/features`
109
+
110
+ This is the Setup Discovery **collection endpoint** — it returns the full feature catalog (~763 entries, ~1.1 MB on a well-loaded org) and does not honor an `?apiName=` filter server-side. Filter the returned array client-side to the element where `apiName == "service-cloud-itsm-incident"` and read its `status` field (`ENABLED` / `NOT_ENABLED` / …).
111
+
112
+ ```json
113
+ {
114
+ "url": "/services/data/v67.0/connect/setup/discovery/features",
115
+ "method": "GET"
116
+ }
117
+ ```
118
+
119
+ Trimmed element after client-side filtering:
120
+
121
+ ```json
122
+ {
123
+ "apiName": "service-cloud-itsm-incident",
124
+ "title": "Incident Management",
125
+ "tag": "ITSM_CLOUD",
126
+ "status": "ENABLED",
127
+ "completedConfigStepCount": 2,
128
+ "totalConfigStepCount": 17
129
+ }
130
+ ```
131
+
132
+ ### Write endpoints
133
+
134
+ `POST /services/data/v67.0/connect/setup/discovery/feature/service-cloud-itsm-incident/enable` and `POST .../disable`
135
+
136
+ Both endpoints take an empty body. The enable path flips the master to `ENABLED`; the disable path flips it to `NOT_ENABLED`. Verified: `GET` on either path returns `HTTP 405 METHOD_NOT_ALLOWED. Allowed are POST` — confirming both routes are registered as POST-only writers.
137
+
138
+ Enable:
139
+
140
+ ```json
141
+ {
142
+ "url": "/services/data/v67.0/connect/setup/discovery/feature/service-cloud-itsm-incident/enable",
143
+ "method": "POST",
144
+ "body": {}
145
+ }
146
+ ```
147
+
148
+ Disable:
149
+
150
+ ```json
151
+ {
152
+ "url": "/services/data/v67.0/connect/setup/discovery/feature/service-cloud-itsm-incident/disable",
153
+ "method": "POST",
154
+ "body": {}
155
+ }
156
+ ```
157
+
158
+ Response: `201 {"success": true}` on both routes (some builds may return `200`/`204` with an echoed feature summary or empty body — call `describe` at runtime to confirm the exact response schema).
159
+
160
+ Disabling then re-enabling on the same org preserves `completedConfigStepCount` — the server restores prior progress instead of resetting it.
161
+
162
+ ### Idempotency contract
163
+
164
+ Read the feature via the collection GET; filter to `apiName == "service-cloud-itsm-incident"`; compare `status` against the requested state; skip the POST when they already match (`status == "ENABLED"` for an enable request, or `status != "ENABLED"` for a disable request); verify by re-reading the feature after writing.
165
+
166
+ ## Confirm-to-write checkpoint (REQUIRED)
167
+
168
+ Before dispatching any POST, present the target payload via `AskUserQuestion` as `(Master Incident Management: <current> → <requested>)` and require an explicit "yes" before proceeding. Proceed to write ONLY on explicit "yes". On "no", stop and report the current state without writing.
169
+
170
+ ## Error taxonomy
171
+
172
+ Errors observed on Headless-360 for this surface:
173
+
174
+ - **`OAUTH_AUTHORIZATION_BLOCKED: Cross-org OAuth flows are not supported for this external client app`** during the OAuth handshake (before any `tools/call`) — the ECA the MCP client is using lives in a different org than the JWT-issuing target org, and that ECA has cross-org OAuth disabled (the default). Fixes, in order of preference:
175
+ 1. Create/activate the ECA **inside the target org** (Setup → External Client Apps in that org). Self-contained; no cross-org allowance needed.
176
+ 2. Confirm the target org's My Domain matches the `{mydomain}` segment in the server URL exactly, and matches the host in the Auth/Token URLs the ECA is registered against — an ECA registered against `login.salesforce.com` cannot mint tokens for a My-Domain host, and vice versa.
177
+ 3. Only if (1) is not possible: reconfigure the source-org ECA to permit cross-org OAuth.
178
+ - **`401 Unauthorized`** on `initialize` or any `tools/call` — ECA not propagated yet (takes up to 30 minutes), wrong scopes on the ECA (must be `mcp_api` + `refresh_token`), or the access token has expired. Surface verbatim.
179
+ - **`404 Not Found`** on `initialize` — the `headless-360` server is not activated on the org (Setup → MCP Servers → Activate — takes up to 2 minutes), or the server URL's env segment (`platform` / `sandbox` / `develop` / `scratch`) doesn't match the target org's tier.
180
+ - **`403 Forbidden`** on `discover` / `describe` — corpus gate closed (`enableHeadless360CorpusAccess` off for the org). The corpus gate is required for semantic search; if the org hasn't opened it, `dispatch*` will still work if you already know the URL directly.
181
+ - **`403 Forbidden`** on `dispatch_readonly` / `dispatch` — the calling user lacks View Setup + Setup Admin, or the org lacks `IncidentMgmt.orgHasITSMOrgPermission`.
182
+ - **`ROUTE_NOT_FOUND`** on `/services/data/*` — the exact URL isn't registered — usually a typo, wrong path segment, or a wrong `vXX.0` API version. Re-check the URL and API version.
183
+ - **`HTTP 405 METHOD_NOT_ALLOWED. Allowed are POST`** on a write URL — the caller used `GET` instead of `POST` against `.../enable` or `.../disable`. Both write routes are POST-only.
184
+
185
+ ## Worked example — Toggle master Incident Management
186
+
187
+ Step 1: Read current state via `dispatch_readonly`.
188
+
189
+ ```json
190
+ {
191
+ "url": "/services/data/v67.0/connect/setup/discovery/features",
192
+ "method": "GET"
193
+ }
194
+ ```
195
+
196
+ Response (after client-side filtering on `apiName == "service-cloud-itsm-incident"`):
197
+
198
+ ```json
199
+ {
200
+ "apiName": "service-cloud-itsm-incident",
201
+ "title": "Incident Management",
202
+ "tag": "ITSM_CLOUD",
203
+ "status": "NOT_ENABLED",
204
+ "completedConfigStepCount": 0,
205
+ "totalConfigStepCount": 17
206
+ }
207
+ ```
208
+
209
+ Step 2: Confirm-to-write — present `(Master Incident Management: NOT_ENABLED → ENABLED)` and require "yes".
210
+
211
+ Step 3: Write via `dispatch`.
212
+
213
+ ```json
214
+ {
215
+ "url": "/services/data/v67.0/connect/setup/discovery/feature/service-cloud-itsm-incident/enable",
216
+ "method": "POST",
217
+ "body": {}
218
+ }
219
+ ```
220
+
221
+ Response: `201 {"success": true}`.
222
+
223
+ Step 4: Verify via `dispatch_readonly` — re-read the collection endpoint, filter to `apiName == "service-cloud-itsm-incident"`, and confirm `status == "ENABLED"`.
224
+
225
+ **Disable direction**: substitute `.../disable` for `.../enable` in step 3; substitute `NOT_ENABLED` for `ENABLED` in the verify step and in the confirm-to-write tuple.
@@ -2,7 +2,7 @@
2
2
  name: service-itsm-incident-priority-configure
3
3
  description: "Configures the Incident Priority Matrix for Salesforce ITSM through the sf CLI — enabling or disabling the matrix, shaping the Impact x Urgency grid that derives Priority on Incident records, toggling the manual-override preference, and reading or setting the default fallback priority. Reads every value before writing, is idempotent, and requires explicit user confirmation before any mutation. Use when the user wants to view, enable, disable, set up, seed, add to, change, or remove priority matrix configuration for Incident records, change the default incident priority, or asks about incident priority setup, impact/urgency mapping, override, or the ITSM incident priority matrix. DO NOT TRIGGER for Problem or ChangeRequest priority matrices, Case priority fields, standard Priority picklists outside ITSM, SLA or milestone configuration, or enabling Incident Management itself (use the service-itsm-incident-mgmt-configure skill)."
4
4
  metadata:
5
- version: "1.0"
5
+ version: "1.3"
6
6
  domains: ["Service"]
7
7
  minApiVersion: "67.0"
8
8
  cliTools:
@@ -11,8 +11,6 @@ metadata:
11
11
  accessCheck:
12
12
  - type: "userPerm"
13
13
  value: "CustomizeApplication"
14
- - type: "orgPref"
15
- value: "ITSMIncidentMgmtEnabled"
16
14
  allowed-tools: |
17
15
  Read AskUserQuestion Bash
18
16
  ---
@@ -39,9 +37,14 @@ Writes are **idempotent** (skipped when the current state already matches the ta
39
37
 
40
38
  1. `sf` CLI ≥ 2.60 (verify with `sf --version`).
41
39
  2. The target org is authenticated with `sf` — one of `sf org list` should show it as `Connected`.
42
- 3. Incident Management is enabled on the org (`ITSMIncidentMgmtEnabled` org pref). Confirmed at
43
- preflight time via the Incident `describe`; if it 404s, direct the user to enable Incident
44
- Management first (use the `service-itsm-incident-mgmt-configure` skill).
40
+ 3. Incident Management is enabled on the org — the master pref for the Service Cloud ITSM
41
+ Incident feature (Setup Discovery `apiName = service-cloud-itsm-incident`). Read directly
42
+ at preflight time via `GET /services/data/v67.0/connect/setup/discovery/features` and
43
+ filter to `apiName == "service-cloud-itsm-incident"` (the setup-org-preferences endpoint
44
+ for the master is not exposed on this surface — `IncidentMgmtEnabled` /
45
+ `ITSMIncidentMgmtEnabled` both 404). If `status != "ENABLED"`, delegate to
46
+ `service-itsm-incident-mgmt-configure` inline to enable it (that skill runs its own
47
+ read-before-write + confirm-to-write against the same route), then resume Phase 1.
45
48
  4. The calling user has `CustomizeApplication` (View Setup + Setup Admin).
46
49
 
47
50
  If any precondition is unmet, the CLI surfaces the raw error verbatim — **do not fabricate state,
@@ -56,6 +59,7 @@ details, the picklist extraction recipe, and gotchas live in `references/sf-cli-
56
59
 
57
60
  | Concern | Transport | HTTP status |
58
61
  |---------|-----------|-------------|
62
+ | Master Incident Mgmt pref (read) | `sf api request rest` GET on `/services/data/v67.0/connect/setup/discovery/features`, filter `apiName == "service-cloud-itsm-incident"` for `status` | 200 |
59
63
  | Matrix enable flag (read/write) | `sf api request rest` on `/services/data/v67.0/setup/org/preferences/IncPriorityMatrixEnabled` | 200 |
60
64
  | Manual override (read/write) | `sf api request rest` on `/services/data/v67.0/setup/org/preferences/IncPriorityOverrideEnabled` | 200 |
61
65
  | Matrix rows (read) | `sf data query --use-tooling-api` on `ServiceOpPriorityConfig` | 200 |
@@ -86,19 +90,56 @@ Ask only what you cannot infer:
86
90
 
87
91
  All steps are sequential. **Always read before you write.** All calls go through `sf` CLI.
88
92
 
93
+ ### Phase 0 — Reuse what the session already knows
94
+
95
+ Each Phase 1 / Phase 2 read below carries a **skip-if-already-known** clause. Before
96
+ calling any `sf` command, check whether an earlier turn in this session already produced
97
+ the same fact **from a successful `sf` invocation tied to the current `--target-org`**
98
+ (a prior run of this skill, or an earlier `sf` call in the same conversation). Session
99
+ context here is per `--target-org <alias>`, so a different alias is a different session.
100
+ **An explicit user statement is NOT cache-eligible** — the picklist values, pref
101
+ booleans, matrix rows, and fallback priority all drive client-side validation and
102
+ duplicate prevention on Phase-4 mutations, so a mistaken or stale user assertion can
103
+ bypass those safeguards and create invalid or duplicate rows. When the only source is
104
+ a user statement (or you cannot identify a specific prior `sf` response), re-read.
105
+
106
+ - **`sf --version`** — if the CLI version was already reported this session, skip step 1.
107
+ - **Incident `describe` (active `Impact` / `Urgency` / `Priority` picklists)** — if the
108
+ Incident describe was already read for the current `--target-org` this session and the
109
+ three picklists are in context, skip step 2 and reuse them.
110
+ - **`IncPriorityMatrixEnabled` / `IncPriorityOverrideEnabled` pref values** — if either
111
+ was already read this session AND has not been PATCHed since, skip its Phase-2 read.
112
+ - **`ServiceOpPriorityConfig` rows** — if the current-org Incident rows were already
113
+ read this session AND no `POST` / `PATCH` / `delete` on `ServiceOpPriorityConfig` has
114
+ been dispatched since, skip step 5 and reuse the row list.
115
+ - **`StandardValueSet:IncidentPriority` default** — if the fallback priority was already
116
+ read this session AND no `StandardValueSet:IncidentPriority` deploy has run since,
117
+ skip step 6.
118
+
119
+ **When in doubt, re-check.** Skip only when the earlier fact is unambiguously in context
120
+ AND the target-org alias has not changed AND no write elsewhere in the session could
121
+ have invalidated it (Phase-4 writes in this skill are the primary invalidators — a
122
+ PATCH on a pref, a POST/PATCH/delete on a `ServiceOpPriorityConfig` row, or a
123
+ `StandardValueSet:IncidentPriority` deploy all bust the cache for the matching read).
124
+ If the user hints at a different org (or a different alias), re-run the read. A wrong
125
+ skip on a live org write is worse than a duplicated read.
126
+
89
127
  ### Phase 1 — Preflight
90
128
 
91
- 1. `sf --version` to confirm the CLI is available.
92
- 2. `sf api request rest "/services/data/v67.0/sobjects/Incident/describe" --method GET --target-org <alias>`. A **200** with `Impact` / `Urgency` / `Priority` picklist fields confirms Incident Management is enabled. Extract active picklist values for later validation. If the describe response is large, dispatch a subagent (haiku tier) to extract just the three picklists.
129
+ 1. *(Skip if `sf --version` was already reported this session — see Phase 0.)* `sf --version` to confirm the CLI is available.
130
+ 2. **Master Incident Management pref — direct read** *(Skip only if the master pref was
131
+ already read this session for the current `--target-org` AND the value was `ENABLED`
132
+ AND no write elsewhere in this session could have flipped it — see Phase 0.)* `sf api request rest "/services/data/v67.0/connect/setup/discovery/features" --method GET --target-org <alias>`. Parse the response and filter the `features[]` array to the element where `apiName == "service-cloud-itsm-incident"`; read its `status` field. If `status == "ENABLED"`, proceed to step 3. **If `status != "ENABLED"`, delegate to `service-itsm-incident-mgmt-configure` inline to enable the master pref** (that skill runs its own confirm-to-write against the same route), then re-read this step to verify `status == "ENABLED"` before continuing. If the delegation is declined by the user, halt — Priority Matrix cannot function while the master is off. This is a **direct read of the master pref**, not a proxy — the Incident describe check that follows is a secondary sanity check, not the master-state signal.
133
+ 3. *(Skip if the Incident describe for the current `--target-org` — including active `Impact` / `Urgency` / `Priority` picklists — is already in context this session — see Phase 0.)* `sf api request rest "/services/data/v67.0/sobjects/Incident/describe" --method GET --target-org <alias>`. A **200** with `Impact` / `Urgency` / `Priority` picklist fields is a secondary sanity check. Extract active picklist values for later validation. If the describe response is large, dispatch a subagent (haiku tier) to extract just the three picklists.
93
134
 
94
135
  ### Phase 2 — Show current state (read-only)
95
136
 
96
137
  Dispatch these reads (all expected to return 200):
97
138
 
98
- 3. `sf api request rest "/services/data/v67.0/setup/org/preferences/IncPriorityMatrixEnabled" --method GET --target-org <alias>` — matrix enable flag. Body: `{"isPreferenceEnabled": <bool>}`.
99
- 4. `sf api request rest "/services/data/v67.0/setup/org/preferences/IncPriorityOverrideEnabled" --method GET --target-org <alias>` — manual-override flag. Same body shape.
100
- 5. Matrix rows — `sf data query --use-tooling-api --target-org <alias> --query "SELECT Id, DeveloperName, ReferenceObject, Urgency, Impact, Priority FROM ServiceOpPriorityConfig WHERE ReferenceObject = 'Incident'"`. Returns zero or more rows. `DeveloperName` is required so the add step can derive a fresh unique suffix.
101
- 6. Default fallback priority — `sf api request rest "/services/data/v67.0/tooling/query/?q=SELECT+Id,MasterLabel,Metadata+FROM+StandardValueSet+WHERE+MasterLabel='IncidentPriority'" --method GET --target-org <alias>`. Read `records[0].Metadata.standardValue`, find the entry with `default: true`, take its `valueName` — that is the fallback priority.
139
+ 3. *(Skip if `IncPriorityMatrixEnabled` for the current `--target-org` was already read this session AND has not been PATCHed since — see Phase 0.)* `sf api request rest "/services/data/v67.0/setup/org/preferences/IncPriorityMatrixEnabled" --method GET --target-org <alias>` — matrix enable flag. Body: `{"isPreferenceEnabled": <bool>}`.
140
+ 4. *(Skip if `IncPriorityOverrideEnabled` for the current `--target-org` was already read this session AND has not been PATCHed since — see Phase 0.)* `sf api request rest "/services/data/v67.0/setup/org/preferences/IncPriorityOverrideEnabled" --method GET --target-org <alias>` — manual-override flag. Same body shape.
141
+ 5. *(Skip if the Incident `ServiceOpPriorityConfig` rows for the current `--target-org` were already read this session AND no POST / PATCH / delete on this SObject has been dispatched since — see Phase 0.)* Matrix rows — `sf data query --use-tooling-api --target-org <alias> --query "SELECT Id, DeveloperName, ReferenceObject, Urgency, Impact, Priority FROM ServiceOpPriorityConfig WHERE ReferenceObject = 'Incident'"`. Returns zero or more rows. `DeveloperName` is required so the add step can derive a fresh unique suffix.
142
+ 6. *(Skip if the `StandardValueSet:IncidentPriority` default was already read this session AND no `StandardValueSet:IncidentPriority` deploy has run since — see Phase 0.)* Default fallback priority — `sf api request rest "/services/data/v67.0/tooling/query/?q=SELECT+Id,MasterLabel,Metadata+FROM+StandardValueSet+WHERE+MasterLabel='IncidentPriority'" --method GET --target-org <alias>`. Read `records[0].Metadata.standardValue`, find the entry with `default: true`, take its `valueName` — that is the fallback priority.
102
143
 
103
144
  Format the rows as an Impact × Urgency grid (see `examples/render-matrix.md`). Steps 3–6 together are the "view" operation and the before-snapshot.
104
145
 
@@ -0,0 +1,212 @@
1
+ ---
2
+ name: service-itsm-swarming-configure
3
+ description: "Enable Swarming for Employee Service (ITSM) in Salesforce — the Salesforce Go feature service-cloud-swarming that lets IT Desk agents pull in subject-matter experts to collaboratively resolve incidents in real time. Use this for: 'turn on swarming', 'enable service-cloud-swarming', 'set up swarming for IT Desk', 'set Teams as collaboration tool for swarming', 'enable collaborative incident resolution', or any request to enable/verify this Salesforce Go feature. DO NOT TRIGGER for the base Microsoft Teams ITSM integration toggle (service-itsm-teams-configure) or for configuring notification-channel preferences."
4
+ metadata:
5
+ version: "1.0"
6
+ domains: ["Service"]
7
+ minApiVersion: "67.0"
8
+ relatedSkills:
9
+ - "experience-portal-create"
10
+ - "service-itsm-channels-coordinate"
11
+ - "service-itsm-teams-configure"
12
+ mcpTools:
13
+ headless-360:
14
+ tools: ["describe", "discover", "dispatch", "dispatch_readonly"]
15
+ semver: ">=1.0.0"
16
+ accessCheck:
17
+ - type: "orgPref"
18
+ value: "ITSMTeamsEnabled"
19
+ allowed-tools: |
20
+ Read AskUserQuestion
21
+ mcp__headless-360__discover
22
+ mcp__headless-360__describe
23
+ mcp__headless-360__dispatch
24
+ mcp__headless-360__dispatch_readonly
25
+ ---
26
+
27
+ # Enable Swarming for Employee Service (ITSM)
28
+
29
+ Enable the Salesforce Go feature **"Swarming"** (`service-cloud-swarming`) — the feature that
30
+ helps service reps pull in the right collaborators and subject-matter experts to resolve
31
+ incidents in real time. Every operation dispatches through **headless-360**.
32
+
33
+ > **Execute one step at a time.** These steps make real, state-changing API calls. Run a single
34
+ > operation, show its result, confirm it succeeded, then proceed — do not batch multiple setup
35
+ > calls into one parallel block.
36
+
37
+ ## Scope
38
+
39
+ - **In scope**: Enabling the `service-cloud-swarming` Go feature via its feature-enablement
40
+ Connect API; verifying feature state afterward; setting the "Select a Collaboration Tool"
41
+ picklist (the API-level target of the "Set Teams as Collaboration Tool for Swarming" checklist
42
+ item) to `Teams` via the org-values Connect API.
43
+ - **Out of scope**: The base Microsoft Teams ITSM Salesforce Go page toggle (`ITSMTeamsEnabled`) and Azure/Entra
44
+ app registration — use `service-itsm-teams-configure` (Swarming requires Teams to already be set
45
+ up as a prerequisite, per the Go page). Notification-channel preferences
46
+ (`Notifications` / `TeamsNotifications`) — a separate concern from this feature. Portal/site
47
+ creation — use `experience-portal-create`.
48
+
49
+ ---
50
+
51
+ ## The problem this skill solves
52
+
53
+ "Set Teams as Collaboration Tool for Swarming" is one item in the "Set Up Salesforce IT Desk"
54
+ checklist on the Teams ITSM Go page (`service-cloud-itsm-teams-integration`'s feature page) — but
55
+ it is gated behind a *separate* Go feature, `service-cloud-swarming`, which must be turned on
56
+ first. This skill is the dedicated place to turn Swarming on, so `service-itsm-teams-configure`
57
+ can delegate to it instead of duplicating feature-enablement logic.
58
+
59
+ ---
60
+
61
+ ## Workflow
62
+
63
+ ### Step 1 — Check current feature status
64
+
65
+ ```text
66
+ mcp__headless-360__dispatch(
67
+ method: "POST",
68
+ url: "/services/data/v67.0/connect/setup/discovery/features/status",
69
+ body: { "featureApiNames": ["service-cloud-swarming"] }
70
+ )
71
+ ```
72
+
73
+ Response shape:
74
+ ```json
75
+ {
76
+ "items": [
77
+ {
78
+ "apiName": "service-cloud-swarming",
79
+ "status": "ENABLED", // or "NOT_ENABLED" / "DISABLED"
80
+ "blockedByApexLock": false,
81
+ "dependencyStatuses": [],
82
+ "enableBlockedReasons": [],
83
+ "disableBlockedReasons": []
84
+ }
85
+ ]
86
+ }
87
+ ```
88
+
89
+ **Note:** this endpoint is POST-only despite being a status read — a `GET` with `queryParams`
90
+ returns `405 METHOD_NOT_ALLOWED "Allowed are POST"`.
91
+
92
+ If `status` is already `"ENABLED"`, skip to Step 3 (verification) — do not re-enable.
93
+ If `enableBlockedReasons` is non-empty, surface those reasons to the user before attempting Step 2.
94
+
95
+ ### Step 2 — Enable the feature
96
+
97
+ ```text
98
+ mcp__headless-360__dispatch(
99
+ method: "POST",
100
+ url: "/services/data/v67.0/connect/setup/discovery/feature/service-cloud-swarming/enable",
101
+ body: {}
102
+ )
103
+ ```
104
+
105
+ Verified live: returns `201 {"success":true}` cleanly (unlike the Teams feature-enable, this call
106
+ did not exhibit the "500 that still succeeds" gotcha in testing — but re-check status afterward
107
+ regardless, since Go feature-enable calls can be flaky in general).
108
+
109
+ ### Step 3 — Verify
110
+
111
+ ```text
112
+ mcp__headless-360__dispatch(
113
+ method: "POST",
114
+ url: "/services/data/v67.0/connect/setup/discovery/features/status",
115
+ body: { "featureApiNames": ["service-cloud-swarming"] }
116
+ )
117
+ ```
118
+
119
+ Expect `status: "ENABLED"`.
120
+
121
+ ### Step 4 — Check current collaboration tool value
122
+
123
+ ```text
124
+ mcp__headless-360__dispatch_readonly(
125
+ method: "GET",
126
+ url: "/services/data/v67.0/setup/org/values/SWARM_COLLABORATION_TOOL"
127
+ )
128
+ ```
129
+
130
+ Response shape — exactly one of the four value fields is populated:
131
+ ```json
132
+ { "booleanValue": false, "dateValue": null, "numberValue": null, "stringValue": "None" }
133
+ ```
134
+
135
+ `stringValue` holds the current picklist selection: `"None"`, `"Slack"`, or `"Teams"`. This is
136
+ the same Java enum-gated org-value endpoint family described in `setup-connect-api`'s
137
+ `get-org-value`/`update-org-value`/`verify-org-value-update` steps — `valueName` must be the
138
+ literal Java enum constant name (`SWARM_COLLABORATION_TOOL`, SCREAMING_SNAKE_CASE), not a
139
+ camelCase guess like `SwarmCollaborationTool`.
140
+
141
+ If already `"Teams"`, skip to Step 6 (report) — do not re-issue the write.
142
+
143
+ ### Step 5 — Set the collaboration tool to Teams
144
+
145
+ ```text
146
+ mcp__headless-360__dispatch(
147
+ method: "PATCH",
148
+ url: "/services/data/v67.0/setup/org/values/SWARM_COLLABORATION_TOOL",
149
+ body: { "orgValue": "Teams" }
150
+ )
151
+ ```
152
+
153
+ Verified live: returns `200 { "stringValue": "Teams", ... }`. This is the API-level write behind
154
+ the Swarming Go feature page's "Select a Collaboration Tool" dropdown — the same control the
155
+ Teams ITSM Go page's "Set Teams as Collaboration Tool for Swarming" checklist item deep-links to
156
+ via its "Go to Feature Page" button. Valid `orgValue` strings are `"None"`, `"Slack"`, `"Teams"`.
157
+
158
+ Re-run Step 4's GET afterward to confirm `stringValue == "Teams"`.
159
+
160
+ ### Step 6 — Report to the user
161
+
162
+ Report both the `service-cloud-swarming` feature status and the `SWARM_COLLABORATION_TOOL`
163
+ value, confirming "Set Teams as Collaboration Tool for Swarming" is now fully automated —
164
+ enabling the feature is the prerequisite, and the org-value PATCH is the actual checklist-item
165
+ write.
166
+
167
+ ---
168
+
169
+ ## Disabling (if requested)
170
+
171
+ ```text
172
+ mcp__headless-360__dispatch(
173
+ method: "POST",
174
+ url: "/services/data/v67.0/connect/setup/discovery/feature/service-cloud-swarming/disable",
175
+ body: {}
176
+ )
177
+ ```
178
+
179
+ Re-run Step 1 afterward to confirm.
180
+
181
+ To also reset the collaboration tool selection (optional — disabling the feature does not reset
182
+ it automatically):
183
+ ```text
184
+ mcp__headless-360__dispatch(
185
+ method: "PATCH",
186
+ url: "/services/data/v67.0/setup/org/values/SWARM_COLLABORATION_TOOL",
187
+ body: { "orgValue": "None" }
188
+ )
189
+ ```
190
+
191
+ ---
192
+
193
+ ## Gotchas
194
+
195
+ | Issue | Detail |
196
+ |-------|--------|
197
+ | "Set Teams as Collaboration Tool for Swarming" writes via `SWARM_COLLABORATION_TOOL`, not a Teams-side endpoint | This checklist item lives on the **Swarming** Go feature page itself (`/lightning/setup/page/feature/service-cloud-swarming/home`, "Select a Collaboration Tool" dropdown) — the Teams ITSM Go page's checklist item is just a deep link to it via "Go to Feature Page." The write API is `PATCH /services/data/v67.0/setup/org/values/SWARM_COLLABORATION_TOOL` with body `{"orgValue": "Teams"}` — part of `setup-connect-api`'s `get-org-value`/`update-org-value` steps. Verified live: `GET` returned `{"stringValue":"None"}` before, `{"stringValue":"Teams"}` after `PATCH`. |
198
+ | `valueName` must be the exact Java enum constant, not camelCase | The `/setup/org/values/{valueName}` endpoint calls `OrgValues.valueOf(valueName)` directly (`Enum.valueOf`), so it requires the literal SCREAMING_SNAKE_CASE constant name declared in `ui.services.utils.OrgValueUtil.OrgValues` — e.g. `SWARM_COLLABORATION_TOOL`. CamelCase guesses like `SwarmCollaborationTool` or `SwarmingCollaborationTool` return `400 ILLEGAL_QUERY_PARAMETER_VALUE "No enum constant ui.services.utils.OrgValueUtil.OrgValues.<guess>"` — that specific error confirms the endpoint/mechanism is right but the casing/name is wrong. The read-only `get-service-itsm-teams-collaboration-app-settings` endpoint (`GET /connect/it-service/collaboration-app-settings/{targetApplication}`) is unrelated to this setting — it's read-only (`POST`/`PATCH`/`PUT` return `405`) and returns empty `settings: []` regardless of feature state. |
199
+ | `features/status` is POST-only | A `GET` with `queryParams` on `/connect/setup/discovery/features/status` returns `405 METHOD_NOT_ALLOWED "Allowed are POST"` — always POST a JSON body with `featureApiNames`. |
200
+ | `swarming-connect-api` SOR is unrelated | headless-360's `swarming-connect-api` SOR is about **Slack messaging within swarming conversations** (post/patch/delete Slack messages, reactions, file uploads, channel/user search) — it does not configure which collaboration tool (Teams vs. Slack vs. Chatter) swarming uses. Do not confuse it with this skill's scope. |
201
+ | Swarming requires Teams first | The Go page frames "Set Teams as Collaboration Tool for Swarming" as a step *within* Teams ITSM setup — enable `service-cloud-itsm-teams-integration` (via `service-itsm-teams-configure`) before or alongside this skill. |
202
+ | Version prefix required | headless-360 `dispatch`/`dispatch_readonly` do not resolve API versions — always pass the full `/services/data/vXX.0/...` prefix. |
203
+
204
+ ---
205
+
206
+ ## Related Skills
207
+
208
+ | Skill | When to use instead / alongside |
209
+ |-------|---------------------------------|
210
+ | `service-itsm-teams-configure` | Enabling the base Microsoft Teams ITSM integration and Azure/Entra setup — a prerequisite for Swarming; delegates to this skill for the "Set Teams as Collaboration Tool for Swarming" checklist item |
211
+ | Notification-channel preferences | Enabling the `Notifications`/`TeamsNotifications` preferences is a distinct concern from this feature (no dedicated child skill exists yet) |
212
+ | `service-itsm-channels-coordinate` | Top-level menu across Teams, Slack, Swarming, Notifications, Portal |