# How to integrate Monday MCP with Mastra AI

```json
{
  "title": "How to integrate Monday MCP with Mastra AI",
  "toolkit": "Monday",
  "toolkit_slug": "monday",
  "framework": "Mastra AI",
  "framework_slug": "mastra-ai",
  "url": "https://composio.dev/toolkits/monday/framework/mastra-ai",
  "markdown_url": "https://composio.dev/toolkits/monday/framework/mastra-ai.md",
  "updated_at": "2026-05-12T10:19:21.322Z"
}
```

## Introduction

This guide walks you through connecting Monday to Mastra AI using the Composio tool router. By the end, you'll have a working Monday agent that can create a new project board for q3, add users to the design review board, archive completed tasks from last week through natural language commands.
This guide will help you understand how to give your Mastra AI agent real control over a Monday account through Composio's Monday MCP server.
Before we dive in, let's take a quick look at the key ideas and tools involved.

## Also integrate Monday with

- [ChatGPT](https://composio.dev/toolkits/monday/framework/chatgpt)
- [OpenAI Agents SDK](https://composio.dev/toolkits/monday/framework/open-ai-agents-sdk)
- [Claude Agent SDK](https://composio.dev/toolkits/monday/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/monday/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/monday/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/monday/framework/codex)
- [Cursor](https://composio.dev/toolkits/monday/framework/cursor)
- [VS Code](https://composio.dev/toolkits/monday/framework/vscode)
- [OpenCode](https://composio.dev/toolkits/monday/framework/opencode)
- [OpenClaw](https://composio.dev/toolkits/monday/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/monday/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/monday/framework/cli)
- [Google ADK](https://composio.dev/toolkits/monday/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/monday/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/monday/framework/ai-sdk)
- [LlamaIndex](https://composio.dev/toolkits/monday/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/monday/framework/crew-ai)

## TL;DR

Here's what you'll learn:
- Set up your environment so Mastra, OpenAI, and Composio work together
- Create a Tool Router session in Composio that exposes Monday tools
- Connect Mastra's MCP client to the Composio generated MCP URL
- Fetch Monday tool definitions and attach them as a toolset
- Build a Mastra agent that can reason, call tools, and return structured results
- Run an interactive CLI where you can chat with your Monday agent

## What is Mastra AI?

Mastra AI is a TypeScript framework for building AI agents with tool support. It provides a clean API for creating agents that can use external services through MCP.
Key features include:
- MCP Client: Built-in support for Model Context Protocol servers
- Toolsets: Organize tools into logical groups
- Step Callbacks: Monitor and debug agent execution
- OpenAI Integration: Works with OpenAI models via @ai-sdk/openai

## What is the Monday MCP server, and what's possible with it?

The Monday MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Monday.com workspace. It provides structured and secure access to your boards, items, and workflows, so your agent can perform actions like creating items, managing boards, updating columns, and organizing groups on your behalf.
- Automated board and item management: Effortlessly create new boards, add items to existing boards, and archive or delete items as your projects evolve.
- Dynamic column and group organization: Let your agent create, update, or remove columns and groups to keep your boards tailored to your team's needs.
- Collaborative user and role administration: Add users to boards and assign roles, ensuring the right people have access and permissions for every project.
- Streamlined workflow customization: Change column values, assign statuses or dropdowns, and create groups to match your workflow requirements in real time.
- Efficient cleanup and restructuring: Archive or permanently delete boards, columns, or groups when they're no longer needed, keeping your workspace organized and clutter-free.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `MONDAY_ACCOUNT_TRIGGER_STATISTICS` | Get account trigger statistics | Tool to retrieve statistics about account-level triggers and automations. Use when you need to monitor trigger execution metrics including success rates, failure counts, and total execution numbers. |
| `MONDAY_ACTIVATE_USERS` | Activate users | Tool to activate or reactivate users in a Monday.com account. Use when you need to enable user accounts that were previously deactivated. Cannot be used to activate your own account. Requires account management permissions. |
| `MONDAY_ADD_SUBSCRIBERS_TO_OBJECT` | Add subscribers to object | Tool to add subscribers or owners to a monday.com object. Use when you need to grant users notification access or ownership permissions to a specific object. |
| `MONDAY_ADD_TEAMS_TO_BOARD` | Add teams to board | Tool to add teams to a Monday.com board with specified permission levels. Use when you need to associate teams with a board as owners or subscribers. |
| `MONDAY_ADD_USERS_TO_BOARD` | Add users to board | Adds users to a Monday.com board with a specified role. |
| `MONDAY_ADD_USERS_TO_TEAM` | Add users to team | Tool to add users to a Monday.com team. Use when updating team membership by adding user(s). |
| `MONDAY_ADD_USERS_TO_WORKSPACE` | Add users to workspace | Tool to add one or more users to a workspace. Use when inviting existing users to collaborate in a workspace. |
| `MONDAY_AGGREGATE_DATA` | Aggregate board data | Tool to aggregate data across Monday.com boards using groupings and aggregation functions like COUNT, SUM, MEAN, MIN, MAX. Use when you need to compute metrics, counts, or summaries from board data with optional filtering and grouping. |
| `MONDAY_APP_SUBSCRIPTION` | Get app subscription | Tool to retrieve current app subscription data for the account. Use when you need to check subscription status, billing period, trial status, or pricing information. Must be called within app context using account authentication token. |
| `MONDAY_ARCHIVE_BOARD` | Archive board | Archives a specified, existing, and unarchived board in Monday.com; archived boards can typically be restored later. |
| `MONDAY_ARCHIVE_ITEM` | Archive item | Archives an existing Monday.com item, moving it from active board views to the archive where it can be potentially restored. |
| `MONDAY_ARCHIVE_OBJECT` | Archive object | Archives a Monday.com object by changing its state to archived rather than permanently deleting it. Use when you need to remove objects from active use while preserving the ability to restore them later. |
| `MONDAY_ARCHIVE_WORKSPACE` | Archive workspace | Tool to archive a Monday.com workspace. Use when you want to soft-remove a workspace from view. |
| `MONDAY_AUDIT_LOGS` | Get audit logs | Tool to retrieve detailed security-related activity records for a Monday.com account. Use when you need to audit user actions, security events, or account activity. Requires Enterprise plan and account admin permissions with manage_account_security scope. |
| `MONDAY_BLOCKS` | Get document blocks | Tool to retrieve document block data from workdocs via the API. Returns block metadata including type, content, position, and creation info. Use when you need to fetch content blocks from Monday.com documents. |
| `MONDAY_BOARDS` | Get boards | Tool to retrieve board data via the Monday.com API. Returns core metadata (id, name, state, kind, hierarchy type, workspace) about one or multiple boards with filtering options by state, board kind, hierarchy type, and workspace. For structural details, column configurations, or ownership info, use dedicated board enrichment tools. |
| `MONDAY_CHANGE_SIMPLE_COLUMN_VALUE` | Change simple column value | Changes a specific column's value for a Monday.com item using a simple string, suitable for Text, Status, or Dropdown columns; can create new labels if `create_labels_if_missing` is true for Status/Dropdown columns. |
| `MONDAY_COLUMNS` | Get board columns | Tool to retrieve column metadata from boards via the GraphQL API. Returns array of column information including type, title, settings, and capabilities. Use when you need to inspect board structure or column configuration. |
| `MONDAY_CONNECTION_BOARD_IDS` | Get connection board IDs | Tool to retrieve board IDs associated with connection columns. Use when you need to discover which boards can be linked through connection columns. Queries boards and filters for connection columns (board_relation type) to extract the configured board IDs from their settings. |
| `MONDAY_CONNECTIONS` | Get connections | Tool to retrieve connection data for integrations with external services. Use when you need to inspect or manage integrations like Gmail, Slack, or other external service connections. Returns a list of connections with details about authentication, state, and associated accounts. |
| `MONDAY_CONNECT_PROJECT_TO_PORTFOLIO` | Connect project to portfolio | Links an existing project board to a portfolio board for centralized management. Requires boards:write scope and Enterprise plan. |
| `MONDAY_CONVERT_BOARD_TO_PROJECT` | Convert board to project | Converts a regular Monday.com board into a project board with advanced project management features. Use when upgrading a board to enable project-specific capabilities like timeline views, project status tracking, and owner assignments. |
| `MONDAY_CREATE_BOARD` | Create a Monday board | Creates a Monday.com board; `template_id` if used must be accessible, and `folder_id` must be in `workspace_id` if both are provided. |
| `MONDAY_CREATE_COLUMN` | Create column | Creates a new column with a specified type and title on a monday.com board. |
| `MONDAY_CREATE_CUSTOM_ACTIVITY` | Create custom activity | Tool to create a custom activity in the Monday.com Emails & Activities app. Use when you need to define a new activity type with specific color and icon for tracking interactions. |
| `MONDAY_CREATE_DASHBOARD` | Create a Monday dashboard | Tool to create a Monday.com dashboard with associated boards. Use when you need to establish a new dashboard in a workspace with specific board visibility settings. |
| `MONDAY_CREATE_DOC` | Create doc | Tool to create a new doc in Monday.com. Use when you need to add a doc to a workspace or into a doc column on an item. |
| `MONDAY_CREATE_FOLDER` | Create a folder | Tool to create a new folder in a Monday.com workspace to organize boards. Use when you need to structure boards within a workspace by grouping them into folders. |
| `MONDAY_CREATE_GROUP` | Create group | Creates a new group with the given `group_name` on an existing Monday.com board, identified by its `board_id`. |
| `MONDAY_CREATE_ITEM` | Create item | Creates a new item on a Monday.com board, optionally assigning it to a group and setting column values. |
| `MONDAY_CREATE_ITEM_FROM_NL` | Create Item From Natural Language | Creates a new item on a Monday.com board from a natural language description. Fetches the board's column schema at runtime, uses an LLM to generate the column values and extract the item name, and creates the item. |
| `MONDAY_CREATE_NOTIFICATION` | Create notification | Tool to send a notification to a user. Use when you need to alert a user about a board, item, or update. Call after obtaining the user and target IDs. |
| `MONDAY_CREATE_OBJECT` | Create object | Tool to create any Monday.com object via GraphQL mutation. Use when you need to create workspaces, boards, items, columns, docs, updates, webhooks, or other Monday.com objects using custom GraphQL queries. |
| `MONDAY_CREATE_TAG` | Create tag | Tool to create a new tag or return an existing tag. Use when you need to label items with color-coded tags on a public or private board. |
| `MONDAY_CREATE_TIMELINE_ITEM` | Create timeline item | Tool to create a new timeline item in the Emails & Activities app on a Monday.com item. Use when you need to establish a timeline event or activity on an item. Note: Timeline items created via this action won't trigger automations that run when a new E&A timeline item is created. |
| `MONDAY_CREATE_UPDATE` | Create update | Tool to create a new update for an item or reply to an existing update. Use after determining the target item or update to comment on. |
| `MONDAY_CREATE_USER` | Invite and create a Monday user | Tool to invite and create a new user. Use when you need to programmatically add new users to your Monday account. |
| `MONDAY_CREATE_WORKSPACE` | Create a Monday workspace | Tool to create a Monday.com workspace. Use when you need to programmatically add a workspace after planning your project structure. |
| `MONDAY_CUSTOM_ACTIVITY` | Get custom activity | Tool to retrieve custom activity data from the Emails & Activities app. Use when you need to list available custom activities with their metadata. Returns up to 50 activities per query. |
| `MONDAY_DEACTIVATE_USERS` | Deactivate users | Tool to deactivate users from a monday.com account. Use when you need to remove users from the account; only admins can perform this action, and users cannot deactivate themselves. Deactivating a user also deactivates their integrations and automations. |
| `MONDAY_DELETE_ASSET` | Delete asset | Tool to remove uploaded files. Since monday.com doesn't provide a direct asset deletion API, this tool deletes the enclosing update or clears files from a File column. Both operations are permanent and irreversible; confirm with the user before invoking. |
| `MONDAY_DELETE_BOARD` | Delete board | Tool to permanently delete a board from your Monday.com account. Use when you need to remove a board permanently after verifying its ID. This action cannot be undone. |
| `MONDAY_DELETE_COLUMN` | Delete column | Deletes a specified column from a Monday.com board; this action is destructive and cannot be undone via the API. |
| `MONDAY_DELETE_CUSTOM_ACTIVITY` | Delete Custom Activity | Tool to delete a custom activity from the Emails & Activities app. Use when you need to remove a custom activity by its unique identifier. |
| `MONDAY_DELETE_DOC` | Delete doc | Tool to delete a Monday.com doc by its ID. Use when you need to remove a doc that is no longer needed. |
| `MONDAY_DELETE_FOLDER` | Delete folder | Tool to permanently delete a folder and all its contents from a Monday.com workspace. Use when you need to remove a folder along with all nested subfolders and boards. This action is irreversible. |
| `MONDAY_DELETE_GROUP` | Delete group | Permanently deletes an existing group (and its items) from an existing board in Monday.com. |
| `MONDAY_DELETE_ITEM` | Delete item | Permanently deletes an existing Monday.com item; this action is irreversible via the API. |
| `MONDAY_DELETE_OBJECT` | Delete object | Tool to permanently delete a Monday.com object with a 30-day recovery grace period. Use when you need to remove any object type from Monday.com by its unique identifier. |
| `MONDAY_DELETE_SUBSCRIBERS_FROM_BOARD` | Delete subscribers from board | Tool to remove subscribers from a Monday.com board. Use when revoking subscriber access for specific users on a board. |
| `MONDAY_DELETE_TAG` | Delete tag | Tool to remove a tag from an item in Monday.com. Important: Monday.com's GraphQL API does not provide a mutation to delete a tag from the account. Tags are account-level entities shared across boards. This action can remove a tag from a specific item by updating its tags column to exclude the given tag_id. To do so, provide item_id and board_id. |
| `MONDAY_DELETE_TEAM` | Delete team | Tool to delete an existing team; use when you need to permanently remove a team by its ID after confirming it’s no longer needed. |
| `MONDAY_DELETE_TEAMS_FROM_BOARD` | Delete teams from board | Tool to remove teams from a board; use when you need to revoke team access to a specific board. |
| `MONDAY_DELETE_TEAMS_FROM_WORKSPACE` | Delete teams from workspace | Tool to remove teams from a workspace. Use when revoking workspace access for specific teams. |
| `MONDAY_DELETE_TIMELINE_ITEM` | Delete timeline item | Tool to delete a timeline item from the Emails & Activities app. Use when you need to remove an existing timeline event or activity from a Monday.com item. This action is irreversible. |
| `MONDAY_DELETE_UPDATE` | Delete update | Tool to delete an update by its ID. Use when an update is no longer relevant. Use after confirming deletion is irreversible. |
| `MONDAY_DELETE_WORKSPACE` | Delete workspace | Tool to permanently delete a workspace by its ID. Use when a workspace is no longer needed. Use after confirming deletion is irreversible. |
| `MONDAY_DOCS` | Retrieve Monday docs | Tool to retrieve Monday.com document data via the API. Use when you need to fetch documents with filtering by IDs, object IDs, workspace IDs, or with pagination support. |
| `MONDAY_DUPLICATE_BOARD` | Duplicate board | Tool to duplicate a Monday.com board with its structure and optionally items and updates. Use when you need to create a copy of an existing board. Duplication is asynchronous and may take time to complete for large boards. |
| `MONDAY_DUPLICATE_ITEM` | Duplicate item | Duplicates an item on a Monday.com board, optionally including its updates. |
| `MONDAY_EDIT_UPDATE` | Edit update | Tool to modify the text content of an existing update on an item. Use when you need to correct or change a previously posted update. |
| `MONDAY_GET_ACCOUNT_INFO` | Get account info | Retrieve account metadata and settings for the authenticated Monday.com account. Use this action to inspect account configuration such as: - Account name, slug, and tier - Active member count - Calendar preferences (first day of week, timeline weekends) - Active products and billing plan details Requires the 'account:read' OAuth scope. |
| `MONDAY_GET_ACTIVITY_LOGS` | Get board activity logs | Tool to retrieve activity logs from a specific Monday.com board. Use when you need to track changes, user actions, or board history for auditing or analytics purposes. |
| `MONDAY_GET_API_VERSION` | Get API version | Tool to retrieve the Monday.com API version in use. Use when you need to check which API version is currently active for debugging or compatibility purposes. |
| `MONDAY_GET_ASSETS` | Get assets | Tool to retrieve file/asset metadata from monday.com by asset IDs. Returns file information including URL, name, size, extension, and thumbnails for images. Asset IDs originate from updates, update replies, or file-type columns. |
| `MONDAY_GET_BOARD_VIEWS` | Get board views | Tool to retrieve board view data via GraphQL API. Returns array of board view metadata including type, settings, filters, and access levels. Must be nested within a boards query. |
| `MONDAY_GET_FAVORITES` | Get favorites | Tool to retrieve all favorited items for the authenticated user. Use when you need to query items that have been marked as favorites. |
| `MONDAY_GET_FOLDERS` | Get folders | Tool to retrieve folder data from workspaces with filtering and pagination options. Use when you need to list folders from specific workspaces or filter by folder IDs. |
| `MONDAY_GET_FORM` | Get form details | Tool to retrieve form metadata via the API using the form's unique token from the URL. Returns form configuration, questions, and settings. |
| `MONDAY_GET_ITEMS` | Get items by IDs | Tool to retrieve specific items by their IDs from Monday.com, returning metadata including name, timestamps, state, board, and group information. Use when you need to fetch detailed information about specific items. |
| `MONDAY_GET_ME` | Get current user | Tool to fetch the current authenticated user's profile and permissions. Use when you need to retrieve user metadata before performing other operations. |
| `MONDAY_GET_MUTATION_COMPLEXITY` | Get mutation complexity | Tool to get complexity data of mutations in Monday.com. Use when you need to track API quota usage or monitor rate limits for mutation operations. |
| `MONDAY_GET_QUERY_COMPLEXITY` | Get query complexity | Tool to retrieve complexity data and cost metrics for Monday.com API operations. Use when you need to monitor API rate limits and complexity budget usage. |
| `MONDAY_GET_TAGS` | Get tags | Tool to retrieve tags from the account. Use when you need to list all tags or filter by specific IDs. |
| `MONDAY_GET_TEAMS` | Get teams | Tool to retrieve teams from Monday.com. Use when you need an overview of teams in your account. |
| `MONDAY_GET_UPDATE_REPLIES` | Get update replies | Retrieves updates and their replies for a specific Monday.com item. Use this to fetch conversation threads and discussions attached to an item, including all replies to each update. |
| `MONDAY_GET_UPDATES` | Get item updates | Tool to retrieve updates for a specific item. Use when you need to fetch the conversation history tied to an item. |
| `MONDAY_GET_VERSIONS` | Get API versions | Tool to retrieve data about available API versions. Use when you need to check which API versions are supported by Monday.com. |
| `MONDAY_GET_VIEW_SCHEMA_BY_TYPE` | Get view schema by type | Tool to retrieve type-specific board view configuration schemas via GraphQL API. Use when you need to understand the structure and available settings for creating or updating board views of a specific type. |
| `MONDAY_GET_WEBHOOKS` | Get webhooks | Tool to retrieve webhooks for a board. Use when you need to list all webhooks on a board. |
| `MONDAY_GET_WORKSPACES` | Get workspaces | Tool to retrieve workspaces. Use when you need to list workspaces with optional filtering, pagination, or ordering after authentication. |
| `MONDAY_IMPORT_DOC_FROM_HTML` | Import doc from HTML | Tool to import HTML content into a new Monday.com doc, converting it to doc blocks. Use when you need to create a doc from HTML content. |
| `MONDAY_ITEMS_PAGE` | Get items page | Tool to retrieve items from a Monday.com board (or group) with server-side filtering, full column_values, and cursor-based pagination via items_page and next_items_page queries. Use when you need paginated access to board items with detailed column data and optional filtering/sorting. |
| `MONDAY_LIKE_UPDATE` | Like update | Tool to like an update on an item. Use when you want to express approval or acknowledgment of an update. |
| `MONDAY_LIST_GROUPS` | List groups | Tool to retrieve all groups of a specified board. Use when you need to list groups on a board after confirming its board ID. Response is nested under data → boards[0] → groups; confirm boards[0] exists before accessing groups. |
| `MONDAY_LIST_ITEMS` | List items | Retrieves specified subitems from Monday.com using their IDs, returning raw JSON. Returned `column_values` fields (`text`, `value`) are frequently null or JSON-encoded strings (including numbers as quoted strings); null-check and JSON-decode before use. |
| `MONDAY_LIST_ITEMS_BY_COLUMN_VALUES` | List items by column values | Tool to search for items on a Monday.com board based on column values using the items_page_by_column_values query. Use when you need to find items matching specific column criteria (e.g., status="Done", name contains "Task 1"). For initial requests, provide columns; for pagination, use the cursor from the previous response. |
| `MONDAY_LIST_SUBITEMS_BY_PARENT` | List subitems by parent | Tool to retrieve subitems nested under parent items via GraphQL API. Use when you need to list subitems and their column values for specific parent items. Monday's API requires querying subitems through their parent items. |
| `MONDAY_LIST_TEAM_MEMBERS` | List team members | Tool to list members of a specified team. Use when you need to retrieve all users in a given Monday.com team after confirming its team ID. |
| `MONDAY_LIST_USERS` | List users | Retrieves a list of users from Monday.com. Paginate by starting at page=1, incrementing page on each request, and stopping when the returned user list is empty. An empty user list does not signify action failure. |
| `MONDAY_MOVE_ITEM_TO_BOARD` | Move item to board | Moves a Monday.com item to a specified board and group; requires the item, target board, and target group to exist. |
| `MONDAY_MOVE_ITEM_TO_GROUP` | Move item to group | Moves an item to a different group on the same Monday.com board; the item and group must exist. |
| `MONDAY_MUTE_BOARD_SETTINGS` | Query board mute settings | Tool to query a board's notification mute settings. Use when you need to check if notifications are muted for specific boards. |
| `MONDAY_PIN_TO_TOP` | Pin update to top | Tool to pin an update to the top of an item. Use when you need to highlight an important update or keep it visible at the top. |
| `MONDAY_PUBLISH_OBJECT` | Publish object | Tool to publish a Monday.com object. Use when you need to make an object publicly visible or change its state to published. |
| `MONDAY_QUERY_DASHBOARDS` | Query dashboards | Tool to query dashboards via Monday.com objects API. Use when you need to list all dashboards with their metadata, owners, and subscribers. |
| `MONDAY_QUERY_SPRINTS` | Query sprints | Tool to query sprint data for agile project management from Monday.com boards. Use when you need to retrieve sprint information including sprint title, ID, color, position, archived/deleted status, and associated items. |
| `MONDAY_REMOVE_USERS_FROM_TEAM` | Remove users from team | Tool to remove users from a Monday.com team. Use when updating team membership by removing user(s). |
| `MONDAY_REMOVE_USERS_FROM_WORKSPACE` | Remove users from workspace | Tool to remove users from a workspace. Use when revoking access for specific users in a workspace. |
| `MONDAY_SET_BOARD_PERMISSION` | Set board permission | Sets or updates a board's default role and permissions. Use when you need to configure default permissions for a board. Requires boards:write scope and can only be used by board owners on enterprise plans. |
| `MONDAY_TIMELINE` | Get item timeline | Tool to retrieve an item's Email & Activities (E&A) timeline data from Monday.com. Use when you need to access CRM activity tracking and client communication history for a specific item. This returns a paginated list of timeline entries. |
| `MONDAY_TIMELINE_ITEM` | Get timeline item | Tool to retrieve a specific timeline item from the Emails & Activities app by ID. Use when you need to fetch metadata including content, user, title, type, and associated custom activity for a timeline item. |
| `MONDAY_UNLIKE_UPDATE` | Unlike update | Tool to remove a like from an update on an item. Use when you want to retract a previously expressed approval or acknowledgment of an update. |
| `MONDAY_UNPIN_FROM_TOP` | Unpin update from top | Tool to unpin an update from the top of an item. Use when you want to remove a pinned update from the top position of an item's updates feed. |
| `MONDAY_UNPUBLISH_OBJECT` | Unpublish object | Unpublish a Monday.com object (board, item, or workspace) to revert it from a published state. The operation will return success=true only if the object was previously published and can be unpublished. If the object is not in a publishable state or was never published, success=false is returned. |
| `MONDAY_UPDATE_BOARD` | Update board | Updates a specified attribute of an existing board on Monday.com. |
| `MONDAY_UPDATE_BOARD_HIERARCHY` | Update board hierarchy | Updates a board's position, workspace, or product in Monday.com. Use when you need to move a board to a different workspace or folder, assign it to a product, or reposition it relative to other boards. |
| `MONDAY_UPDATE_COLUMN` | Update column | Tool to update column title or description. Use when modifying a column’s metadata after creation. |
| `MONDAY_UPDATE_DOC` | Update a doc | Tool to update a doc's title or append markdown content. Use when renaming docs or adding Markdown blocks to existing docs. |
| `MONDAY_UPDATE_EMAIL_DOMAIN` | Update email domain | Tool to update users' email domains. Use when migrating users to a new email domain; requires admin privileges. |
| `MONDAY_UPDATE_FOLDER` | Update a Monday folder | Tool to update a Monday.com folder's properties including name, color, or parent folder. Use when you need to modify existing folder details or move folders between workspaces. |
| `MONDAY_UPDATE_GROUP` | Update group | Tool to update an existing group on a board. Use when you need to modify a group's attribute (title, color, or position) after confirming the group ID. |
| `MONDAY_UPDATE_ITEM` | Update item | Tool to update an existing item's column value on Monday.com. Use when setting complex column types like Timeline or People. |
| `MONDAY_UPDATE_MULTIPLE_USERS` | Update multiple users | Tool to update one or multiple users' attributes on Monday.com. Use when you need to batch update user profiles such as name, email, title, or department. |
| `MONDAY_UPDATE_MUTE_BOARD_SETTINGS` | Update mute board settings | Tool to update a board's notification mute settings. Use when you need to configure notification preferences for a specific board. |
| `MONDAY_UPDATE_TAG` | Update tag | Tool to return a tag's details or best-effort "rename" by creating or getting a tag with the requested name. The monday API does not support updating existing tag name/color. |
| `MONDAY_UPDATE_TEAM` | Update team | Tool to update a team's details in Monday.com. Use after identifying the team and desired changes. |
| `MONDAY_UPDATE_USERS_ROLE` | Update users role | Tool to update users' roles to custom or default roles. Use when changing user permissions; admin-only operation. Cannot update your own role. |
| `MONDAY_UPDATE_WORKSPACE` | Update a Monday workspace | Tool to update a Monday.com workspace. Use when you need to modify the name, description, visibility, or product placement of an existing workspace. |
| `MONDAY_UPLOAD_ASSET` | Upload Asset | Tool to upload a file to an update or file column. Use when you need to attach a file to an existing update or file column. File attachments are permanent and irreversible; confirm with the user before uploading. |
| `MONDAY_USER_CONNECTIONS` | Get user connections | Tool to query user-specific connection data from Monday.com. Use when you need to retrieve integration connections established by the authenticated user with external services. |

## Supported Triggers

None listed.

## Creating MCP Server - Stand-alone vs Composio SDK

The Monday MCP server is an implementation of the Model Context Protocol that connects your AI agent to Monday. It provides structured and secure access so your agent can perform Monday operations on your behalf through a secure, permission-based interface.
With Composio's managed implementation, you don't have to create your own developer app. For production, if you're building an end product, we recommend using your own credentials. The managed server helps you prototype fast and go from 0-1 faster.

## Step-by-step Guide

### 1. Prerequisites

Before starting, make sure you have:
- Node.js 18 or higher
- A Composio account with an active API key
- An OpenAI API key
- Basic familiarity with TypeScript

### 1. Getting API Keys for OpenAI and Composio

OpenAI API Key
- Go to the [OpenAI dashboard](https://platform.openai.com/settings/organization/api-keys) and create an API key.
- You need credits or a connected billing setup to use the models.
- Store the key somewhere safe.
Composio API Key
- Log in to the [Composio dashboard](https://dashboard.composio.dev?utm_source=toolkits&utm_medium=framework_docs).
- Go to Settings and copy your API key.
- This key lets your Mastra agent talk to Composio and reach Monday through MCP.

### 2. Install dependencies

Install the required packages.
What's happening:
- @composio/core is the Composio SDK for creating MCP sessions
- @mastra/core provides the Agent class
- @mastra/mcp is Mastra's MCP client
- @ai-sdk/openai is the model wrapper for OpenAI
- dotenv loads environment variables from .env
```bash
npm install @composio/core @mastra/core @mastra/mcp @ai-sdk/openai dotenv
```

### 3. Set up environment variables

Create a .env file in your project root.
What's happening:
- COMPOSIO_API_KEY authenticates your requests to Composio
- COMPOSIO_USER_ID tells Composio which user this session belongs to
- OPENAI_API_KEY lets the Mastra agent call OpenAI models
```bash
COMPOSIO_API_KEY=your_composio_api_key_here
COMPOSIO_USER_ID=your_user_id_here
OPENAI_API_KEY=your_openai_api_key_here
```

### 4. Import libraries and validate environment

What's happening:
- dotenv/config auto loads your .env so process.env.* is available
- openai gives you a Mastra compatible model wrapper
- Agent is the Mastra agent that will call tools and produce answers
- MCPClient connects Mastra to your Composio MCP server
- Composio is used to create a Tool Router session
```typescript
import "dotenv/config";
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";
import { MCPClient } from "@mastra/mcp";
import { Composio } from "@composio/core";
import * as readline from "readline";

import type { AiMessageType } from "@mastra/core/agent";

const openaiAPIKey = process.env.OPENAI_API_KEY;
const composioAPIKey = process.env.COMPOSIO_API_KEY;
const composioUserID = process.env.COMPOSIO_USER_ID;

if (!openaiAPIKey) throw new Error("OPENAI_API_KEY is not set");
if (!composioAPIKey) throw new Error("COMPOSIO_API_KEY is not set");
if (!composioUserID) throw new Error("COMPOSIO_USER_ID is not set");

const composio = new Composio({
  apiKey: composioAPIKey as string,
});
```

### 5. Create a Tool Router session for Monday

What's happening:
- create spins up a short-lived MCP HTTP endpoint for this user
- The toolkits array contains "monday" for Monday access
- session.mcp.url is the MCP URL that Mastra's MCPClient will connect to
```typescript
async function main() {
  const session = await composio.create(
    composioUserID as string,
    {
      toolkits: ["monday"],
    },
  );

  const composioMCPUrl = session.mcp.url;
  console.log("Monday MCP URL:", composioMCPUrl);
```

### 6. Configure Mastra MCP client and fetch tools

What's happening:
- MCPClient takes an id for this client and a list of MCP servers
- The headers property includes the x-api-key for authentication
- getTools fetches the tool definitions exposed by the Monday toolkit
```typescript
const mcpClient = new MCPClient({
    id: composioUserID as string,
    servers: {
      nasdaq: {
        url: new URL(composioMCPUrl),
        requestInit: {
          headers: session.mcp.headers,
        },
      },
    },
    timeout: 30_000,
  });

console.log("Fetching MCP tools from Composio...");
const composioTools = await mcpClient.getTools();
console.log("Number of tools:", Object.keys(composioTools).length);
```

### 7. Create the Mastra agent

What's happening:
- Agent is the core Mastra agent
- name is just an identifier for logging and debugging
- instructions guide the agent to use tools instead of only answering in natural language
- model uses openai("gpt-5") to configure the underlying LLM
```typescript
const agent = new Agent({
    name: "monday-mastra-agent",
    instructions: "You are an AI agent with Monday tools via Composio.",
    model: "openai/gpt-5",
  });
```

### 8. Set up interactive chat interface

What's happening:
- messages keeps the full conversation history in Mastra's expected format
- agent.generate runs the agent with conversation history and Monday toolsets
- maxSteps limits how many tool calls the agent can take in a single run
- onStepFinish is a hook that prints intermediate steps for debugging
```typescript
let messages: AiMessageType[] = [];

console.log("Chat started! Type 'exit' or 'quit' to end.\n");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  prompt: "> ",
});

rl.prompt();

rl.on("line", async (userInput: string) => {
  const trimmedInput = userInput.trim();

  if (["exit", "quit", "bye"].includes(trimmedInput.toLowerCase())) {
    console.log("\nGoodbye!");
    rl.close();
    process.exit(0);
  }

  if (!trimmedInput) {
    rl.prompt();
    return;
  }

  messages.push({
    id: crypto.randomUUID(),
    role: "user",
    content: trimmedInput,
  });

  console.log("\nAgent is thinking...\n");

  try {
    const response = await agent.generate(messages, {
      toolsets: {
        monday: composioTools,
      },
      maxSteps: 8,
    });

    const { text } = response;

    if (text && text.trim().length > 0) {
      console.log(`Agent: ${text}\n`);
        messages.push({
          id: crypto.randomUUID(),
          role: "assistant",
          content: text,
        });
      }
    } catch (error) {
      console.error("\nError:", error);
    }

    rl.prompt();
  });

  rl.on("close", async () => {
    console.log("\nSession ended.");
    await mcpClient.disconnect();
    process.exit(0);
  });
}

main().catch((err) => {
  console.error("Fatal error:", err);
  process.exit(1);
});
```

## Complete Code

```typescript
import "dotenv/config";
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";
import { MCPClient } from "@mastra/mcp";
import { Composio } from "@composio/core";
import * as readline from "readline";

import type { AiMessageType } from "@mastra/core/agent";

const openaiAPIKey = process.env.OPENAI_API_KEY;
const composioAPIKey = process.env.COMPOSIO_API_KEY;
const composioUserID = process.env.COMPOSIO_USER_ID;

if (!openaiAPIKey) throw new Error("OPENAI_API_KEY is not set");
if (!composioAPIKey) throw new Error("COMPOSIO_API_KEY is not set");
if (!composioUserID) throw new Error("COMPOSIO_USER_ID is not set");

const composio = new Composio({ apiKey: composioAPIKey as string });

async function main() {
  const session = await composio.create(composioUserID as string, {
    toolkits: ["monday"],
  });

  const composioMCPUrl = session.mcp.url;

  const mcpClient = new MCPClient({
    id: composioUserID as string,
    servers: {
      monday: {
        url: new URL(composioMCPUrl),
        requestInit: {
          headers: session.mcp.headers,
        },
      },
    },
    timeout: 30_000,
  });

  const composioTools = await mcpClient.getTools();

  const agent = new Agent({
    name: "monday-mastra-agent",
    instructions: "You are an AI agent with Monday tools via Composio.",
    model: "openai/gpt-5",
  });

  let messages: AiMessageType[] = [];

  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: "> ",
  });

  rl.prompt();

  rl.on("line", async (input: string) => {
    const trimmed = input.trim();
    if (["exit", "quit"].includes(trimmed.toLowerCase())) {
      rl.close();
      return;
    }

    messages.push({ id: crypto.randomUUID(), role: "user", content: trimmed });

    const { text } = await agent.generate(messages, {
      toolsets: { monday: composioTools },
      maxSteps: 8,
    });

    if (text) {
      console.log(`Agent: ${text}\n`);
      messages.push({ id: crypto.randomUUID(), role: "assistant", content: text });
    }

    rl.prompt();
  });

  rl.on("close", async () => {
    await mcpClient.disconnect();
    process.exit(0);
  });
}

main();
```

## Conclusion

You've built a Mastra AI agent that can interact with Monday through Composio's Tool Router.
You can extend this further by:
- Adding other toolkits like Gmail, Slack, or GitHub
- Building a web-based chat interface around this agent
- Using multiple MCP endpoints to enable cross-app workflows

## How to build Monday MCP Agent with another framework

- [ChatGPT](https://composio.dev/toolkits/monday/framework/chatgpt)
- [OpenAI Agents SDK](https://composio.dev/toolkits/monday/framework/open-ai-agents-sdk)
- [Claude Agent SDK](https://composio.dev/toolkits/monday/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/monday/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/monday/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/monday/framework/codex)
- [Cursor](https://composio.dev/toolkits/monday/framework/cursor)
- [VS Code](https://composio.dev/toolkits/monday/framework/vscode)
- [OpenCode](https://composio.dev/toolkits/monday/framework/opencode)
- [OpenClaw](https://composio.dev/toolkits/monday/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/monday/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/monday/framework/cli)
- [Google ADK](https://composio.dev/toolkits/monday/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/monday/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/monday/framework/ai-sdk)
- [LlamaIndex](https://composio.dev/toolkits/monday/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/monday/framework/crew-ai)

## Related Toolkits

- [Google Sheets](https://composio.dev/toolkits/googlesheets) - Google Sheets is a cloud-based spreadsheet tool for real-time collaboration and data analysis. It lets teams work together from anywhere, updating information instantly.
- [Notion](https://composio.dev/toolkits/notion) - Notion is a collaborative workspace for notes, docs, wikis, and tasks. It streamlines team knowledge, project tracking, and workflow customization in one place.
- [Airtable](https://composio.dev/toolkits/airtable) - Airtable combines the flexibility of spreadsheets with the power of a database for easy project and data management. Teams use Airtable to organize, track, and collaborate with custom views and automations.
- [Asana](https://composio.dev/toolkits/asana) - Asana is a collaborative work management platform for teams to organize and track projects. It streamlines teamwork, boosts productivity, and keeps everyone aligned on goals.
- [Google Tasks](https://composio.dev/toolkits/googletasks) - Google Tasks is a to-do list and task management tool integrated into Gmail and Google Calendar. It helps you organize, track, and complete tasks across your Google ecosystem.
- [Linear](https://composio.dev/toolkits/linear) - Linear is a modern issue tracking and project planning tool for fast-moving teams. It helps streamline workflows, organize projects, and boost productivity.
- [Jira](https://composio.dev/toolkits/jira) - Jira is Atlassian’s platform for bug tracking, issue tracking, and agile project management. It helps teams organize work, prioritize tasks, and deliver projects efficiently.
- [Clickup](https://composio.dev/toolkits/clickup) - ClickUp is an all-in-one productivity platform for managing tasks, docs, goals, and team collaboration. It streamlines project workflows so teams can work smarter and stay organized in one place.
- [Addressfinder](https://composio.dev/toolkits/addressfinder) - Addressfinder is a data quality platform for verifying addresses, emails, and phone numbers. It helps you ensure accurate customer and contact data every time.
- [Agiled](https://composio.dev/toolkits/agiled) - Agiled is an all-in-one business management platform for CRM, projects, and finance. It helps you streamline workflows, consolidate client data, and manage business processes in one place.
- [Ascora](https://composio.dev/toolkits/ascora) - Ascora is a cloud-based field service management platform for service businesses. It streamlines scheduling, invoicing, and customer operations in one place.
- [Basecamp](https://composio.dev/toolkits/basecamp) - Basecamp is a project management and team collaboration tool by 37signals. It helps teams organize tasks, share files, and communicate efficiently in one place.
- [Beeminder](https://composio.dev/toolkits/beeminder) - Beeminder is an online goal-tracking platform that uses monetary pledges to keep you motivated. Stay accountable and hit your targets with real financial incentives.
- [Boxhero](https://composio.dev/toolkits/boxhero) - Boxhero is a cloud-based inventory management platform for SMBs, offering real-time updates, barcode scanning, and team collaboration. It helps businesses streamline stock tracking and analytics for smarter inventory decisions.
- [Breathe HR](https://composio.dev/toolkits/breathehr) - Breathe HR is cloud-based HR software for SMEs to manage employee data, absences, and performance. It simplifies HR admin, making it easy to keep employee records accurate and up to date.
- [Breeze](https://composio.dev/toolkits/breeze) - Breeze is a project management platform designed to help teams plan, track, and collaborate on projects. It streamlines workflows and keeps everyone on the same page.
- [Bugherd](https://composio.dev/toolkits/bugherd) - Bugherd is a visual feedback and bug tracking tool for websites. It helps teams and clients report website issues directly on live sites for faster fixes.
- [Canny](https://composio.dev/toolkits/canny) - Canny is a platform for managing customer feedback and feature requests. It helps teams prioritize product decisions based on real user insights.
- [Chmeetings](https://composio.dev/toolkits/chmeetings) - Chmeetings is a church management platform for events, members, donations, and volunteers. It streamlines church operations and improves community engagement.
- [ClickSend](https://composio.dev/toolkits/clicksend) - ClickSend is a cloud-based SMS and email marketing platform for businesses. It streamlines communication by enabling quick message delivery and contact management.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Monday MCP?

With a standalone Monday MCP server, the agents and LLMs can only access a fixed set of Monday tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Monday and many other apps based on the task at hand, all through a single MCP endpoint.

### Can I use Tool Router MCP with Mastra AI?

Yes, you can. Mastra AI fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Monday tools.

### Can I manage the permissions and scopes for Monday while using Tool Router?

Yes, absolutely. You can configure which Monday scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

### How safe is my data with Composio Tool Router?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Monday data and credentials are handled as safely as possible.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
