Monday Com
Scannednpx machina-cli add skill georgekhananaev/claude-skills-vault/monday-com --openclawMonday.com Workspace Manager
Manage Monday.com workspaces through the official MCP server — create items, update statuses, move tasks between groups, archive/delete items, manage boards & columns, and add comments.
When to Use
Invoke when:
- Creating, updating, or deleting items/tasks on Monday.com
- Managing boards, groups, or columns
- Moving items between groups or boards
- Adding comments/updates to items
- Querying board structure, items, or users
- Setting up Monday.com MCP integration
- Any Monday.com workspace automation
Prerequisites & Setup
First-Time Setup Flow
On first use, check if Monday.com MCP is configured. If not, guide the user through setup using AskUserQuestion:
Question: "How would you like to connect to Monday.com?"
Options:
- "Hosted MCP (Recommended)" — No local install, auto-updates, OAuth auth
- "Local MCP via npx" — Requires Node.js 20+, API token
- "Direct API (curl/scripts)" — Manual GraphQL calls, no MCP dependency
Option A: Hosted MCP (Recommended)
Add to Claude Code MCP settings (~/.claude/settings.json or project .mcp.json):
{
"mcpServers": {
"monday-mcp": {
"url": "https://mcp.monday.com/mcp"
}
}
}
OAuth handles auth automatically — no API token needed.
Option B: Local MCP via npx
- Get API Token: Monday.com → Avatar → Developers → My access tokens
- Configure MCP in Claude Code settings:
{
"mcpServers": {
"monday-api-mcp": {
"command": "npx",
"args": ["@mondaydotcomorg/monday-api-mcp@latest"],
"env": {
"MONDAY_TOKEN": "<your_token>"
}
}
}
}
Useful flags:
| Flag | Values | Purpose |
|---|---|---|
--read-only / -ro | true | Read-only mode |
--enable-dynamic-api-tools / -edat | true / only | Full GraphQL access (beta) |
--version / -v | 2025-07 | API version |
Option C: Direct API (No MCP)
For environments w/o MCP support. Set MONDAY_API_TOKEN in .env or .env.local at project root:
MONDAY_API_TOKEN=your_token_here
The script auto-loads from .env.local (priority) or .env. Alternatively, export the env var directly.
Use scripts/monday_api.sh for direct GraphQL calls.
Tool Selection: MCP vs API Script
On every Monday.com request, determine which tool to use:
1. Check: Are Monday.com MCP tools available? (ToolSearch "monday")
→ YES: Use MCP tools — go to decision table below
→ NO: Go to step 2
2. Check: Does .env or .env.local have MONDAY_API_TOKEN?
→ YES: Use scripts/monday_api.sh with GraphQL queries
→ NO: Ask user to set up (AskUserQuestion with setup options above)
MCP vs API Decision Table
| Operation | Best Tool | Why |
|---|---|---|
| Single item CRUD (create, update, delete) | MCP | One tool call, handles auth, structured params |
| Get board schema/info | MCP (get_board_info) | Returns columns, groups, filtering guidelines in one call |
| Get items w/ filters | MCP (get_board_items_page) | Built-in filtering, ordering, pagination, includeColumns toggle |
| Search items by text | MCP (get_board_items_page w/ searchTerm) | Fuzzy search built-in |
| Assign owner | MCP (change_item_column_values) | Single call w/ personsAndTeams JSON |
| List users/teams | MCP (list_users_and_teams) | Supports getMe, name search, team members |
| Create board/group/column | MCP | Type-safe params, enum validation |
| Get column type info | MCP (get_column_type_info) | Returns JSON schema for column settings |
| Board activity logs | MCP (get_board_activity) | Date range filtering built-in |
| Move board/folder | MCP (move_object) | Handles positioning |
| Workspace management | MCP | Create, update, list workspaces |
| Forms | MCP | Create and get forms |
| Multi-board dashboard | API script | MCP queries one board at a time; script queries all boards in one GraphQL call |
| Batch updates (5+ items) | API script | One GraphQL mutation w/ aliases vs 5+ separate MCP calls |
| Batch deletes | API script | Same — aliases batch multiple deletes into one call |
| Webhooks | API script | MCP has no webhook tools |
| Archive item/board | API script | MCP has no archive mutation |
| Duplicate item | MCP (create_item w/ duplicateFromItemId) | Built-in duplicate support |
| Subitems | MCP (create_item w/ parentItemId) | Native subitem creation |
Performance Rules
- Single operations → always MCP (faster, no shell overhead, structured errors)
- Bulk operations (5+ items) → API script w/ aliases (1 HTTP call vs N MCP calls)
- Cross-board reads → API script (query multiple boards in one request)
- Filtered reads → MCP (built-in filter operators:
any_of,between,contains_text,greater_than, etc.) - MCP unavailable → API script for everything
Safety Classification
| Tier | Operations | Behavior |
|---|---|---|
| Safe | List boards, get items, get schema, list users | Execute immediately |
| Write | Create item, update columns, add comment, create group/column | Inform user → execute |
| Destructive | Delete item, delete column, archive board | AskUserQuestion → confirm → execute |
Decision Flow
Request received
→ Classify tier (see table above)
→ Safe? Execute immediately, show results
→ Write? Show what will change → execute
→ Destructive? AskUserQuestion w/ confirm/cancel → execute or abort
Destructive Operation Confirmation
For delete/archive operations, always confirm:
Question: "Delete item 'Task Name' (ID: 123456) from board 'Project Board'?"
Options:
- "Delete permanently" — Item cannot be recovered
- "Cancel" — Keep item unchanged
Available MCP Tools
Item Operations
| Tool | Tier | Description |
|---|---|---|
create_item | Write | Create item w/ column values |
change_item_column_values | Write | Update item columns |
move_item_to_group | Write | Move item between groups |
delete_item | Destructive | Permanently delete item |
get_board_items_by_name | Safe | Search items by name |
create_update | Write | Add comment to item |
Board Operations
| Tool | Tier | Description |
|---|---|---|
create_board | Write | Create new board |
get_board_schema | Safe | Get columns, groups, structure |
create_group | Write | Add group to board |
create_column | Write | Add column to board |
delete_column | Destructive | Remove column from board |
Account Operations
| Tool | Tier | Description |
|---|---|---|
list_users_and_teams | Safe | Get workspace users & teams |
Dynamic API Tools (Beta)
Enable w/ --enable-dynamic-api-tools true for full GraphQL access:
| Tool | Description |
|---|---|
all_monday_api | Execute any GraphQL query/mutation |
get_graphql_schema | Explore API schema |
get_type_details | View type information |
Common Workflows
CRITICAL: Always Discover Board Schema First
Column IDs are unique per board (e.g. status vs project_status, person vs project_owner). Never assume column IDs — always query the board schema first.
Step 0 (always): Get board schema to discover column IDs, group IDs, and user IDs
→ query: { boards(ids: [BOARD_ID]) { columns { id title type } groups { id title } } }
→ query: { users { id name email } }
Create Item w/ Owner & Status
1. Get board schema → find column IDs for people, status, date, etc.
2. Get user ID → query { users { id name } } or { me { id } }
3. Create item using discovered column IDs:
mutation {
create_item(
board_id: BOARD_ID,
group_id: "GROUP_ID",
item_name: "Task name",
column_values: "{\"PEOPLE_COL_ID\": {\"personsAndTeams\": [{\"id\": USER_ID, \"kind\": \"person\"}]}, \"STATUS_COL_ID\": \"Working on it\"}"
) { id name }
}
Assign Owner to Existing Items
1. Get board schema → find the people column ID (type: "people")
2. Get user ID → { users { id name } }
3. Update:
mutation {
change_multiple_column_values(
board_id: BOARD_ID,
item_id: ITEM_ID,
column_values: "{\"PEOPLE_COL_ID\": {\"personsAndTeams\": [{\"id\": USER_ID, \"kind\": \"person\"}]}}"
) { id }
}
Update Item Status
1. Get board schema → find the status column ID (type: "status")
2. Find item → get_board_items_by_name or query items
3. Update:
mutation {
change_simple_column_value(
board_id: BOARD_ID,
item_id: ITEM_ID,
column_id: "STATUS_COL_ID",
value: "Done"
) { id }
}
Move Item to Different Group
1. get_board_schema → get target group ID
2. move_item_to_group → item_id, group_id
Batch Operations (Multiple Items)
Use GraphQL aliases to batch mutations in a single request:
mutation {
t1: change_multiple_column_values(board_id: BID, item_id: ID1, column_values: "...") { id }
t2: change_multiple_column_values(board_id: BID, item_id: ID2, column_values: "...") { id }
t3: change_multiple_column_values(board_id: BID, item_id: ID3, column_values: "...") { id }
}
Rate limit: 10,000,000 complexity points/min per account.
Column Value Formats
Column IDs vary per board. Always query schema first to find the correct ID.
| Column Type | API Type | Format | Example |
|---|---|---|---|
| Status | status | String label | "Done" |
| Text | text | Plain string | "Hello" |
| Number | numeric | Numeric string | "42" |
| Date | date | YYYY-MM-DD | "2026-02-07" |
| People | people | JSON w/ personsAndTeams | {"personsAndTeams": [{"id": 12345, "kind": "person"}]} |
| Dropdown | dropdown | JSON w/ IDs | {"ids": [3, 5]} |
email | JSON w/ email+text | {"email": "a@b.com", "text": "Name"} | |
| Phone | phone | JSON w/ phone+country | {"phone": "+1234567890", "countryShortName": "US"} |
| Timeline | timeline | JSON w/ from+to | {"from": "2026-01-01", "to": "2026-01-31"} |
| Link | link | JSON w/ url+text | {"url": "https://...", "text": "Link"} |
For complete column type reference, see references/column-types.md.
Advanced Workflows
Workspace Dashboard
To build a dashboard, fetch all boards w/ items in a single query, then parse:
- Query all boards w/
items_pageandcolumn_values - Filter out "Subitems of *" boards (auto-generated)
- Group items by board, status, and owner
- Present as markdown tables w/ summary stats
Understanding Fields
Column IDs are unique per board and must be discovered via schema query. Key patterns:
- Status and Priority share the same
statustype — distinguish bytitle - People column holds user assignments — always use
personsAndTeamsJSON format textfield oncolumn_values= human-readable value;valuefield = raw JSON- Status labels (Done, Working on it, Stuck) come from
settings_strin column schema
Cross-Board Operations
When moving items between boards, column IDs differ. Use columns_mapping in move_item_to_board to map source → target column IDs.
For complete examples, see references/advanced-workflows.md.
Error Handling
| Error | Cause | Fix |
|---|---|---|
401 Not Authenticated | Invalid/expired token | Regenerate token: Avatar → Developers → My access tokens |
429 Too Many Requests | Rate limit hit | Wait 60s, reduce query complexity |
400 Bad Request | Invalid column ID/value | Run get_board_schema to verify column IDs |
403 Forbidden | Insufficient permissions | Check user role & board permissions |
| MCP tools not found | MCP not configured | Run setup flow (see Prerequisites) |
When credentials are missing:
MISSING: MONDAY_TOKEN
ASK_USER: Please provide your Monday.com API token.
LOCATION: Monday.com → Avatar (bottom-left) → Developers → My access tokens
Direct API Fallback
If MCP is unavailable, use scripts/monday_api.sh for direct GraphQL calls:
bash .claude/skills/monday-com/scripts/monday_api.sh query '{ boards(limit:5) { id name } }'
bash .claude/skills/monday-com/scripts/monday_api.sh mutation \
'mutation { create_item(board_id: 123, item_name: "New Task") { id } }'
References
| Topic | File |
|---|---|
| Column value formats | references/column-types.md |
| GraphQL query examples | references/graphql-examples.md |
| Dashboards, fields, batch ops, webhooks | references/advanced-workflows.md |
Integration
Pairs with:
system-architect— Board/workspace structure designbrainstorm— Feature planning before task creation
Source
git clone https://github.com/georgekhananaev/claude-skills-vault/blob/main/.claude/skills/monday-com/SKILL.mdView on GitHub Overview
Manage Monday.com workspaces via the official MCP server. Create, update, move, archive, or delete items, boards, groups, and columns; add comments; and query board data. Supports both Hosted MCP and local deployments with an interactive setup flow.
How This Skill Works
Operations are routed through the MCP server or the direct API based on your setup. A first-time setup flow asks you to choose Hosted MCP, Local MCP via npx, or Direct API, then stores the configuration. Once configured, it executes CRUD, movement, and query tasks using MCP calls or GraphQL.
When to Use It
- Creating, updating, or deleting items/tasks on Monday.com
- Managing boards, groups, or columns
- Moving items between groups or boards
- Adding comments/updates to items
- Querying board structure, items, or users and setting up MCP integration
Quick Start
- Step 1: Run the first-time setup and choose Hosted MCP, Local MCP via npx, or Direct API
- Step 2: Configure the MCP or API token in Claude settings and connect to Monday.com
- Step 3: Start with a common task like creating an item, moving it, or adding a comment
Best Practices
- Prefer MCP for single-item CRUD to centralize auth and param handling
- Validate tokens/scopes before performing sensitive operations
- Fetch board schema with get_board_info before manipulating columns
- Test changes in a sandbox or staging board before production
- Use the interactive first-time setup to choose Hosted MCP, Local MCP, or Direct API
Example Use Cases
- Create a new task in a board and assign owners via MCP
- Move a task from the 'To Do' group to 'In Progress'
- Add a client comment to an item and notify watchers
- Retrieve board schema to map columns for reporting
- Set up MCP integration and verify authentication flow