From monday CRM
Builds a CRM workspace from scratch in monday.com based on a business description. Automatically creates boards, columns, and pipeline stages.
How this skill is triggered — by the user, by Claude, or both
Slash command
/monday-crm:workspace-builder [optional: business description, e.g. 'window coverings, B2C, ~50 leads/month'][optional: business description, e.g. 'window coverings, B2C, ~50 leads/month']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
Sets up a CRM workspace conversationally — turning "I don't know how to start" into a working board on day 1. Replaces the manual template-pick → column-rename → column-add → group-rename loop that gates 442 median days between CRM install and first MCP execution. **This is the single highest-leverage retention skill in the catalog.**
Sets up a CRM workspace conversationally — turning "I don't know how to start" into a working board on day 1. Replaces the manual template-pick → column-rename → column-add → group-rename loop that gates 442 median days between CRM install and first MCP execution. This is the single highest-leverage retention skill in the catalog.
Flow: Trigger → Discover → Propose → Confirm → Build (α) → Seed (β, opt-in) → Handoff.
CRM Setup — <Mon DD> doc summarizes what was created and what's next, with Generated by Claude · <ISO timestamp> + <!-- claude-skill-id: workspace-builder --> in the body.Source = Claude on a status column (auto-create the column with user confirm if missing) — no [Example] prefix on names.create_automation_rule, not yet shipped). The setup doc includes a deep-link to the in-product Automation Recipes UI for that step.references/monday-graphql-mutations.md.get_user_context — resolve user + existing workspaces.list_workspaces / workspace_info — find a target workspace.search — confirm we aren't duplicating an existing CRM board.create_workspace — only if the user explicitly wants a new workspace.create_board — the core write.create_group — pipeline stages as groups (or as status labels — see Step 4).create_column — typed columns per the proposed schema.create_item — β seed items.create_doc — publish the setup summary doc.all_monday_api — group rename/delete mutations + column settings (status labels, number units) not exposed by wrapped tools. See references/monday-graphql-mutations.md for exact payloads./monday-crm:daily-briefing to start the daily-ops loop./monday-crm:data-cleanup for a fill-rate audit.monday CRM is built around five canonical entity board types. When proposing a workspace structure, use these as building blocks — don't invent custom schemas. Use the user's own terminology for board and column names, but match the underlying column types and group structure.
Always propose Deals. Add other boards only when the user's description clearly signals the need.
Every monday CRM user starts here.
is_done: true on Won), Owner (people), Deal Value (numbers $), Probability (numbers %), Expected Close (date), Last Touch (date), Source (status), Notes (long_text)Add when the user mentions tracking people, contacts, or has account managers / a team managing relationships.
Add when the user mentions SDR, outbound, lead gen, or has a qualification step before deals.
Add when the user mentions account management, renewals, B2B with multiple contacts per company, or CSM workflows.
Add when the user explicitly mentions logging activity, tracking touchpoints, or managing a high-touch sales motion with multiple interactions per deal.
Leads ──qualified──▶ Deals ◀──linked──── Accounts
│ │
└──── Contacts ────────┘
│
Activities
v0.1 constraint: create_column with board_relation type requires the target board to already exist. Build all boards first (Step 5), then add relation columns in a second pass via all_monday_api. Only wire relations the user explicitly asked for — don't create them by default.
| Signal in user's description | Boards to propose |
|---|---|
| Sales rep / AE / closing deals | Deals + Contacts |
| SDR / BDR / outbound / lead gen | Leads + Deals |
| Sales manager / team lead | Deals — suggest dashboards manually |
| Account manager / renewals / CSM | Accounts + Contacts + Deals |
| Full team / full CRM setup | Deals + Contacts + Leads + Accounts |
| Solo founder / small team | Deals only — keep it simple |
Never create all 5 boards by default. Blank boards are intimidating and reduce activation.
Goal: Fail fast if the monday MCP connection is missing. Detect the CRM product and cache its numeric ID for workspace creation.
mcp__monday__get_user_context./monday-crm:workspace-builder again."user.id and user.name.account.products (from get_user_context) for an entry with kind: "crm". If not found, print: "This plugin requires a monday CRM account. Your current plan doesn't include the CRM product — visit monday.com/crm to start a trial." and stop.kind string alone is not sufficient):
{ account { products { id kind } } }
via all_monday_api. Find the entry with kind: "crm" and cache its id as crmProductId. This ID is account-specific (e.g., "1312540") — do not hardcode it.PAUSE: do not write any
create_*call before Step 5, and never before Step 0 passes.
If undeclared, assume Default.
Hard safety rail regardless of mode: no deletes (boards, columns, items), no amount-column writes, no cross-workspace moves, no overwriting an existing same-named board, no modifying columns on boards the user didn't ask us to touch, no board creates outside the user-confirmed workspace.
Goal: Get enough signal to propose a board shape without forcing the user into a taxonomy. The whole skill exists to bypass the "where do I start" paralysis — surfacing internal labels like "B2B sales" or "Outbound" defeats that.
Ask first: "What's your company website? I'll read it to get context on your business — or describe your business in a sentence if you'd prefer."
WebFetch the homepage. Extract: industry, product/service description, target customer (B2B/B2C, company size), any sales/CRM terminology used on the site (e.g., "clients", "projects", "leads", "cases"). Use this as the primary business context for Step 3 — skip the free-text question below entirely.If WebFetch fails (404, timeout, paywalled) → fall through to 2b silently, don't surface the error.
Ask one open prompt: "Tell me about your business — industry, what you sell, who you sell to, roughly how many deals/leads you track. One or two sentences."
Only if the description (from website or free-text) is genuinely under-specified for a column-set decision, ask one clarifying follow-up:
Hard cap: 2 questions total across 2a–2c. Anything beyond that defeats the skill.
Goal: Translate the free-text description into a concrete board proposal. Internal mapping uses an archetype taxonomy as scaffolding — the user never sees the archetype label.
| Signals in description | Internal archetype | Default board shape |
|---|---|---|
| Long sales cycle, account/stakeholder language ("contracts", "buyers", "procurement"), deal sizes >$1K | B2B sales | Single Deals board, pipeline as groups, rich columns |
| High volume / short cycle / consumer-facing ("orders", "customers", "products", e-commerce, retail) | B2C transactional | Orders + Customers (two boards), pipeline as status column |
| Project / hourly / engagement language ("clients", "retainers", "billable", "projects") | Services | Engagements + Clients, pipeline as groups, effort/hours columns |
| Outbound / lead-gen / top-of-funnel ("SDR", "cold outreach", "leads", "ICP") | Outbound | Leads + Deals (two-board funnel), status on Leads, groups on Deals |
| Mixed / unclear / industry-specific (recruiting, real estate, law firm, etc.) | Custom | Compose from primitives (see below) — don't force a fit |
When the description doesn't fit cleanly, compose the board structure from primitives rather than forcing an archetype:
Candidates for recruiting, Listings for real estate, Matters for a law firm) — name reflects the user's own language.Candidates + Roles, Listings + Buyers).Present a complete, named board structure as a markdown table. Use the user's own terminology wherever possible (if they said "matters", call the board "Matters" not "Cases"). Skip any internal archetype label.
For each proposed board:
Stage (status), Owner (people), Value (numbers, $), Last touch (date)).Do not include workspace name here — workspace hasn't been resolved yet (Step 4). The batch confirm in Step 5 is where the workspace name appears.
Then ask: "Build this as-is, change anything before building, or describe your business differently?"
Hard rule: no writes until the user confirms.
Goal: Land in the right workspace without cluttering Main. Prefer existing CRM workspaces over creating new ones.
get_user_context, get the workspace list. Then call list_workspaces to get all writable workspaces.AskUserQuestion with workspace names (CRM ones labeled [CRM]) + option "create a new one".create_workspace({ name: "<user input or default 'CRM'>", workspaceKind: "open", accountProductId: "<crmProductId>" })
where crmProductId is the numeric ID cached in Step 0 (e.g., "1312540") — NOT the string "crm". Passing the numeric ID ties the workspace to the monday CRM product; omitting it or passing "crm" creates a generic monday workspace with no product association.create_board, search for existing boards in this workspace whose names match the proposed names (case-insensitive). If found:
<name>. (a) Skip this board, (b) Create alongside as <name> 2 (I'll re-confirm the full plan before building), (c) Cancel and pick a different workspace?"Goal: Execute the confirmed structure with idempotency, in a deterministic order.
Before the first create_board call, print a single batched confirm:
"I'll create board(s) with columns total in workspace <workspace>. Want example items added after building? (yes / no) — Proceed? (yes / no / show plan again)."
This single confirm captures both the build plan and the β opt-in. Per-call confirmation only kicks in for delete operations (group deletes). Spamming the user with N confirms defeats the skill.
For each proposed board:
create_board({ boardName: "<name>", workspaceId, boardKind: "public" | "private" }) — default public unless user said otherwise. Cache returned boardId.all_monday_api using update_group mutation.create_group for remaining proposed groups.delete_group mutation via all_monday_api (Default mode confirms before delete) then create_group cleanly.references/monday-graphql-mutations.md for exact payloads.create_column({ boardId, columnType: <type>, title: <title>, defaults: <settings> }). For status columns, pass labels via defaults; for numbers columns, pass unit.symbol.create_*, mirror to chat: "Created column Owner (people) on Deals.". Default mode runs through creates inside a confirmed plan; Silent runs through all; Proactive (b) confirms each; Proactive (c) skips seed step.Goal: Show the shape with data — empty boards are intimidating.
Only runs if mode = Proactive (option a) OR user opted in at the Step 5 batch confirm.
For each created board, create_item for 5 example items distributed across the proposed groups/stages, with realistic but obviously-fake values:
Acme Corp — Q3 expansion, Beta Industries — pilot deal (clearly fictional but no prefix pollution).Source = Claude on a status column. The board was just created in Step 5 with this column included by default — Step 6 just sets the value. If for any reason the column wasn't created, prompt once: "Add a Source column so we can flag the example items? (yes / skip — keeps the items unflagged)".Cap at 5 items per board, hard. The Source = Claude flag supports a clean cleanup loop later — user filters by source, deletes the examples manually once they have real data.
Goal: Leave a navigable summary so the user knows what was created and where to go next.
Idempotency: before creating, search same-day docs by title + the <!-- claude-skill-id: workspace-builder --> marker. If found, skip creation and print:
"A setup doc from this session already exists: <doc url>. The build summary has been added to chat above."
Do not attempt to update the existing doc.
If no existing doc found, create_doc in the user's workspace, title CRM Setup — <Mon DD>, <YYYY>. Body:
# CRM Setup — <Mon DD>
<!-- claude-skill-id: workspace-builder -->
## What was created
### Board: <Name>
- Workspace: <workspace>
- URL: <board url>
- Groups: <list>
- Columns: <list with types>
(Repeat per board.)
## Example items
<count> example items added per board, flagged `Source = Claude` on a status column. Filter by that source value to find and remove the examples once you've added real data.
## What's next
1. **Add your real deals.** Replace the examples or add fresh items.
2. **Try the morning briefing.** Once you have 5+ deals with stages set, run `/monday-crm:daily-briefing`.
3. **Set up automations.** Open the Automation Center on each board to wire status changes, due-date reminders, and lead routing.
4. **Audit hygiene later.** After 30 days, run `/monday-crm:data-cleanup` for a fill-rate audit.
---
Generated by Claude · <ISO timestamp> · re-run `/monday-crm:workspace-builder` only if you want to scaffold an additional CRM (won't touch this one).
If at least one board was created and the user is in Default/Proactive mode, print:
"Want to try the morning briefing now? Once you add a few real deals it'll prioritize your day. Run /monday-crm:daily-briefing whenever you're ready."
Silent mode skips this prompt.
Created <N> board(s), <M> columns, <K> seed items. Doc: <url | "doc creation failed — see summary above">.<!-- claude-skill-id: workspace-builder --> comment + Generated by Claude footer in body for findability + idempotency.Source = Claude on every seed item via a status column. No [Example] prefix.# CRM Setup — Jun 15
<!-- claude-skill-id: workspace-builder -->
## What was created
### Board: Deals
- Workspace: CRM
- URL: https://monday.com/boards/123456789
- Groups: New · Discovery · Proposal · Negotiation · Won · Lost
- Columns: Stage (status) · Owner (people) · Deal Value (numbers, $) · Probability (numbers, %) · Expected Close (date) · Last Touch (date) · Source (status) · Notes (long_text)
## Example items
5 example items added, flagged `Source = Claude` on the Source status column. Filter by that source value to find and remove the examples once you've added real data.
- Acme Corp — Q3 expansion (Discovery, $85K, Owner: Tom Ramu)
- Beta Industries — pilot (Proposal, $32K, Owner: Tom Ramu)
- Gamma Ltd — renewal (Won, $120K, Owner: Tom Ramu)
- Delta Co — trial (New, $15K, Owner: Tom Ramu)
- Epsilon Inc — churned (Lost, $28K, Owner: Tom Ramu)
## What's next
1. **Add your real deals.** Replace the examples or add fresh items.
2. **Try the daily brief.** Once you have 5+ deals with stages set, run `/monday-crm:daily-briefing`.
3. **Set up automations.** Open the Automation Center on each board to wire status changes, due-date reminders, and lead routing.
4. **Audit hygiene later.** After 30 days, run `/monday-crm:data-cleanup` for a fill-rate audit.
---
Generated by Claude · 2026-06-15T09:00:00Z · re-run `/monday-crm:workspace-builder` only if you want to scaffold an additional CRM (won't touch this one).
Chat one-liner:
Created 1 board, 8 columns, 5 seed items. Doc: [url].
| Failure | Behavior |
|---|---|
| Connector not installed | Step 0 stops; print install link + skill re-run command. |
| No writable workspace | Step 4 stops; print: "You don't have write access to any workspace. Ask a workspace admin, then re-run." |
| Board name collision | Step 4 idempotency prompt; option (b) re-confirms full plan before building. |
create_board fails (perms) | Stop and surface error verbatim — don't continue creating columns into a non-existent board. |
create_column fails on a column | Skip that column, log to chat, continue with the rest, list skipped in Step 9 summary. |
create_group fails | Skip; the board still works with default groups; flag in summary. |
| 429 rate limit | Backoff 3x (1s, 2s, 4s); on third fail, halt and print: "monday is rate-limiting; retry in 60s." |
| User halts mid-build | Keep writes up to halt point; Step 7 setup doc reflects partial state. |
| Setup doc create fails | Print the doc body in chat with banner "Couldn't publish the setup doc — copy the summary below." |
Source = Claude on a status column (or the user explicitly skipped the source-column step).<!-- claude-skill-id: workspace-builder --> + Generated by Claude footer) or printed to chat on failure.npx claudepluginhub mondaycom/mcp --plugin monday-crmSets 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.
Produces a daily prioritized briefing over monday CRM data and publishes it as a monday artifact. Handles pipelines, contacts, accounts, leads, or no board.
Automates Pipedrive CRM workflows for deals, contacts, organizations, activities, notes, and pipelines via Composio's Rube MCP toolkit. Useful after connecting Pipedrive OAuth.