Skip to main content
Glama

Monday.com MCP Server

A Model Context Protocol (MCP) server that provides tools to interact with the Monday.com API. This server enables AI assistants to retrieve board lists, board details, item content, and user information from your Monday.com workspace.

What is MCP?

The Model Context Protocol (MCP) is an open protocol that enables AI applications to connect to external data sources and tools. MCP servers expose tools, resources, and prompts that can be used by AI assistants like Claude to perform actions and access information.

Related MCP server: Monday.com MCP Server

Features

  • Board Management: Retrieve paginated lists of boards from your Monday.com workspace

  • Board Details: Get detailed information about specific boards with filtered items

  • Item Content: Fetch detailed content for specific board items including parsed descriptions

  • User Information: Retrieve information about the currently authenticated user

  • Stdio Transport: Uses standard input/output for communication (perfect for local development)

  • TypeScript: Written in TypeScript for type safety and better developer experience

  • Zod Validation: Uses Zod for schema validation of tool inputs and outputs

  • Error Handling: Comprehensive error handling with user-friendly messages

Prerequisites

  • Node.js (v18 or higher recommended)

  • npm or yarn

  • Monday.com account with API access

  • Monday.com API token

Installation

  1. Clone or download this repository

  2. Install dependencies:

npm install
  1. Set up your Monday.com API token as an environment variable:

export MONDAY_API_TOKEN="your_api_token_here"

Or create a .env file in the project root:

MONDAY_API_TOKEN=your_api_token_here

Getting Your Monday.com API Token

  1. Log in to your Monday.com account

  2. Click on your avatar in the bottom left corner

  3. Navigate to AdministrationAPI

  4. Generate a new API token or copy an existing one

  5. Copy the token and save it securely

Building

Compile TypeScript to JavaScript:

npm run build

This will create the compiled JavaScript files in the dist/ directory.

Running the Server

Production Mode

After building, run the compiled server:

npm start

Development Mode

Run the server directly with TypeScript (no build step required):

npm run dev

The server will start and listen for MCP requests via stdio (standard input/output).

Available Tools

The server exposes four tools to interact with Monday.com:

1. monday_get_board_list

Retrieve a paginated list of boards from your Monday.com workspace.

Parameters:

  • limit (number, optional): Maximum number of boards to return (default: 10)

  • page (number, optional): Page number for pagination (default: 1)

Returns:

  • Array of board objects with ID, name, description, item terminology, state, and views

Example Usage:

// Get first 10 boards
{ limit: 10, page: 1 }

// Get 25 boards from page 2
{ limit: 25, page: 2 }

2. monday_get_board_details

Retrieve detailed information about a specific board with filtered items (assigned to me and ready to start).

Parameters:

  • boardId (string, required): The ID of the board to retrieve details for

Returns:

  • Board object with filtered items that match the criteria

Example Usage:

{ boardId: "1234567890" }

3. monday_get_board_item_list

Retrieve detailed content for a specific board item including parsed description text.

Parameters:

  • itemId (string, required): The ID of the item to retrieve content for

Returns:

  • Item object with id, name, and clean description text (images filtered out)

Example Usage:

{ itemId: "9876543210" }

4. monday_get_me

Retrieve information about the currently authenticated Monday.com user.

Parameters:

  • None

Returns:

  • User object with profile details (id, name, email, etc.)

Example Usage:

// No parameters needed
{}

Project Structure

mat-monday-mcp-server/
├── src/
│   ├── index.ts                      # Main server implementation
│   ├── types.ts                      # Type definitions
│   ├── config/
│   │   └── client.ts                 # Monday.com API client configuration
│   ├── services/
│   │   ├── boards.ts                 # Board-related API operations
│   │   ├── items.ts                  # Item-related API operations
│   │   ├── monday.ts                 # Core Monday.com service
│   │   └── users.ts                  # User-related API operations
│   ├── tools/
│   │   ├── index.ts                  # Tool registry
│   │   ├── get-board-list.ts         # Board list tool
│   │   ├── get-board-details.ts      # Board details tool
│   │   ├── get-board-item-content.ts # Item content tool
│   │   └── get-me.ts                 # Current user tool
│   └── utils/
│       └── content-parser.ts         # Content parsing utilities
├── dist/                             # Compiled JavaScript (generated)
├── package.json                      # Project dependencies and scripts
├── tsconfig.json                     # TypeScript configuration
├── tsup.config.ts                    # Build configuration
└── README.md                         # This file

How It Works

Architecture

  1. Server Creation: The server is created using McpServer from @modelcontextprotocol/sdk

  2. Tool Registration: All tools are registered via the central registerTools function

  3. Service Layer: Business logic is separated into service modules (boards, items, users)

  4. Monday.com Client: API interactions use the official @mondaydotcomorg/api SDK

  5. Transport Setup: The server connects via StdioServerTransport for stdio communication

  6. Request Handling: When a client calls a tool, it executes the corresponding service function

Services

