monday.com
Manage monday.com boards, items, columns, groups, updates, and workflows via MCP server (preferred) and GraphQL API (fallback). Use when a user asks to creat...
monday.com
Manage everything on monday.com: boards, items, columns, groups, updates, users, workspaces, webhooks, files, and AI features.
If you need to signup new account this is how to Sign Up
-
Navigate to
https://auth.monday.com/users/sign_up_new?custom_flow=agent_bot -
Solve Hatcha — an agent-verification challenge. Types you may see:
- Sort numbers ascending → find the Nth value
- Binary octets → convert to ASCII text
- Reverse a string
- Count letter occurrences in text
- Multiply two numbers (return the product)
- Base64 decode
- ROT13 decode
- Hex to ASCII
You have ~30 seconds. Submit your answer and click Verify.
-
Enter your email and select who it belongs to (you or your operator). Click Submit.
-
Set your agent name and password. Password rules:
- Minimum 8 characters
- At least 1 digit, 1 lowercase, 1 uppercase
- No repeating characters (e.g. "aaa")
- No sequential characters (e.g. "1234")
Click Complete signup →
-
You'll land on the Agent Homepage — "Welcome to Monday for agents." This page has everything you need:
- API Token — copy it, you'll need it for all API/MCP calls save it to env like MONDAY_API_TOKEN
- MCP Config — JSON config for connecting via MCP (preferred method)
- Skills — downloadable YAML skill definition
- GraphQL API — example queries and mutations
- Resources — links to docs, SDK, community
Setup when you have account but don't have access token
- Go to monday.com → Profile picture → Developers → My Access Tokens
- Copy your Personal API V2 Token
- Store it:
export MONDAY_API_TOKEN="your_token_here"
Or configure in OpenClaw:
openclaw config set skills.entries.monday.env.MONDAY_API_TOKEN "your_token_here"
Token types: Personal API tokens inherit the user's full UI permissions — there's no scoping. For production or shared agents, prefer OAuth apps which support granular permission scopes (boards:read, boards:write, users:read, etc.). See OAuth docs.
MCP Server (Preferred Method)
Always use the MCP server first. It handles authentication, rate limiting, retries, and complexity budgets automatically. Only fall back to raw GraphQL/curl when the MCP tools don't cover your operation.
monday.com has an official MCP server (@mondaydotcomorg/monday-api-mcp):
{
"mcpServers": {
"monday": {
"command": "npx",
"args": ["-y", "@mondaydotcomorg/monday-api-mcp@latest"],
"env": {
"MONDAY_API_TOKEN": "your_token_here"
}
}
}
}
How to invoke MCP tools
If your platform supports MCP natively (e.g. Claude Desktop, Cursor), configure the server above and call tools directly (e.g. create_item, get_board_schema).
If your platform does not have native MCP support (e.g. OpenClaw agents executing via shell), you have two options:
- Use the GraphQL API directly (recommended fallback) — see the GraphQL section below. This is simpler and more reliable than shelling out to an MCP process.
- Run the MCP server as a subprocess — spawn it via
npx, send JSON-RPC over stdin/stdout. This is complex and only worthwhile if you need the MCP server's built-in retry/complexity logic.
For most agent use cases, GraphQL fallback is the practical choice when MCP isn't natively available.
MCP Tools Reference
| Tool | What It Does | When to Use |
|---|---|---|
create_board | Creates a new board with a name and kind (public/private/share) | User asks to set up a new project, tracker, pipeline, or workspace board |
get_board_schema | Returns board columns, groups, and structure | Before creating/updating items — always call this first to know column IDs and types |
create_group | Creates a new group on a board | Setting up phases, sprints, stages, or categories on a board |
create_column | Adds a new column to a board (status, date, people, numbers, etc.) | User wants to track a new field — priority, due date, assignee, budget, etc. |
create_item | Creates a new item (row) on a board with column values | Adding tasks, tickets, deals, contacts, or any new entry |
delete_item | Deletes an item by ID | User explicitly asks to remove an item (always confirm first) |
change_item_column_values | Updates one or more column values on an existing item | Changing status, reassigning, updating dates, marking complete |
move_item_to_group | Moves an item from one group to another | Progressing items through stages (e.g., "To Do" → "In Progress" → "Done") |
get_board_items_by_name | Searches for items on a board by name | Finding a specific task, deal, or ticket by its title |
create_update | Adds a comment/update to an item | Posting progress notes, status updates, handoff notes, or feedback |
MCP Workflow Pattern
- Always start with
get_board_schemato learn the board's columns and groups before writing data - Use
create_item/change_item_column_valuesfor CRUD — the MCP server formats column values correctly - Use
create_updateto leave a trail of context on items - If you need an operation the MCP tools don't cover (webhooks, file uploads, user queries, subitems, pagination) — fall back to the GraphQL API below
Advanced MCP Modes
- Dynamic API Tools (beta): Add
--enable-dynamic-api-tools trueto args for full GraphQL schema exploration via MCP - Hosted MCP (OAuth): Use
https://mcp.monday.com/ssefor OAuth-based access without a local token
Agent Behavior Rules
Be proactive and useful:
- After creating any item, board, group, or update — always return the direct URL to the created object:
https://<account>.monday.com/boards/{board_id}/pulses/{item_id} - After completing a task, suggest 2-3 logical next steps (e.g., "Want me to assign someone?" "Should I set a due date?" "Want me to create a status automation?" "Should I add subitems to break this down?")
- Don't narrate the API/MCP process — report what was done and how the user can use it
- When querying boards, present results in a clean summary (table or bullet points), not raw JSON
- If an operation fails, explain why in plain language and suggest a fix — don't just show the error
- Batch related operations (e.g., creating multiple items) into efficient calls
- Before creating a board, ask if the user wants a specific template or structure — suggest popular ones (Kanban, Sprint Board, CRM Pipeline, Bug Tracker)
- When a user asks "what's the status of X?", go beyond raw data — highlight blockers, overdue items, items without assignees, and progress percentages
- If you notice a board has no automations, suggest useful ones ("Want me to set up an automation to notify you when items are marked Done?")
- When creating items, proactively set reasonable defaults (e.g., status = "Not Started", assign to the requesting user if known)
- When working with dates, always use the user's timezone context and flag items that are overdue or due within 24 hours
- After bulk operations (creating 5+ items), provide a count summary and a link to the board rather than listing every item
Memory & caching (platform-specific):
These patterns apply to agents with persistent memory (e.g. OpenClaw workspace). Adapt to your platform's memory model.
- Save every created resource (ID, name, URL, context) to your memory/notes for reuse — include the board name, item name, and what it's for so you can find it later without re-querying
- If a user references a board or item by name and you've seen it before, retrieve the saved ID from memory instead of re-querying
- Cache board schemas after the first fetch — only re-query if the user mentions adding/changing columns
GraphQL API (Fallback)
Use the GraphQL API directly when MCP tools don't cover the operation (webhooks, file uploads, subitems, pagination, user/workspace queries, activity logs).
All requests go to a single endpoint:
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-H "API-Version: 2024-10" \
-d '{"query": "{ me { id name email } }"}'
API versioning: monday.com deprecates API versions periodically.
2024-10is the latest stable version as of this writing. Check developer.monday.com/api-reference for the current stable version if you encounter deprecation warnings.
Core Operations
List Boards
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "{ boards(limit: 25, order_by: used_at) { id name board_folder_id state workspace { id name } } }"}'
Get Board with Items
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "{ boards(ids: [BOARD_ID]) { id name columns { id title type settings_str } groups { id title } items_page(limit: 50) { cursor items { id name group { id title } column_values { id text type value } } } } }"}'
Create Board
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "mutation { create_board(board_name: \"Project Alpha\", board_kind: public, workspace_id: WORKSPACE_ID) { id } }"}'
Board kinds: public, private, share.
Create Item
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "mutation { create_item(board_id: BOARD_ID, group_id: \"GROUP_ID\", item_name: \"New Task\", column_values: \"{\\\"status\\\": {\\\"label\\\": \\\"Working on it\\\"},\\\"date\\\": {\\\"date\\\": \\\"2026-03-15\\\"}}\") { id } }"}'
Update Column Values
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "mutation { change_multiple_column_values(board_id: BOARD_ID, item_id: ITEM_ID, column_values: \"{\\\"status\\\": {\\\"label\\\": \\\"Done\\\"},\\\"person\\\": {\\\"personsAndTeams\\\": [{\\\"id\\\": USER_ID, \\\"kind\\\": \\\"person\\\"}]}}\") { id } }"}'
Always prefer change_multiple_column_values over change_column_value for efficiency.
Create Group
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "mutation { create_group(board_id: BOARD_ID, group_name: \"Sprint 3\", group_color: \"#00CA72\") { id } }"}'
Add Update (Comment)
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "mutation { create_update(item_id: ITEM_ID, body: \"Completed the review. Ready for QA.\") { id } }"}'
Create Subitem
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "mutation { create_subitem(parent_item_id: ITEM_ID, item_name: \"Subtask: Write tests\") { id board { id } } }"}'
Move Item to Group
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "mutation { move_item_to_group(item_id: ITEM_ID, group_id: \"GROUP_ID\") { id } }"}'
Delete Item
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "mutation { delete_item(item_id: ITEM_ID) { id } }"}'
Search Items by Column Value
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "{ items_page_by_column_values(board_id: BOARD_ID, limit: 50, columns: [{column_id: \"status\", column_values: [\"Working on it\"]}]) { cursor items { id name column_values { id text } } } }"}'
Upload File to Item
File uploads use a multipart POST (not the standard JSON body):
curl -X POST "https://api.monday.com/v2/file" \
-H "Authorization: $MONDAY_API_TOKEN" \
-F 'query=mutation ($file: File!) { add_file_to_column(item_id: ITEM_ID, column_id: "files", file: $file) { id name url } }' \
-F 'variables[file]=@/path/to/file.pdf'
Note: The endpoint is
/v2/file(not/v2). The column must be a "Files" type column. Max file size: 500MB. The@prefix is required for curl file uploads.
Upload File to Update
curl -X POST "https://api.monday.com/v2/file" \
-H "Authorization: $MONDAY_API_TOKEN" \
-F 'query=mutation ($file: File!) { add_file_to_update(update_id: UPDATE_ID, file: $file) { id name url } }' \
-F 'variables[file]=@/path/to/file.png'
Get Activity Logs
Query what changed on a board recently — useful for "what happened since yesterday?" or audit trails:
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "{ boards(ids: [BOARD_ID]) { activity_logs(limit: 50) { id event data entity account_id created_at user_id } } }"}'
Filter by date range or specific columns:
# Activity from the last 7 days
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "{ boards(ids: [BOARD_ID]) { activity_logs(limit: 50, from: \"2026-03-03T00:00:00Z\", to: \"2026-03-10T00:00:00Z\") { id event data entity created_at user_id } } }"}'
Common event values: update_column_value, create_pulse (item created), delete_pulse, create_update, move_pulse (item moved between groups).
Create Webhook
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "mutation { create_webhook(board_id: BOARD_ID, url: \"https://your-endpoint.com/webhook\", event: change_column_value) { id } }"}'
Events: change_column_value, change_status_column_value, create_item, delete_item, change_name, create_update, change_subitem_column_value, create_subitem.
Get User Info
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "{ me { id name email account { id name slug } } }"}'
List Workspaces
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "{ workspaces { id name kind } }"}'
Pagination
Use cursor-based pagination for large datasets:
# First page
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "{ boards(ids: [BOARD_ID]) { items_page(limit: 200) { cursor items { id name } } } }"}'
# Next page (use cursor from previous response)
curl -X POST "https://api.monday.com/v2" \
-H "Authorization: $MONDAY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "{ next_items_page(limit: 200, cursor: \"CURSOR_VALUE\") { cursor items { id name } } }"}'
Recommended page size: 200. Max: 500. Cursors expire after 60 minutes.
Column Value Formats
When setting column values, use these JSON formats:
| Column Type | JSON Format |
|---|---|
| Status | {"label": "Done"} or {"index": 1} |
| Date | {"date": "2026-03-15"} or {"date": "2026-03-15", "time": "14:30:00"} |
| Person | {"personsAndTeams": [{"id": 12345, "kind": "person"}]} |
| Numbers | "42" (string) |
| Text | "Hello world" |
| Dropdown | {"labels": ["Option A", "Option B"]} |
| Checkbox | {"checked": "true"} |
{"email": "[email protected]", "text": "Contact"} | |
| Phone | {"phone": "+15551234567", "countryShortName": "US"} |
| Link | {"url": "https://example.com", "text": "Click here"} |
| Timeline | {"from": "2026-03-01", "to": "2026-03-31"} |
| Long Text | {"text": "Detailed description here"} |
| Rating | {"rating": 4} |
| Hour | {"hour": 14, "minute": 30} |
| Week | {"week": {"startDate": "2026-03-09", "endDate": "2026-03-15"}} |
| Color | {"color": {"hex": "#FF5AC4"}} |
| Tags | {"tag_ids": [123, 456]} |
| Country | {"countryCode": "US", "countryName": "United States"} |
| Location | {"lat": "40.7128", "lng": "-74.0060", "address": "New York, NY"} |
All column values must be JSON-stringified when passed to mutations.
URL Patterns
Build direct links for users:
- Board:
https://{account}.monday.com/boards/{board_id} - Item:
https://{account}.monday.com/boards/{board_id}/pulses/{item_id} - Dashboard:
https://{account}.monday.com/dashboards/{dashboard_id}
Get the account slug from: { me { account { slug } } }
Rate Limits
| Limit | Free | Standard | Pro | Enterprise |
|---|---|---|---|---|
| Per minute | 1,000 | 1,000 | 2,500 | 5,000 |
| Daily calls | 200 | 1,000 | 10,000 | 25,000 |
| Concurrency | 40 | 40 | 100 | 250 |
| Complexity/query | 5,000,000 | 5,000,000 | 5,000,000 | 5,000,000 |
| Complexity/min | 10,000,000 | 10,000,000 | 10,000,000 | 10,000,000 |
| IP limit | 5,000 per 10s | 5,000 per 10s | 5,000 per 10s | 5,000 per 10s |
When rate-limited (HTTP 429): read the Retry-After header and wait that many seconds. Rate-limited requests count as only 0.1 toward the daily limit.
Always include complexity { before after query } in queries to monitor budget.
Error Handling
monday.com returns errors in two ways:
- HTTP 200 with
errorsarray — application-level errors (invalid query, missing permissions) - HTTP 4xx/5xx — transport-level errors (rate limit, auth failure, server error)
Common error codes:
InvalidColumnIdException— column ID doesn't exist on the boardInvalidBoardIdException— board doesn't exist or no accessItemsLimitationException— board reached item limitCorrectedValueException— value was auto-corrected (checkcorrected_value)ColumnValueException— invalid format for column typeUserUnauthorizedException— token doesn't have required permissionsComplexityException— query too expensive, simplify or paginateResourceNotFoundException— ID doesn't exist
monday.com AI Features
- AI Blocks — modular AI in columns and automations: Categorize, Summarize, Translate, Extract Info, Detect Sentiment, Improve Text, Write with AI, Custom Prompt. Available on Pro+ (500 free credits/month)
- monday Sidekick — conversational AI assistant for cross-board analysis, report generation, content drafting, task creation
- monday AI Agents — autonomous workers: Lead Agent (qualifies prospects), SDR Agent (outreach calls, SMS, meeting booking)
- monday Vibe — AI no-code app builder, turns natural language into custom apps
Use Cases
| Scenario | What to Do |
|---|---|
| "Create a project board" | Create board → add groups (phases/sprints) → add columns → report board URL |
| "Add tasks to my board" | Get board schema → create items with proper column values → return item URLs |
| "What's the status of project X?" | Query board items → summarize by status/group → highlight blockers |
| "Move done items to archive" | Search by status "Done" → move each to archive group |
| "Set up a sprint" | Create group → create items → assign people → set dates → return board link |
| "Track a bug" | Create item in dev board → set priority/status → assign → add description as update |
| "Create a CRM pipeline" | Create board with deal stages as groups → add contact/value/date columns |
| "Generate a weekly report" | Query multiple boards → aggregate by status → format as summary with metrics |
| "Automate status notifications" | Create webhook for status changes → explain how to connect to Slack/email |
| "What changed this week?" | Query activity logs → summarize by user/event type → highlight key changes |
| "Upload a spec to a task" | Upload file to item's files column via multipart POST → return file URL |
Security & Legal Guidelines
Data handling:
- Never log or store API tokens in conversation history, memory files, or updates
- When displaying board data, respect that it may contain confidential business information
- Don't share board data across different users' sessions or conversations
- monday.com customer data is never used to train AI models
Permissions:
- Personal API tokens inherit the user's UI permissions — if they can't see a board in the UI, the API won't return it
- Always verify board access before performing operations
- Don't delete items, boards, or groups without explicit user confirmation
- For destructive operations (delete, archive), always ask first and explain what will happen
Rate limiting etiquette:
- Space out bulk operations (add 100ms delay between mutations)
- Use
change_multiple_column_valuesinstead of multiple single-column updates - Cache board schemas and user IDs — don't re-query every turn
- If rate-limited, wait the full
Retry-Afterduration before retrying
Compliance:
- Don't create automations that send external emails/notifications without user awareness
- Don't modify workspace-level settings without explicit permission
- When creating webhooks, inform the user and document the endpoint
- Respect workspace data isolation — don't query across workspaces unless asked
Links
- Developer docs: https://developer.monday.com
- API reference: https://developer.monday.com/api-reference
- MCP server: https://github.com/mondaycom/mcp
- Apps marketplace: https://monday.com/marketplace
- Status page: https://status.monday.com
Download
ZIP package — ready to use
Skill Info
- Creator
- regevguym
- Downloads
- 34
- Published
- Mar 15, 2026
- Updated
- Mar 16, 2026