Monday MCP
This server is a local MCP server that connects AI assistants to monday.com, translating plain column values into monday.com's API format and also providing browser/desktop automation modes for UI actions without an API token.
Data Operations (via API):
Get current user info (
monday_get_me)List users, workspaces, and boards (
monday_list_users,monday_list_workspaces,monday_list_boards)Get board layout with column types and status/dropdown labels (
monday_get_board)List/search items with filters and readable column values (
monday_list_items)Get full item details with raw JSON (
monday_get_items)Create, update, move, and delete items (
monday_create_item,monday_update_item,monday_move_item,monday_delete_item)Create subitems (
monday_create_subitem)Read and post updates/comments (
monday_list_updates,monday_create_update)Run raw GraphQL queries/mutations (
monday_graphql)
Addressing & UI Automation:
Resolve ids to URLs for browser/desktop navigation (
monday_resolve_location)Open the desktop app at a location via CDP (
monday_open)Perform UI actions like reading item cards and posting updates via DOM (
monday_ui_action)Supports no-token access by riding an already logged-in user session in desktop/web modes
Conversion & Safety Features:
Converts plain values (e.g., "Done" for status, dates, people, tags) to monday.com's expected JSON shapes
Accepts column titles as keys and normalizes case/spacing/hyphens/underscores
Validates status/dropdown labels before sending, optionally creating missing labels
Provides read-only mode, board allow-listing, and requires confirmation for permanent deletion
No telemetry; token stays local and is redacted from logs
Three Modes:
Mode 3 (API): Full data CRUD via GraphQL
Mode 2 (Web app): UI-only actions, screenshots, no token needed, using local Chrome or remote Browser Run
Mode 1 (Desktop app): Drive the desktop app over CDP, no token needed, for desktop-specific tasks
Provides tools for interacting with the monday.com GraphQL API, including listing boards, managing items (create, update, move, delete), handling column values with automatic type translation, posting comments, and managing users and workspaces.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Monday MCPcreate a "Bug" item on the Launch board with Status "Stuck""
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
monday-mcp
A local Model Context Protocol server for monday.com — plus a documented, reverse‑engineered map of three ways an agent can reach a monday.com location without any discovery spend: the GraphQL API, the web app in a browser, and the native desktop app over the Chrome DevTools Protocol.
It runs on your machine and speaks straight to the monday.com GraphQL API. Your token stays on your machine. No relay, no hosted middle layer, no telemetry.
Unofficial. This project is not built by monday.com, and it carries no endorsement from monday.com. "monday.com" is a trademark of monday.com Ltd.
Claude, Cursor, or any MCP client
| stdio
monday-mcp (this server, on your machine)
| HTTPS
api.monday.comContents
Related MCP server: JSON Canvas MCP Server
Why another monday.com server
Most failures with the monday.com API come from one thing: every column type
stores a different JSON shape. A model that writes "Done" into a status
column gets a silent no-op or an error with no clue in it.
This server does the translation. You send a plain value, and the server converts it to the shape monday.com stores.
// what the model sends
{ "Status": "Done", "Due date": "2026-08-14", "Owner": [12345678] }
// what monday.com receives
{
"status": { "index": 1 },
"date_1": { "date": "2026-08-14" },
"person": { "personsAndTeams": [{ "id": 12345678, "kind": "person" }] }
}The server also refuses a bad value before it sends a request, and the refusal names the labels the column accepts:
Column "Status" has no status "Shipped".
It accepts: "Working on it", "Done", "Stuck".
Send create_labels_if_missing true to add it.Three more things this server does:
Column titles work as keys. Use
"Due date"ordate_1. Letter case, spaces, hyphens and underscores do not matter.Status filters translate too. A filter on
"Stuck"becomes the numeric label index that the API needs.Safety rails. A read-only mode, a board allow list, and a permanent delete that needs explicit confirmation.
Three ways to reach monday.com
The API server (Mode 3) is the primary, complete, contract‑backed path. The other two
exist for the roughly ten percent of tasks the API can't do — pure‑UI actions, visual
verification, or working with no API token at all by riding a session you're already
logged into. All three are documented in depth in docs/interface-map.md.
Mode 3 — API | Mode 2 — Web app | Mode 1 — Desktop app | |
Transport |
| Chrome (local) or Cloudflare Browser Run (remote), driven by DOM/CDP | Electron webview over CDP ( |
Needs an API token | Yes | No (rides your login) | No (rides your login) |
Reads/writes any column type | ✅ (with shape translation) | ⚠️ item‑card / canvas‑limited | ⚠️ same |
Address group / column | ✅ | group via DOM, column API‑only | same |
Visual verification | ❌ | ✅ | ✅ |
Works headless / on a server | ✅ | remote only | ❌ |
Best for | all data CRUD | UI‑only actions, screenshots, no‑token | desktop‑specific, no‑token |
Rule of thumb: data → Mode 3; pixels or UI‑only → Mode 2 (local Chrome); desktop‑specific or no token on a workstation → Mode 1; headless with no local Chrome → Mode 2 (Cloudflare Browser Run).
The addressing model
Every mode is a function of one address. Resolve it once, dispatch anywhere:
interface MondayLocator {
account_slug: string; // "acme" -> https://acme.monday.com (required for URL modes)
board_id?: string; // e.g. "9876543210"
view_id?: string; // a board view (tab)
item_id?: string; // a.k.a. pulse id
update_id?: string; // an update/post on an item
asset_id?: string; // a file on an item
doc_id?: string; block_id?: string; // a workdoc / a block in it
workspace_id?: string; dashboard_id?: string;
group_id?: string; // NOT URL-addressable — from the API (or a board's data-group-id)
column_id?: string; // NOT URL-addressable — from the API
}The hard ceiling. Only board / view / item / update (plus ?asset_id= and
?doc_id=&blockId=) are URL‑addressable. Groups and columns have no URL anchor at all —
resolve them through the API before any browser‑mode step that needs them.
Target | URL (under |
Board |
|
Board view |
|
Item (opens the card overlay) |
|
Update on an item |
|
File over an item |
|
Standalone workdoc |
|
Workspace |
|
Public board view (no login) |
|
Mode 3 — the API server (start here)
This is the MCP server. Node 20 or newer.
Install
git clone https://github.com/ashrocket/monday-mcp.git
cd monday-mcp
npm install # this also builds, through the prepare scriptGet an API token
Open monday.com.
Click your avatar at the bottom left.
Choose Developers, then My access tokens, then Show.
Copy the token.
An admin may prefer the account token at Administration > API.
The token carries your own permissions. It sees the boards you see.
Connect it
Claude Code
claude mcp add monday --env MONDAY_API_TOKEN=your-token -- node /full/path/to/monday-mcp/dist/index.jsClaude Desktop, Cursor, and other clients — add this to the MCP server configuration file:
{
"mcpServers": {
"monday": {
"command": "node",
"args": ["/full/path/to/monday-mcp/dist/index.js"],
"env": { "MONDAY_API_TOKEN": "your-token" }
}
}
}To keep the token out of the configuration file, put it in a file and point at the file instead:
{
"mcpServers": {
"monday": {
"command": "node",
"args": [
"/full/path/to/monday-mcp/dist/index.js",
"--token-file",
"~/.config/monday/token"
]
}
}
}The server takes its configuration from the environment that the MCP client
gives it. It does not read a .env file by itself. For local work, use
Node's own flag: node --env-file=.env dist/index.js.
Prove it works
cp .env.example .env # then put your token in .env
npm run smoke # read-only checks against your account
npm run smoke -- --write # adds a create, update, comment and archive cycleThe write cycle archives the item that it makes, so it leaves no clutter.
Tools
Tool | What it does |
| The user behind the token, and the account. Prove the connection. |
| List or search boards. Returns the board ids. |
| Groups, columns, and the labels each status or dropdown accepts. |
| A page of items, filtered, with readable column text. |
| Full detail for up to 100 items, with column ids and stored JSON. |
| Create an item, with plain column values. |
| Change columns, the name, or both. |
| Move an item to another group. |
| Create a subitem, with column values. |
| Archive by default. Permanent delete needs |
| Read the conversation on an item. |
| Post a comment on an item. |
| Find the numeric user id a people column needs. |
| List the workspaces. |
| An escape hatch for anything the other tools miss. |
In read-only mode only the eight read tools register, plus monday_graphql, which
stays but refuses any mutation. If a board allow list is set, monday_graphql is not
registered at all, because a raw document cannot honour the list — so read-only and
an allow list together leave just the eight read tools.
Three more tools address and drive the other modes. They register in every mode, including with no token at all:
Tool | What it does |
| Turns ids into the URL that addresses them, plus the |
| Navigates the desktop app to a location over its debug port. |
|
|
monday_ui_action drops post_update in read-only mode, so the tool is genuinely
read-only rather than accepting a write and refusing it later. Board grid cells are
not reachable by any of these — the grid is a canvas, not DOM. Switching a board view
and running the Excel export are not implemented.
Column values
Pass values keyed by column id or column title. Use the plain form below.
An object value passes through untouched, so you keep control when you need
the exact API shape.
Column type | Send this | Server sends this |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| the same object |
Send null to clear a column.
Three notes on the awkward ones:
phoneneeds a country as well as a number. An international number carries one, so"+442071234567"works. A local number does not, so send["07700900123", "GB"].locationstores coordinates. monday.com does not turn an address into coordinates, and neither does this server, so sendlatandlng.statusanddropdownreject a label the board does not have. Passcreate_labels_if_missing: trueto add it instead.
These types are not writable, because monday.com computes them:
auto_number, button, creation_log, formula, integration, item_id,
last_updated, mirror, progress, subtasks, time_tracking, vote.
A file or doc column needs the separate upload endpoint, which this
server does not expose.
Safety
Setting | Effect |
| Only read tools get registered. A raw mutation is refused. |
| Every other board becomes invisible. |
| Needs |
The token never appears in a tool result or an error message. The client redacts it before anything leaves the process.
Options
Flag | Environment variable | Default |
|
| none, and the server refuses to start |
|
| none |
|
| off |
|
| all boards |
|
|
|
|
|
|
|
| off |
|
| read from the token |
|
|
|
|
| |
|
|
A flag always wins over the matching environment variable.
Running without a token. --desktop-only starts the server with no token: the
fifteen API tools are absent and only the three addressing tools load, riding the
session already signed in to the desktop app. It must be asked for explicitly — a
missing token is otherwise still a hard failure, so a typo in MONDAY_API_TOKEN fails
loudly instead of quietly booting a server that cannot see your data.
claude mcp add monday-desktop -- node /full/path/to/monday-mcp/dist/index.js \
--desktop-only --account-slug <your-slug>--account-slug matters here: every monday.com URL needs the account subdomain, and
without a token there is nothing to read it from. monday_resolve_location fails with
a clear message rather than emitting a slug-less URL, which would 404.
About the API version. monday.com retires an API version every quarter, and a request that names a retired version quietly gets the maintenance version instead. That makes a stale default worse than no default, so this server pins a current one and you can override it. Check the versioning page when you upgrade.
Rate limits
monday.com meters a complexity budget, not a request count. The client reads
the reset hint from the throttle response, whether it arrives in the
retry-after header or in the message body, and waits for that long. Other
transient failures use exponential backoff.
Retrying stops after about 45 seconds in total. A complexity window can be a full minute, and waiting three of them outlasts every MCP client, so the server reports the throttle and lets the caller decide to try again.
Board layouts stay in a cache for one minute, which keeps a run of writes off the budget.
Mode 1 — the desktop app over CDP (no API token)
The monday.com macOS desktop app is an Electron shell that hosts the web app in a
<webview>. It registers no custom URL scheme (there is no monday://), but its
Electron fuses leave remote debugging open — so you can attach a CDP client and drive the
real, already‑logged‑in web app with no API token. This was verified end‑to‑end:
launching with a debug port exposes a webview target already signed in, and a
zero‑dependency Node client can navigate it and read the item‑card DOM.
scripts/cdp-desktop.mjs is that client (uses Node's native WebSocket; Node ≥ 22, no
npm install). Claude‑in‑Chrome cannot attach here — it pairs with the Chrome
extension only — which is why a small CDP client is used instead.
# 1. Quit any running instance (single-instance lock ignores the flag otherwise)
osascript -e 'quit app "monday.com"'
# 2. Launch with the debug port (launch the binary directly; `open -a --args` is unreliable)
/Applications/monday.com.app/Contents/MacOS/monday.com --remote-debugging-port=9222 &
# 3. Drive it — no token, rides your session
node scripts/cdp-desktop.mjs targets # list debug targets
node scripts/cdp-desktop.mjs open <slug> <board_id> <item_id> # jump straight to an item card
node scripts/cdp-desktop.mjs nav '<url>' # any deep link
node scripts/cdp-desktop.mjs eval '<js>' # read/drive the DOM
node scripts/cdp-desktop.mjs shot out.png # screenshot the webview⚠️ Security — read before using.
--remote-debugging-portopens an unauthenticated port onlocalhost. While it is open, any local process can read and drive your logged‑in monday.com session — no password required. "Any local process" is broad: a browser extension with a native messaging host, background dev tooling, or a maliciousnpmpostinstall script all qualify, and none of them need your credentials to act as you in monday.com. Only run it when you want this, and quit the app when done (osascript -e 'quit app "monday.com"') to close the port. Launching also restarts the app, losing any unsaved in‑app state.
Notes learned while building this: a cold Page.navigate to /boards/<id>/pulses/<item_id>
does open the item card (deep links only appear to "hang" under drivers that wait for
document‑idle; poll for an element instead); Page.navigate destroys the JS execution
context, so re‑evaluate after navigating. The board grid is a <canvas> (see Mode 2), so
individual cells aren't DOM‑selectable — reach a cell through the item card or the API.
Four more, all found by driving a real board and all now handled in src/desktop.ts:
Widen the viewport before you touch the card. The item card is a right‑anchored panel that extends past the window: its submit control measured x=1813 in a 1360px viewport, so a pointer event at its coordinates hits nothing and
elementFromPointreturnsnull.Emulation.setDeviceMetricsOverrideto ~2400×1400 before navigating pulls it into reach. Clear the override afterwards.The update composer is NOT inside
[role="dialog"]— it renders in its own micro‑frontend subtree (new-post-update-MfExternalComponent). Scoping selectors to the dialog finds nothing.document.execCommand("insertText")does not drive the editor's model. Use CDPInput.insertTextso the rich‑text editor actually registers the content; otherwise the text appears in the DOM and the Update control stays inert.The submit control is a
DIV,[data-testid="post-editor-update-button"], so aquerySelectorAll("button")sweep never sees it.
And two traps when verifying a post: take the baseline post count only after the thread settles (counting straight after navigation reads 0, and the existing posts arriving late then look like success), and confirm by content, not count. Unsent text also accumulates in the composer and survives an app relaunch — clear it first.
Mode 2 — the web app in a browser
For UI‑only actions, screenshots, or working with no token. Two sub‑modes share the URL builder above.
Local Chrome (rides your existing login). Drive the DOM with a browser‑automation
tool. Two gotchas, both verified live and documented in
docs/interface-map.md:
The board grid is a
<canvas>. Item names, cell values, and status pills are painted, not DOM — you cannot select a cell by selector on the current renderer. Reach a cell by opening the item card (real DOM), by coordinate click, or via the API. There is also a legacy DOM‑grid renderer still in the wild; detect which is active by checking whether a known item name appears indocument.body.innerText.Cold deep‑link navigation can stall under idle‑waiting drivers; navigate to the account root and click through in‑app, or use raw CDP and poll for a target element.
App chrome, dialogs, menus, and the item card use monday's open‑source Vibe design
system, which puts a stable data-vibe="…" (component type) and data-testid on every
component root. Prefer [data-vibe="Modal"], role="dialog", [data-testid="…"], and
data-group-id over hashed CSS‑module class names. Selector conventions are catalogued in
the interface map.
Remote — Cloudflare Browser Run. For headless/server contexts, connect
playwright-core / puppeteer-core over CDP to Browser Run (Chromium), persist login with
Playwright storageState, and do first login via the Human‑in‑the‑Loop Live View handoff.
Cloudflare KiteSurf is CDP‑reachable but, per Cloudflare's own docs, cannot hold an authenticated session — so it is unsuitable for a logged‑in monday.com. Use Browser Run's default Chromium instead. All Cloudflare browsers egress from datacenter IPs flagged as bot traffic, so logins may be challenged.
Security & privacy
Your token stays local. The API server talks straight to
api.monday.comover HTTPS. No relay, no telemetry. The token is redacted before anything leaves the process, and never appears in a tool result or error.Never commit a token.
.env,*.token, and friends are gitignored; only.env.example(a placeholder) is tracked.Read‑only and board‑allowlist modes cap what the API server can touch (see Safety).
The desktop CDP debug port is unauthenticated — see the boxed warning in Mode 1. Treat it as a temporary, cons⁠ent‑gated handle and close it when done.
Same‑origin authenticated
fetchfrom a browser mode is intentionally out of scope — use the API for data.
How this was mapped
The three‑mode design and every URL/DOM/API detail come from first‑hand investigation, not
guesswork, and each claim in docs/interface-map.md is tagged with
how it was verified: live in a logged‑in browser, by decompiling the desktop app bundle, from
official monday.com / Cloudflare docs, or from maintained third‑party integrations. The
document also lists, verbatim, everything that could not be resolved, so the boundaries of
what's known are explicit. Start there if you want to extend any mode.
Develop
npm test # tests, no network
npm run typecheck # source and tests
npm run build
npm run dev # rebuild on saveThe tests run the real MCP server against a fake monday.com API over an
in-memory transport. They assert the exact JSON that goes over the wire.
test/regressions.test.ts holds one test per defect found so far, named
after the behaviour that was wrong.
Two CDP clients exist, on purpose. scripts/cdp-desktop.mjs is the standalone
CLI documented in Mode 1.
src/desktop.ts is its in-package twin, used by monday_open and
monday_ui_action. The logic is duplicated because scripts/ is not in
package.json files, so a published install cannot reach it. Change one and you
almost certainly need to change the other.
Contributing
See CONTRIBUTING.md. To report a security problem, see SECURITY.md.
Licence
MIT. See LICENSE.
Available Tools
15 toolsmonday_create_itemCreate an itemA
Creates one item on a board. Give values keyed by column id or column title, with plain values such as "Done" for a status or "2026-08-14" for a date. This server converts them to the JSON that monday.com stores. Call monday_get_board first to see the columns.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The item name. | |
| group | No | Group id or group title. The default is the top group. | |
| values | No | Column values, for example {"Status": "Working on it", "Owner": [12345678]}. | |
| board_id | Yes | The numeric board id. | |
| create_labels_if_missing | No | True adds a status or dropdown label that does not exist yet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by explaining that 'This server converts them to the JSON that monday.com stores,' disclosing a non-obvious server-side transformation. Annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false) are sparse and not contradicted. However, it does not detail error behavior, return values, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences that front-load the purpose, then explain value formatting, and end with a prerequisite. Every sentence adds information and no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with 5 parameters and a nested `values` object, the description covers the core usage and prerequisite. It does not mention return value or error handling, but no output schema exists, so those details are less critical. The description is solid and sufficiently complete for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds crucial meaning for the `values` parameter: keys can be column id or title, values should be plain (e.g., 'Done', '2026-08-14'), and the server converts them. This is more specific than the schema's example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Creates one item on a board.' This clearly distinguishes it from update/delete/subitem tools, though it does not explicitly name an alternative. The wording is unambiguous and informative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear prerequisite: 'Call monday_get_board first to see the columns.' This gives the agent a concrete step for using the tool correctly. It implies the tool is for adding new items to a board, but does not explicitly mention when not to use it or alternatives like monday_create_subitem.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_create_subitemCreate a subitemA
Creates a subitem under a parent item. Column values apply in a second step, because a subitem lives on its own hidden board.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The subitem name. | |
| values | No | Column values keyed by subitem column id or title. | |
| parent_item_id | Yes | The numeric id of the parent item. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=false and destructiveHint=false, covering the mutation safety profile. The description adds valuable behavior: 'Column values apply in a second step, because a subitem lives on its own hidden board.' This explains a non-obvious trait that column values are not set immediately, going beyond the annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core action and followed by a concise behavioral note. Every word earns its place, with no redundant details or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers the main purpose, the crucial caveat about column values, and the hidden-board rationale. It lacks explicit return value details, but there is no output schema, and for a create operation this is often implied. The descriptions and annotations together provide sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds meaning to the 'values' parameter by explaining why column values are not applied immediately, which helps the agent understand the parameter's optionality and timing. It does not reformat the schema but enriches the semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Creates a subitem under a parent item.' This uses a specific verb and resource, distinguishing it from the sibling 'monday_create_item' which creates top-level items. The additional note about column values applying later further clarifies its specific role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by explaining that column values are not applied immediately due to the subitem's hidden board. This clues the agent that a second step is needed, but it does not explicitly name alternatives or when to choose this over 'monday_create_item'. Clear context with no exclusions, hence a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_create_updatePost an update on an itemA
Adds an update to the item conversation. The body accepts simple HTML, such as and . Everyone who follows the item gets a notification.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The update text. Simple HTML is allowed. | |
| item_id | Yes | The numeric item id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses non-obvious behaviors: the body accepts simple HTML and followers receive notifications. Annotations already convey the write/non-idempotent/non-destructive nature, so the description adds useful side-effect context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: one for the action, one for the input format and side effect. No wasted words, front-loaded with the primary verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple write tool with comprehensive annotations and full schema coverage, the description is reasonably complete. It covers purpose, input constraints, and a key side effect. Lacks prerequisites or return value, but those are not essential given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions for body (including HTML allowance) and item_id. The description does not add substantial meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds an update to the item conversation, using the specific verb 'adds' and identifying the resource. It distinguishes from siblings like monday_list_updates (read) and monday_update_item (modify item fields).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you want to post a new update to an item's conversation, but it does not explicitly contrast with alternatives or state when not to use it. The notification detail provides context but not explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_delete_itemArchive or delete an itemADestructive
Archives an item by default, which a person can undo in the monday.com interface. Mode "delete" removes the item for good and needs confirm true.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Default archive. Use delete only when the user asks for it. | |
| confirm | No | Must be true for mode delete. | |
| item_id | Yes | The numeric item id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that archiving is undoable in the monday.com UI while delete removes the item permanently and requires confirm=true. This adds important safety and reversibility context beyond the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the default behavior, with no fluff or redundancy. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema, it fully communicates default behavior, undoability, permanent deletion, and the confirm requirement. The schema and annotations cover the remaining parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description enhances mode semantics by explaining the real-world effect of archive vs delete and the confirmation requirement, adding meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States it archives an item by default and can permanently delete the item with mode=delete. Clearly distinguishes from sibling tools by being the removal/archival operation rather than update or move.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says archive is the default and delete should only be used when the user asks, with confirm=true. Does not name alternative tools, but the mode-level guidance is clear and sufficient for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_get_boardGet a board layoutARead-only
Returns the groups and the columns of one board, with the labels each status and dropdown column accepts. Call this before you create or change an item, because a column value must match its column type.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | True skips the one minute cache and reads the board again. | |
| board_id | Yes | The numeric board id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is known. The description adds meaningful context by disclosing what the response contains (groups, columns, label values) and the rationale for calling it before mutations. This goes beyond just restating the annotation hints, though it doesn't mention caching behavior (which is in the schema description) or other edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the function and output, the second provides usage guidance. Every word contributes value, and it is front-loaded with the essential purpose. There is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool with well-documented parameters and annotations, the description is complete. It explains what data is returned (groups, columns, labels), the scope (one board), and when to invoke it. Since there is no output schema, the description sufficiently covers the return content without needing to enumerate every field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both parameters ('refresh' and 'board_id') fully documented. The tool description itself does not add any additional meaning about the parameters, so it relies on the schema. The baseline of 3 is appropriate since the schema does the heavy lifting and the description adds no extra parameter context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'the groups and the columns of one board' with the labels for status and dropdown columns, which is a specific verb+resource. It distinguishes itself from sibling tools like monday_list_boards (which lists boards) and monday_get_items (which gets items), and emphasizes it operates on a single board.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Call this before you create or change an item,' and explains why ('a column value must match its column type'). This gives clear context, but it does not mention when not to use it or identify alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_get_itemsGet full item detailARead-only
Returns every column of one or more items, with the column id, the readable text and the stored JSON. Use it before you change an item.
| Name | Required | Description | Default |
|---|---|---|---|
| item_ids | Yes | Numeric item ids. Up to 100 at a time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true. The description adds useful behavioral context by specifying what data is returned (every column, with id, readable text, and stored JSON). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first states the function and output format, the second provides usage context. No wasteful or redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with a single, well-documented parameter and no output schema, the description provides a complete picture: what it returns, when to use it, and safe operation via annotations. The return format is specified, so the agent can interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the parameter 'item_ids' with 'Numeric item ids. Up to 100 at a time.' (100% coverage). The description adds no further parameter semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns every column of one or more items, with specific output details (column id, readable text, stored JSON). This distinguishes it from sibling tools like monday_list_items, which likely provides a lighter list view.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'Use it before you change an item.' This establishes when to invoke the tool but does not explicitly name alternative tools or exclusions, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_get_meWho am I on monday.comARead-only
Returns the user behind the API token and the account it belongs to. Call this first to prove the connection works and to learn the account slug.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only and open-world behavior. The description adds value by explaining that the tool proves connectivity, maps the token to a user, and reveals the account slug, which are non-obvious behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states what the tool returns, the second gives actionable usage guidance. There is zero redundancy and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description conveys the return focus and intended first-use scenario. It could mention specific returned fields or response format, but the existing detail is sufficient for a simple identity/connectivity check.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is effectively complete, so the description adds no parameter details. This matches the baseline for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the user behind the API token and its account, which precisely identifies the tool's purpose. It is distinct from sibling tools that list workspaces, boards, or items, focusing instead on token identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises calling this first to verify the connection and learn the account slug, providing clear usage context. It does not mention alternatives or when not to use it, but the guidance is concrete and situationally specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_graphqlRun a raw monday.com GraphQL documentADestructive
Sends a GraphQL query or mutation straight to the monday.com API. Use it only for something the other tools do not cover, such as boards, docs or webhooks. The other tools handle column value translation for you, so prefer them for item work.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The GraphQL document. | |
| variables | No | Variables for the document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds context beyond annotations by explaining this is a raw GraphQL interface with no column value translation, and that mutations are possible. It does not detail error behavior or rate limits, but the annotation coverage lowers the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loaded with the core purpose, then immediately followed by usage boundaries. Every sentence earns its place with zero redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a raw GraphQL tool with no output schema, the description covers the essential context: purpose, when to use, and why to prefer other tools for item work. It does not explain return format or error handling, but GraphQL responses are self-descriptive and the open-ended nature is noted by annotations (openWorldHint=true).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (query and variables both have descriptions), so the baseline is 3. The description does not add extra semantic detail about the parameters themselves, but the context about column value translation hints at why variables may differ from other tools. No significant added value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Sends a GraphQL query or mutation straight to the monday.com API', which is a specific verb+resource. It also distinguishes itself from siblings by explicitly noting it is for 'something the other tools do not cover', situating its purpose relative to the other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('Use it only for something the other tools do not cover, such as boards, docs or webhooks') and when-not-to-use guidance ('prefer them for item work' because other tools handle column value translation). This is a model of usage clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_list_boardsList monday.com boardsARead-only
Lists boards, newest use first. Use name to search by a part of the board name. The result carries board ids, which every other tool needs.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Keep only boards whose name holds this text, ignoring letter case. This filters the fetched page only, so advance `page` if nothing matches. | |
| page | No | 1 based page number. Default 1. | |
| limit | No | Default 50. | |
| workspace_id | No | Keep only boards in this workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety context is covered. The description adds behavioral details: 'newest use first' ordering and that search filters on name (per schema), plus the importance of returned board IDs. It does not describe the return format fully, but with no output schema, the ID mention provides useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no redundant words. Every sentence adds distinct information: listing behavior, name search, and the ID prerequisite.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a straightforward list operation with full schema coverage and safe read annotations. The description communicates the core purpose and the key return value (board IDs). It could be slightly more explicit about the full return structure, but the combination of schema and description is adequate for an agent to select and invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description does not need to duplicate parameter details. It does mention using `name` for searching, but that merely restates the schema's description. No additional semantic value is added for page, limit, or workspace_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Lists' with the resource 'boards', and adds distinctive traits: 'newest use first', name search capability, and that results carry board IDs needed by other tools. This clearly differentiates it from sibling tools like monday_get_board or monday_list_workspaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage as a prerequisite: 'The result carries board ids, which every other tool needs.' This tells the agent to use this tool first to discover board IDs before calling other monday.com tools. However, it does not explicitly name alternatives or exclusions, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_list_itemsList or search items on a boardARead-only
Returns a page of items from one board, with each column value as readable text. Filter with filters, and follow cursor for the next page. Call monday_get_board first to learn the column ids and labels.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Group id or group title to read. | |
| limit | No | Default 25. | |
| cursor | No | The cursor from an earlier call. It carries the earlier filters, so send board_id and cursor only. | |
| search | No | Keep only items whose name holds this text. | |
| filters | No | Column rules. All rules must match. | |
| board_id | Yes | The numeric board id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds that results are paginated via cursor, filters are applied, and column values are rendered as readable text. This gives useful behavioral context beyond the schema, though it doesn't discuss rate limits or detailed response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core behavior and then adding the prerequisite and pagination note. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated listing tool, the description captures the essential flow: board scoping, readable column values, filtering, and cursoring. The lack of an output schema is mitigated by the 'readable text' mention, and the prerequisite to get board metadata is included. It could be more explicit about alternative tools, but overall it's sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds minimal extra value by mentioning filters and cursor for pagination, but it doesn't explain group, limit, or search beyond their schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a page of items from a single board with column values as readable text, using a specific verb and resource scope. It also distinguishes from broader listing tools by emphasizing 'from one board' and the readable-text transformation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises calling monday_get_board first to learn column ids and labels, which is a clear prerequisite. However, it does not explicitly name alternative tools like monday_get_items or state when to avoid this tool, so differentiation is left mostly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_list_updatesRead the conversation on an itemARead-only
Returns the updates, which monday.com calls the item conversation, newest first, with their replies.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 25. | |
| item_id | Yes | The numeric item id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is known. The description adds useful details: ordering (newest first) and inclusion of replies. It does not describe pagination, return format, or error behavior, but with annotations covering the read-only nature, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence. It starts with 'Returns the updates' and immediately conveys the primary action and resource. No wasted words; every phrase adds value (e.g., 'newest first, with their replies' is useful behavioral detail).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with two well-documented parameters and read-only annotations, the description is adequate. It explains what is returned (updates, replies, ordering) and the title clarifies the use case. It lacks pagination details, but the schema covers the limit parameter. Given the low complexity, this is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both limit and item_id have descriptions). The description adds no parameter-specific information beyond what the schema provides. Since the schema already documents defaults and types, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns updates, which are the item conversation, newest first, with replies. This is a specific verb+resource ('returns updates') and clarifies the scope (item conversation). However, it does not explicitly distinguish itself from sibling tools like monday_create_update, though the name and context imply the read nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use this to read the conversation on an item. The title 'Read the conversation on an item' reinforces this. It does not mention exclusions or name alternatives, but the existence of monday_create_update for writing implies the read use case. This is clear context without explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_list_usersList monday.com usersARead-only
Lists people in the account. Use it to turn a name into the numeric user id that a people column needs.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Which class of user to return. The default is all. | |
| name | No | Filter by a part of the name or the email, ignoring letter case. | |
| page | No | 1 based page number. Default 1. | |
| limit | No | Default 100. | |
| all_pages | No | True walks every page until the name matches or the list ends. Use it when searching a large account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering the safety profile. The description adds use-case context but does not disclose additional behavioral traits such as pagination limits, default filtering behavior, or how 'all_pages' affects results. It provides some value beyond annotations but lacks rich behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the main action, no redundant phrasing. The use case sentence is concise and valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a straightforward list operation with all parameter details fully in the schema. The description's use-case hint (mapping names to IDs) helps the agent understand the return value's purpose. No output schema exists, but for a simple list tool the description is adequate. It could mention pagination behavior, but the schema's 'all_pages' parameter covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all five parameters, including defaults and meanings. The description adds no additional parameter-level semantics, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Lists' with a clear resource 'people in the account', and adds a concrete use case (turning a name into a numeric user ID for people columns). It clearly distinguishes from sibling tools that operate on workspaces, boards, items, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a specific scenario ('Use it to turn a name into the numeric user id that a people column needs'), giving clear context for when to use this tool. It does not explicitly state when not to use it or name alternatives, but sibling tools are all for different resources, so ambiguity is low. Slight deduction for lacking explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_list_workspacesList monday.com workspacesARead-only
Lists the workspaces in the account. Use a workspace id to narrow monday_list_boards.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds minimal context beyond listing workspaces and the linkage to list_boards, but does not mention pagination, ordering, or other behavioral details. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each earning its place: first states the core purpose, second gives a practical usage hint. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool, the readOnlyHint annotation, and the 100% schema coverage, the description covers the essentials. It explains the output's purpose (workspace ids) through the usage hint. Minor absence: does not explicitly mention that the account context is the default scope, but this is implied by 'in the account.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single 'limit' parameter with description 'Default 50.' The tool description does not add any additional meaning about this parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists workspaces in the account, using a specific verb and resource. It also distinguishes itself from sibling tools by noting how the resulting workspace id can be used to narrow monday_list_boards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear usage hint: use a workspace id to narrow monday_list_boards. This implies when the tool is useful, though it does not explicitly mention when not to use it or alternatives beyond the sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_move_itemMove an item to a groupAIdempotent
Moves one item into another group on the same board.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | The target group id or group title. | |
| item_id | Yes | The numeric item id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the constraint 'on the same board', which is useful, but it does not disclose any additional behavioral traits such as side effects or restrictions. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly states the action and scope. It avoids unnecessary detail and is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple operation, the presence of annotations, and full schema coverage, the description is largely complete. It does not explain the return value, but no output schema exists and the tool's behavior is straightforward. Minor omissions like what happens on failure or whether the group param accepts id vs title are already covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for both parameters (item_id and group). The tool description adds no additional parameter-level meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Moves') and resource ('one item into another group on the same board'), clearly distinguishing it from sibling tools like create_item, update_item, and delete_item. The scope is explicit and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states what the tool does, giving the context for when to use it (moving an item to a group on the same board). It does not explicitly mention alternatives or when not to use it, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monday_update_itemChange item columnsADestructiveIdempotent
Changes the columns of one item, and the item name when name is given. Values use the same plain form as monday_create_item.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | A new item name. | |
| values | No | Column values keyed by column id or column title. | |
| item_id | Yes | The numeric item id. | |
| board_id | No | The board id. The server finds it when you leave this out, and checks it when you supply it. | |
| create_labels_if_missing | No | True adds a status or dropdown label that does not exist yet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=false, idempotent=true, and destructive=true. The description adds context by noting that values use the same plain form as monday_create_item, and that the item name is only changed when 'name' is given. However, it does not disclose specifics about side effects, overwriting behavior, or handling of missing items, going beyond the annotation summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The first sentence front-loads the primary purpose, and the second concisely adds the format detail. Every word earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters and a nested object, the description, schema, and annotations collectively provide sufficient context for usage. The description covers the main behavior, the schema defines all parameters, and annotations indicate safety profile. The reference to monday_create_item for value format adds completeness. Minor gap: no explicit mention of behavior when item_id doesn't exist, but this is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 5 parameters (100% coverage). The description adds value by explaining that the 'values' parameter uses the same plain form as monday_create_item, which helps users understand the expected structure. It also clarifies the conditional nature of the 'name' parameter. This enriches the basic schema explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool changes the columns of a single item and optionally the item name. The verb 'changes' is specific, and the resource (item columns) is well-defined. It distinguishes itself from sibling tools like create, delete, and move by focusing on modification of existing item columns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: this tool is for updating an existing item, as opposed to creating or deleting. It does not explicitly state when to use it versus alternatives, nor does it provide exclusions or conditions. The reference to monday_create_item for value format hints at relatedness but does not offer selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
v0.1.0- First observed
monday_create_item - First observed
monday_create_subitem - First observed
monday_create_update - First observed
monday_delete_item - First observed
monday_get_board - First observed
monday_get_items - First observed
monday_get_me - First observed
monday_graphql - First observed
monday_list_boards - First observed
monday_list_items - First observed
monday_list_updates - First observed
monday_list_users - First observed
monday_list_workspaces - First observed
monday_move_item - First observed
monday_update_item
TDQS
Scored across 15 tools
Each tool targets a distinct resource and action. The only potential overlap is between monday_list_items and monday_get_items, but their descriptions clearly differentiate paginated readable output from full column-level detail.
All tools follow the consistent pattern monday_<verb>_<noun>, using snake_case throughout. The verbs clearly indicate the action (list, get, create, update, move, delete), making the set predictable and easy to navigate.
15 tools is within the well-scoped range (3-15) and each tool addresses a meaningful part of the Monday.com workflow, from workspace discovery to item creation, updates, subitems, and conversations. No redundant tools are present.
The tool set covers the core lifecycle for boards, items, subitems, and updates, including metadata lookups and user management. Missing direct board creation/deletion, but the monday_graphql fallback fills rare gaps, so agents have a complete path for typical item-centric workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Monday.com MCP — wraps the Monday.com GraphQL API (BYO API key)
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
A Model Context Protocol server for Wix AI tools
Hosted MCP server for AI-driven data ops. Create apps, manage schemas, and CRUD structured data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides tools for interacting with Trello boards, enabling seamless management of cards, lists, and activities while handling rate limiting and type safety.35MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables creating, modifying, and validating infinite canvas data structures according to the JSON Canvas 1.0 specification.714MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides tools for connecting to and interacting with various database systems (SQLite, PostgreSQL, MySQL/MariaDB, SQL Server) through a unified interface.3-
- FlicenseNot gradedqualityCmaintenanceLocal MCP server enabling natural-language monday.com task management via the official Platform MCP package, wired into IBM Bob with personal API token authentication.-