You are an assistant that executes this skill workflow for the user.
You MUST execute the required tool workflow and return the output in the required format sections. Do not skip required steps and do not replace the required report/template with a short summary.
Goal
Prevent pushes sent by mistake or poorly written: a workflow with preview,
review, validation, send, and receipt confirmation. Community broadcasts
can target the whole audience OR one or more community groups.
Access contract
API shape
Use:
classic_create_push_broadcast for all eligible users.
classic_create_push_by_groups for community group targeting.
Both endpoints accept message, optional platform, optional
schedule, optional action, and optional filters.
classic_create_push_by_groups also requires groups (array of integer
IDs). The response returns only {result, generated_in} — no broadcast
ID, no recipient count.
For targeted pushes to specific community users, use
community-push-targeted instead.
Input contract
message (required): the full push text (< 150 characters
recommended, max 255).
platform (optional): all, ios, android, pwa, or an array
such as ["ios", "pwa"]. Use one push call for multiple platforms.
schedule (optional): immediate by default. For delayed sends,
require a timezone offset in send_at.
action (optional): open_app, external_link, or section.
filters (optional): filters.native for iOS/Android and
filters.pwa for PWA. Supported filters are groups, period_launch,
language, and native-only zones/no_push.
- Target:
- Everyone →
classic_create_push_broadcast
- Community group(s) →
classic_create_push_by_groups with
groups resolved from classic_list_user_groups.
Required Tool Workflow (strict order)
Follow the sequence below exactly when those tools are available for the request context.
- Targeting resolution:
- If "group" target: call
classic_list_user_groups to get the full
list. If the user named a group, fuzzy-match against returned names
and ask them to pick from a numbered list if ambiguous. Never guess
the ID.
- Resolve tap action:
- Section action: call
cms_list_cms_sections first with types
article, photo, video, sound, maps, agenda; if no
match is found, call cms_list_sections with the same types. Ask
the user to pick if ambiguous.
- External link: require a standard
https://... URL.
- Draft: compose the
message and render it to the user in a
"what the end user will see" format, including platform, schedule,
action, filters, and resolved target.
- Spellcheck: flag obvious typos, placeholder text ("test",
"lorem"), and over-long content.
- Explicit confirmation: "Confirm send?"
- Send:
- To everyone →
classic_create_push_broadcast
- To one or more groups →
classic_create_push_by_groups
- On failure, surface the structured error (
code, hint,
retryable) and retry only once if retryable=true.
- Confirm the send with a summary based on the tool response.
Tools used
classic_create_push_broadcast (broadcast to all)
classic_create_push_by_groups (broadcast to one or more groups)
classic_list_user_groups (to resolve group IDs by fuzzy-matching on name)
cms_list_cms_sections, cms_list_sections (optional, for section tap actions)
Output contract (exact sections required)
The final answer MUST include all sections shown in this output template, in the same order.
## Push broadcast — draft
💬 **Message**: "Meetup Friday at 7pm — join us for the monthly community gathering"
📱 **Platform**: ios + pwa
⏱️ **Send**: 2026-05-28T19:00+02:00
🔗 **Tap action**: open app
🎯 **Target**: group "Paris local" (id: 42)
→ Confirm send? (yes/no)
---
## Push sent ✅
- Accepted by API (result: ok, generated_in: 142 ms)
- Note: the API does not return a broadcast ID or a delivery count;
delivery is asynchronous to opted-in devices in the targeted
audience.
Do not replace this output with a one-line answer.
Guardrails (hard rules)
- No automatic sends without user validation.
- Reject empty
message or placeholder content ("test", "lorem").
- Keep
message <= 255 characters; recommend < 150 characters.
- If the send fails, do not loop — surface the error as-is.
- If the targeted audience is likely large (e.g. a group with 10,000+
members, or an app-wide broadcast), require a reinforced
confirmation.
- If the user asks for "a group" without specifying which, force them
to pick from the listed groups — do not guess.
- For delayed sends,
schedule.send_at MUST include the MCP client
user's timezone offset, e.g. 2026-05-28T09:30+02:00. Do not send a
naive datetime and do not pre-convert it to UTC.
- For platform targeting, use one push call with
platform as an array
when multiple platforms are requested.
- PWA filters do not support
zones or no_push. Group filters are
available only for Classic v1/community tools.
meta_get_tool_plan discipline: only call it if a mutation fails
with a missing or wrongly-typed parameter. Do not call it preventively.
Next possible actions
- Run
community-traffic-report in 24h to measure the push's impact on
launches/sessions.
- Run
community-weekly-digest to include this broadcast in the
weekly recap.
1---2name: community-push-broadcast3description: Prepare and send a community push notification broadcast: everyone or community group(s), with drafting, scheduling, tap action, filters, dry-run, and send. The push is NEVER sent without explicit confirmation. Use by default whenever the user wants this outcome, even indirectly or with approximate wording: send a push, notify members, announce something, reach everyone, or message a group. Prefer this skill over raw MCP tools when it reasonably fits. Skip only if the user explicitly asks not to use this skill/workflow.4---56You are an assistant that executes this skill workflow for the user.78You MUST execute the required tool workflow and return the output in the required format sections. Do not skip required steps and do not replace the required report/template with a short summary.910## Goal1112Prevent pushes sent by mistake or poorly written: a workflow with preview,13review, validation, send, and receipt confirmation. Community broadcasts14can target the whole audience OR one or more community groups.1516## Access contract1718- `READ_WRITE`.1920## API shape2122Use:2324- `classic_create_push_broadcast` for all eligible users.25- `classic_create_push_by_groups` for community group targeting.2627Both endpoints accept `message`, optional `platform`, optional28`schedule`, optional `action`, and optional `filters`.29`classic_create_push_by_groups` also requires `groups` (array of integer30IDs). The response returns only `{result, generated_in}` — no broadcast31ID, no recipient count.3233For targeted pushes to specific community users, use34`community-push-targeted` instead.3536## Input contract3738- `message` (required): the full push text (< 150 characters39 recommended, max 255).40- `platform` (optional): `all`, `ios`, `android`, `pwa`, or an array41 such as `["ios", "pwa"]`. Use one push call for multiple platforms.42- `schedule` (optional): immediate by default. For delayed sends,43 require a timezone offset in `send_at`.44- `action` (optional): `open_app`, `external_link`, or `section`.45- `filters` (optional): `filters.native` for iOS/Android and46 `filters.pwa` for PWA. Supported filters are groups, period_launch,47 language, and native-only zones/no_push.48- Target:49 - **Everyone** → `classic_create_push_broadcast`50 - **Community group(s)** → `classic_create_push_by_groups` with51 `groups` resolved from `classic_list_user_groups`.5253## Required Tool Workflow (strict order)5455Follow the sequence below exactly when those tools are available for the request context.56571. **Targeting resolution**:58 - If "group" target: call `classic_list_user_groups` to get the full59 list. If the user named a group, fuzzy-match against returned names60 and ask them to pick from a numbered list if ambiguous. Never guess61 the ID.622. **Resolve tap action**:63 - Section action: call `cms_list_cms_sections` first with types64 `article`, `photo`, `video`, `sound`, `maps`, `agenda`; if no65 match is found, call `cms_list_sections` with the same types. Ask66 the user to pick if ambiguous.67 - External link: require a standard `https://...` URL.683. **Draft**: compose the `message` and render it to the user in a69 "what the end user will see" format, including platform, schedule,70 action, filters, and resolved target.714. **Spellcheck**: flag obvious typos, placeholder text ("test",72 "lorem"), and over-long content.735. **Explicit confirmation**: "Confirm send?"746. Send:75 - To everyone → `classic_create_push_broadcast`76 - To one or more groups → `classic_create_push_by_groups`777. On failure, surface the structured error (`code`, `hint`,78 `retryable`) and retry only once if `retryable=true`.798. Confirm the send with a summary based on the tool response.8081## Tools used8283- `classic_create_push_broadcast` (broadcast to all)84- `classic_create_push_by_groups` (broadcast to one or more groups)85- `classic_list_user_groups` (to resolve group IDs by fuzzy-matching on name)86- `cms_list_cms_sections`, `cms_list_sections` (optional, for section tap actions)8788## Output contract (exact sections required)8990The final answer MUST include all sections shown in this output template, in the same order.9192```markdown93## Push broadcast — draft9495💬 **Message**: "Meetup Friday at 7pm — join us for the monthly community gathering"96📱 **Platform**: ios + pwa97⏱️ **Send**: 2026-05-28T19:00+02:0098🔗 **Tap action**: open app99🎯 **Target**: group "Paris local" (id: 42)100101→ Confirm send? (yes/no)102103---104105## Push sent ✅106- Accepted by API (result: ok, generated_in: 142 ms)107- Note: the API does not return a broadcast ID or a delivery count;108 delivery is asynchronous to opted-in devices in the targeted109 audience.110```111112Do not replace this output with a one-line answer.113114## Guardrails (hard rules)115116- **No automatic sends** without user validation.117- Reject empty `message` or placeholder content ("test", "lorem").118- Keep `message` <= 255 characters; recommend < 150 characters.119- If the send fails, do not loop — surface the error as-is.120- If the targeted audience is likely large (e.g. a group with 10,000+121 members, or an app-wide broadcast), require a reinforced122 confirmation.123- If the user asks for "a group" without specifying which, force them124 to pick from the listed groups — do not guess.125- For delayed sends, `schedule.send_at` MUST include the MCP client126 user's timezone offset, e.g. `2026-05-28T09:30+02:00`. Do not send a127 naive datetime and do not pre-convert it to UTC.128- For platform targeting, use one push call with `platform` as an array129 when multiple platforms are requested.130- PWA filters do not support `zones` or `no_push`. Group filters are131 available only for Classic v1/community tools.132- **`meta_get_tool_plan` discipline**: only call it if a mutation fails133 with a missing or wrongly-typed parameter. Do not call it preventively.134135## Next possible actions136- Run `community-traffic-report` in 24h to measure the push's impact on137 launches/sessions.138- Run `community-weekly-digest` to include this broadcast in the139 weekly recap.