Board Service (services/boards.ts)

  • getBoardListPaginated(limit, page): Fetches a paginated list of boards

  • getBoardDetailsPaginated(boardId): Fetches board details with filtered items

Item Service (services/items.ts)

  • getBoardItemContent(itemId): Fetches item content with parsed description

User Service (services/users.ts)

  • getMe(): Fetches current authenticated user information

Content Parsing

The server includes utilities to parse Monday.com's description format:

  • Extracts clean text from Quill-like deltaFormat structures

  • Filters out image blocks

  • Provides readable text content

Using with MCP Clients

To use this server with an MCP client (like Claude Desktop or Cursor), you'll need to configure it in your MCP client settings. The server communicates via stdio, so the client needs to spawn the server process.

Example Client Configuration

For Claude Desktop, add to your ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "monday": {
      "command": "node",
      "args": ["/path/to/mat-monday-mcp-server/dist/index.js"],
      "env": {
        "MONDAY_API_TOKEN": "your_api_token_here"
      }
    }
  }
}

For Cursor, add to your ~/.cursor/mcp.json:

{
  "mcpServers": {
    "monday": {
      "command": "node",
      "args": ["/path/to/mat-monday-mcp-server/dist/index.js"],
      "env": {
        "MONDAY_API_TOKEN": "your_api_token_here"
      }
    }
  }
}

Development

Scripts

  • npm run build - Compile TypeScript to JavaScript using tsup

  • npm start - Run the compiled server

  • npm run dev - Run the server directly with TypeScript (development mode)

Dependencies

  • @modelcontextprotocol/sdk - Official MCP SDK for TypeScript/Node.js

  • @mondaydotcomorg/api - Official Monday.com API SDK

  • zod - Schema validation library

  • typescript - TypeScript compiler

  • tsup - TypeScript bundler for building

Adding New Tools

To add a new tool:

  1. Create a new file in src/tools/ (e.g., my-new-tool.ts)

  2. Define a ToolDefinition with name, config, and handler

  3. Import it in src/tools/index.ts

  4. Add it to the tools array in the registerTools function

Example:

// src/tools/my-new-tool.ts
import { z } from 'zod'
import type { ToolDefinition } from '../index'

export const myNewTool: ToolDefinition = {
  name: 'monday_my_new_tool',
  config: {
    title: 'My New Tool',
    description: 'Description of what this tool does',
    inputSchema: {
      param: z.string().describe('Description of parameter')
    },
    outputSchema: {
      result: z.any().describe('Result description')
    }
  },
  handler: async (inputs: any) => {
    try {
      // Tool logic here
      return {
        content: [{ type: 'text', text: 'Success message' }],
        structuredContent: { result: {} }
      }
    } catch (error) {
      const errorMessage = error instanceof Error ? error.message : 'Unknown error'
      return {
        content: [{ type: 'text', text: `Error: ${errorMessage}` }],
        structuredContent: {
          result: { error: true, type: 'ErrorType', message: errorMessage }
        }
      }
    }
  }
}

Error Handling

All tools include comprehensive error handling:

  • Errors are caught and returned in both human-readable format (content) and structured format (structuredContent)

  • Error responses include error type and message

  • Network errors, authentication issues, and API errors are handled gracefully

Learning Resources

License

ISC

Available Tools

4 tools
monday_get_board_detailsGet Monday.com Board DetailsC

Retrieve detailed information about a specific board including filtered items (assigned to me and ready to start). Returns board information with items that match the specified criteria.

ParametersJSON Schema
NameRequiredDescriptionDefault
boardIdYesThe ID of the board to retrieve details for (required)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoBoard details object with filtered items or error object

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that the tool returns 'board information with items that match the specified criteria,' which hints at filtering behavior, but it lacks details on permissions required, rate limits, error handling, or what 'assigned to me' means in context (e.g., user authentication). For a tool with no annotations, this is insufficient to fully understand its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, consisting of two sentences that efficiently convey the tool's purpose and output. The first sentence states the action and scope, while the second clarifies the return value. There's no wasted verbiage, making it easy to parse, though it could be slightly more structured (e.g., by explicitly separating purpose from behavior).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the context: 1 parameter with full schema coverage, no annotations, and an output schema exists, the description is moderately complete. It covers the basic purpose and filtering aspect, but since no annotations are present, it should ideally include more behavioral details (e.g., authentication needs, what 'assigned to me' entails). The output schema likely handles return values, so that gap is mitigated. Overall, it's adequate but has clear room for improvement in behavioral transparency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the single parameter 'boardId' well-documented as 'The ID of the board to retrieve details for (required).' The description doesn't add any parameter-specific information beyond what the schema provides, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Retrieve detailed information about a specific board including filtered items (assigned to me and ready to start).' It specifies the verb ('retrieve'), resource ('board details'), and scope ('filtered items'), which distinguishes it from generic board retrieval. However, it doesn't explicitly differentiate from sibling tools like 'monday_get_board_item_list' or 'monday_get_board_list' beyond mentioning filtered items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal usage guidance. It implies usage when needing board details with specific filtered items ('assigned to me and ready to start'), but it doesn't state when to use this tool versus alternatives like 'monday_get_board_list' for a list of boards or 'monday_get_board_item_list' for items without board details. No explicit when-not or alternative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

