/ Directory / Playground / Monday.com MCP
● Official mondaycom 🔑 Needs your key

Monday.com MCP

by mondaycom · mondaycom/mcp

Monday.com's official MCP — drive your boards, items, and dashboards from Claude with structured-data guarantees, not screen scraping.

monday-mcp connects Claude to Monday.com via the official GraphQL API. Reads boards/groups/items, writes/updates items and column values, and surfaces dashboards. Includes context tools so the agent knows which workspaces and boards exist before acting — fewer 'wrong board' mistakes.

Why use it

Key features

Live Demo

What it looks like in practice

monday-mcp.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "monday-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@mondaydotcomorg/monday-api-mcp"
      ]
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "monday-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@mondaydotcomorg/monday-api-mcp"
      ]
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "monday-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@mondaydotcomorg/monday-api-mcp"
      ]
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "monday-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@mondaydotcomorg/monday-api-mcp"
      ]
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "monday-mcp",
      "command": "npx",
      "args": [
        "-y",
        "@mondaydotcomorg/monday-api-mcp"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "monday-mcp": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@mondaydotcomorg/monday-api-mcp"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add monday-mcp -- npx -y @mondaydotcomorg/monday-api-mcp

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use Monday.com MCP

Roll up project status across multiple Monday boards

👤 PMs, team leads with multi-board projects ⏱ ~15 min beginner

When to use: Friday rollup time and you have 5 boards to scan.

Prerequisites
  • Monday API token — Profile → Developer → API → API v2 token; set MONDAY_API_TOKEN env var
Flow
  1. Discover scope
    Use monday-mcp. List my workspaces and the boards in 'Engineering' workspace.✓ Copied
    → Workspace + board list
  2. Pull active items per board
    For each engineering board, list items in 'Working on it' and 'Stuck' status with owner + due date.✓ Copied
    → Per-board grouped list
  3. Compose rollup
    Write a Friday rollup: shipped this week, in flight, blocked. 6 bullets total.✓ Copied
    → Concise rollup ready to paste

Outcome: Cross-board snapshot in 5 minutes instead of 45.

Pitfalls
  • Status column names differ across boards — Have Claude normalize status labels (Stuck/Blocked → blocked); document the mapping in the prompt
Combine with: google-workspace-mcp

Auto-create items from intake email/form data

👤 Ops + intake-driven teams ⏱ ~30 min intermediate

When to use: Customers submit a form / email and you create Monday items by hand.

Flow
  1. Parse the source
    Use google-workspace-mcp + monday-mcp. Read unread emails labeled 'intake', extract structured fields.✓ Copied
    → Per-email JSON with extracted fields
  2. Create items
    For each, create an item on board 'Customer requests' with the right group + column values.✓ Copied
    → N items created with permalinks; missing-info flags listed
  3. Reply / acknowledge
    Reply to each sender with the item link as ack.✓ Copied
    → Auto-replies sent

Outcome: Intake handled in minutes; everyone gets an ack.

Pitfalls
  • Sender intent ambiguous; item ends up on wrong board — If confidence is low, route to a triage group instead of guessing the right board
Combine with: google-workspace-mcp

Clean up stale items across a board

👤 Project leads tired of zombie cards ⏱ ~25 min intermediate

When to use: Quarterly hygiene on a long-running board.

Flow
  1. Identify stale
    Use monday-mcp. List items on board 'Roadmap Q1' with no updates in 60+ days, grouped by owner.✓ Copied
    → Stale list per owner
  2. Draft owner pings
    Draft one Monday update per stale item, pinging the owner with: 'Still active? Move to done or archive.'✓ Copied
    → Update drafts ready
  3. Post + bulk-archive after grace period
    Post the updates. After 7 days, anything still untouched gets moved to 'archive' group.✓ Copied
    → Updates posted; calendar entry set for the cleanup pass

Outcome: A board that reflects reality, not historical aspiration.

Pitfalls
  • Archiving items that someone's actively working on but didn't update — Always ping first; grace period before automated archive

Combinations

Pair with other MCPs for X10 leverage

Intake from email; ack via email; status digest into a Doc

From the 'intake' Gmail label, create Monday items, reply with the item link, and append a daily digest to a Google Doc.✓ Copied
monday-mcp + github

Sync engineering Monday items with GitHub issues

When a Monday item moves to 'In review', add a GitHub issue link if missing; when GitHub issue closes, set Monday status to Done.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
list_boards workspace_id? Always before writes — scope discovery 1 GraphQL call
get_board board_id Before creating items — know the column types 1 call
search_items board_id, filters Filter items for read flows 1 call (paged)
create_item board_id, group_id, name, column_values Intake / new work 1 call
update_item_columns item_id, column_values Status / owner / date changes 1 call
create_update item_id, body Comment on an item 1 call

Cost & Limits

What this costs to run

API quota
Monday's GraphQL complexity budget — large queries can cost more than simple ones
Tokens per call
Boards with many columns / items are token-heavy; prefer narrow column sets
Monetary
Free tier supports API; Pro+ for higher complexity budgets
Tip
Pull only the columns you need (item.column_values[id IN [...]]); avoid select-all on boards with 50+ columns

Security

Permissions, secrets, blast radius

Minimum scopes: boards:read boards:write (only if writes needed)
Credential storage: MONDAY_API_TOKEN env var
Data egress: Only to api.monday.com
Never grant: Admin token to a chat-driven agent — use a per-app limited token

Troubleshooting

Common errors and fixes

Complexity budget exceeded

Reduce columns/items per query; page through with pagination instead of one big call

Verify: Error includes 'complexity' phrasing
Wrong column type on create

Read the board's columns_schema first; column_values must be JSON-stringified per type

401 / token invalid

Regenerate API token under Profile → Developer; tokens are user-scoped

Verify: curl -X POST https://api.monday.com/v2 -H 'Authorization: $MONDAY_API_TOKEN' -d 'query{me{name}}'
Subitem not appearing under parent

Subitems live in a separate board; use the subitems board id, not the parent's

Alternatives

Monday.com MCP vs others

AlternativeWhen to use it insteadTradeoff
Linear MCPEngineering team using Linear, not MondayDifferent product; one-way mappings between the two are imperfect
Notion MCPYour work tracking lives in Notion databasesNotion's column types differ; less first-class status semantics

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills