Manage boards, items, updates, activity logs, and docs on Monday.com — directly from your AI workflows.
A Model Context Protocol (MCP) server that exposes Monday.com's GraphQL API (via the official monday-api-python-sdk) for managing boards, items, column values, updates, activity logs, and documents.
Overview
The Monday.com MCP Server provides programmatic access to a Monday.com account:
Query and inspect boards, columns, groups, and items — with pagination and date-range filtering
Create, update, and manage items and subitems: column values, group moves, file uploads, archiving, and deletion
Post and fetch updates (comments), review board activity logs, and read Monday.com docs
Perfect for:
Automating project and task management workflows from AI agents
Building assistants that read and update Monday.com boards, items, and comments
Auditing board activity and syncing Monday.com data into other systems
Tools
Boards
Query boards with optional filters.
Inputs:
- `limit` (integer, optional, default: 50) — Number of boards to return.- `page` (integer, optional) — Page number for pagination.- `ids` (integer[], optional) — Filter by specific board IDs.- `board_kind` (string enum: `public`, `private`, `share`, optional) — Filter by board type (public, private, share).- `state` (string enum: `active`, `archived`, `deleted`, `all`, optional) — Filter by state (active, archived, deleted, all).- `order_by` (string enum: `created_at`, `used_at`, optional) — Sort order (created_at or used_at).
- `board_id` (integer | string, required) — The board ID to fetch items from.- `query_params` (object, optional) — Query Params for filtering- `limit` (integer, optional) — Number of items per page
output data schema:
type Item = { id: string | null; state
Fetch items modified within a date range.
Inputs:
- `board_id` (integer | string, required) — The board ID to fetch items from.- `updated_after` (string, required) — datetime in the format YYYY-MM-DDTHH:MM:SSZ- `updated_before` (string, required) — datetime in the format YYYY-MM-DDTHH:MM:SSZ
output data schema:
type Item = { id: string | null;
Fetch the column definitions (id, title, type) for a given board.
- `board_id` (integer | string, required) — The board ID to fetch items from.- `group_id` (integer | string, required) — The board ID to fetch items from.- `item_name` (string, required) — Name of Item- `column_values` (object, optional) — The column values of the new item.- `create_labels_if_missing` (boolean, optional, default: false) — Create Status/Dropdown labels if they're missing. (Requires permission to change board structure)
output data schema:
{
Create a subitem
Inputs:
- `parent_item_id` (integer | string, required) — The parent item's unique identifier.- `subitem_name` (string, required) — The new item's name.- `column_values` (object, optional) — The column values of the new item.- `create_labels_if_missing` (boolean, optional, default: false) — Create Status/Dropdown labels if they're missing. (Requires permission to change board structure)
output data schema:
{ id: string |
Changes an item's column to a new simple text value. Only this column is changed — other columns keep their current value. NOTE: this overwrites the current value — the prior value is not preserved by this tool. The response includes the updated item's id.
Inputs:
- `board_id` (integer | string, required) — The board's unique identifier.- `item_id` (integer | string, required) — The item's unique identifier.- `column_id` (string, required) — The column's unique identifier.- `value` (string, required) — The new simple value of the column (pass null to empty the column).
output data schema:
{
Sets a status column's label. Only this column is changed — other columns keep their current value. NOTE: this overwrites the current label — the prior label is not preserved by this tool. The response includes the item's id, name, and column_values as returned by the Monday.com API.
Inputs:
- `board_id` (integer | string, required) — The board's unique identifier.- `item_id` (integer | string, required) — The item's unique identifier.- `column_id` (string, required) — The column's unique identifier.- `value` (string, required) — The status label to set on the column (the exact label text as configured on the board, e.g. 'Done').
output data schema:
{ id
Sets a date column's value (pass a datetime object). Only this column is changed — other columns keep their current value. NOTE: this overwrites the current date — the prior date is not preserved by this tool. The response includes the item's id, name, and column_values as returned by the Monday.com API.
Inputs:
- `board_id` (integer | string, required) — The board's unique identifier.- `item_id` (integer | string, required) — The item's unique identifier.- `column_id` (string, required) — The column's unique identifier.- `timestamp` (string (datetime), required) — The new date value
output data schema:
{ id: string |
Sets any column's value using a JSON dict. Only this column is changed — other columns keep their current value. NOTE: this overwrites the current value — the prior value is not preserved by this tool. The response includes the item's id, name, and column_values as returned by the Monday.com API.
Inputs:
- `board_id` (integer | string, required) — The board's unique identifier.- `item_id` (integer | string, required) — The item's unique identifier.- `column_id` (string, required) — The column's unique identifier.- `value` (object, required) — The new value of the column as a JSON dict (e.g. {'checked': True} for a checkbox).
output data schema:
Sets multiple column values at once. Only the columns you provide are changed — others keep their current value. NOTE: this overwrites the current values — the prior values are not preserved by this tool. The response includes the item's id, name, and column_values as returned by the Monday.com API.
Inputs:
- `board_id` (integer | string, required) — The board's unique identifier.- `item_id` (integer | string, required) — The item's unique identifier.- `column_values` (object, required) — Column values in a json format- `create_labels_if_missing` (boolean, optional, default: false) — Create Status/Dropdown labels if they're missing. (Requires permission to change board structure)
output data schema:
Moves an item to a different group. Only the item's group is changed — other fields keep their current value. NOTE: this overwrites the current group — the prior group is not preserved by this tool. The response includes the updated item's id.
Inputs:
- `item_id` (integer, required) — The item's unique identifier.- `group_id` (string, required) — The group's unique identifier.
output data schema:
{ id: string | null; // additional upstream fields may be present}
Archives an item, removing it from active board views. Unlike delete, this is REVERSIBLE — the item can be restored from Monday.com's archive. Confirm with the user before calling, since it changes the item's visibility across the board.
Inputs:
- `item_id` (integer, required) — The item's unique identifier.
output data schema:
{ id: string | null; // additional upstream fields may be present}
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Permanently deletes the item and all its data (column values, subitems, updates). This action is irreversible — the item and its data cannot be recovered. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user exactly what will be deleted and that it is permanent, and wait for their explicit written confirmation before proceeding.
Inputs:
- `item_id` (integer, required) — The item's unique identifier.
output data schema:
{ id: string | null; // additional upstream fields may be present}
Upload a file to a file column.
Inputs:
- `item_id` (integer | string, required) — The item's unique identifier.- `column_id` (string, required) — The column's unique identifier.- `file_path` (string, required) — The path of the file on the user's system- `mimetype` (string, optional) — The mimetype of the file getting uploaded for example: application/json
output data schema:
{ id: string | null;
Fetch items by column value
Inputs:
- `board_id` (integer | string, required) — Board Id- `column_id` (string, required) — column header- `value` (string, required) — Fetch column by this value- `limit` (integer, optional) — Limit on number of rows to be fetched
output data schema:
type Item = { id: string | null;
Fetch items by a list of ids
Inputs:
- `ids` ((integer | string)[], required) — list of ids for the items to be fetched
- `item_id` (integer, required) — The item's unique identifier.- `update_value` (string, required) — Comments to be added to the item
output data schema:
{ id: string | null; // additional upstream fields may be present}
DESTRUCTIVE — REQUIRES EXPLICIT USER CONFIRMATION BEFORE CALLING. Permanently deletes an update (comment) from an item. This action is irreversible — the update's content cannot be recovered. NEVER call this tool autonomously or as part of an automated flow. You MUST stop, tell the user exactly what will be deleted and that it is permanent, and wait for their explicit written confirmation before proceeding.
Inputs:
- `item_id` (integer, required) — The item's unique identifier.
output data schema:
{ id: string | null; // additional upstream fields may be present}
Fetch updates with pagination.
Inputs:
- `limit` (integer, required) — Number of items to get, the default is 25.- `page` (integer, required) — Page number to get, starting at 1.
output data schema:
{ updates: { id: string | null; body: string |
Fetch updates for a specific item.
Inputs:
- `item_id` (integer, required) — The item's unique identifier.- `limit` (integer, required) — Number of items to get, the default is 25.
Fetch all updates from a board with date filtering.
Inputs:
- `board_ids` (integer, required) — Board Id- `updated_after` (string, required) — datetime in the format YYYY-MM-DDTHH:MM:SSZ- `updated_before` (string, required) — datetime in the format YYYY-MM-DDTHH:MM:SSZ
output data schema:
{ updates: { id: string | null; text_body: string
Fetch a single page of board updates.
Inputs:
- `board_id` (integer | string, required) — Board Id- `limit` (integer, required) — Number of items to get, the default is 25.- `page` (integer, required) — Page number to get, starting at 1.- `from_date` (string, required) — datetime in the format YYYY-MM-DDTHH:MM:SSZ- `to_date` (string, required) — datetime in the format YYYY-MM-DDTHH:MM:SSZ
output data schema:
{
Activity Logs
Fetch a page of activity logs.
Inputs:
- `board_ids` (integer, required) — Board Id- `page` (integer, required) — Page number to get, starting at 1.- `limit` (integer, required) — Number of items to get, the default is 25.- `from_date` (string, required) — datetime in the format YYYY-MM-DDTHH:MM:SSZ- `to_date` (string, required) — datetime in the format YYYY-MM-DDTHH:MM:SSZ
output data schema:
{
Fetch all activity logs with automatic pagination and optional event filtering.
Inputs:
- `board_ids` (integer, required) — Board Id- `from_date` (string, required) — datetime in the format YYYY-MM-DDTHH:MM:SSZ- `to_date` (string, required) — datetime in the format YYYY-MM-DDTHH:MM:SSZ- `limit` (integer, required) — Number of items to get, the default is 25.- `events_filter` (string[], required) — Filter activity logs by specific event types
output data schema:
{
Docs
Fetch a document with all blocks (auto-paginates).