monday_get_board_item_listGet Monday.com Board Item ContentB

Retrieve detailed content for a specific board item including its ID, name, and parsed description text.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemIdYesThe ID of the item to retrieve content for (required)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoItem content object with id, name, and description or error object

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves content but doesn't cover important aspects like authentication requirements, rate limits, error handling, or whether it's a read-only operation. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the key action and details. It avoids redundancy and wastes no words, making it easy to parse quickly while conveying essential information about what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (which likely describes the returned content), the description doesn't need to detail return values. However, with no annotations and a simple but critical operation (retrieving item content), the description could benefit from more behavioral context, such as permissions or error cases, to be fully complete for safe use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds minimal meaning beyond the input schema. It implies the itemId parameter is used to fetch content, but the schema already has 100% coverage with a clear description. Since there's only one parameter, the baseline is high, but the description doesn't provide additional context like format examples or constraints beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Retrieve detailed content for a specific board item including its ID, name, and parsed description text.' It specifies the verb ('retrieve'), resource ('board item'), and scope ('detailed content'), but doesn't explicitly differentiate from sibling tools like monday_get_board_details or monday_get_board_list, which likely retrieve different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools or contexts where this tool is preferred, such as retrieving item-level details versus board-level information. Without this, users must infer usage from the tool name and description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

monday_get_board_listGet Monday.com Board ListC

Retrieve a paginated list of boards from your Monday.com workspace. Returns board information including ID, name, description, item terminology, state, and views.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of boards to return (default: 10)
pageNoPage number for pagination (default: 1)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoArray of board objects or error object

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It mentions pagination and return fields, but lacks critical behavioral details like authentication requirements, rate limits, error handling, or whether this is a read-only operation (implied but not stated). For a tool with zero annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that efficiently conveys the core purpose and return data. It's appropriately sized for this simple list operation, though it could be slightly more front-loaded by mentioning pagination earlier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 simple parameters), 100% schema coverage, and presence of an output schema, the description is minimally adequate. However, with no annotations and no guidance on usage versus siblings, it leaves gaps that could hinder optimal tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both parameters (limit and page). The description adds no additional parameter semantics beyond what's in the schema, meeting the baseline of 3 when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieve') and resource ('paginated list of boards from your Monday.com workspace'), and specifies what information is returned. However, it doesn't explicitly differentiate from sibling tools like 'monday_get_board_details' or 'monday_get_board_item_list', which would require a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'monday_get_board_details' (for specific board info) or 'monday_get_board_item_list' (for items within boards). It also doesn't mention prerequisites or context for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

monday_get_meGet Monday.com Current UserB

Retrieve information about the currently authenticated Monday.com user including profile details.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultNoCurrent user object with profile details or error object

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states this is a retrieval operation, implying read-only behavior, but doesn't disclose authentication requirements, rate limits, error conditions, or what specific profile details are included. For a tool with zero annotation coverage, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose ('Retrieve information about the currently authenticated Monday.com user') and adds useful detail ('including profile details'). Every word earns its place with zero redundancy or waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (which handles return values), no parameters, and no annotations, the description is minimally adequate. It states what the tool does but lacks behavioral context like authentication needs or rate limits. For a simple read operation, it meets basic requirements but could be more informative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing on the tool's purpose instead. Baseline for 0 parameters is 4, as the description doesn't need to compensate for any schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Retrieve') and resource ('currently authenticated Monday.com user'), specifying what information is obtained ('profile details'). It distinguishes from sibling tools that focus on boards/items rather than user data. However, it doesn't explicitly contrast with potential alternatives like user lookup by ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context ('currently authenticated') suggesting this tool is for accessing the logged-in user's own data. No explicit guidance on when to use this versus alternatives is provided, and there's no mention of prerequisites or exclusions. The context is clear but lacks sibling differentiation.

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.

  1. 4 tool updatesv0.0.1
    • First observedmonday_get_board_details
    • First observedmonday_get_board_item_list
    • First observedmonday_get_board_list
    • First observedmonday_get_me

TDQS

B3.1/5.0

Scored across 4 tools

Disambiguation4/5

The tools have distinct purposes targeting different resources: board lists, board details, board items, and user info. However, monday_get_board_details and monday_get_board_item_list could be slightly confused as both retrieve item-level details, though the former focuses on filtered items within a board and the latter on a specific item's content.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with the prefix 'monday_get_' followed by a descriptive noun phrase, making them predictable and easy to understand across the set.

Tool Count3/5

With only 4 tools, the set feels thin for a full Monday.com integration, lacking essential operations like create, update, or delete for boards or items, which limits agent workflows in this domain.

Completeness2/5

The tool surface is severely incomplete for a Monday.com server, covering only read operations (get) and missing core CRUD functionality for boards, items, columns, and updates, which will cause significant agent failures in managing workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers