From monday CRM
Builds a native monday.com dashboard with pipeline forecast views (committed, best-case, pipeline, closed-won) grouped by stage and close month. Replaces manual CSV export/pivot for sales ops.
How this skill is triggered — by the user, by Claude, or both
Slash command
/monday-crm:forecast [optional: board name or ID, e.g. 'Deals' or '12345678'; optionally add period, e.g. 'Q2 2026' or 'next 90 days'][optional: board name or ID, e.g. 'Deals' or '12345678'; optionally add period, e.g. 'Q2 2026' or 'next 90 days']This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Builds a native monday dashboard that renders the pipeline as a forecast — committed / best-case / pipeline / closed-won, grouped by stage × close month. Replaces the "export to CSV and pivot it" pattern that sales ops leaders do manually every Monday.
Builds a native monday dashboard that renders the pipeline as a forecast — committed / best-case / pipeline / closed-won, grouped by stage × close month. Replaces the "export to CSV and pivot it" pattern that sales ops leaders do manually every Monday.
Flow: Trigger → Gather → Synthesize → Publish (α, default) → Share (β, opt-in) → Proactive extension (opt-in, hygiene fix).
create_dashboard with widgets per bucket + URL.all_monday_api + create_notification.change_item_column_values (with batched user confirm) to set a placeholder OR post a prompt update asking the owner to fill it. Missing-amount items are flagged in the dashboard description and a hygiene update is posted on the item, but the amount column itself is never written (forecast integrity rail).get_user_context, list_workspaces, search — board resolution.get_board_info, get_column_type_info — schema + column types (stage/amount/close-date/forecast-category).get_board_items_page — paginated pull.board_insights — aggregate fallback.create_dashboard, create_widget — α publish.create_doc — fallback for non-admins (see Error handling).create_notification, list_users_and_teams — β share.create_column — add a forecast-category column only if required to render the dashboard.change_item_column_values — proactive hygiene fix.all_monday_api — escape hatch for dashboard permissions, idempotency GraphQL query, and doc updates./monday-crm:data-cleanup before publishing.Goal: Fail fast if the user has no monday MCP connection.
mcp__monday__get_user_context.user.id and user.name for artifact metadata.PAUSE: Do not call create_dashboard, create_widget, create_column, or change_item_column_values before Step 0 passes and the user has confirmed the publish step in Step 6.
Goal: Know write-confirmation policy AND lock the forecast window.
AskUserQuestion: "Which period? (a) this quarter, (b) next 90 days, (c) custom." Store period_start, period_end.Goal: Land on one (or user-confirmed multi) board. Same resolution path as daily-briefing Step 2. Use mcp__monday__get_user_context → list_workspaces → search("deal").
Goal: Resolve columns by type — stage (status), amount (numbers with $), close date (date with "close"/"expected"), forecast category (status with commit/best-case/pipeline labels, if present).
get_board_info(boardId).get_column_type_info for any ambiguous column.Forecast Category column (Commit / Best-case / Pipeline / Omit). OK?" Only create via create_column in Proactive mode or after explicit user approval.Goal: Paginated pull over the forecast window.
get_board_items_page with filters = close_date in [period_start, period_end]. Paginate via cursor up to 2K items (same cap as daily-briefing). Same 429 / rate-limit handling.
Goal: Group deals into forecast buckets × close month.
Buckets:
is_done: true (won label).Empty-category guard: If a forecast-category column exists but fewer than 20% of active deals have a non-empty value, surface this warning before synthesizing:
The Forecast Category column exists but 80%+ of deals haven't been categorized. I'll derive all buckets from probability + stage for now. Want to: (a) continue anyway, (b) run hygiene to prompt owners to fill it, or (c) remove the column from the forecast logic?
Wait for user choice before proceeding.
Group by close month within the period. Compute Σ amount per (bucket × month).
Goal: Produce a native monday dashboard with widgets per bucket, not a markdown brief.
Core call pattern:
Forecast — <period> dashboard using all_monday_api with a GraphQL dashboards query (filtered by name where the API supports it), then check each result's description client-side for the <!-- claude-skill-id: forecast --> comment. Note: mcp__monday__search does not cover dashboard descriptions and must not be used for this check. If a matching dashboard is found, update widgets via that dashboard ID instead of duplicating.create_dashboard(workspaceId, name: "Forecast — <period>", description: "Generated by Claude · <ISO timestamp> · <!-- claude-skill-id: forecast -->").create_widget(dashboardId, ...) — see Widget call shapes below.Required fields for each widget type:
Number widget (per-bucket total):
{
"type": "numbers",
"board_ids": ["<boardId>"],
"column_ids": ["<amountColumnId>"],
"filter": { "rules": [{ "column_id": "<bucketFilterColumnId>", "compare_value": ["<label>"] }] }
}
Chart widget (buckets × close month stacked bar):
{
"type": "chart",
"board_ids": ["<boardId>"],
"column_ids": ["<amountColumnId>"],
"grouping_column_id": "<closeDateColumnId>"
}
Table widget (deal detail for committed + best-case):
{
"type": "table",
"board_ids": ["<boardId>"],
"column_ids": ["<nameCol>", "<amountColumnId>", "<stageColuumnId>", "<closeDateColumnId>"],
"filter": { "rules": [{ "column_id": "<bucketFilterColumnId>", "compare_value": ["Commit", "Best-case"] }] }
}
Non-admin users can't call create_dashboard. On permission error, ask:
I can't create dashboards on this workspace (your account lacks admin rights). Want me to: (a) publish a doc-version with the same forecast (summary tables), (b) stop so you can ask your admin to install the dashboard, or (c) try a different board?
Route to create_doc on option (a).
Goal: Grant dashboard viewer permission + notify.
list_users_and_teams → resolve sales leader.all_monday_api GraphQL mutation to grant viewer permission on the dashboard.create_notification({ userId, itemId: <dashboard ref>, text: "Forecast dashboard for <period>" }).Goal: Fix hygiene gaps on deals blocking forecast accuracy — WITHOUT editing stage or amount.
Hygiene gap = deal in a non-closed stage that's missing either close date or amount.
Core pattern:
change_item_column_values — set a placeholder (e.g., end-of-current-quarter) OR post a prompt update asking the owner to fill it. Stage edits are only permitted if the user typed an explicit instruction to move deals to a specific stage in this session. Do not infer stage-edit intent from context or from the hygiene gap summary. All writes happen inside the batched-confirm plan.Forecast hygiene — <period> review doc (with <!-- claude-skill-id: forecast --> in body) rather than 20 individual writes.Goal: Summary line with dashboard URL + counts.
Print: Published Forecast — <period>. <N> deals, <N> widgets, <N> hygiene gaps flagged.
Generated by Claude · <ISO timestamp> footer and the embedded <!-- claude-skill-id: forecast --> HTML comment in dashboard descriptions and doc bodies.all_monday_api GraphQL and check description client-side for the skill-id comment. Update widgets, don't duplicate the dashboard.forecast-dashboard — kept for backward compatibility with existing user dashboards/docs that carry <!-- claude-skill-id: forecast-dashboard -->. The skill's invocation name is /monday-crm:forecast.Chat one-liner printed at end of run:
Published Forecast — Q3 2026. 5 deals, 6 widgets, 2 hygiene gaps flagged.
Dashboard: https://monday.com/boards/dashboard/123456789
Dashboard created in workspace "CRM":
Generated by Claude · 2026-06-15T09:00:00Z · <!-- claude-skill-id: forecast-dashboard -->Widgets:
| Widget | Type | Value |
|---|---|---|
| Closed-won | Number | $120K (1 deal) |
| Committed | Number | $85K (1 deal) |
| Best-case | Number | $32K (1 deal) |
| Pipeline | Number | $48K (2 deals) |
| Buckets × close month | Stacked bar | Jun / Jul / Aug |
| Committed + best-case detail | Table | Acme Corp, Beta Industries |
Hygiene gaps flagged in dashboard description:
# Forecast — Q3 2026
<!-- claude-skill-id: forecast-dashboard -->
| Bucket | Amount | Count |
|---|---|---|
| Closed-won | $120K | 1 |
| Committed | $85K | 1 |
| Best-case | $32K | 1 |
| Pipeline | $48K | 2 |
Generated by Claude · 2026-06-15T09:00:00Z
| Error | Behaviour |
|---|---|
| Connector missing / auth error | Print install URL, stop immediately. |
| No board found matching query | Ask user to specify board name or ID directly. |
No admin perms (create_dashboard fails) | Ask: (a) doc version, (b) stop, (c) different board. |
| No deals found in period | Surface count = 0, ask if period or board is correct before stopping. |
| 429 rate limit | Pause 2 s, retry up to 3× with exponential backoff; surface if still failing. |
create_widget partially fails | Keep the dashboard, list failed widgets, offer retry. |
| Same-day artifact already exists | Idempotency check should have caught this; surface dashboard URL and ask if user wants to rebuild or update. |
Generated by Claude · <ISO timestamp> + <!-- claude-skill-id: forecast -->.npx claudepluginhub mondaycom/mcp --plugin monday-crmBuilds a CRM workspace from scratch in monday.com based on a business description. Automatically creates boards, columns, and pipeline stages.
Generates weighted sales forecasts with best/likely/worst scenarios, commit/upside breakdowns, and gap-to-quota analysis from CRM pipeline CSVs or manual deal inputs.
Sets up Airtable-based sales ops and CRM workflows: pipeline, account/renewal management, deal desk, RFP tracking, partner CRM, forecasting, and vertical CRMs. Augments Salesforce/HubSpot or builds Airtable-as-CRM with AI-native GTM stacks.