@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.
- package/package.json +1 -1
- package/skills/automation-flow-generate/SKILL.md +32 -43
- package/skills/experience-portal-create/SKILL.md +497 -0
- package/skills/experience-portal-create/assets/report-template.md +30 -0
- package/skills/experience-portal-create/references/mcp-invocation.md +288 -0
- package/skills/experience-portal-create/references/post-creation-activate-publish.md +165 -0
- package/skills/experience-portal-create/references/templates.md +253 -0
- package/skills/experience-ui-bundle-features-generate/SKILL.md +5 -1
- package/skills/experience-ui-bundle-frontend-generate/SKILL.md +2 -0
- package/skills/experience-ui-bundle-frontend-generate/references/page.md +1 -0
- package/skills/platform-datamask-run/SKILL.md +345 -0
- package/skills/platform-datamask-run/references/api-surface.md +130 -0
- package/skills/platform-datamask-run/references/policy-authoring.md +185 -0
- package/skills/platform-datamask-run/references/run-and-abort.md +116 -0
- package/skills/platform-datamask-run/scripts/poll-job.sh +115 -0
- package/skills/platform-dataspace-access-configure/SKILL.md +51 -3
- package/skills/platform-dataspace-access-configure/scripts/inspect-dataspace-scopes.sh +56 -0
- package/skills/platform-lightning-type-widget-coordinate/references/build-plan-format.md +1 -0
- package/skills/platform-sandbox-configure/SKILL.md +17 -2
- package/skills/platform-trial-org-create/SKILL.md +175 -0
- package/skills/platform-trial-org-create/examples/create_request.json +9 -0
- package/skills/platform-trial-org-create/examples/error_response.json +41 -0
- package/skills/platform-trial-org-create/examples/success_response.json +27 -0
- package/skills/platform-trial-org-create/references/error_codes.md +42 -0
- package/skills/platform-trial-org-create/references/signup_request_fields.md +69 -0
- package/skills/platform-trial-org-create/scripts/create_signup_request.sh +175 -0
- package/skills/platform-trial-org-create/scripts/get_signup_request.sh +155 -0
- package/skills/platform-widget-generate/SKILL.md +47 -6
- package/skills/platform-widget-generate/examples/conditional.json +3 -3
- package/skills/platform-widget-generate/examples/list-with-foreach.json +2 -2
- package/skills/platform-widget-generate/examples/single-object.json +2 -2
- package/skills/platform-widget-generate/references/widget-bundle-layout.md +1 -1
- package/skills/service-agentforce-channel-configure/SKILL.md +271 -0
- package/skills/service-agentforce-channel-configure/references/agent-wiring.md +97 -0
- package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +145 -0
- package/skills/service-agentforce-channel-configure/references/channel-branch-voice.md +69 -0
- package/skills/service-agentforce-channel-configure/references/channel-types.md +61 -0
- package/skills/service-agentforce-channel-configure/references/live-traffic-gate.md +86 -0
- package/skills/service-agentforce-channel-configure/references/queue-resolution.md +135 -0
- package/skills/service-agentforce-channel-configure/references/routing-flow.md +384 -0
- package/skills/service-catalog-template-deploy/SKILL.md +310 -0
- package/skills/service-catalog-template-deploy/references/cli-invocation.md +258 -0
- package/skills/service-catalog-template-deploy/scripts/activate-verify.mjs +164 -0
- package/skills/service-catalog-template-deploy/scripts/build-deploy-payload.mjs +94 -0
- package/skills/service-catalog-template-deploy/scripts/resolve-template.mjs +331 -0
- package/skills/service-catalog-template-search/SKILL.md +212 -0
- package/skills/service-catalog-template-search/references/cli-invocation.md +128 -0
- package/skills/service-catalog-template-search/scripts/classify-catalog.mjs +205 -0
- package/skills/service-concierge-portal-generate/SKILL.md +126 -0
- package/skills/service-concierge-portal-generate/references/portal-deploy-runbook.md +1428 -0
- package/skills/service-digital-engagement-channel-configure/SKILL.md +46 -6
- package/skills/service-digital-engagement-channel-configure/assets/messaging_channel_template.xml +2 -1
- package/skills/service-digital-engagement-channel-configure/examples/asa_agent_channel.xml +4 -1
- package/skills/service-helpagent-coordinate/README.md +8 -2
- package/skills/service-helpagent-coordinate/SKILL.md +126 -130
- package/skills/service-helpagent-coordinate/assets/help-agent-spec.md +70 -53
- package/skills/service-helpagent-coordinate/references/agent-script.md +571 -457
- package/skills/service-helpagent-coordinate/references/channel-voice.md +38 -9
- package/skills/service-helpagent-coordinate/references/channel-web-chat.md +173 -49
- package/skills/service-helpagent-coordinate/references/output-report-format.md +126 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +153 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +79 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/scripts/verify-child-verdict.mjs +35 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +271 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +265 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +220 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-final-report.mjs +102 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/record-enable-result.mjs +73 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +206 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +194 -0
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +223 -0
- package/skills/service-itsm-agentic-setup-cmdb-configure/SKILL.md +45 -7
- package/skills/service-itsm-agentic-setup-cmdb-configure/references/mcp-invocation.md +45 -5
- package/skills/service-itsm-agentic-setup-configure/SKILL.md +116 -0
- package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +64 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +158 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/cli-invocation.md +361 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/error-taxonomy.md +44 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/reactivation.md +66 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +66 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/specialized-templates.md +148 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/workflow-detail.md +169 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/build-create-body.mjs +116 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/classify-agent-existence.mjs +185 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/classify-preflight.mjs +168 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/create-scratch-dir.mjs +58 -0
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +197 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +186 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +51 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/cli-invocation.md +345 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/error-taxonomy.md +44 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/reactivation.md +63 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +44 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/workflow-detail.md +149 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +110 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +201 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-activate-result.mjs +135 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-agent-existence.mjs +194 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-preflight.mjs +158 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/create-scratch-dir.mjs +58 -0
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +191 -0
- package/skills/service-itsm-agentic-setup-incident-management/SKILL.md +133 -0
- package/skills/service-itsm-agentic-setup-incident-management/examples/output-templates.md +71 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +308 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone.json +23 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +193 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +57 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +394 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +266 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +106 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +142 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +82 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-action-surface.mjs +137 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-assignment-state.mjs +99 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +120 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/resolve-target-user.mjs +86 -0
- package/skills/service-itsm-agentic-setup-uel-user-create/SKILL.md +284 -0
- package/skills/service-itsm-agentic-setup-uel-user-create/references/mcp-invocation.md +302 -0
- package/skills/service-itsm-channels-coordinate/SKILL.md +472 -0
- package/skills/service-itsm-incident-mgmt-configure/SKILL.md +212 -0
- package/skills/service-itsm-incident-mgmt-configure/references/mcp-invocation.md +225 -0
- package/skills/service-itsm-incident-priority-configure/SKILL.md +53 -12
- package/skills/service-itsm-swarming-configure/SKILL.md +212 -0
- package/skills/service-itsm-teams-configure/SKILL.md +395 -0
- package/skills/service-itsm-teams-configure/references/azure-credential-population.md +213 -0
- package/skills/service-itsm-teams-configure/references/gotchas.md +23 -0
- package/skills/service-itsm-teams-coordinate/SKILL.md +175 -0
- package/skills/service-itsm-teams-coordinate/examples/output-templates.md +85 -0
- package/skills/service-itsm-teams-debug/SKILL.md +144 -0
- package/skills/service-itsm-teams-debug/references/configuration-checklists.md +277 -0
- package/skills/service-itsm-teams-debug/references/report-generation.md +95 -0
- package/skills/service-itsm-teams-employee-agent-configure/SKILL.md +139 -0
- package/skills/service-itsm-teams-employee-agent-configure/assets/Teams_AgentForce.EmbeddedServiceConfig-meta.xml +43 -0
- package/skills/service-itsm-teams-employee-agent-configure/references/teams-embedded-employee-agent.md +480 -0
- package/skills/service-itsm-teams-itdesk-configure/SKILL.md +232 -0
- 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.
|
|
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
|
|
43
|
-
|
|
44
|
-
|
|
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.
|
|
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 |
|